aarch64: add armv8 CPU flag
authorJanne Grunau <j@jannau.net>
Sat, 5 Apr 2014 11:46:51 +0000 (13:46 +0200)
committerJanne Grunau <janne-libav@jannau.net>
Sun, 6 Apr 2014 19:18:49 +0000 (21:18 +0200)
Makefile
arch.mak
configure
libavutil/aarch64/cpu.c
libavutil/aarch64/cpu.h
libavutil/cpu.c
libavutil/cpu.h

index 2453dfd996a18e95e75c4c5593c799fccf5e02b3..b3680c20693a0ce7096ff2803a15e51ea5c2986f 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -114,7 +114,7 @@ config.h: .config
 
 SUBDIR_VARS := CLEANFILES EXAMPLES FFLIBS HOSTPROGS TESTPROGS TOOLS      \
                HEADERS ARCH_HEADERS BUILT_HEADERS SKIPHEADERS            \
-               ARMV5TE-OBJS ARMV6-OBJS VFP-OBJS NEON-OBJS                \
+               ARMV5TE-OBJS ARMV6-OBJS ARMV8-OBJS VFP-OBJS NEON-OBJS     \
                ALTIVEC-OBJS MMX-OBJS YASM-OBJS                           \
                OBJS HOSTOBJS TESTOBJS
 
index b287fcecbeb1f012fa4a51b146c4dc0cfebeb4f4..4bfc883ffa2974b5f35de50e3a0e1a7dec588271 100644 (file)
--- a/arch.mak
+++ b/arch.mak
@@ -1,5 +1,6 @@
 OBJS-$(HAVE_ARMV5TE) += $(ARMV5TE-OBJS) $(ARMV5TE-OBJS-yes)
 OBJS-$(HAVE_ARMV6)   += $(ARMV6-OBJS)   $(ARMV6-OBJS-yes)
+OBJS-$(HAVE_ARMV8)   += $(ARMV8-OBJS)   $(ARMV8-OBJS-yes)
 OBJS-$(HAVE_VFP)     += $(VFP-OBJS)     $(VFP-OBJS-yes)
 OBJS-$(HAVE_NEON)    += $(NEON-OBJS)    $(NEON-OBJS-yes)
 
index fdd6c2fbd3f0c804bcafb3fa3bbe204ba598ec61..4d005f1bbcf682f67101de5d9f79ffc05be18507 100755 (executable)
--- a/configure
+++ b/configure
@@ -1271,6 +1271,7 @@ ARCH_EXT_LIST_ARM="
     armv5te
     armv6
     armv6t2
+    armv8
     neon
     vfp
     vfpv3
@@ -1615,6 +1616,7 @@ CMDLINE_APPEND="
 armv5te_deps="arm"
 armv6_deps="arm"
 armv6t2_deps="arm"
+armv8_deps="aarch64"
 neon_deps_any="aarch64 arm"
 vfp_deps_any="aarch64 arm"
 vfpv3_deps="vfp"
@@ -3697,6 +3699,7 @@ od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
 check_inline_asm inline_asm_labels '"1:\n"'
 
 if enabled aarch64; then
+    enabled armv8 && check_insn armv8 'prfm   pldl1strm, [x0]'
     # internal assembler in clang 3.3 does not support this instruction
     enabled neon && check_insn neon 'ext   v0.8B, v0.8B, v1.8B, #1'
     enabled vfp  && check_insn vfp  'fmadd d0,    d0,    d1,    d2'
index 2cc2ccd9efcbe6d2f1bd57936d13154cb3ac88e7..37a7d8defad8c6ac2b1edd2c376c1169bf91b0f7 100644 (file)
@@ -22,6 +22,7 @@
 
 int ff_get_cpu_flags_aarch64(void)
 {
-    return AV_CPU_FLAG_NEON * HAVE_NEON |
-           AV_CPU_FLAG_VFP  * HAVE_VFP;
+    return AV_CPU_FLAG_ARMV8 * HAVE_ARMV8 |
+           AV_CPU_FLAG_NEON  * HAVE_NEON  |
+           AV_CPU_FLAG_VFP   * HAVE_VFP;
 }
index 704df48b85416914985bc200e8581ec9a7bc250b..f5b1d8913260d9750cb608610a83657c6b576222 100644 (file)
@@ -23,6 +23,7 @@
 #include "libavutil/cpu.h"
 #include "libavutil/cpu_internal.h"
 
+#define have_armv8(flags) CPUEXT(flags, ARMV8)
 #define have_neon(flags) CPUEXT(flags, NEON)
 #define have_vfp(flags)  CPUEXT(flags, VFP)
 
index d651eb2089d77820ff04e00bf5b7cadedf96fc0a..e755d1551dcd4c968f3c21e2aed5f65b48529346 100644 (file)
@@ -126,6 +126,7 @@ int av_parse_cpu_flags(const char *s)
         { "vfpv3",    NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_VFPV3    },    .unit = "flags" },
         { "neon",     NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_NEON     },    .unit = "flags" },
 #elif ARCH_AARCH64
+        { "armv8",    NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_ARMV8    },    .unit = "flags" },
         { "neon",     NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_NEON     },    .unit = "flags" },
         { "vfp",      NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_VFP      },    .unit = "flags" },
 #endif
@@ -185,6 +186,7 @@ static const struct {
     const char *name;
 } cpu_flag_tab[] = {
 #if   ARCH_AARCH64
+    { AV_CPU_FLAG_ARMV8,     "armv8"      },
     { AV_CPU_FLAG_NEON,      "neon"       },
     { AV_CPU_FLAG_VFP,       "vfp"        },
 #elif ARCH_ARM
index 517c52011925d20b5e3951d18d9d542994552fc3..7cecccc9c46fa4afcc346b14a31bdcfea5c45f64 100644 (file)
@@ -61,6 +61,7 @@
 #define AV_CPU_FLAG_VFP          (1 << 3)
 #define AV_CPU_FLAG_VFPV3        (1 << 4)
 #define AV_CPU_FLAG_NEON         (1 << 5)
+#define AV_CPU_FLAG_ARMV8        (1 << 6)
 
 /**
  * Return the flags which specify extensions supported by the CPU.