Skip to content

Commit 20323d6

Browse files
arch/RISC-V/src/riscv-csr_generic.adb: enable zicsr extension for all inline ASM
1 parent f6a4b8a commit 20323d6

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

arch/RISC-V/src/riscv-csr_generic.adb

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,17 @@ with System.Machine_Code; use System.Machine_Code;
3333

3434
package body RISCV.CSR_Generic is
3535

36+
NL : constant String := ASCII.CR & ASCII.LF;
37+
3638
--------------
3739
-- Read_CSR --
3840
--------------
3941

4042
function Read_CSR return Reg_Type is
4143
Ret : Reg_Type;
4244
begin
43-
Asm ("csrr %0, " & Reg_Name,
45+
Asm (".option arch, +zicsr" & NL &
46+
"csrr %0, " & Reg_Name,
4447
Outputs => Reg_Type'Asm_Output ("=r", Ret),
4548
Volatile => True);
4649
return Ret;
@@ -52,7 +55,8 @@ package body RISCV.CSR_Generic is
5255

5356
procedure Write_CSR (Val : Reg_Type) is
5457
begin
55-
Asm ("csrw " & Reg_Name & ", %0",
58+
Asm (".option arch, +zicsr" & NL &
59+
"csrw " & Reg_Name & ", %0",
5660
Inputs => Reg_Type'Asm_Input ("r", Val),
5761
Volatile => True);
5862
end Write_CSR;
@@ -64,7 +68,8 @@ package body RISCV.CSR_Generic is
6468
function Swap_CSR (Val : Reg_Type) return Reg_Type is
6569
Ret : Reg_Type;
6670
begin
67-
Asm ("csrrw %1, " & Reg_Name & ", %0",
71+
Asm (".option arch, +zicsr" & NL &
72+
"csrrw %1, " & Reg_Name & ", %0",
6873
Inputs => Reg_Type'Asm_Input ("r", Val),
6974
Outputs => Reg_Type'Asm_Output ("=r", Ret),
7075
Volatile => True);
@@ -77,7 +82,8 @@ package body RISCV.CSR_Generic is
7782

7883
procedure Set_Bits_CSR (Val : Reg_Type) is
7984
begin
80-
Asm ("csrs " & Reg_Name & ", %0",
85+
Asm (".option arch, +zicsr" & NL &
86+
"csrs " & Reg_Name & ", %0",
8187
Inputs => Reg_Type'Asm_Input ("r", Val),
8288
Volatile => True);
8389
end Set_Bits_CSR;
@@ -89,7 +95,8 @@ package body RISCV.CSR_Generic is
8995
function Read_And_Set_Bits_CSR (Val : Reg_Type) return Reg_Type is
9096
Ret : Reg_Type;
9197
begin
92-
Asm ("csrrs %1, " & Reg_Name & ", %0",
98+
Asm (".option arch, +zicsr" & NL &
99+
"csrrs %1, " & Reg_Name & ", %0",
93100
Inputs => Reg_Type'Asm_Input ("r", Val),
94101
Outputs => Reg_Type'Asm_Output ("=r", Ret),
95102
Volatile => True);
@@ -102,7 +109,8 @@ package body RISCV.CSR_Generic is
102109

103110
procedure Clear_Bits_CSR (Val : Reg_Type) is
104111
begin
105-
Asm ("csrc " & Reg_Name & ", %0",
112+
Asm (".option arch, +zicsr" & NL &
113+
"csrc " & Reg_Name & ", %0",
106114
Inputs => Reg_Type'Asm_Input ("r", Val),
107115
Volatile => True);
108116
end Clear_Bits_CSR;
@@ -114,7 +122,8 @@ package body RISCV.CSR_Generic is
114122
function Read_And_Clear_Bits_CSR (Val : Reg_Type) return Reg_Type is
115123
Ret : Reg_Type;
116124
begin
117-
Asm ("csrrc %1, " & Reg_Name & ", %0",
125+
Asm (".option arch, +zicsr" & NL &
126+
"csrrc %1, " & Reg_Name & ", %0",
118127
Inputs => Reg_Type'Asm_Input ("r", Val),
119128
Outputs => Reg_Type'Asm_Output ("=r", Ret),
120129
Volatile => True);

0 commit comments

Comments
 (0)