Skip to content

Commit efbd52b

Browse files
committed
[RISCV] Add SiFive CLIC CSRs
1 parent 214f558 commit efbd52b

File tree

8 files changed

+167
-0
lines changed

8 files changed

+167
-0
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,8 @@
213213
// CHECK-NEXT: xqcisls 0.2 'Xqcisls' (Qualcomm uC Scaled Load Store Extension)
214214
// CHECK-NEXT: xrivosvisni 0.1 'XRivosVisni' (Rivos Vector Integer Small New)
215215
// CHECK-NEXT: xrivosvizip 0.1 'XRivosVizip' (Rivos Vector Register Zips)
216+
// CHECK-NEXT: xsfmclic 0.1 'XSfmclic' (SiFive CLIC Machine-mode CSRs)
217+
// CHECK-NEXT: xsfsclic 0.1 'XSfsclic' (SiFive CLIC Supervisor-mode CSRs)
216218
// CHECK-EMPTY:
217219
// CHECK-NEXT: Supported Profiles
218220
// CHECK-NEXT: rva20s64

llvm/lib/Target/RISCV/RISCVFeatures.td

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1226,6 +1226,14 @@ def HasVendorXSfcease
12261226
AssemblerPredicate<(all_of FeatureVendorXSfcease),
12271227
"'XSfcease' (SiFive sf.cease Instruction)">;
12281228

1229+
def FeatureVendorXSfmclic
1230+
: RISCVExperimentalExtension<0, 1,
1231+
"SiFive CLIC Machine-mode CSRs">;
1232+
1233+
def FeatureVendorXSfsclic
1234+
: RISCVExperimentalExtension<0, 1,
1235+
"SiFive CLIC Supervisor-mode CSRs">;
1236+
12291237
// Core-V Extensions
12301238

12311239
def FeatureVendorXCVelw

llvm/lib/Target/RISCV/RISCVSystemOperands.td

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,3 +471,26 @@ def : SysReg<"sctrstatus", 0x14f>;
471471
def : SysReg<"sctrdepth", 0x15f>;
472472
def : SysReg<"vsctrctl", 0x24e>;
473473
def : SysReg<"mctrctl", 0x34e>;
474+
475+
476+
//===-----------------------------------------------
477+
// Vendor CSRs
478+
//===-----------------------------------------------
479+
480+
// XSfmclic
481+
let FeaturesRequired = [{ {RISCV::FeatureVendorXSfmclic} }] in {
482+
def : SysReg<"mtvt", 0x307>;
483+
def : SysReg<"mnxti", 0x345>;
484+
def : SysReg<"mintstatus", 0x346>;
485+
def : SysReg<"mscratchcsw", 0x348>;
486+
def : SysReg<"mscratchcswl", 0x349>;
487+
}
488+
489+
// XSfsclic
490+
let FeaturesRequired = [{ {RISCV::FeatureVendorXSfsclic} }] in {
491+
def : SysReg<"stvt", 0x107>;
492+
def : SysReg<"snxti", 0x145>;
493+
def : SysReg<"sintstatus", 0x146>;
494+
def : SysReg<"sscratchcsw", 0x148>;
495+
def : SysReg<"sscratchcswl", 0x149>;
496+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# RUN: not llvm-mc -triple riscv32 -mattr=-experimental-xsfmclic < %s 2>&1 \
2+
# RUN: | FileCheck -check-prefixes=CHECK-FEATURE %s
3+
4+
# RUN: not llvm-mc -triple riscv64 -mattr=-experimental-xsfmclic < %s 2>&1 \
5+
# RUN: | FileCheck -check-prefixes=CHECK-FEATURE %s
6+
7+
csrrs t1, mtvt, zero
8+
// CHECK-FEATURE: :[[@LINE-1]]:11: error: system register 'mtvt' requires 'experimental-xsfmclic' to be enabled
9+
10+
csrrs t1, mnxti, zero
11+
// CHECK-FEATURE: :[[@LINE-1]]:11: error: system register 'mnxti' requires 'experimental-xsfmclic' to be enabled
12+
13+
csrrs t1, mintstatus, zero
14+
// CHECK-FEATURE: :[[@LINE-1]]:11: error: system register 'mintstatus' requires 'experimental-xsfmclic' to be enabled
15+
16+
csrrs t1, mscratchcsw, zero
17+
// CHECK-FEATURE: :[[@LINE-1]]:11: error: system register 'mscratchcsw' requires 'experimental-xsfmclic' to be enabled
18+
19+
csrrs t1, mscratchcswl, zero
20+
// CHECK-FEATURE: :[[@LINE-1]]:11: error: system register 'mscratchcswl' requires 'experimental-xsfmclic' to be enabled
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# RUN: llvm-mc %s -triple=riscv32 -mattr=+experimental-xsfmclic -riscv-no-aliases -show-encoding \
2+
# RUN: | FileCheck -check-prefixes=CHECK-INST,CHECK-ENC %s
3+
# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+experimental-xsfmclic < %s \
4+
# RUN: | llvm-objdump -d --mattr=+experimental-xsfmclic -M no-aliases - \
5+
# RUN: | FileCheck -check-prefix=CHECK-INST %s
6+
#
7+
# RUN: llvm-mc %s -triple=riscv64 -mattr=+experimental-xsfmclic -riscv-no-aliases -show-encoding \
8+
# RUN: | FileCheck -check-prefixes=CHECK-INST,CHECK-ENC %s
9+
# RUN: llvm-mc -filetype=obj -triple riscv64 -mattr=+experimental-xsfmclic < %s \
10+
# RUN: | llvm-objdump -d --mattr=+experimental-xsfmclic -M no-aliases - \
11+
# RUN: | FileCheck -check-prefix=CHECK-INST %s
12+
13+
# CHECK-INST: csrrs t1, mtvt, zero
14+
# CHECK-ENC: encoding: [0x73,0x23,0x70,0x30]
15+
csrrs t1, mtvt, zero
16+
# CHECK-INST: csrrs t2, mtvt, zero
17+
# CHECK-ENC: encoding: [0xf3,0x23,0x70,0x30]
18+
csrrs t2, 0x307, zero
19+
20+
# CHECK-INST: csrrs t1, mnxti, zero
21+
# CHECK-ENC: encoding: [0x73,0x23,0x50,0x34]
22+
csrrs t1, mnxti, zero
23+
# CHECK-INST: csrrs t2, mnxti, zero
24+
# CHECK-ENC: encoding: [0xf3,0x23,0x50,0x34]
25+
csrrs t2, 0x345, zero
26+
27+
# CHECK-INST: csrrs t1, mintstatus, zero
28+
# CHECK-ENC: encoding: [0x73,0x23,0x60,0x34]
29+
csrrs t1, mintstatus, zero
30+
# CHECK-INST: csrrs t2, mintstatus, zero
31+
# CHECK-ENC: encoding: [0xf3,0x23,0x60,0x34]
32+
csrrs t2, 0x346, zero
33+
34+
# CHECK-INST: csrrs t1, mscratchcsw, zero
35+
# CHECK-ENC: encoding: [0x73,0x23,0x80,0x34]
36+
csrrs t1, mscratchcsw, zero
37+
# CHECK-INST: csrrs t2, mscratchcsw, zero
38+
# CHECK-ENC: encoding: [0xf3,0x23,0x80,0x34]
39+
csrrs t2, 0x348, zero
40+
41+
# CHECK-INST: csrrs t1, mscratchcswl, zero
42+
# CHECK-ENC: encoding: [0x73,0x23,0x90,0x34]
43+
csrrs t1, mscratchcswl, zero
44+
# CHECK-INST: csrrs t2, mscratchcswl, zero
45+
# CHECK-ENC: encoding: [0xf3,0x23,0x90,0x34]
46+
csrrs t2, 0x349, zero
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# RUN: not llvm-mc -triple riscv32 -mattr=-experimental-xsfsclic < %s 2>&1 \
2+
# RUN: | FileCheck -check-prefixes=CHECK-FEATURE %s
3+
4+
# RUN: not llvm-mc -triple riscv64 -mattr=-experimental-xsfsclic < %s 2>&1 \
5+
# RUN: | FileCheck -check-prefixes=CHECK-FEATURE %s
6+
7+
csrrs t1, stvt, zero
8+
// CHECK-FEATURE: :[[@LINE-1]]:11: error: system register 'stvt' requires 'experimental-xsfsclic' to be enabled
9+
10+
csrrs t1, snxti, zero
11+
// CHECK-FEATURE: :[[@LINE-1]]:11: error: system register 'snxti' requires 'experimental-xsfsclic' to be enabled
12+
13+
csrrs t1, sintstatus, zero
14+
// CHECK-FEATURE: :[[@LINE-1]]:11: error: system register 'sintstatus' requires 'experimental-xsfsclic' to be enabled
15+
16+
csrrs t1, sscratchcsw, zero
17+
// CHECK-FEATURE: :[[@LINE-1]]:11: error: system register 'sscratchcsw' requires 'experimental-xsfsclic' to be enabled
18+
19+
csrrs t1, sscratchcswl, zero
20+
// CHECK-FEATURE: :[[@LINE-1]]:11: error: system register 'sscratchcswl' requires 'experimental-xsfsclic' to be enabled
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# RUN: llvm-mc %s -triple=riscv32 -mattr=+experimental-xsfsclic -riscv-no-aliases -show-encoding \
2+
# RUN: | FileCheck -check-prefixes=CHECK-INST,CHECK-ENC %s
3+
# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+experimental-xsfsclic < %s \
4+
# RUN: | llvm-objdump -d --mattr=+experimental-xsfsclic -M no-aliases - \
5+
# RUN: | FileCheck -check-prefix=CHECK-INST %s
6+
#
7+
# RUN: llvm-mc %s -triple=riscv64 -mattr=+experimental-xsfsclic -riscv-no-aliases -show-encoding \
8+
# RUN: | FileCheck -check-prefixes=CHECK-INST,CHECK-ENC %s
9+
# RUN: llvm-mc -filetype=obj -triple riscv64 -mattr=+experimental-xsfsclic < %s \
10+
# RUN: | llvm-objdump -d --mattr=+experimental-xsfsclic -M no-aliases - \
11+
# RUN: | FileCheck -check-prefix=CHECK-INST %s
12+
13+
# CHECK-INST: csrrs t1, stvt, zero
14+
# CHECK-ENC: encoding: [0x73,0x23,0x70,0x10]
15+
csrrs t1, stvt, zero
16+
# CHECK-INST: csrrs t2, stvt, zero
17+
# CHECK-ENC: encoding: [0xf3,0x23,0x70,0x10]
18+
csrrs t2, 0x107, zero
19+
20+
# CHECK-INST: csrrs t1, snxti, zero
21+
# CHECK-ENC: encoding: [0x73,0x23,0x50,0x14]
22+
csrrs t1, snxti, zero
23+
# CHECK-INST: csrrs t2, snxti, zero
24+
# CHECK-ENC: encoding: [0xf3,0x23,0x50,0x14]
25+
csrrs t2, 0x145, zero
26+
27+
# CHECK-INST: csrrs t1, sintstatus, zero
28+
# CHECK-ENC: encoding: [0x73,0x23,0x60,0x14]
29+
csrrs t1, sintstatus, zero
30+
# CHECK-INST: csrrs t2, sintstatus, zero
31+
# CHECK-ENC: encoding: [0xf3,0x23,0x60,0x14]
32+
csrrs t2, 0x146, zero
33+
34+
# CHECK-INST: csrrs t1, sscratchcsw, zero
35+
# CHECK-ENC: encoding: [0x73,0x23,0x80,0x14]
36+
csrrs t1, sscratchcsw, zero
37+
# CHECK-INST: csrrs t2, sscratchcsw, zero
38+
# CHECK-ENC: encoding: [0xf3,0x23,0x80,0x14]
39+
csrrs t2, 0x148, zero
40+
41+
# CHECK-INST: csrrs t1, sscratchcswl, zero
42+
# CHECK-ENC: encoding: [0x73,0x23,0x90,0x14]
43+
csrrs t1, sscratchcswl, zero
44+
# CHECK-INST: csrrs t2, sscratchcswl, zero
45+
# CHECK-ENC: encoding: [0xf3,0x23,0x90,0x14]
46+
csrrs t2, 0x149, zero

llvm/unittests/TargetParser/RISCVISAInfoTest.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1158,6 +1158,8 @@ Experimental extensions
11581158
xqcisls 0.2
11591159
xrivosvisni 0.1
11601160
xrivosvizip 0.1
1161+
xsfmclic 0.1
1162+
xsfsclic 0.1
11611163
11621164
Supported Profiles
11631165
rva20s64

0 commit comments

Comments
 (0)