@@ -154,7 +154,8 @@ def FeatureStdExtZihpm
154154 : RISCVExtension<2, 0, "Hardware Performance Counters",
155155 [FeatureStdExtZicsr]>;
156156
157- def FeatureStdExtZimop : RISCVExtension<1, 0, "May-Be-Operations">;
157+ def FeatureStdExtZimop : RISCVExtension<1, 0, "May-Be-Operations">,
158+ RISCVExtensionBitmask<1, 1>;
158159def HasStdExtZimop : Predicate<"Subtarget->hasStdExtZimop()">,
159160 AssemblerPredicate<(all_of FeatureStdExtZimop),
160161 "'Zimop' (May-Be-Operations)">;
@@ -262,7 +263,8 @@ def HasStdExtZalasr : Predicate<"Subtarget->hasStdExtZalasr()">,
262263def FeatureStdExtZama16b
263264 : RISCVExtension<1, 0, "Atomic 16-byte misaligned loads, stores and AMOs">;
264265
265- def FeatureStdExtZawrs : RISCVExtension<1, 0, "Wait on Reservation Set">;
266+ def FeatureStdExtZawrs : RISCVExtension<1, 0, "Wait on Reservation Set">,
267+ RISCVExtensionBitmask<1, 7>;
266268def HasStdExtZawrs : Predicate<"Subtarget->hasStdExtZawrs()">,
267269 AssemblerPredicate<(all_of FeatureStdExtZawrs),
268270 "'Zawrs' (Wait on Reservation Set)">;
@@ -368,7 +370,8 @@ def HasRVCHints : Predicate<"Subtarget->enableRVCHintInstrs()">,
368370def FeatureStdExtZca
369371 : RISCVExtension<1, 0,
370372 "part of the C extension, excluding compressed "
371- "floating point loads/stores">;
373+ "floating point loads/stores">,
374+ RISCVExtensionBitmask<1, 2>;
372375
373376def FeatureStdExtC
374377 : RISCVExtension<2, 0, "Compressed Instructions", [FeatureStdExtZca]>,
@@ -387,15 +390,17 @@ def HasStdExtCOrZca
387390
388391def FeatureStdExtZcb
389392 : RISCVExtension<1, 0, "Compressed basic bit manipulation instructions",
390- [FeatureStdExtZca]>;
393+ [FeatureStdExtZca]>,
394+ RISCVExtensionBitmask<1, 3>;
391395def HasStdExtZcb : Predicate<"Subtarget->hasStdExtZcb()">,
392396 AssemblerPredicate<(all_of FeatureStdExtZcb),
393397 "'Zcb' (Compressed basic bit manipulation instructions)">;
394398
395399def FeatureStdExtZcd
396400 : RISCVExtension<1, 0,
397401 "Compressed Double-Precision Floating-Point Instructions",
398- [FeatureStdExtD, FeatureStdExtZca]>;
402+ [FeatureStdExtD, FeatureStdExtZca]>,
403+ RISCVExtensionBitmask<1, 4>;
399404
400405def HasStdExtCOrZcd
401406 : Predicate<"Subtarget->hasStdExtCOrZcd()">,
@@ -406,7 +411,8 @@ def HasStdExtCOrZcd
406411def FeatureStdExtZcf
407412 : RISCVExtension<1, 0,
408413 "Compressed Single-Precision Floating-Point Instructions",
409- [FeatureStdExtF, FeatureStdExtZca]>;
414+ [FeatureStdExtF, FeatureStdExtZca]>,
415+ RISCVExtensionBitmask<1, 5>;
410416
411417def FeatureStdExtZclsd
412418 : RISCVExtension<1, 0,
@@ -447,7 +453,8 @@ def HasStdExtCOrZcfOrZce
447453
448454def FeatureStdExtZcmop
449455 : RISCVExtension<1, 0, "Compressed May-Be-Operations",
450- [FeatureStdExtZca]>;
456+ [FeatureStdExtZca]>,
457+ RISCVExtensionBitmask<1, 6>;
451458def HasStdExtZcmop : Predicate<"Subtarget->hasStdExtZcmop()">,
452459 AssemblerPredicate<(all_of FeatureStdExtZcmop),
453460 "'Zcmop' (Compressed May-Be-Operations)">;
@@ -628,32 +635,37 @@ def FeatureStdExtZve32x
628635 : RISCVExtension<1, 0,
629636 "Vector Extensions for Embedded Processors "
630637 "with maximal 32 EEW",
631- [FeatureStdExtZicsr, FeatureStdExtZvl32b]>;
638+ [FeatureStdExtZicsr, FeatureStdExtZvl32b]>,
639+ RISCVExtensionBitmask<0, 60>;
632640
633641
634642def FeatureStdExtZve32f
635643 : RISCVExtension<1, 0,
636644 "Vector Extensions for Embedded Processors "
637645 "with maximal 32 EEW and F extension",
638- [FeatureStdExtZve32x, FeatureStdExtF]>;
646+ [FeatureStdExtZve32x, FeatureStdExtF]>,
647+ RISCVExtensionBitmask<0, 61>;
639648
640649def FeatureStdExtZve64x
641650 : RISCVExtension<1, 0,
642651 "Vector Extensions for Embedded Processors "
643652 "with maximal 64 EEW",
644- [FeatureStdExtZve32x, FeatureStdExtZvl64b]>;
653+ [FeatureStdExtZve32x, FeatureStdExtZvl64b]>,
654+ RISCVExtensionBitmask<0, 62>;
645655
646656def FeatureStdExtZve64f
647657 : RISCVExtension<1, 0,
648658 "Vector Extensions for Embedded Processors "
649659 "with maximal 64 EEW and F extension",
650- [FeatureStdExtZve32f, FeatureStdExtZve64x]>;
660+ [FeatureStdExtZve32f, FeatureStdExtZve64x]>,
661+ RISCVExtensionBitmask<0, 63>;
651662
652663def FeatureStdExtZve64d
653664 : RISCVExtension<1, 0,
654665 "Vector Extensions for Embedded Processors "
655666 "with maximal 64 EEW, F and D extension",
656- [FeatureStdExtZve64f, FeatureStdExtD]>;
667+ [FeatureStdExtZve64f, FeatureStdExtD]>,
668+ RISCVExtensionBitmask<1, 0>;
657669
658670def FeatureStdExtV
659671 : RISCVExtension<1, 0,
0 commit comments