v5: add disassembler support for JEBS_OPCODE Test: TH Change-Id: I45fcf7d9efc309e43f71a9a5a2bb85bc2a1cbefe
diff --git a/disassembler.c b/disassembler.c index 228bce0..cda64f7 100644 --- a/disassembler.c +++ b/disassembler.c
@@ -170,8 +170,7 @@ case JNE_OPCODE: case JGT_OPCODE: case JLT_OPCODE: - case JSET_OPCODE: - case JNEBS_OPCODE: { + case JSET_OPCODE: { PRINT_OPCODE(); bprintf("r0, "); // Load second immediate field. @@ -184,15 +183,24 @@ DECODE_IMM(cmp_imm, 1 << (len_field - 1)); bprintf("0x%x, ", cmp_imm); } - if (opcode == JNEBS_OPCODE) { - print_jump_target(*pc + imm + cmp_imm, program_len); - bprintf(", "); - while (cmp_imm--) { - uint8_t byte = program[(*pc)++]; - bprintf("%02x", byte); - } + print_jump_target(*pc + imm, program_len); + break; + } + case JNEBS_OPCODE: { + if (reg_num == 0) { + PRINT_OPCODE(); } else { - print_jump_target(*pc + imm, program_len); + print_opcode("jebs"); + } + bprintf("r0, "); + uint32_t cmp_imm = 0; + DECODE_IMM(cmp_imm, 1 << (len_field - 1)); + bprintf("0x%x, ", cmp_imm); + print_jump_target(*pc + imm + cmp_imm, program_len); + bprintf(", "); + while (cmp_imm--) { + uint8_t byte = program[(*pc)++]; + bprintf("%02x", byte); } break; }