@@ -33,14 +33,17 @@ with System.Machine_Code; use System.Machine_Code;
3333
3434package 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