Add coverage of the new hwcaps to the test program, encodings cross checked
against LLVM 22.

Signed-off-by: Mark Brown <[email protected]>
---
 tools/testing/selftests/arm64/abi/hwcap.c | 116 ++++++++++++++++++++++++++++++
 1 file changed, 116 insertions(+)

diff --git a/tools/testing/selftests/arm64/abi/hwcap.c 
b/tools/testing/selftests/arm64/abi/hwcap.c
index 9d2df1f3e6bb..fbb5563ac7ac 100644
--- a/tools/testing/selftests/arm64/abi/hwcap.c
+++ b/tools/testing/selftests/arm64/abi/hwcap.c
@@ -107,6 +107,24 @@ static void f8mm8_sigill(void)
        asm volatile(".inst 0x6e80ec00");
 }
 
+static void f16f32dot_sigill(void)
+{
+       /* FDOT V0.2S, V0.4H, V0.2H[0] */
+       asm volatile(".inst 0xf409000");
+}
+
+static void f16f32mm_sigill(void)
+{
+       /* FMMLA V0.4S, V0.8H, V0.8H */
+       asm volatile(".inst 0x4e40ec00");
+}
+
+static void f16mm_sigill(void)
+{
+       /* FMMLA V0.8H, V0.8H, V0.8H */
+       asm volatile(".inst 0x4ec0ec00");
+}
+
 static void faminmax_sigill(void)
 {
        /* FAMIN V0.4H, V0.4H, V0.4H */
@@ -190,6 +208,12 @@ static void lut_sigill(void)
        asm volatile(".inst 0x4e801000");
 }
 
+static void lut6_sigill(void)
+{
+       /* LUTI6 Z0.H, { Z0.H, Z1.H }, Z0[0] */
+       asm volatile(".inst 0x4560ac00");
+}
+
 static void mops_sigill(void)
 {
        char dst[1], src[1];
@@ -281,6 +305,18 @@ static void sme2p2_sigill(void)
        asm volatile("msr S0_3_C4_C6_3, xzr" : : : );
 }
 
+static void sme2p3_sigill(void)
+{
+       /* SMSTART SM */
+       asm volatile("msr S0_3_C4_C3_3, xzr" : : : );
+
+       /* ADDQP Z0.B, Z0.B, Z0.B */
+       asm volatile(".inst 0x4207800" : : : "z0");
+
+       /* SMSTOP */
+       asm volatile("msr S0_3_C4_C6_3, xzr" : : : );
+}
+
 static void sme_aes_sigill(void)
 {
        /* SMSTART SM */
@@ -377,6 +413,18 @@ static void smef8f32_sigill(void)
        asm volatile("msr S0_3_C4_C6_3, xzr" : : : );
 }
 
+static void smelut6_sigill(void)
+{
+       /* SMSTART */
+       asm volatile("msr S0_3_C4_C7_3, xzr" : : : );
+
+       /* LUTI6 { Z0.B-Z3.B }, ZT0, { Z0-Z2 } */
+       asm volatile(".inst 0xc08a0000" : : : );
+
+       /* SMSTOP */
+       asm volatile("msr S0_3_C4_C6_3, xzr" : : : );
+}
+
 static void smelutv2_sigill(void)
 {
        /* SMSTART */
@@ -485,6 +533,12 @@ static void sve2p2_sigill(void)
        asm volatile(".inst 0x4cea000" : : : "z0");
 }
 
+static void sve2p3_sigill(void)
+{
+       /* ADDQP Z0.B, Z0.B, Z0.B */
+       asm volatile(".inst 0x4207800" : : : "z0");
+}
+
 static void sveaes_sigill(void)
 {
        /* AESD z0.b, z0.b, z0.b */
@@ -503,6 +557,12 @@ static void sveb16b16_sigill(void)
        asm volatile(".inst 0x65000000" : : : );
 }
 
+static void sveb16mm_sigill(void)
+{
+       /* BFMMLA Z0.H, Z0.H, Z0.H */
+       asm volatile(".inst 0x64e0e000" : : : );
+}
+
 static void svebfscale_sigill(void)
 {
        /* BFSCALE Z0.H, P0/M, Z0.H, Z0.H */
@@ -728,6 +788,27 @@ static const struct hwcap_data {
                .cpuinfo = "f8mm4",
                .sigill_fn = f8mm4_sigill,
        },
+       {
+               .name = "F16MM",
+               .at_hwcap = AT_HWCAP3,
+               .hwcap_bit = HWCAP3_F16MM,
+               .cpuinfo = "f16mm",
+               .sigill_fn = f16mm_sigill,
+       },
+       {
+               .name = "F16F32DOT",
+               .at_hwcap = AT_HWCAP3,
+               .hwcap_bit = HWCAP3_F16F32DOT,
+               .cpuinfo = "f16f32dot",
+               .sigill_fn = f16f32dot_sigill,
+       },
+       {
+               .name = "F16F32MM",
+               .at_hwcap = AT_HWCAP3,
+               .hwcap_bit = HWCAP3_F16F32MM,
+               .cpuinfo = "f16f32mm",
+               .sigill_fn = f16f32mm_sigill,
+       },
        {
                .name = "FAMINMAX",
                .at_hwcap = AT_HWCAP2,
@@ -830,6 +911,13 @@ static const struct hwcap_data {
                .cpuinfo = "lut",
                .sigill_fn = lut_sigill,
        },
+       {
+               .name = "LUT6",
+               .at_hwcap = AT_HWCAP3,
+               .hwcap_bit = HWCAP3_LUT6,
+               .cpuinfo = "lut6",
+               .sigill_fn = lut6_sigill,
+       },
        {
                .name = "MOPS",
                .at_hwcap = AT_HWCAP2,
@@ -917,6 +1005,13 @@ static const struct hwcap_data {
                .cpuinfo = "sme2p2",
                .sigill_fn = sme2p2_sigill,
        },
+       {
+               .name = "SME 2.3",
+               .at_hwcap = AT_HWCAP3,
+               .hwcap_bit = HWCAP3_SME2P3,
+               .cpuinfo = "sme2p3",
+               .sigill_fn = sme2p3_sigill,
+       },
        {
                .name = "SME AES",
                .at_hwcap = AT_HWCAP,
@@ -966,6 +1061,13 @@ static const struct hwcap_data {
                .cpuinfo = "smef8f32",
                .sigill_fn = smef8f32_sigill,
        },
+       {
+               .name = "SME LUT6",
+               .at_hwcap = AT_HWCAP3,
+               .hwcap_bit = HWCAP3_SME_LUT6,
+               .cpuinfo = "smelut6",
+               .sigill_fn = smelut6_sigill,
+       },
        {
                .name = "SME LUTV2",
                .at_hwcap = AT_HWCAP2,
@@ -1051,6 +1153,13 @@ static const struct hwcap_data {
                .cpuinfo = "sve2p2",
                .sigill_fn = sve2p2_sigill,
        },
+       {
+               .name = "SVE 2.3",
+               .at_hwcap = AT_HWCAP3,
+               .hwcap_bit = HWCAP3_SVE2P3,
+               .cpuinfo = "sve2p3",
+               .sigill_fn = sve2p3_sigill,
+       },
        {
                .name = "SVE AES",
                .at_hwcap = AT_HWCAP2,
@@ -1065,6 +1174,13 @@ static const struct hwcap_data {
                .cpuinfo = "sveaes2",
                .sigill_fn = sveaes2_sigill,
        },
+       {
+               .name = "SVE B16MM",
+               .at_hwcap = AT_HWCAP3,
+               .hwcap_bit = HWCAP3_SVE_B16MM,
+               .cpuinfo = "sveb16mm",
+               .sigill_fn = sveb16mm_sigill,
+       },
        {
                .name = "SVE BFSCALE",
                .at_hwcap = AT_HWCAP,

-- 
2.47.3


Reply via email to