You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	aarch64: Add cpu flags for the dotprod and i8mm extensions
Set these available if they are available unconditionally for the compiler. Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
		| @@ -22,9 +22,18 @@ | ||||
|  | ||||
| int ff_get_cpu_flags_aarch64(void) | ||||
| { | ||||
|     return AV_CPU_FLAG_ARMV8 * HAVE_ARMV8 | | ||||
|            AV_CPU_FLAG_NEON  * HAVE_NEON  | | ||||
|            AV_CPU_FLAG_VFP   * HAVE_VFP; | ||||
|     int flags = AV_CPU_FLAG_ARMV8 * HAVE_ARMV8 | | ||||
|                 AV_CPU_FLAG_NEON  * HAVE_NEON  | | ||||
|                 AV_CPU_FLAG_VFP   * HAVE_VFP; | ||||
|  | ||||
| #ifdef __ARM_FEATURE_DOTPROD | ||||
|     flags |= AV_CPU_FLAG_DOTPROD; | ||||
| #endif | ||||
| #ifdef __ARM_FEATURE_MATMUL_INT8 | ||||
|     flags |= AV_CPU_FLAG_I8MM; | ||||
| #endif | ||||
|  | ||||
|     return flags; | ||||
| } | ||||
|  | ||||
| size_t ff_get_cpu_max_align_aarch64(void) | ||||
|   | ||||
| @@ -25,5 +25,7 @@ | ||||
| #define have_armv8(flags) CPUEXT(flags, ARMV8) | ||||
| #define have_neon(flags) CPUEXT(flags, NEON) | ||||
| #define have_vfp(flags)  CPUEXT(flags, VFP) | ||||
| #define have_dotprod(flags) CPUEXT(flags, DOTPROD) | ||||
| #define have_i8mm(flags)    CPUEXT(flags, I8MM) | ||||
|  | ||||
| #endif /* AVUTIL_AARCH64_CPU_H */ | ||||
|   | ||||
| @@ -174,6 +174,8 @@ int av_parse_cpu_caps(unsigned *flags, const char *s) | ||||
|         { "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" }, | ||||
|         { "dotprod",  NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_DOTPROD  },    .unit = "flags" }, | ||||
|         { "i8mm",     NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_I8MM     },    .unit = "flags" }, | ||||
| #elif ARCH_MIPS | ||||
|         { "mmi",      NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_MMI      },    .unit = "flags" }, | ||||
|         { "msa",      NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_MSA      },    .unit = "flags" }, | ||||
|   | ||||
| @@ -69,6 +69,8 @@ | ||||
| #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 | ||||
| #define AV_CPU_FLAG_DOTPROD      (1 << 8) | ||||
| #define AV_CPU_FLAG_I8MM         (1 << 9) | ||||
| #define AV_CPU_FLAG_SETEND       (1 <<16) | ||||
|  | ||||
| #define AV_CPU_FLAG_MMI          (1 << 0) | ||||
|   | ||||
| @@ -38,6 +38,8 @@ static const struct { | ||||
|     { AV_CPU_FLAG_ARMV8,     "armv8"      }, | ||||
|     { AV_CPU_FLAG_NEON,      "neon"       }, | ||||
|     { AV_CPU_FLAG_VFP,       "vfp"        }, | ||||
|     { AV_CPU_FLAG_DOTPROD,   "dotprod"    }, | ||||
|     { AV_CPU_FLAG_I8MM,      "i8mm"       }, | ||||
| #elif ARCH_ARM | ||||
|     { AV_CPU_FLAG_ARMV5TE,   "armv5te"    }, | ||||
|     { AV_CPU_FLAG_ARMV6,     "armv6"      }, | ||||
|   | ||||
| @@ -230,6 +230,8 @@ static const struct { | ||||
| #if   ARCH_AARCH64 | ||||
|     { "ARMV8",    "armv8",    AV_CPU_FLAG_ARMV8 }, | ||||
|     { "NEON",     "neon",     AV_CPU_FLAG_NEON }, | ||||
|     { "DOTPROD",  "dotprod",  AV_CPU_FLAG_DOTPROD }, | ||||
|     { "I8MM",     "i8mm",     AV_CPU_FLAG_I8MM }, | ||||
| #elif ARCH_ARM | ||||
|     { "ARMV5TE",  "armv5te",  AV_CPU_FLAG_ARMV5TE }, | ||||
|     { "ARMV6",    "armv6",    AV_CPU_FLAG_ARMV6 }, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user