summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuyang Huang <yuyanghuang@google.com>2024-04-21 19:38:56 +0900
committerYuyang Huang <yuyanghuang@google.com>2024-04-25 19:57:33 +0900
commiteda4335a21ec77b7445f037b32402bf0bf2aaa99 (patch)
treed6112b39bb938a0b99c2f5bdff91b24e889283b4
parentc83ab0038343b0cfbe11ae15ddced77c73358dfc (diff)
downloadapf-eda4335a21ec77b7445f037b32402bf0bf2aaa99.tar.gz
Add JONEOF_EXT_OPCODE disassembly support to apf_disassembler
Test: TH Change-Id: I4a8115551b80d35c8e43da999eeb810b5f1b4363
-rw-r--r--disassembler.c26
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;