Skip to content

Commit

Permalink
Fixing disassembler bugs reported by Jean-Robert
Browse files Browse the repository at this point in the history
  • Loading branch information
ckirsch committed May 24, 2024
1 parent 6e0a318 commit 2c0de87
Showing 1 changed file with 14 additions and 9 deletions.
23 changes: 14 additions & 9 deletions tools/rotor.c
Original file line number Diff line number Diff line change
Expand Up @@ -11455,7 +11455,7 @@ void print_assembly(uint64_t core) {

S_imm = eval_line(get_instruction_S_immediate(ir_nid));
SB_imm = eval_line(get_instruction_SB_immediate(ir_nid));
U_imm = eval_line(get_instruction_U_immediate(ir_nid));
U_imm = sign_shrink(eval_line(get_instruction_U_immediate(ir_nid)), SINGLEWORDSIZEINBITS);
UJ_imm = eval_line(get_instruction_UJ_immediate(ir_nid));
} else {
rd = get_register_name(eval_line(get_compressed_instruction_rd(c_ir_nid)));
Expand All @@ -11468,7 +11468,7 @@ void print_assembly(uint64_t core) {
shamt = eval_line(get_compressed_instruction_shamt(c_ir_nid));

SB_imm = eval_line(get_compressed_instruction_CB_offset(c_ir_nid));
U_imm = eval_line(get_compressed_instruction_CUI_immediate(c_ir_nid));
U_imm = sign_shrink(eval_line(get_compressed_instruction_CUI_immediate(c_ir_nid)), 18);
UJ_imm = eval_line(get_compressed_instruction_CJ_offset(c_ir_nid));
if (is_CR_type(ID)) {
if (is_jump_CR_type(ID)) {
Expand Down Expand Up @@ -11567,17 +11567,19 @@ void print_assembly(uint64_t core) {
rs1 = rd;
rs2 = get_register_name(REG_ZR);

I_imm = eval_line(get_compressed_instruction_CB_offset(c_ir_nid));
if (ID == ID_C_BEQZ)
ID = ID_BEQ;
else if (ID == ID_C_BNEZ)
ID = ID_BNE;
else if (ID == ID_C_ANDI)
if (ID == ID_C_ANDI)
ID = ID_ANDI;
else if (ID == ID_C_SRLI)
ID = ID_C_SRLI;
ID = ID_SRLI;
else if (ID == ID_C_SRAI)
ID = ID_SRAI;
else {
I_imm = eval_line(get_compressed_instruction_CB_offset(c_ir_nid));
if (ID == ID_C_BEQZ)
ID = ID_BEQ;
else if (ID == ID_C_BNEZ)
ID = ID_BNE;
}
} else if (is_CJ_type(ID)) {
if (ID == ID_C_J)
rd = get_register_name(REG_ZR);
Expand All @@ -11587,6 +11589,9 @@ void print_assembly(uint64_t core) {
}
}

I_imm_32_bit = sign_extend(I_imm_32_bit, SINGLEWORDSIZEINBITS);
U_imm = right_shift(U_imm, 12);

printf("%s", get_instruction_mnemonic(ID));

if (is_R_type(ID))
Expand Down

0 comments on commit 2c0de87

Please sign in to comment.