diff options
Diffstat (limited to 'libavutil')
-rw-r--r-- | libavutil/arm/cpu.c | 4 | ||||
-rw-r--r-- | libavutil/arm/cpu.h | 5 | ||||
-rw-r--r-- | libavutil/cpu.c | 2 | ||||
-rw-r--r-- | libavutil/cpu.h | 1 | ||||
-rw-r--r-- | libavutil/version.h | 2 |
5 files changed, 13 insertions, 1 deletions
diff --git a/libavutil/arm/cpu.c b/libavutil/arm/cpu.c index 8bdaa88469..2effb72610 100644 --- a/libavutil/arm/cpu.c +++ b/libavutil/arm/cpu.c @@ -131,6 +131,10 @@ int ff_get_cpu_flags_arm(void) if (flags & AV_CPU_FLAG_ARMV6T2) flags |= AV_CPU_FLAG_ARMV6; + /* set the virtual VFPv2 vector mode flag */ + if ((flags & AV_CPU_FLAG_VFP) && !(flags & (AV_CPU_FLAG_VFPV3 | AV_CPU_FLAG_NEON))) + flags |= AV_CPU_FLAG_VFP_VM; + return flags; } diff --git a/libavutil/arm/cpu.h b/libavutil/arm/cpu.h index 224409afee..5563fc1c69 100644 --- a/libavutil/arm/cpu.h +++ b/libavutil/arm/cpu.h @@ -30,6 +30,11 @@ #define have_vfpv3(flags) CPUEXT(flags, VFPV3) #define have_neon(flags) CPUEXT(flags, NEON) +/* some functions use the VFPv2 vector mode which is deprecated in ARMv7-A + * and might trap on such CPU depending on the OS configuration */ +#define have_vfp_vm(flags) \ + (have_armv6(flags) && ((flags) & AV_CPU_FLAG_VFP_VM)) + /* Some functions use the 'setend' instruction which is deprecated on ARMv8 * and serializing on some ARMv7 cores. This macro ensures such functions * are only enabled on ARMv6. */ diff --git a/libavutil/cpu.c b/libavutil/cpu.c index e24b9dd679..5f04461f6b 100644 --- a/libavutil/cpu.c +++ b/libavutil/cpu.c @@ -124,6 +124,7 @@ int av_parse_cpu_flags(const char *s) { "armv6", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_ARMV6 }, .unit = "flags" }, { "armv6t2", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_ARMV6T2 }, .unit = "flags" }, { "vfp", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_VFP }, .unit = "flags" }, + { "vfp_vm", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_VFP_VM }, .unit = "flags" }, { "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 @@ -204,6 +205,7 @@ static const struct { { AV_CPU_FLAG_ARMV6, "armv6" }, { AV_CPU_FLAG_ARMV6T2, "armv6t2" }, { AV_CPU_FLAG_VFP, "vfp" }, + { AV_CPU_FLAG_VFP_VM, "vfp_vm" }, { AV_CPU_FLAG_VFPV3, "vfpv3" }, { AV_CPU_FLAG_NEON, "neon" }, #elif ARCH_PPC diff --git a/libavutil/cpu.h b/libavutil/cpu.h index 9c77ce6e47..d640e79783 100644 --- a/libavutil/cpu.h +++ b/libavutil/cpu.h @@ -62,6 +62,7 @@ #define AV_CPU_FLAG_VFPV3 (1 << 4) #define AV_CPU_FLAG_NEON (1 << 5) #define AV_CPU_FLAG_ARMV8 (1 << 6) +#define AV_CPU_FLAG_VFP_VM (1 << 7) ///< VFPv2 vector mode, deprecated in ARMv7-A and unavailable in various CPUs implementations /** * Return the flags which specify extensions supported by the CPU. diff --git a/libavutil/version.h b/libavutil/version.h index 7131122590..802a44549f 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -54,7 +54,7 @@ */ #define LIBAVUTIL_VERSION_MAJOR 55 -#define LIBAVUTIL_VERSION_MINOR 3 +#define LIBAVUTIL_VERSION_MINOR 4 #define LIBAVUTIL_VERSION_MICRO 0 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ |