@@ -63,87 +63,81 @@ function get_stack_adj_base(rlist : bits(4)) -> int = {
63
63
}
64
64
}
65
65
66
- val zcmp_assembly_mapping : (bits (4 ), bits (2 ), bool ) <-> string
67
-
68
- function zcmp_assembly_mapping_forwards (rlist , spimm , is_negative ) = {
69
- var stack_adj : int = undefined ;
70
- stack_adj = get_stack_adj_base (rlist ) + unsigned (spimm );
71
-
72
- "{" ^ zcmp_assembly_rlist (rlist ) ^ ", " ^ BitStr (to_bits (xlen , stack_adj )) ^ ", " ^ negative_sign (is_negative ) ^ "}"
73
- }
74
-
75
- function zcmp_assembly_mapping_forwards_matches (rlist , spimm54 , is_negative ) = true
76
-
77
- function zcmp_assembly_mapping_backwards (str_input ) = {
78
- var str = str_input ;
79
- var rlist : bits (4 ) = undefined ;
80
- var spimm54 : bits (2 ) = undefined ;
81
- var is_negative : bool = false ;
82
-
83
- if string_take (str , 7 ) == "cm.push" then {
84
- is_negative = true ;
85
- str = string_drop (str , 9 );
86
-
87
- } else if string_take (str , 6 ) == "cm.pop" then {
88
- is_negative = false ;
89
- str = string_drop (str , 8 );
90
- } else if string_take (str , 9 ) == "cm.popret" then {
91
- is_negative = false ;
92
- str = string_drop (str , 11 );
93
- } else {
94
- is_negative = false ;
95
- str = string_drop (str , 12 );
96
- };
97
-
98
- if string_take (str , 3 ) == "ra," then {
99
- if string_take (str , 5 ) == "ra, s0" then {
100
- rlist = zcmp_assembly_rlist (string_take (str , 5 ));
66
+ mapping zcmp_assembly_mapping : (bits (4 ), bits (2 ), bool ) <-> string = {
67
+ forwards (rlist , spimm54 , is_negative ) => {
68
+ var stack_adj : int = undefined ;
69
+ stack_adj = get_stack_adj_base (rlist ) + unsigned (spimm54 );
70
+
71
+ "{" ^ zcmp_assembly_rlist (rlist ) ^ ", " ^ BitStr (to_bits (xlen , stack_adj )) ^ ", " ^ negative_sign (is_negative ) ^ "}"
72
+ },
73
+ backwards str_input => {
74
+ var str = str_input ;
75
+ var rlist : bits (4 ) = undefined ;
76
+ var spimm54 : bits (2 ) = undefined ;
77
+ var is_negative : bool = false ;
78
+
79
+ if string_take (str , 7 ) == "cm.push" then {
80
+ is_negative = true ;
101
81
str = string_drop (str , 9 );
82
+
83
+ } else if string_take (str , 6 ) == "cm.pop" then {
84
+ is_negative = false ;
85
+ str = string_drop (str , 8 );
86
+ } else if string_take (str , 9 ) == "cm.popret" then {
87
+ is_negative = false ;
88
+ str = string_drop (str , 11 );
102
89
} else {
103
- if string_take (str , 10 ) == "ra, s0-s11" then {
104
- rlist = zcmp_assembly_rlist (string_take (str , 10 ));
105
- str = string_drop (str , 13 );
90
+ is_negative = false ;
91
+ str = string_drop (str , 12 );
92
+ };
93
+
94
+ if string_take (str , 3 ) == "ra," then {
95
+ if string_take (str , 5 ) == "ra, s0" then {
96
+ rlist = zcmp_assembly_rlist (string_take (str , 5 ));
97
+ str = string_drop (str , 9 );
106
98
} else {
107
- rlist = zcmp_assembly_rlist (string_take (str , 9 ));
108
- str = string_drop (str , 12 );
99
+ if string_take (str , 10 ) == "ra, s0-s11" then {
100
+ rlist = zcmp_assembly_rlist (string_take (str , 10 ));
101
+ str = string_drop (str , 13 );
102
+ } else {
103
+ rlist = zcmp_assembly_rlist (string_take (str , 9 ));
104
+ str = string_drop (str , 12 );
105
+ }
109
106
}
110
- }
111
- } else {
112
- rlist = zcmp_assembly_rlist (string_take (str , 2 ));
113
- str = string_drop (str , 5 );
114
- };
107
+ } else {
108
+ rlist = zcmp_assembly_rlist (string_take (str , 2 ));
109
+ str = string_drop (str , 5 );
110
+ };
115
111
116
- if string_take (str , 1 ) == "-" then {
117
- str = string_drop (str , 1 );
118
- };
112
+ if string_take (str , 1 ) == "-" then {
113
+ str = string_drop (str , 1 );
114
+ };
119
115
120
- var stack_adj_offset : int = 0 ;
121
-
122
- foreach (i from string_length (str ) downto 1 ) {
123
- let temp_val : int = match string_take (str , 1 ) {
124
- "0" => 0 ,
125
- "1" => 1 ,
126
- "2" => 2 ,
127
- "3" => 3 ,
128
- "4" => 4 ,
129
- "5" => 5 ,
130
- "6" => 6 ,
131
- "7" => 7 ,
132
- "8" => 8 ,
133
- "9" => 9
116
+ var stack_adj_offset : int = 0 ;
117
+
118
+ foreach (i from string_length (str ) downto 1 ) {
119
+ let temp_val : int = match string_take (str , 1 ) {
120
+ "0" => 0 ,
121
+ "1" => 1 ,
122
+ "2" => 2 ,
123
+ "3" => 3 ,
124
+ "4" => 4 ,
125
+ "5" => 5 ,
126
+ "6" => 6 ,
127
+ "7" => 7 ,
128
+ "8" => 8 ,
129
+ "9" => 9
130
+ };
131
+ stack_adj_offset = stack_adj_offset + temp_val ;
132
+ stack_adj_offset = stack_adj_offset * 10 ;
134
133
};
135
- stack_adj_offset = stack_adj_offset + temp_val ;
136
- stack_adj_offset = stack_adj_offset * 10 ;
137
- };
138
134
139
- spimm54 = to_bits (2 , (stack_adj_offset - get_stack_adj_base (rlist )) / 16 );
135
+ spimm54 = to_bits (2 , (stack_adj_offset - get_stack_adj_base (rlist )) / 16 );
140
136
141
- (rlist , spimm54 , is_negative )
137
+ (rlist , spimm54 , is_negative )
138
+ },
142
139
}
143
140
144
- function zcmp_assembly_mapping_backwards_matches (str ) = true
145
-
146
-
147
141
function zcmp_regmask (rlist : bits (4 )) -> bits (32 ) = {
148
142
var mask : bits (32 ) = zeros ();
149
143
@@ -224,10 +218,10 @@ function clause execute (CM_PUSH(rlist, spimm)) = {
224
218
}
225
219
226
220
mapping clause assembly = CM_PUSH (rlist , spimm ) if (sizeof (xlen ) == 32 ) <->
227
- "cm.push" ^ spc () ^ zcmp_assembly_mapping (rlist , spimm , false , 32 ) if (sizeof (xlen ) == 32 )
221
+ "cm.push" ^ spc () ^ zcmp_assembly_mapping (rlist , spimm , false ) if (sizeof (xlen ) == 32 )
228
222
229
223
mapping clause assembly = CM_PUSH (rlist , spimm ) if (sizeof (xlen ) == 64 ) <->
230
- "cm.push" ^ spc () ^ zcmp_assembly_mapping (rlist , spimm , false , 64 ) if (sizeof (xlen ) == 64 )
224
+ "cm.push" ^ spc () ^ zcmp_assembly_mapping (rlist , spimm , false ) if (sizeof (xlen ) == 64 )
231
225
232
226
233
227
union clause ast = CM_POP : (bits (4 ), bits (2 ))
@@ -240,7 +234,7 @@ function process_cmpop (rlist : bits(4), spimm : bits(2), write_pc : bool, write
240
234
assert (width_bytes <= xlen_bytes );
241
235
242
236
let addr = X (sp );
243
- let stack_adj = rlist_stack_adj_base (rlist ) + unsigned (spimm ) * 16 ;
237
+ let stack_adj = get_stack_adj_base (rlist ) + unsigned (spimm ) * 16 ;
244
238
let new_sp = addr + to_bits (xlen , stack_adj );
245
239
let mask = zcmp_regmask (rlist );
246
240
let bytes = if sizeof (xlen ) == 32 then 4 else 8 ;
@@ -295,10 +289,10 @@ function clause execute (CM_POP(rlist, spimm)) = {
295
289
}
296
290
297
291
mapping clause assembly = CM_POP (rlist , spimm ) if (sizeof (xlen ) == 32 ) <->
298
- "cm.pop" ^ spc () ^ zcmp_assembly_mapping (rlist , spimm , true , 32 ) if (sizeof (xlen ) == 32 )
292
+ "cm.pop" ^ spc () ^ zcmp_assembly_mapping (rlist , spimm , true ) if (sizeof (xlen ) == 32 )
299
293
300
294
mapping clause assembly = CM_POP (rlist , spimm ) if (sizeof (xlen ) == 64 ) <->
301
- "cm.pop" ^ spc () ^ zcmp_assembly_mapping (rlist , spimm , true , 64 ) if (sizeof (xlen ) == 64 )
295
+ "cm.pop" ^ spc () ^ zcmp_assembly_mapping (rlist , spimm , true ) if (sizeof (xlen ) == 64 )
302
296
303
297
304
298
union clause ast = CM_POPRET : (bits (4 ), bits (2 ))
@@ -316,10 +310,10 @@ function clause execute (CM_POPRET(rlist, spimm)) = {
316
310
}
317
311
318
312
mapping clause assembly = CM_POPRET (rlist , spimm ) if (sizeof (xlen ) == 32 ) <->
319
- "cm.popret" ^ spc () ^ zcmp_assembly_mapping (rlist , spimm , true , 32 ) if (sizeof (xlen ) == 32 )
313
+ "cm.popret" ^ spc () ^ zcmp_assembly_mapping (rlist , spimm , true ) if (sizeof (xlen ) == 32 )
320
314
321
315
mapping clause assembly = CM_POPRET (rlist , spimm ) if (sizeof (xlen ) == 64 ) <->
322
- "cm.popret" ^ spc () ^ zcmp_assembly_mapping (rlist , spimm , true , 64 ) if (sizeof (xlen ) == 64 )
316
+ "cm.popret" ^ spc () ^ zcmp_assembly_mapping (rlist , spimm , true ) if (sizeof (xlen ) == 64 )
323
317
324
318
325
319
union clause ast = CM_POPRETZ : (bits (4 ), bits (2 ))
@@ -337,10 +331,10 @@ function clause execute (CM_POPRETZ(rlist, spimm)) = {
337
331
}
338
332
339
333
mapping clause assembly = CM_POPRETZ (rlist , spimm ) if (sizeof (xlen ) == 32 ) <->
340
- "cm.popretz" ^ spc () ^ zcmp_assembly_mapping (rlist , spimm , true , 32 ) if (sizeof (xlen ) == 32 )
334
+ "cm.popretz" ^ spc () ^ zcmp_assembly_mapping (rlist , spimm , true ) if (sizeof (xlen ) == 32 )
341
335
342
336
mapping clause assembly = CM_POPRETZ (rlist , spimm ) if (sizeof (xlen ) == 64 ) <->
343
- "cm.popretz" ^ spc () ^ zcmp_assembly_mapping (rlist , spimm , true , 64 ) if (sizeof (xlen ) == 64 )
337
+ "cm.popretz" ^ spc () ^ zcmp_assembly_mapping (rlist , spimm , true ) if (sizeof (xlen ) == 64 )
344
338
345
339
// Differ from creg_name.
346
340
mapping rns_name : cregidx <-> string = {
0 commit comments