Skip to content

Commit f7d526d

Browse files
committed
Remove extra parameters in mapping
1 parent 6c087e1 commit f7d526d

File tree

1 file changed

+73
-79
lines changed

1 file changed

+73
-79
lines changed

model/riscv_insts_zcmp.sail

Lines changed: 73 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -63,87 +63,81 @@ function get_stack_adj_base(rlist : bits(4)) -> int = {
6363
}
6464
}
6565

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;
10181
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);
10289
} 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);
10698
} 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+
}
109106
}
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+
};
115111

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+
};
119115

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;
134133
};
135-
stack_adj_offset = stack_adj_offset + temp_val;
136-
stack_adj_offset = stack_adj_offset * 10;
137-
};
138134

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);
140136

141-
(rlist, spimm54, is_negative)
137+
(rlist, spimm54, is_negative)
138+
},
142139
}
143140

144-
function zcmp_assembly_mapping_backwards_matches (str) = true
145-
146-
147141
function zcmp_regmask(rlist : bits(4)) -> bits(32) = {
148142
var mask : bits(32) = zeros();
149143

@@ -224,10 +218,10 @@ function clause execute (CM_PUSH(rlist, spimm)) = {
224218
}
225219

226220
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)
228222

229223
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)
231225

232226

233227
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
240234
assert(width_bytes <= xlen_bytes);
241235

242236
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;
244238
let new_sp = addr + to_bits(xlen, stack_adj);
245239
let mask = zcmp_regmask(rlist);
246240
let bytes = if sizeof(xlen) == 32 then 4 else 8;
@@ -295,10 +289,10 @@ function clause execute (CM_POP(rlist, spimm)) = {
295289
}
296290

297291
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)
299293

300294
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)
302296

303297

304298
union clause ast = CM_POPRET : (bits(4), bits(2))
@@ -316,10 +310,10 @@ function clause execute (CM_POPRET(rlist, spimm)) = {
316310
}
317311

318312
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)
320314

321315
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)
323317

324318

325319
union clause ast = CM_POPRETZ : (bits(4), bits(2))
@@ -337,10 +331,10 @@ function clause execute (CM_POPRETZ(rlist, spimm)) = {
337331
}
338332

339333
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)
341335

342336
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)
344338

345339
// Differ from creg_name.
346340
mapping rns_name : cregidx <-> string = {

0 commit comments

Comments
 (0)