Hi All,

This patch adds the missing FMV features from the ACLE.

Reg tested on aarch64.
Okay for master?

Alfie

-- >8 --

Add all the missing FMV features from the ACLE.

gcc/ChangeLog:

        * config/aarch64/aarch64-option-extensions.def (dit): New fmv feature.
        (dpb): New fmv feature.
        (dpb2): New fmv feature.
        (memtag): Change to also define an FMV feature.
        (ssbs): Change to also define an FMV feature.
        (bti): New fmv feature.
        * config/aarch64/aarch64.cc (FEAT_SSBS): Add macro.
        (FEAT_MEMTAG): Ditto.

gcc/testsuite/ChangeLog:

        * gcc.target/aarch64/fmv_priority.in: Update for new features.
        * gcc.target/aarch64/fmv_priority1.c: Ditto.
        * gcc.target/aarch64/fmv_priority2.c: Ditto.
---
 .../aarch64/aarch64-option-extensions.def     | 12 ++++++++--
 gcc/config/aarch64/aarch64.cc                 |  2 ++
 .../gcc.target/aarch64/fmv_priority.in        | 23 ++++++++++---------
 .../gcc.target/aarch64/fmv_priority1.c        | 22 +++++++++---------
 .../gcc.target/aarch64/fmv_priority2.c        |  8 +++++--
 5 files changed, 41 insertions(+), 26 deletions(-)

diff --git a/gcc/config/aarch64/aarch64-option-extensions.def 
b/gcc/config/aarch64/aarch64-option-extensions.def
index a70375c053f..083515d890d 100644
--- a/gcc/config/aarch64/aarch64-option-extensions.def
+++ b/gcc/config/aarch64/aarch64-option-extensions.def
@@ -155,6 +155,12 @@ AARCH64_OPT_EXTENSION("fp16fml", F16FML, (), (F16), (), 
"asimdfhm")
 
 AARCH64_FMV_FEATURE("fp16fml", FP16FML, (F16FML))
 
+AARCH64_FMV_FEATURE("dit", DIT, ())
+
+AARCH64_FMV_FEATURE("dpb", DPB, ())
+
+AARCH64_FMV_FEATURE("dpb2", DPB2, ())
+
 AARCH64_OPT_FMV_EXTENSION("jscvt", JSCVT, (FP), (), (), "jscvt")
 
 AARCH64_OPT_FMV_EXTENSION("fcma", FCMA, (SIMD), (), (), "fcma")
@@ -209,13 +215,15 @@ AARCH64_OPT_EXTENSION("sve2p1", SVE2p1, (SVE2), (), (), 
"sve2p1")
 
 AARCH64_OPT_FMV_EXTENSION("sme", SME, (BF16, FCMA, F16, F16FML), (), (), "sme")
 
-AARCH64_OPT_EXTENSION("memtag", MEMTAG, (), (), (), "")
+AARCH64_OPT_FMV_EXTENSION("memtag", MEMTAG, (), (), (), "")
 
 AARCH64_OPT_FMV_EXTENSION("sb", SB, (), (), (), "sb")
 
 AARCH64_OPT_EXTENSION("predres", PREDRES, (), (), (), "")
 
-AARCH64_OPT_EXTENSION("ssbs", SSBS, (), (), (), "ssbs")
+AARCH64_OPT_FMV_EXTENSION("ssbs", SSBS, (), (), (), "ssbs")
+
+AARCH64_FMV_FEATURE("bti", BTI, ())
 
 AARCH64_OPT_EXTENSION("profile", PROFILE, (), (), (), "")
 
diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
index 6f6dea67e0d..74e2f20de4e 100644
--- a/gcc/config/aarch64/aarch64.cc
+++ b/gcc/config/aarch64/aarch64.cc
@@ -20380,6 +20380,8 @@ typedef struct
 /* The "rdma" alias uses a different FEAT_NAME to avoid a duplicate
    feature_deps name.  */
 #define FEAT_RDMA FEAT_RDM
+#define FEAT_SSBS FEAT_SSBS2
+#define FEAT_MEMTAG FEAT_MEMTAG2
 
 /* FMV features are listed in priority order, to make it easier to sort target
    strings.  */
diff --git a/gcc/testsuite/gcc.target/aarch64/fmv_priority.in 
b/gcc/testsuite/gcc.target/aarch64/fmv_priority.in
index 93209bce0f2..4637369f019 100644
--- a/gcc/testsuite/gcc.target/aarch64/fmv_priority.in
+++ b/gcc/testsuite/gcc.target/aarch64/fmv_priority.in
@@ -30,10 +30,12 @@ int fn [[gnu::target_version("fp16")]] (int)                
        { return 1; }
 int fn_fp16(int) asm("fn._Mfp16");
 int fn [[gnu::target_version("fp16fml")]] (int)                        { 
return 1; }
 int fn_fp16fml(int) asm("fn._Mfp16fml");
-/* TODO: These FMV features are not yet supported in GCC. */
-// int fn [[gnu::target_version("dit")]] (int)                 { return 1; }
-// int fn [[gnu::target_version("dpb")]] (int)                 { return 1; }
-// int fn [[gnu::target_version("dpb2")]] (int)                        { 
return 1; }
+int fn [[gnu::target_version("dit")]] (int)                    { return 1; }
+int fn_dit(int) asm("fn._Mdit");
+int fn [[gnu::target_version("dpb")]] (int)                    { return 1; }
+int fn_dpb(int) asm("fn._Mdpb");
+int fn [[gnu::target_version("dpb2")]] (int)                   { return 1; }
+int fn_dpb2(int) asm("fn._Mdpb2");
 int fn [[gnu::target_version("jscvt")]] (int)                  { return 1; }
 int fn_jscvt(int) asm("fn._Mjscvt");
 int fn [[gnu::target_version("fcma")]] (int)                   { return 1; }
@@ -68,15 +70,14 @@ int fn [[gnu::target_version("sve2-sm4")]] (int)            
{ return 1; }
 int fn_sve2_sm4(int) asm("fn._Msve2_sm4");
 int fn [[gnu::target_version("sve2+sme")]] (int)               { return 1; }
 int fn_sve2_sme(int) asm("fn._Msve2Msme");
-/* TODO: This FMV features is not yet supported in GCC. */
-// int fn [[gnu::target_version("memtag")]] (int)              { return 1; }
+int fn [[gnu::target_version("memtag")]] (int)         { return 1; }
+int fn_memtag(int) asm("fn._Mmemtag");
 int fn [[gnu::target_version("sb")]] (int)                     { return 1; }
 int fn_sb(int) asm("fn._Msb");
-/* TODO: This FMV feature is not yet supported in GCC. */
-// int fn [[gnu::target_version("ssbs")]] (int)                        { 
return 1; }
-// int fn_ssbs(int) asm("fn._Mssbs");
-/* TODO: This FMV feature is not yet supported in GCC. */
-// int fn [[gnu::target_version("bti")]] (int)                 { return 1; }
+int fn [[gnu::target_version("ssbs")]] (int)                   { return 1; }
+int fn_ssbs(int) asm("fn._Mssbs");
+int fn [[gnu::target_version("bti")]] (int)                    { return 1; }
+int fn_bti(int) asm("fn._Mbti");
 int fn [[gnu::target_version("wfxt")]] (int)                   { return 1; }
 int fn_wfxt(int) asm("fn._Mwfxt");
 int fn [[gnu::target_version("sve2+sme-f64f64")]] (int)                { 
return 1; }
diff --git a/gcc/testsuite/gcc.target/aarch64/fmv_priority1.c 
b/gcc/testsuite/gcc.target/aarch64/fmv_priority1.c
index 942b7a71c3a..6075ccf4a40 100644
--- a/gcc/testsuite/gcc.target/aarch64/fmv_priority1.c
+++ b/gcc/testsuite/gcc.target/aarch64/fmv_priority1.c
@@ -81,14 +81,14 @@ int main () {
   if(resolver() != &fn_fp16fml) return 1;
 
   setCPUFeature (FEAT_DIT);
-  // if(resolver() != &fn_dit) return 1;
-  // 
+  if(resolver() != &fn_dit) return 1;
+
   setCPUFeature (FEAT_DPB);
-  // if(resolver() != &fn_dpb) return 1;
-  // 
+  if(resolver() != &fn_dpb) return 1;
+
   setCPUFeature (FEAT_DPB2);
-  // if(resolver() != &fn_dpb2) return 1;
-  // 
+  if(resolver() != &fn_dpb2) return 1;
+
   setCPUFeature (FEAT_JSCVT);
   if (resolver () != &fn_jscvt) return 1;
 
@@ -102,8 +102,8 @@ int main () {
   if (resolver () != &fn_rcpc2) return 1;
 
   setCPUFeature (FEAT_RCPC3);
-  // if(resolver() != &fn_rcpc3) return 1;
-  // 
+  if(resolver() != &fn_rcpc3) return 1;
+
   setCPUFeature (FEAT_FRINTTS);
   if (resolver () != &fn_frintts) return 1;
 
@@ -141,16 +141,16 @@ int main () {
   if (resolver () != &fn_sve2_sme) return 1;
 
   setCPUFeature(FEAT_MEMTAG2);
-  // if(resolver() != &fn_memtag) return 1;
+  if(resolver() != &fn_memtag) return 1;
 
   setCPUFeature (FEAT_SB);
   if (resolver () != &fn_sb) return 1;
 
   setCPUFeature(FEAT_SSBS2);
-  // if(resolver() != &fn_ssbs) return 1;
+  if(resolver() != &fn_ssbs) return 1;
  
   setCPUFeature(FEAT_BTI);
-  // if(resolver() != &fn_bti) return 1;
+  if(resolver() != &fn_bti) return 1;
 
   setCPUFeature (FEAT_WFXT);
   if (resolver () != &fn_wfxt) return 1;
diff --git a/gcc/testsuite/gcc.target/aarch64/fmv_priority2.c 
b/gcc/testsuite/gcc.target/aarch64/fmv_priority2.c
index dbeb15e4f62..94640153ee3 100644
--- a/gcc/testsuite/gcc.target/aarch64/fmv_priority2.c
+++ b/gcc/testsuite/gcc.target/aarch64/fmv_priority2.c
@@ -14,7 +14,9 @@
 /* { dg-final { scan-ipa-dump-times 
"fn\._Msm4/\[0-9\]+\\nfn\._MrdmaMrdm/\[0-9\]+\\nfn\._Mcrc/\[0-9\]+\\n" 1 
"targetclone1" } } */
 /* { dg-final { scan-ipa-dump-times 
"fn\._Mcrc/\[0-9\]+\\nfn\._Msha2/\[0-9\]+\\nfn\._Msha3/\[0-9\]+\\n" 1 
"targetclone1" } } */
 /* { dg-final { scan-ipa-dump-times 
"fn\._Msha3/\[0-9\]+\\nfn\._Maes/\[0-9\]+\\nfn\._Mfp16/\[0-9\]+\\n" 1 
"targetclone1" } } */
-/* { dg-final { scan-ipa-dump-times 
"fn\._Mfp16/\[0-9\]+\\nfn\._Mfp16fml/\[0-9\]+\\nfn\._Mjscvt/\[0-9\]+\\n" 1 
"targetclone1" } } */
+/* { dg-final { scan-ipa-dump-times 
"fn\._Mfp16/\[0-9\]+\\nfn\._Mfp16fml/\[0-9\]+\\nfn\._Mdit/\[0-9\]+\\n" 1 
"targetclone1" } } */
+/* { dg-final { scan-ipa-dump-times 
"fn\._Mdit/\[0-9\]+\\nfn\._Mdpb/\[0-9\]+\\nfn\._Mdpb2/\[0-9\]+\\n" 1 
"targetclone1" } } */
+/* { dg-final { scan-ipa-dump-times 
"fn\._Mdpb2/\[0-9\]+\\nfn\._Mjscvt/\[0-9\]+\\n" 1 "targetclone1" } } */
 /* { dg-final { scan-ipa-dump-times 
"fn\._Mjscvt/\[0-9\]+\\nfn\._Mfcma/\[0-9\]+\\nfn\._Mrcpc/\[0-9\]+\\n" 1 
"targetclone1" } } */
 /* { dg-final { scan-ipa-dump-times 
"fn\._Mrcpc/\[0-9\]+\\nfn\._Mrcpc2/\[0-9\]+\\nfn\._Mrcpc3/\[0-9\]+\\n" 1 
"targetclone1" } } */
 /* { dg-final { scan-ipa-dump-times 
"fn\._Mrcpc3/\[0-9\]+\\nfn\._Mfrintts/\[0-9\]+\\nfn\._Mi8mm/\[0-9\]+\\n" 1 
"targetclone1" } } */
@@ -23,7 +25,9 @@
 /* { dg-final { scan-ipa-dump-times 
"fn\._Mf64mm/\[0-9\]+\\nfn\._Msve2/\[0-9\]+\\nfn\._Msve2_aes/\[0-9\]+\\n" 1 
"targetclone1" } } */
 /* { dg-final { scan-ipa-dump-times 
"fn\._Msve2_aes/\[0-9\]+\\nfn\._Msve2_bitperm/\[0-9\]+\\nfn\._Msve2_sha3/\[0-9\]+\\n"
 1 "targetclone1" } } */
 /* { dg-final { scan-ipa-dump-times 
"fn\._Msve2_sha3/\[0-9\]+\\nfn\._Msve2_sm4/\[0-9\]+\\nfn\._Msve2Msme/\[0-9\]+\\n"
 1 "targetclone1" } } */
-/* { dg-final { scan-ipa-dump-times 
"fn\._Msve2Msme/\[0-9\]+\\nfn\._Msb/\[0-9\]+\\nfn\._Mwfxt/\[0-9\]+\\n" 1 
"targetclone1" } } */
+/* { dg-final { scan-ipa-dump-times 
"fn\._Msve2Msme/\[0-9\]+\\nfn\._Mmemtag/\[0-9\]+\\nfn\._Msb/\[0-9\]+\\n" 1 
"targetclone1" } } */
+/* { dg-final { scan-ipa-dump-times 
"fn\._Msb/\[0-9\]+\\nfn\._Mssbs/\[0-9\]+\\nfn\._Mbti/\[0-9\]+\\n" 1 
"targetclone1" } } */
+/* { dg-final { scan-ipa-dump-times 
"fn\._Mbti/\[0-9\]+\\nfn\._Mwfxt/\[0-9\]+\\n" 1 "targetclone1" } } */
 /* { dg-final { scan-ipa-dump-times 
"fn\._Mwfxt/\[0-9\]+\\nfn\._Msve2Msme_f64f64/\[0-9\]+\\nfn\._Msve2Msme_i16i64/\[0-9\]+\\n"
 1 "targetclone1" } } */
 /* { dg-final { scan-ipa-dump-times 
"fn\._Msve2Msme_i16i64/\[0-9\]+\\nfn\._Msve2Msme2/\[0-9\]+\\nfn\._Mmops/\[0-9\]+\\n"
 1 "targetclone1" } } */
 /* { dg-final { scan-ipa-dump-times 
"fn\._Mmops/\[0-9\]+\\nfn\._Mcssc/\[0-9\]+\\n" 1 "targetclone1" } } */
-- 
2.34.1

Reply via email to