Skip to content

Commit 481167b

Browse files
committed
Simplify code
1 parent 0e3d95f commit 481167b

File tree

1 file changed

+30
-15
lines changed

1 file changed

+30
-15
lines changed

model/riscv_insts_zcmt.sail

+30-15
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ union FJT_Result = {
1616
}
1717

1818
function fetch_jump_table(table_address : bits(xlen)) -> FJT_Result = {
19-
/* Fetching jump table address needs execute permission */
19+
/* Executable permission required to fetch jump table address */
2020
match ext_data_get_addr_from_bits(table_address, Execute(), xlen_bytes) {
2121
Ext_DataAddr_Error(e) => { ext_handle_data_check_error(e); FJT_Failure() },
2222
Ext_DataAddr_OK(vaddr) => {
@@ -36,41 +36,56 @@ function fetch_jump_table(table_address : bits(xlen)) -> FJT_Result = {
3636

3737
union clause ast = CM_JALT : (bits(8))
3838

39-
mapping clause encdec_compressed = CM_JALT(index) if extensionEnabled(Ext_Zcmt) & 32 <= unsigned(index)
40-
<-> 0b101 @ 0b000 @ index : bits(8) @ 0b10 if extensionEnabled(Ext_Zcmt) & 32 <= unsigned(index)
39+
mapping clause encdec_compressed = CM_JALT(index)
40+
<-> 0b101 @ 0b000 @ index : bits(8) @ 0b10
41+
when extensionEnabled(Ext_Zcmt) & 32 <= unsigned(index)
4142

4243
function clause execute (CM_JALT(index)) = {
43-
let base : bits(xlen) = jvt[base] @ 0b000000;
44+
let base : bits(xlen) = jvt[base] @ 0b000000;
4445
let index : bits(xlen) = zero_extend(index);
4546
if jvt[mode] == 0b000000 then {
4647
let table_address = base + index << log2_xlen_bytes;
4748
match fetch_jump_table(table_address) {
4849
FJT_Failure(_) => { RETIRE_FAIL },
49-
FJT_Success(target_address) => { X(1) = get_next_pc(); set_next_pc(target_address & ~(zero_extend(0x1))); RETIRE_SUCCESS }
50+
FJT_Success(target_address) => {
51+
X(ra) = get_next_pc();
52+
set_next_pc(target_address & ~(zero_extend(0x1)));
53+
RETIRE_SUCCESS
54+
}
5055
};
51-
} else { handle_illegal(); RETIRE_FAIL };
56+
} else {
57+
handle_illegal();
58+
RETIRE_FAIL
59+
};
5260
}
5361

54-
mapping clause assembly = CM_JALT(index) if (xlen == 32 | xlen == 64) <->
55-
"cm.jalt" ^ spc() ^ hex_bits_8(index) if (xlen == 32 | xlen == 64)
62+
mapping clause assembly = CM_JALT(index)
63+
<-> "cm.jalt" ^ spc() ^ hex_bits_8(index)
5664

5765
/* ****************************************************************** */
5866
union clause ast = CM_JT : (bits(8))
5967

60-
mapping clause encdec_compressed = CM_JT(index) if extensionEnabled(Ext_Zcmt) & unsigned(index) < 32
61-
<-> 0b101 @ 0b000 @ index : bits(8) @ 0b10 if extensionEnabled(Ext_Zcmt) & unsigned(index) < 32
68+
mapping clause encdec_compressed = CM_JT(index)
69+
<-> 0b101 @ 0b000 @ index : bits(8) @ 0b10
70+
when extensionEnabled(Ext_Zcmt) & unsigned(index) < 32
6271

6372
function clause execute (CM_JT(index)) = {
64-
let base : bits(xlen) = jvt[base] @ 0b000000;
73+
let base : bits(xlen) = jvt[base] @ 0b000000;
6574
let index : bits(xlen) = zero_extend(index);
6675
if jvt[mode] == 0b000000 then {
6776
let table_address = base + index << log2_xlen_bytes;
6877
match fetch_jump_table(table_address) {
6978
FJT_Failure(_) => { RETIRE_FAIL },
70-
FJT_Success(target_address) => { set_next_pc(target_address & ~(zero_extend(0x1))); RETIRE_SUCCESS }
79+
FJT_Success(target_address) => {
80+
set_next_pc(target_address & ~(zero_extend(0x1)));
81+
RETIRE_SUCCESS
82+
}
83+
};
84+
} else {
85+
handle_illegal();
86+
RETIRE_FAIL
7187
};
72-
} else { handle_illegal(); RETIRE_FAIL };
7388
}
7489

75-
mapping clause assembly = CM_JT(index) if (xlen == 32 | xlen == 64) <->
76-
"cm.jt" ^ spc() ^ hex_bits_8(index) if (xlen == 32 | xlen == 64)
90+
mapping clause assembly = CM_JT(index)
91+
<-> "cm.jt" ^ spc() ^ hex_bits_8(index)

0 commit comments

Comments
 (0)