diff options
author | hassnaaHamdi <hassnaa.hamdi@arm.com> | 2023-11-01 13:03:00 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-01 13:03:00 +0000 |
commit | 6477b41a0b56919c42f44c3499ed32720101b43b (patch) | |
tree | 77a2ccac3b1a252ea25d99a78d484cb88295decc /llvm/unittests/TargetParser/TargetParserTest.cpp | |
parent | 47d9fbc04b91fb03b6da294e82c2fb4bca6b6343 (diff) | |
download | llvm-6477b41a0b56919c42f44c3499ed32720101b43b.zip llvm-6477b41a0b56919c42f44c3499ed32720101b43b.tar.gz llvm-6477b41a0b56919c42f44c3499ed32720101b43b.tar.bz2 |
[llvm][AArch64][Assembly]: Add FP8FMA assembly and disassembly. (#70134)
This patch adds the feature flag FP8FMA and the assembly/disassembly
for the following instructions of NEON and SVE2:
* NEON:
- FMLALBlane
- FMLALTlane
- FMLALLBBlane
- FMLALLBTlane
- FMLALLTBlane
- FMLALLTTlane
- FMLALB
- FMLALT
- FMLALLB
- FMLALLBT
- FMLALLTB
- FMLALLTT
* SVE2:
- FMLALB_ZZZI
- FMLALT_ZZZI
- FMLALB_ZZZ
- FMLALT_ZZZ
- FMLALLBB_ZZZI
- FMLALLBT_ZZZI
- FMLALLTB_ZZZI
- FMLALLTT_ZZZI
- FMLALLBB_ZZZ
- FMLALLBT_ZZZ
- FMLALLTB_ZZZ
- FMLALLTT_ZZZ
That is according to this documentation:
https://developer.arm.com/documentation/ddi0602/2023-09
Diffstat (limited to 'llvm/unittests/TargetParser/TargetParserTest.cpp')
-rw-r--r-- | llvm/unittests/TargetParser/TargetParserTest.cpp | 45 |
1 files changed, 25 insertions, 20 deletions
diff --git a/llvm/unittests/TargetParser/TargetParserTest.cpp b/llvm/unittests/TargetParser/TargetParserTest.cpp index 45f39a6..3c6d463 100644 --- a/llvm/unittests/TargetParser/TargetParserTest.cpp +++ b/llvm/unittests/TargetParser/TargetParserTest.cpp @@ -1713,26 +1713,27 @@ TEST(TargetParserTest, testAArch64Extension) { TEST(TargetParserTest, AArch64ExtensionFeatures) { std::vector<uint64_t> Extensions = { - AArch64::AEK_CRC, AArch64::AEK_LSE, AArch64::AEK_RDM, - AArch64::AEK_CRYPTO, AArch64::AEK_SM4, AArch64::AEK_SHA3, - AArch64::AEK_SHA2, AArch64::AEK_AES, AArch64::AEK_DOTPROD, - AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_FP16, - AArch64::AEK_FP16FML, AArch64::AEK_PROFILE, AArch64::AEK_RAS, - AArch64::AEK_SVE, AArch64::AEK_SVE2, AArch64::AEK_SVE2AES, - AArch64::AEK_SVE2SM4, AArch64::AEK_SVE2SHA3, AArch64::AEK_SVE2BITPERM, - AArch64::AEK_RCPC, AArch64::AEK_RAND, AArch64::AEK_MTE, - AArch64::AEK_SSBS, AArch64::AEK_SB, AArch64::AEK_PREDRES, - AArch64::AEK_BF16, AArch64::AEK_I8MM, AArch64::AEK_F32MM, - AArch64::AEK_F64MM, AArch64::AEK_TME, AArch64::AEK_LS64, - AArch64::AEK_BRBE, AArch64::AEK_PAUTH, AArch64::AEK_FLAGM, - AArch64::AEK_SME, AArch64::AEK_SMEF64F64, AArch64::AEK_SMEI16I64, - AArch64::AEK_SME2, AArch64::AEK_HBC, AArch64::AEK_MOPS, - AArch64::AEK_PERFMON, AArch64::AEK_SVE2p1, AArch64::AEK_SME2p1, - AArch64::AEK_B16B16, AArch64::AEK_SMEF16F16, AArch64::AEK_CSSC, - AArch64::AEK_RCPC3, AArch64::AEK_THE, AArch64::AEK_D128, - AArch64::AEK_LSE128, AArch64::AEK_SPECRES2, AArch64::AEK_RASv2, - AArch64::AEK_ITE, AArch64::AEK_GCS, AArch64::AEK_FPMR, - AArch64::AEK_FP8, AArch64::AEK_FAMINMAX}; + AArch64::AEK_CRC, AArch64::AEK_LSE, AArch64::AEK_RDM, + AArch64::AEK_CRYPTO, AArch64::AEK_SM4, AArch64::AEK_SHA3, + AArch64::AEK_SHA2, AArch64::AEK_AES, AArch64::AEK_DOTPROD, + AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_FP16, + AArch64::AEK_FP16FML, AArch64::AEK_PROFILE, AArch64::AEK_RAS, + AArch64::AEK_SVE, AArch64::AEK_SVE2, AArch64::AEK_SVE2AES, + AArch64::AEK_SVE2SM4, AArch64::AEK_SVE2SHA3, AArch64::AEK_SVE2BITPERM, + AArch64::AEK_RCPC, AArch64::AEK_RAND, AArch64::AEK_MTE, + AArch64::AEK_SSBS, AArch64::AEK_SB, AArch64::AEK_PREDRES, + AArch64::AEK_BF16, AArch64::AEK_I8MM, AArch64::AEK_F32MM, + AArch64::AEK_F64MM, AArch64::AEK_TME, AArch64::AEK_LS64, + AArch64::AEK_BRBE, AArch64::AEK_PAUTH, AArch64::AEK_FLAGM, + AArch64::AEK_SME, AArch64::AEK_SMEF64F64, AArch64::AEK_SMEI16I64, + AArch64::AEK_SME2, AArch64::AEK_HBC, AArch64::AEK_MOPS, + AArch64::AEK_PERFMON, AArch64::AEK_SVE2p1, AArch64::AEK_SME2p1, + AArch64::AEK_B16B16, AArch64::AEK_SMEF16F16, AArch64::AEK_CSSC, + AArch64::AEK_RCPC3, AArch64::AEK_THE, AArch64::AEK_D128, + AArch64::AEK_LSE128, AArch64::AEK_SPECRES2, AArch64::AEK_RASv2, + AArch64::AEK_ITE, AArch64::AEK_GCS, AArch64::AEK_FPMR, + AArch64::AEK_FP8, AArch64::AEK_FAMINMAX, AArch64::AEK_FP8FMA, + AArch64::AEK_SSVE_FP8FMA}; std::vector<StringRef> Features; @@ -1807,6 +1808,8 @@ TEST(TargetParserTest, AArch64ExtensionFeatures) { EXPECT_TRUE(llvm::is_contained(Features, "+fpmr")); EXPECT_TRUE(llvm::is_contained(Features, "+fp8")); EXPECT_TRUE(llvm::is_contained(Features, "+faminmax")); + EXPECT_TRUE(llvm::is_contained(Features, "+fp8fma")); + EXPECT_TRUE(llvm::is_contained(Features, "+ssve-fp8fma")); // Assuming we listed every extension above, this should produce the same // result. (note that AEK_NONE doesn't have a name so it won't be in the @@ -1933,6 +1936,8 @@ TEST(TargetParserTest, AArch64ArchExtFeature) { {"fpmr", "nofpmr", "+fpmr", "-fpmr"}, {"fp8", "nofp8", "+fp8", "-fp8"}, {"faminmax", "nofaminmax", "+faminmax", "-faminmax"}, + {"fp8fma", "nofp8fma", "+fp8fma", "-fp8fma"}, + {"ssve-fp8fma", "nossve-fp8fma", "+ssve-fp8fma", "-ssve-fp8fma"}, }; for (unsigned i = 0; i < std::size(ArchExt); i++) { |