Browse code

Merge commit '8675bcb0addb1c7fb0b04682d1f3f95d5b8dae14'

* commit '8675bcb0addb1c7fb0b04682d1f3f95d5b8dae14':
aarch64: add armv8 CPU flag

Merged-by: Michael Niedermayer <michaelni@gmx.at>

Michael Niedermayer authored on 2014/04/07 09:15:09
Showing 7 changed files
... ...
@@ -73,7 +73,7 @@ config.h: .config
73 73
 
74 74
 SUBDIR_VARS := CLEANFILES EXAMPLES FFLIBS HOSTPROGS TESTPROGS TOOLS      \
75 75
                HEADERS ARCH_HEADERS BUILT_HEADERS SKIPHEADERS            \
76
-               ARMV5TE-OBJS ARMV6-OBJS VFP-OBJS NEON-OBJS                \
76
+               ARMV5TE-OBJS ARMV6-OBJS ARMV8-OBJS VFP-OBJS NEON-OBJS     \
77 77
                ALTIVEC-OBJS MMX-OBJS YASM-OBJS                           \
78 78
                MIPSFPU-OBJS MIPSDSPR2-OBJS MIPSDSPR1-OBJS MIPS32R2-OBJS  \
79 79
                OBJS SLIBOBJS HOSTOBJS TESTOBJS
... ...
@@ -1,5 +1,6 @@
1 1
 OBJS-$(HAVE_ARMV5TE) += $(ARMV5TE-OBJS) $(ARMV5TE-OBJS-yes)
2 2
 OBJS-$(HAVE_ARMV6)   += $(ARMV6-OBJS)   $(ARMV6-OBJS-yes)
3
+OBJS-$(HAVE_ARMV8)   += $(ARMV8-OBJS)   $(ARMV8-OBJS-yes)
3 4
 OBJS-$(HAVE_VFP)     += $(VFP-OBJS)     $(VFP-OBJS-yes)
4 5
 OBJS-$(HAVE_NEON)    += $(NEON-OBJS)    $(NEON-OBJS-yes)
5 6
 
... ...
@@ -1494,6 +1494,7 @@ ARCH_EXT_LIST_ARM="
1494 1494
     armv5te
1495 1495
     armv6
1496 1496
     armv6t2
1497
+    armv8
1497 1498
     neon
1498 1499
     vfp
1499 1500
     vfpv3
... ...
@@ -1887,6 +1888,7 @@ CMDLINE_APPEND="
1887 1887
 armv5te_deps="arm"
1888 1888
 armv6_deps="arm"
1889 1889
 armv6t2_deps="arm"
1890
+armv8_deps="aarch64"
1890 1891
 neon_deps_any="aarch64 arm"
1891 1892
 vfp_deps_any="aarch64 arm"
1892 1893
 vfpv3_deps="vfp"
... ...
@@ -4218,6 +4220,7 @@ check_inline_asm inline_asm_labels '"1:\n"'
4218 4218
 check_inline_asm inline_asm_nonlocal_labels '"Label:\n"'
4219 4219
 
4220 4220
 if enabled aarch64; then
4221
+    enabled armv8 && check_insn armv8 'prfm   pldl1strm, [x0]'
4221 4222
     # internal assembler in clang 3.3 does not support this instruction
4222 4223
     enabled neon && check_insn neon 'ext   v0.8B, v0.8B, v1.8B, #1'
4223 4224
     enabled vfp  && check_insn vfp  'fmadd d0,    d0,    d1,    d2'
... ...
@@ -22,6 +22,7 @@
22 22
 
23 23
 int ff_get_cpu_flags_aarch64(void)
24 24
 {
25
-    return AV_CPU_FLAG_NEON * HAVE_NEON |
26
-           AV_CPU_FLAG_VFP  * HAVE_VFP;
25
+    return AV_CPU_FLAG_ARMV8 * HAVE_ARMV8 |
26
+           AV_CPU_FLAG_NEON  * HAVE_NEON  |
27
+           AV_CPU_FLAG_VFP   * HAVE_VFP;
27 28
 }
... ...
@@ -23,6 +23,7 @@
23 23
 #include "libavutil/cpu.h"
24 24
 #include "libavutil/cpu_internal.h"
25 25
 
26
+#define have_armv8(flags) CPUEXT(flags, ARMV8)
26 27
 #define have_neon(flags) CPUEXT(flags, NEON)
27 28
 #define have_vfp(flags)  CPUEXT(flags, VFP)
28 29
 
... ...
@@ -130,6 +130,7 @@ int av_parse_cpu_flags(const char *s)
130 130
         { "vfpv3",    NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_VFPV3    },    .unit = "flags" },
131 131
         { "neon",     NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_NEON     },    .unit = "flags" },
132 132
 #elif ARCH_AARCH64
133
+        { "armv8",    NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_ARMV8    },    .unit = "flags" },
133 134
         { "neon",     NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_NEON     },    .unit = "flags" },
134 135
         { "vfp",      NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_VFP      },    .unit = "flags" },
135 136
 #endif
... ...
@@ -263,6 +264,7 @@ static const struct {
263 263
     const char *name;
264 264
 } cpu_flag_tab[] = {
265 265
 #if   ARCH_AARCH64
266
+    { AV_CPU_FLAG_ARMV8,     "armv8"      },
266 267
     { AV_CPU_FLAG_NEON,      "neon"       },
267 268
     { AV_CPU_FLAG_VFP,       "vfp"        },
268 269
 #elif ARCH_ARM
... ...
@@ -63,6 +63,7 @@
63 63
 #define AV_CPU_FLAG_VFP          (1 << 3)
64 64
 #define AV_CPU_FLAG_VFPV3        (1 << 4)
65 65
 #define AV_CPU_FLAG_NEON         (1 << 5)
66
+#define AV_CPU_FLAG_ARMV8        (1 << 6)
66 67
 
67 68
 /**
68 69
  * Return the flags which specify extensions supported by the CPU.