diff options
author | Yuyang Huang <yuyanghuang@google.com> | 2024-04-21 19:38:56 +0900 |
---|---|---|
committer | Yuyang Huang <yuyanghuang@google.com> | 2024-04-25 19:57:33 +0900 |
commit | eda4335a21ec77b7445f037b32402bf0bf2aaa99 (patch) | |
tree | d6112b39bb938a0b99c2f5bdff91b24e889283b4 | |
parent | c83ab0038343b0cfbe11ae15ddced77c73358dfc (diff) | |
download | apf-eda4335a21ec77b7445f037b32402bf0bf2aaa99.tar.gz |
Add JONEOF_EXT_OPCODE disassembly support to apf_disassembler
Test: TH
Change-Id: I4a8115551b80d35c8e43da999eeb810b5f1b4363
-rw-r--r-- | disassembler.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/disassembler.c b/disassembler.c index ac6f625..2de62e2 100644 --- a/disassembler.c +++ b/disassembler.c @@ -350,6 +350,32 @@ const char* apf_disassemble(const uint8_t* program, uint32_t program_len, uint32 } break; } + case JONEOF_EXT_OPCODE: { + const uint32_t imm_len = 1 << (len_field - 1); + uint32_t jump_offs = DECODE_IMM(imm_len); + uint8_t imm3 = DECODE_IMM(1); + bool jmp = imm3 & 1; + uint8_t len = ((imm3 >> 1) & 3) + 1; + uint8_t cnt = (imm3 >> 3) + 2; + if (jmp) { + print_opcode("jnoneof"); + } else { + print_opcode("joneof"); + } + bprintf("r%d, ", reg_num); + print_jump_target(*ptr2pc + jump_offs + cnt * len, program_len); + bprintf(", { "); + while (cnt--) { + uint32_t v = DECODE_IMM(len); + if (cnt) { + bprintf("%d, ", v); + } else { + bprintf("%d ", v); + } + } + bprintf("}"); + break; + } default: bprintf("unknown_ext %u", imm); break; |