Skip to content

Commit

Permalink
Checking illegal shift immediate instructions
Browse files Browse the repository at this point in the history
  • Loading branch information
ckirsch committed Jan 10, 2024
1 parent 9661542 commit c514b72
Showing 1 changed file with 42 additions and 1 deletion.
43 changes: 42 additions & 1 deletion tools/rotor.c
Original file line number Diff line number Diff line change
Expand Up @@ -832,6 +832,9 @@ uint64_t* decode_lui(uint64_t* sid, uint64_t* ir_nid,
uint64_t* decode_auipc(uint64_t* sid, uint64_t* ir_nid,
uint64_t* auipc_nid, char* comment,
uint64_t* other_opcode_nid);
uint64_t* decode_illegal_shift_imm(uint64_t* sid, uint64_t* ir_nid,
uint64_t* slli_nid, uint64_t* srli_nid, uint64_t* srai_nid, char* comment,
uint64_t* no_funct3_nid, uint64_t* no_funct7_nid, uint64_t* other_opcode_nid);
uint64_t* decode_imm(uint64_t* sid, uint64_t* ir_nid,
uint64_t* addi_nid, uint64_t* slti_nid, uint64_t* sltiu_nid,
uint64_t* xori_nid, uint64_t* ori_nid, uint64_t* andi_nid,
Expand Down Expand Up @@ -1045,6 +1048,9 @@ uint64_t* NID_F3_AND = (uint64_t*) 0;
uint64_t* NID_F7_SLL_SRL_ADD_SLT_XOR_OR_AND = (uint64_t*) 0;
uint64_t* NID_F7_SUB_SRA = (uint64_t*) 0;

uint64_t* NID_F7_SLL_SRL_ILLEGAL = (uint64_t*) 0;
uint64_t* NID_F7_SRA_ILLEGAL = (uint64_t*) 0;

// RV32I instruction switches

uint64_t* NID_AUIPC = (uint64_t*) 0;
Expand Down Expand Up @@ -1280,6 +1286,9 @@ void init_instruction_sorts() {
NID_F7_SLL_SRL_ADD_SLT_XOR_OR_AND = NID_F7_ADD;
NID_F7_SUB_SRA = NID_F7_SUB;

NID_F7_SLL_SRL_ILLEGAL = new_constant(OP_CONST, SID_FUNCT7, F7_ADD + 1, 7, "F7_SLL_SRL_ILLEGAL");
NID_F7_SRA_ILLEGAL = new_constant(OP_CONST, SID_FUNCT7, F7_SUB + 1, 7, "F7_SRA_ILLEGAL");

// RV32I instruction switches

NID_AUIPC = NID_TRUE;
Expand Down Expand Up @@ -3024,6 +3033,33 @@ uint64_t* decode_auipc(uint64_t* sid, uint64_t* ir_nid,
other_opcode_nid);
}

uint64_t* decode_illegal_shift_imm(uint64_t* sid, uint64_t* ir_nid,
uint64_t* slli_nid, uint64_t* srli_nid, uint64_t* srai_nid, char* comment,
uint64_t* no_funct3_nid, uint64_t* no_funct7_nid, uint64_t* other_opcode_nid) {
return decode_opcode(sid, ir_nid,
NID_OP_IMM, "IMM?",
decode_funct7(sid, ir_nid,
NID_F7_SLL_SRL_ILLEGAL, "illegal SLLI or SRLI?",
decode_funct3(sid, ir_nid,
NID_F3_SLL, "illegal SLLI?",
slli_nid, format_comment("illegal slli %s", (uint64_t) comment),
decode_funct3(sid, ir_nid,
NID_F3_SRL, "illegal SRLI?",
srli_nid, format_comment("illegal srli %s", (uint64_t) comment),
no_funct3_nid)),
format_comment("illegal SLLI or SRLI %s", (uint64_t) comment),
decode_funct7(sid, ir_nid,
NID_F7_SRA_ILLEGAL, "illegal SRAI?",
decode_funct3(sid, ir_nid,
NID_F3_SRA, "illegal SRAI?",
srai_nid, format_comment("illegal srai %s", (uint64_t) comment),
no_funct3_nid),
format_comment("illegal srai %s", (uint64_t) comment),
no_funct7_nid)),
format_comment("illegal shift imm %s", (uint64_t) comment),
other_opcode_nid);
}

uint64_t* decode_imm(uint64_t* sid, uint64_t* ir_nid,
uint64_t* addi_nid, uint64_t* slti_nid, uint64_t* sltiu_nid,
uint64_t* xori_nid, uint64_t* ori_nid, uint64_t* andi_nid,
Expand Down Expand Up @@ -4080,7 +4116,12 @@ void rotor() {
if (IS64BITTARGET == 0)
illegal_instruction_nid = state_property(
UNUSED,
NID_FALSE,
decode_illegal_shift_imm(SID_BOOLEAN, ir_nid,
NID_TRUE,
NID_TRUE,
NID_TRUE,
"there?", NID_FALSE, NID_FALSE,
NID_FALSE),
"illegal-instruction",
"illegal instruction");

Expand Down

0 comments on commit c514b72

Please sign in to comment.