@@ -103,8 +103,8 @@ function rC r = {
103103}
104104
105105/* writes a register with a capability value */
106- val wC : forall 'n , 0 <= 'n < 32 . (regno ('n ), regtype ) -> unit effect {wreg , escape }
107- function wC (r , v ) = {
106+ val wC : forall 'n , 0 <= 'n < 32 . (bool , regno ('n ), regtype ) -> unit effect {wreg , escape }
107+ function wC (b , r , v ) = {
108108 match r {
109109 0 => (),
110110 1 => x1 = v ,
@@ -141,17 +141,21 @@ function wC (r, v) = {
141141 _ => internal_error (__FILE__, __LINE__, "Invalid capability register" )
142142 };
143143 if (r != 0 ) then {
144- rvfi_wX (r , v . address );
144+ if b then
145+ rvfi_wX (r , v . address );
145146 if get_config_print_reg () then
146147 print_reg ("x" ^ dec_str (r ) ^ " <- " ^ RegStr (v ));
147148 }
148149}
149150
150151function rC_bits (r : bits (5 )) -> regtype = rC (unsigned (r ))
151152
152- function wC_bits (r : bits (5 ), v : regtype ) -> unit = wC ( unsigned (r ), v )
153+ function wC_bits (r : bits (5 ), v : regtype ) -> unit = wC ( true , unsigned (r ), v )
153154
154- overload C = {rC_bits , wC_bits , rC , wC }
155+ val wC_rvfi : forall 'n , 0 <= 'n < 32 . (regno ('n ), regtype ) -> unit effect {wreg , escape }
156+ function wC_rvfi (r , v ) = wC (true , r , v )
157+
158+ overload C = {rC_bits , wC_bits , rC , wC_rvfi }
155159
156160val ext_init_regs : unit -> unit effect {wreg }
157161function ext_init_regs () = {
0 commit comments