Skip to content

Commit 19c1da5

Browse files
committed
[CHERIoT] Create an XCheriot1 processor feature.
1 parent b6dc648 commit 19c1da5

File tree

5 files changed

+16
-9
lines changed

5 files changed

+16
-9
lines changed

clang/test/Driver/print-supported-extensions-riscv.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@
151151
// CHECK-NEXT: svpbmt 1.0 'Svpbmt' (Page-Based Memory Types)
152152
// CHECK-NEXT: svvptc 1.0 'Svvptc' (Obviating Memory-Management Instructions after Marking PTEs Valid)
153153
// CHECK-NEXT: xcheri 0.0 'XCheri' (Implements CHERI extension)
154+
// CHECK-NEXT: xcheriot1 1.0 'XCheriot1' (Implements Cheriot1 extension)
154155
// CHECK-NEXT: xcvalu 1.0 'XCValu' (CORE-V ALU Operations)
155156
// CHECK-NEXT: xcvbi 1.0 'XCVbi' (CORE-V Immediate Branching)
156157
// CHECK-NEXT: xcvbitmanip 1.0 'XCVbitmanip' (CORE-V Bit Manipulation)

llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,12 @@ void validate(const Triple &TT, const FeatureBitset &FeatureBits) {
145145
if (FeatureBits[RISCV::Feature32Bit] &&
146146
FeatureBits[RISCV::Feature64Bit])
147147
report_fatal_error("RV32 and RV64 can't be combined");
148+
if (FeatureBits[RISCV::FeatureVendorXCheriot1]) {
149+
if (!FeatureBits[RISCV::FeatureVendorXCheri])
150+
report_fatal_error("XCheriotV1 extension requires XCheri extension");
151+
if (!FeatureBits[RISCV::FeatureCapMode])
152+
report_fatal_error("XCheriotV1 extension requires CapMode");
153+
}
148154
}
149155

150156
llvm::Expected<std::unique_ptr<RISCVISAInfo>>

llvm/lib/Target/RISCV/RISCVFeatures.td

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1397,6 +1397,9 @@ def IsPureCapABI
13971397
def NotPureCapABI
13981398
: Predicate<"!RISCVABI::isCheriPureCapABI(Subtarget->getTargetABI())">;
13991399

1400+
def FeatureVendorXCheriot1
1401+
: RISCVExtension<1, 0, "Implements Cheriot1 extension">;
1402+
14001403
def FeatureRelax
14011404
: SubtargetFeature<"relax", "EnableLinkerRelax", "true",
14021405
"Enable Linker relaxation.">;

llvm/lib/Target/RISCV/RISCVProcessors.td

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -597,12 +597,8 @@ def RP2350_HAZARD3 : RISCVProcessorModel<"rp2350-hazard3",
597597
FeatureStdExtZcmp]>;
598598

599599
// NB: FeatureCheri =>'s RVC (!FeatureCheriNoRVC)
600-
def CHERIOT : RISCVProcessorModel<"cheriot",
601-
NoSchedModel,
602-
[Feature32Bit,
603-
FeatureVendorXCheri,
604-
FeatureCapMode,
605-
FeatureStdExtC,
606-
FeatureStdExtE,
607-
FeatureStdExtM,
608-
FeatureUnalignedScalarMem]>;
600+
def CHERIOT : RISCVProcessorModel<"cheriot", NoSchedModel,
601+
[Feature32Bit, FeatureVendorXCheri,
602+
FeatureVendorXCheriot1, FeatureCapMode,
603+
FeatureStdExtC, FeatureStdExtE,
604+
FeatureStdExtM, FeatureUnalignedScalarMem]>;

llvm/unittests/TargetParser/RISCVISAInfoTest.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1077,6 +1077,7 @@ R"(All available -march extensions for RISC-V
10771077
svpbmt 1.0
10781078
svvptc 1.0
10791079
xcheri 0.0
1080+
xcheriot1 1.0
10801081
xcvalu 1.0
10811082
xcvbi 1.0
10821083
xcvbitmanip 1.0

0 commit comments

Comments
 (0)