@@ -33,14 +33,17 @@ with System.Machine_Code; use System.Machine_Code;
33
33
34
34
package body RISCV.CSR_Generic is
35
35
36
+ NL : constant String := ASCII.CR & ASCII.LF;
37
+
36
38
-- ------------
37
39
-- Read_CSR --
38
40
-- ------------
39
41
40
42
function Read_CSR return Reg_Type is
41
43
Ret : Reg_Type;
42
44
begin
43
- Asm (" csrr %0, " & Reg_Name,
45
+ Asm (" .option arch, +zicsr" & NL &
46
+ " csrr %0, " & Reg_Name,
44
47
Outputs => Reg_Type'Asm_Output (" =r" , Ret),
45
48
Volatile => True);
46
49
return Ret;
@@ -52,7 +55,8 @@ package body RISCV.CSR_Generic is
52
55
53
56
procedure Write_CSR (Val : Reg_Type) is
54
57
begin
55
- Asm (" csrw " & Reg_Name & " , %0" ,
58
+ Asm (" .option arch, +zicsr" & NL &
59
+ " csrw " & Reg_Name & " , %0" ,
56
60
Inputs => Reg_Type'Asm_Input (" r" , Val),
57
61
Volatile => True);
58
62
end Write_CSR ;
@@ -64,7 +68,8 @@ package body RISCV.CSR_Generic is
64
68
function Swap_CSR (Val : Reg_Type) return Reg_Type is
65
69
Ret : Reg_Type;
66
70
begin
67
- Asm (" csrrw %1, " & Reg_Name & " , %0" ,
71
+ Asm (" .option arch, +zicsr" & NL &
72
+ " csrrw %1, " & Reg_Name & " , %0" ,
68
73
Inputs => Reg_Type'Asm_Input (" r" , Val),
69
74
Outputs => Reg_Type'Asm_Output (" =r" , Ret),
70
75
Volatile => True);
@@ -77,7 +82,8 @@ package body RISCV.CSR_Generic is
77
82
78
83
procedure Set_Bits_CSR (Val : Reg_Type) is
79
84
begin
80
- Asm (" csrs " & Reg_Name & " , %0" ,
85
+ Asm (" .option arch, +zicsr" & NL &
86
+ " csrs " & Reg_Name & " , %0" ,
81
87
Inputs => Reg_Type'Asm_Input (" r" , Val),
82
88
Volatile => True);
83
89
end Set_Bits_CSR ;
@@ -89,7 +95,8 @@ package body RISCV.CSR_Generic is
89
95
function Read_And_Set_Bits_CSR (Val : Reg_Type) return Reg_Type is
90
96
Ret : Reg_Type;
91
97
begin
92
- Asm (" csrrs %1, " & Reg_Name & " , %0" ,
98
+ Asm (" .option arch, +zicsr" & NL &
99
+ " csrrs %1, " & Reg_Name & " , %0" ,
93
100
Inputs => Reg_Type'Asm_Input (" r" , Val),
94
101
Outputs => Reg_Type'Asm_Output (" =r" , Ret),
95
102
Volatile => True);
@@ -102,7 +109,8 @@ package body RISCV.CSR_Generic is
102
109
103
110
procedure Clear_Bits_CSR (Val : Reg_Type) is
104
111
begin
105
- Asm (" csrc " & Reg_Name & " , %0" ,
112
+ Asm (" .option arch, +zicsr" & NL &
113
+ " csrc " & Reg_Name & " , %0" ,
106
114
Inputs => Reg_Type'Asm_Input (" r" , Val),
107
115
Volatile => True);
108
116
end Clear_Bits_CSR ;
@@ -114,7 +122,8 @@ package body RISCV.CSR_Generic is
114
122
function Read_And_Clear_Bits_CSR (Val : Reg_Type) return Reg_Type is
115
123
Ret : Reg_Type;
116
124
begin
117
- Asm (" csrrc %1, " & Reg_Name & " , %0" ,
125
+ Asm (" .option arch, +zicsr" & NL &
126
+ " csrrc %1, " & Reg_Name & " , %0" ,
118
127
Inputs => Reg_Type'Asm_Input (" r" , Val),
119
128
Outputs => Reg_Type'Asm_Output (" =r" , Ret),
120
129
Volatile => True);
0 commit comments