@@ -75,20 +75,13 @@ class FMVOnlyExtension<string FMVBit, string Name, string Deps, int Priority>
75
75
}
76
76
77
77
def : FMVOnlyExtension<"FEAT_DGH", "dgh", "", 260>;
78
- def : FMVOnlyExtension<"FEAT_DPB", "dpb", "+ccpp", 190>;
79
- def : FMVOnlyExtension<"FEAT_DPB2", "dpb2", "+ccpp,+ccdp", 200>;
80
78
def : FMVOnlyExtension<"FEAT_EBF16", "ebf16", "+bf16", 290>;
81
- def : FMVOnlyExtension<"FEAT_FLAGM2", "flagm2", "+flagm,+altnzcv", 30>;
82
- def : FMVOnlyExtension<"FEAT_FRINTTS", "frintts", "+fptoint", 250>;
83
79
def : FMVOnlyExtension<"FEAT_LS64_ACCDATA", "ls64_accdata", "+ls64", 540>;
84
80
def : FMVOnlyExtension<"FEAT_LS64_V", "ls64_v", "", 530>;
85
81
def : FMVOnlyExtension<"FEAT_MEMTAG2", "memtag2", "+mte", 450>;
86
82
def : FMVOnlyExtension<"FEAT_MEMTAG3", "memtag3", "+mte", 460>;
87
- def : FMVOnlyExtension<"FEAT_PMULL", "pmull", "+aes,+fp-armv8,+neon", 160>;
88
- def : FMVOnlyExtension<"FEAT_RCPC2", "rcpc2", "+rcpc", 240>;
89
83
def : FMVOnlyExtension<"FEAT_RPRES", "rpres", "", 300>;
90
84
def : FMVOnlyExtension<"FEAT_SHA1", "sha1", "+fp-armv8,+neon", 120>;
91
- def : FMVOnlyExtension<"FEAT_SSBS2", "ssbs2", "+ssbs", 500>;
92
85
def : FMVOnlyExtension<"FEAT_SVE_BF16", "sve-bf16", "+sve,+bf16,+fullfp16,+fp-armv8,+neon", 320>;
93
86
def : FMVOnlyExtension<"FEAT_SVE_EBF16", "sve-ebf16", "+sve,+bf16,+fullfp16,+fp-armv8,+neon", 330>;
94
87
def : FMVOnlyExtension<"FEAT_SVE_I8MM", "sve-i8mm", "+sve,+i8mm,+fullfp16,+fp-armv8,+neon", 340>;
@@ -131,6 +124,9 @@ def FeatureAES : Extension<
131
124
"Enable AES support (FEAT_AES, FEAT_PMULL)", [FeatureNEON],
132
125
"FEAT_AES", "+fp-armv8,+neon", 150>;
133
126
127
+ let ArchExtKindSpelling = "AEK_PMULL", Implies = [FeatureAES] in
128
+ def : FMVOnlyExtension<"FEAT_PMULL", "pmull", "+aes,+fp-armv8,+neon", 160>;
129
+
134
130
// Crypto has been split up and any combination is now valid (see the
135
131
// crypto definitions above). Also, crypto is now context sensitive:
136
132
// it has a different meaning for e.g. Armv8.4 than it has for Armv8.2.
@@ -216,8 +212,10 @@ def FeaturePAN_RWV : SubtargetFeature<
216
212
def FeaturePsUAO : SubtargetFeature< "uaops", "HasPsUAO", "true",
217
213
"Enable v8.2 UAO PState (FEAT_UAO)">;
218
214
219
- def FeatureCCPP : SubtargetFeature<"ccpp", "HasCCPP",
220
- "true", "Enable v8.2 data Cache Clean to Point of Persistence (FEAT_DPB)" >;
215
+ let MArchName = "dpb" in
216
+ def FeatureCCPP : Extension<"ccpp", "CCPP",
217
+ "Enable v8.2 data Cache Clean to Point of Persistence (FEAT_DPB)", [],
218
+ "FEAT_DPB", "+ccpp", 190>;
221
219
222
220
def FeatureSVE : Extension<"sve", "SVE",
223
221
"Enable Scalable Vector Extension (SVE) instructions (FEAT_SVE)", [FeatureFullFP16],
@@ -484,9 +482,10 @@ def FeatureFlagM : Extension<
484
482
"FEAT_FLAGM", "+flagm", 20>;
485
483
486
484
// 8.4 RCPC enchancements: LDAPR & STLR instructions with Immediate Offset
487
- def FeatureRCPC_IMMO : SubtargetFeature<"rcpc-immo", "HasRCPC_IMMO", "true",
485
+ let MArchName = "rcpc2" in
486
+ def FeatureRCPC_IMMO : Extension<"rcpc-immo", "RCPC_IMMO",
488
487
"Enable v8.4-A RCPC instructions with Immediate Offsets (FEAT_LRCPC2)",
489
- [FeatureRCPC]>;
488
+ [FeatureRCPC], "FEAT_RCPC2", "+rcpc,+rcpc-immo", 240 >;
490
489
491
490
def FeatureNoNegativeImmediates : SubtargetFeature<"no-neg-immediates",
492
491
"NegativeImmediates", "false",
@@ -518,12 +517,16 @@ def FeatureAggressiveFMA :
518
517
"true",
519
518
"Enable Aggressive FMA for floating-point.">;
520
519
521
- def FeatureAltFPCmp : SubtargetFeature<"altnzcv", "HasAlternativeNZCV", "true",
522
- "Enable alternative NZCV format for floating point comparisons (FEAT_FlagM2)">;
520
+ let MArchName = "flagm2" in
521
+ def FeatureAltFPCmp : Extension<"altnzcv", "AlternativeNZCV",
522
+ "Enable alternative NZCV format for floating point comparisons (FEAT_FlagM2)",
523
+ [FeatureFlagM], "FEAT_FLAGM2", "+flagm,+altnzcv", 30>;
523
524
524
- def FeatureFRInt3264 : SubtargetFeature<"fptoint", "HasFRInt3264", "true",
525
+ let MArchName = "frintts" in
526
+ def FeatureFRInt3264 : Extension<"fptoint", "FRInt3264",
525
527
"Enable FRInt[32|64][Z|X] instructions that round a floating-point number to "
526
- "an integer (in FP format) forcing it to fit into a 32- or 64-bit int (FEAT_FRINTTS)" >;
528
+ "an integer (in FP format) forcing it to fit into a 32- or 64-bit int (FEAT_FRINTTS)",
529
+ [], "FEAT_FRINTTS", "+fptoint", 250>;
527
530
528
531
def FeatureSpecRestrict : SubtargetFeature<"specrestrict", "HasSpecRestrict",
529
532
"true", "Enable architectural speculation restriction (FEAT_CSV2_2)">;
@@ -536,14 +539,18 @@ def FeatureSSBS : Extension<"ssbs", "SSBS",
536
539
"Enable Speculative Store Bypass Safe bit (FEAT_SSBS, FEAT_SSBS2)", [],
537
540
"FEAT_SSBS", "", 490>;
538
541
542
+ let ArchExtKindSpelling = "AEK_SSBS2", Implies = [FeatureSSBS] in
543
+ def : FMVOnlyExtension<"FEAT_SSBS2", "ssbs2", "+ssbs", 500>;
544
+
539
545
def FeaturePredRes : Extension<"predres", "PredRes",
540
546
"Enable v8.5a execution and data prediction invalidation instructions (FEAT_SPECRES)", [],
541
547
"FEAT_PREDRES", "+predres", 480>;
542
548
543
- def FeatureCacheDeepPersist : SubtargetFeature<"ccdp", "CCDP", "true",
544
- "Enable v8.5 Cache Clean to Point of Deep Persistence (FEAT_DPB2)" >;
549
+ let MArchName = "dpb2" in
550
+ def FeatureCacheDeepPersist : Extension<"ccdp", "CCDP",
551
+ "Enable v8.5 Cache Clean to Point of Deep Persistence (FEAT_DPB2)", [FeatureCCPP],
552
+ "FEAT_DPB2", "+ccpp,+ccdp", 200>;
545
553
546
- let ArchExtKindSpelling = "AEK_NONE" in
547
554
def FeatureBranchTargetId : Extension<"bti", "BTI",
548
555
"Enable Branch Target Identification (FEAT_BTI)", [],
549
556
"FEAT_BTI", "+bti", 510>;
0 commit comments