[FFmpeg-cvslog] aarch64: add armv8 CPU flag
Janne Grunau
git at videolan.org
Mon Apr 7 02:51:18 CEST 2014
ffmpeg | branch: master | Janne Grunau <j at jannau.net> | Sat Apr 5 13:46:51 2014 +0200| [8675bcb0addb1c7fb0b04682d1f3f95d5b8dae14] | committer: Janne Grunau
aarch64: add armv8 CPU flag
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=8675bcb0addb1c7fb0b04682d1f3f95d5b8dae14
---
Makefile | 2 +-
arch.mak | 1 +
configure | 3 +++
libavutil/aarch64/cpu.c | 5 +++--
libavutil/aarch64/cpu.h | 1 +
libavutil/cpu.c | 2 ++
libavutil/cpu.h | 1 +
7 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/Makefile b/Makefile
index 2453dfd..b3680c2 100644
--- 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
diff --git a/arch.mak b/arch.mak
index b287fce..4bfc883 100644
--- 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)
diff --git a/configure b/configure
index fdd6c2f..4d005f1 100755
--- 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'
diff --git a/libavutil/aarch64/cpu.c b/libavutil/aarch64/cpu.c
index 2cc2ccd..37a7d8d 100644
--- a/libavutil/aarch64/cpu.c
+++ b/libavutil/aarch64/cpu.c
@@ -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;
}
diff --git a/libavutil/aarch64/cpu.h b/libavutil/aarch64/cpu.h
index 704df48..f5b1d89 100644
--- a/libavutil/aarch64/cpu.h
+++ b/libavutil/aarch64/cpu.h
@@ -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)
diff --git a/libavutil/cpu.c b/libavutil/cpu.c
index d651eb2..e755d15 100644
--- a/libavutil/cpu.c
+++ b/libavutil/cpu.c
@@ -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
diff --git a/libavutil/cpu.h b/libavutil/cpu.h
index 517c520..7cecccc 100644
--- a/libavutil/cpu.h
+++ b/libavutil/cpu.h
@@ -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.
More information about the ffmpeg-cvslog
mailing list