This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit 905348df9df2f7d6b1335be78640101fd83c4757 Author: Georgii Zagoruiko <[email protected]> AuthorDate: Mon Mar 2 21:33:27 2026 +0000 Commit: Martin Storsjö <[email protected]> CommitDate: Wed Mar 4 23:52:57 2026 +0200 configure: add detection of SME-I16I64 extension --- configure | 11 +++++++++-- libavutil/aarch64/asm.S | 9 +++++++++ libavutil/aarch64/cpu.c | 12 ++++++++++++ libavutil/aarch64/cpu.h | 1 + libavutil/cpu.c | 2 ++ libavutil/cpu.h | 1 + libavutil/tests/cpu.c | 1 + tests/checkasm/checkasm.c | 1 + 8 files changed, 36 insertions(+), 2 deletions(-) diff --git a/configure b/configure index 058e895393..b81b7d40a2 100755 --- a/configure +++ b/configure @@ -485,6 +485,7 @@ Optimization options (experts only): --disable-sve disable SVE optimizations --disable-sve2 disable SVE2 optimizations --disable-sme disable SME optimizations + --disable-sme-i16i64 disable SME-I16I64 optimizations --disable-sme2 disable SME2 optimizations --disable-inline-asm disable use of inline assembly --disable-x86asm disable use of standalone x86 assembly @@ -1238,6 +1239,7 @@ check_archext_name_insn(){ log check_archext_name_insn "$@" feature="$1" archext="$2" + archextdir=$(printf '%s' "$2" | tr '-' '_') instr="$3" instr2="$4" # Check if the assembly is accepted in inline assembly. @@ -1252,7 +1254,7 @@ check_archext_name_insn(){ # Test if the assembler supports the .arch_extension $archext directive. arch_extension_directive=".arch_extension $archext" - test_as <<EOF && enable as_archext_${archext}_directive || arch_extension_directive="" + test_as <<EOF && enable as_archext_${archextdir}_directive || arch_extension_directive="" $arch_directive $arch_extension_directive EOF @@ -2304,6 +2306,7 @@ ARCH_EXT_LIST_ARM=" sve sve2 sme + sme_i16i64 sme2 " @@ -2575,6 +2578,7 @@ TOOLCHAIN_FEATURES=" as_archext_sve_directive as_archext_sve2_directive as_archext_sme_directive + as_archext_sme_i16i64_directive as_archext_sme2_directive as_dn_directive as_fpu_directive @@ -2917,6 +2921,7 @@ i8mm_deps="aarch64 neon" sve_deps="aarch64 neon" sve2_deps="aarch64 neon sve" sme_deps="aarch64 neon sve sve2" +sme_i16i64_deps="aarch64 neon sve sve2 sme" sme2_deps="aarch64 neon sve sve2 sme" map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM @@ -6555,13 +6560,14 @@ if enabled aarch64; then # internal assembler in clang 3.3 does not support this instruction enabled neon && check_insn neon 'ext v0.8B, v0.8B, v1.8B, #1' - archext_list="arm_crc dotprod i8mm sve sve2 sme sme2" + archext_list="arm_crc dotprod i8mm sve sve2 sme sme_i16i64 sme2" enabled arm_crc && check_archext_name_insn arm_crc crc 'crc32x w0, w0, x0' enabled dotprod && check_archext_insn dotprod 'udot v0.4s, v0.16b, v0.16b' enabled i8mm && check_archext_insn i8mm 'usdot v0.4s, v0.16b, v0.16b' enabled sve && check_archext_insn sve 'whilelt p0.s, x0, x1' enabled sve2 && check_archext_insn sve2 'sqrdmulh z0.s, z0.s, z0.s' enabled sme && check_archext_insn sme 'smstart' 'cntb x0' + enabled sme_i16i64 && check_archext_name_insn sme_i16i64 sme-i16i64 'smstart' 'smopa za0.d, p0/m, p0/m, z0.h, z1.h' enabled sme2 && check_archext_insn sme2 'smstart' 'sdot za.s[w10, 0], {z0.b-z3.b}, {z4.b-z7.b}' # Disable the main feature (e.g. HAVE_NEON) if neither inline nor external @@ -8392,6 +8398,7 @@ if enabled aarch64; then echo "SVE enabled ${sve-no}" echo "SVE2 enabled ${sve2-no}" echo "SME enabled ${sme-no}" + echo "SME-I16I64 enabled ${sme_i16i64-no}" echo "SME2 enabled ${sme2-no}" fi if enabled arm; then diff --git a/libavutil/aarch64/asm.S b/libavutil/aarch64/asm.S index 842e5932db..9e9e11673b 100644 --- a/libavutil/aarch64/asm.S +++ b/libavutil/aarch64/asm.S @@ -88,6 +88,14 @@ #define DISABLE_SME #endif +#if HAVE_AS_ARCHEXT_SME_I16I64_DIRECTIVE +#define ENABLE_SME_I16I64 .arch_extension sme-i16i64 +#define DISABLE_SME_I16I64 .arch_extension nosme-i16i64 +#else +#define ENABLE_SME_I16I64 +#define DISABLE_SME_I16I64 +#endif + #if HAVE_AS_ARCHEXT_SME2_DIRECTIVE #define ENABLE_SME2 .arch_extension sme2 #define DISABLE_SME2 .arch_extension nosme2 @@ -102,6 +110,7 @@ DISABLE_I8MM DISABLE_SVE DISABLE_SVE2 DISABLE_SME +DISABLE_SME_I16I64 DISABLE_SME2 diff --git a/libavutil/aarch64/cpu.c b/libavutil/aarch64/cpu.c index 56d5cd8dfb..8dd8245358 100644 --- a/libavutil/aarch64/cpu.c +++ b/libavutil/aarch64/cpu.c @@ -30,6 +30,7 @@ #define HWCAP2_AARCH64_SVE2 (1 << 1) #define HWCAP2_AARCH64_I8MM (1 << 13) #define HWCAP2_AARCH64_SME (1 << 23) +#define HWCAP2_AARCH64_SME_I16I64 (1 << 24) #define HWCAP2_AARCH64_SME2 (1ULL << 37) static int detect_flags(void) @@ -51,6 +52,8 @@ static int detect_flags(void) flags |= AV_CPU_FLAG_I8MM; if (hwcap2 & HWCAP2_AARCH64_SME) flags |= AV_CPU_FLAG_SME; + if (hwcap2 & HWCAP2_AARCH64_SME_I16I64) + flags |= AV_CPU_FLAG_SME_I16I64; if (hwcap2 & HWCAP2_AARCH64_SME2) flags |= AV_CPU_FLAG_SME2; @@ -78,6 +81,8 @@ static int detect_flags(void) flags |= AV_CPU_FLAG_I8MM; if (have_feature("hw.optional.arm.FEAT_SME")) flags |= AV_CPU_FLAG_SME; + if (have_feature("hw.optional.arm.FEAT_SME_I16I64")) + flags |= AV_CPU_FLAG_SME_I16I64; if (have_feature("hw.optional.armv8_crc32")) flags |= AV_CPU_FLAG_ARM_CRC; if (have_feature("hw.optional.arm.FEAT_SME2")) @@ -156,6 +161,10 @@ static int detect_flags(void) if (IsProcessorFeaturePresent(PF_ARM_SME_INSTRUCTIONS_AVAILABLE)) flags |= AV_CPU_FLAG_SME; #endif +#ifdef PF_ARM_SME_I16I64_INSTRUCTIONS_AVAILABLE + if (IsProcessorFeaturePresent(PF_ARM_SME_I16I64_INSTRUCTIONS_AVAILABLE)) + flags |= AV_CPU_FLAG_SME_I16I64; +#endif #ifdef PF_ARM_SME2_INSTRUCTIONS_AVAILABLE if (IsProcessorFeaturePresent(PF_ARM_SME2_INSTRUCTIONS_AVAILABLE)) flags |= AV_CPU_FLAG_SME2; @@ -194,6 +203,9 @@ int ff_get_cpu_flags_aarch64(void) #ifdef __ARM_FEATURE_CRC32 flags |= AV_CPU_FLAG_ARM_CRC; #endif +#ifdef __ARM_FEATURE_SME_I16I64 + flags |= AV_CPU_FLAG_SME_I16I64; +#endif #ifdef __ARM_FEATURE_SME2 flags |= AV_CPU_FLAG_SME2; #endif diff --git a/libavutil/aarch64/cpu.h b/libavutil/aarch64/cpu.h index 81ac1f3499..f1dff3f647 100644 --- a/libavutil/aarch64/cpu.h +++ b/libavutil/aarch64/cpu.h @@ -31,6 +31,7 @@ #define have_sve(flags) CPUEXT(flags, SVE) #define have_sve2(flags) CPUEXT(flags, SVE2) #define have_sme(flags) CPUEXT(flags, SME) +#define have_sme_i16i64(flags) CPUEXT(flags, SME_I16I64) #define have_sme2(flags) CPUEXT(flags, SME2) #if HAVE_SVE diff --git a/libavutil/cpu.c b/libavutil/cpu.c index 433851ec5c..07b90aa90a 100644 --- a/libavutil/cpu.c +++ b/libavutil/cpu.c @@ -189,6 +189,8 @@ int av_parse_cpu_caps(unsigned *flags, const char *s) { "sve2", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_SVE2 }, .unit = "flags" }, { "sme", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_SME }, .unit = "flags" }, { "crc", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_ARM_CRC }, .unit = "flags" }, + { "sme_i16i64", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_SME_I16I64 }, .unit = "flags" }, + { "sme2", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_SME2 }, .unit = "flags" }, #elif ARCH_MIPS { "mmi", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_MMI }, .unit = "flags" }, diff --git a/libavutil/cpu.h b/libavutil/cpu.h index 13d4786f27..464d4cd5df 100644 --- a/libavutil/cpu.h +++ b/libavutil/cpu.h @@ -80,6 +80,7 @@ #define AV_CPU_FLAG_SME (1 <<12) #define AV_CPU_FLAG_ARM_CRC (1 <<13) #define AV_CPU_FLAG_SME2 (1 <<14) +#define AV_CPU_FLAG_SME_I16I64 (1 <<15) #define AV_CPU_FLAG_SETEND (1 <<16) #define AV_CPU_FLAG_MMI (1 << 0) diff --git a/libavutil/tests/cpu.c b/libavutil/tests/cpu.c index 5720b3c8d1..3e468fecc8 100644 --- a/libavutil/tests/cpu.c +++ b/libavutil/tests/cpu.c @@ -49,6 +49,7 @@ static const struct { { AV_CPU_FLAG_SVE, "sve" }, { AV_CPU_FLAG_SVE2, "sve2" }, { AV_CPU_FLAG_SME, "sme" }, + { AV_CPU_FLAG_SME_I16I64, "sme_i16i64" }, { AV_CPU_FLAG_ARM_CRC, "crc" }, { AV_CPU_FLAG_SME2, "sme2" }, #elif ARCH_ARM diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c index e25faaec7f..a4ac8f1483 100644 --- a/tests/checkasm/checkasm.c +++ b/tests/checkasm/checkasm.c @@ -377,6 +377,7 @@ static const struct { { "SVE", "sve", AV_CPU_FLAG_SVE }, { "SVE2", "sve2", AV_CPU_FLAG_SVE2 }, { "SME", "sme", AV_CPU_FLAG_SME }, + { "SME-I16I64", "sme_i16i64", AV_CPU_FLAG_SME_I16I64 }, { "CRC", "crc", AV_CPU_FLAG_ARM_CRC }, { "SME2", "sme2", AV_CPU_FLAG_SME2 }, #elif ARCH_ARM _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
