diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2025-05-26 17:57:00 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-26 11:57:00 +0200 |
| commit | 6947a5bb949169db2a009f99610e7df42a1c201b (patch) | |
| tree | a7476a95bbe4f9b317eecf9082e20a49f46cc99e /src | |
| parent | 103875b4875fa3dd0b3001b6f9df38a4a0cb69c8 (diff) | |
| download | box64-6947a5bb949169db2a009f99610e7df42a1c201b.tar.gz box64-6947a5bb949169db2a009f99610e7df42a1c201b.zip | |
[RV64_DYNAREC] Added more opcodes to printer (#2671)
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/rv64/rv64_printer.c | 220 |
1 files changed, 220 insertions, 0 deletions
diff --git a/src/dynarec/rv64/rv64_printer.c b/src/dynarec/rv64/rv64_printer.c index 69722783..f28b8b06 100644 --- a/src/dynarec/rv64/rv64_printer.c +++ b/src/dynarec/rv64/rv64_printer.c @@ -303,6 +303,146 @@ const char* rv64_print(uint32_t opcode, uintptr_t addr) return buff; } + // rv_xtheadmemidx, TH.LRB + if ((opcode & 0xf800707f) == 0x400b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.imm2 = FX(opcode, 26, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, 0x%x(%d)", "TH.LRB", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], a.imm2, a.imm2); + return buff; + } + + // rv_xtheadmemidx, TH.LRBU + if ((opcode & 0xf800707f) == 0x8000400b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.imm2 = FX(opcode, 26, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, 0x%x(%d)", "TH.LRBU", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], a.imm2, a.imm2); + return buff; + } + + // rv_xtheadmemidx, TH.LRD + if ((opcode & 0xf800707f) == 0x6000400b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.imm2 = FX(opcode, 26, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, 0x%x(%d)", "TH.LRD", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], a.imm2, a.imm2); + return buff; + } + + // rv_xtheadmemidx, TH.LRH + if ((opcode & 0xf800707f) == 0x2000400b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.imm2 = FX(opcode, 26, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, 0x%x(%d)", "TH.LRH", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], a.imm2, a.imm2); + return buff; + } + + // rv_xtheadmemidx, TH.LRHU + if ((opcode & 0xf800707f) == 0xa000400b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.imm2 = FX(opcode, 26, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, 0x%x(%d)", "TH.LRHU", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], a.imm2, a.imm2); + return buff; + } + + // rv_xtheadmemidx, TH.LRW + if ((opcode & 0xf800707f) == 0x4000400b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.imm2 = FX(opcode, 26, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, 0x%x(%d)", "TH.LRW", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], a.imm2, a.imm2); + return buff; + } + + // rv_xtheadmemidx, TH.LRWU + if ((opcode & 0xf800707f) == 0xc000400b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.imm2 = FX(opcode, 26, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, 0x%x(%d)", "TH.LRWU", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], a.imm2, a.imm2); + return buff; + } + + // rv_xtheadmemidx, TH.LURB + if ((opcode & 0xf800707f) == 0x1000400b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.imm2 = FX(opcode, 26, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, 0x%x(%d)", "TH.LURB", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], a.imm2, a.imm2); + return buff; + } + + // rv_xtheadmemidx, TH.LURBU + if ((opcode & 0xf800707f) == 0x9000400b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.imm2 = FX(opcode, 26, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, 0x%x(%d)", "TH.LURBU", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], a.imm2, a.imm2); + return buff; + } + + // rv_xtheadmemidx, TH.LURD + if ((opcode & 0xf800707f) == 0x7000400b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.imm2 = FX(opcode, 26, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, 0x%x(%d)", "TH.LURD", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], a.imm2, a.imm2); + return buff; + } + + // rv_xtheadmemidx, TH.LURH + if ((opcode & 0xf800707f) == 0x3000400b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.imm2 = FX(opcode, 26, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, 0x%x(%d)", "TH.LURH", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], a.imm2, a.imm2); + return buff; + } + + // rv_xtheadmemidx, TH.LURHU + if ((opcode & 0xf800707f) == 0xb000400b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.imm2 = FX(opcode, 26, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, 0x%x(%d)", "TH.LURHU", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], a.imm2, a.imm2); + return buff; + } + + // rv_xtheadmemidx, TH.LURW + if ((opcode & 0xf800707f) == 0x5000400b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.imm2 = FX(opcode, 26, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, 0x%x(%d)", "TH.LURW", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], a.imm2, a.imm2); + return buff; + } + + // rv_xtheadmemidx, TH.LURWU + if ((opcode & 0xf800707f) == 0xd000400b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.imm2 = FX(opcode, 26, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, 0x%x(%d)", "TH.LURWU", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], a.imm2, a.imm2); + return buff; + } + // rv_xtheadmempair, TH.LWD if ((opcode & 0xf800707f) == 0xe000400b) { a.rd = FX(opcode, 11, 7); @@ -417,6 +557,36 @@ const char* rv64_print(uint32_t opcode, uintptr_t addr) return buff; } + // rv_xtheadmemidx, TH.SRB + if ((opcode & 0xf800707f) == 0x500b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.imm2 = FX(opcode, 26, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, 0x%x(%d)", "TH.SRB", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], a.imm2, a.imm2); + return buff; + } + + // rv_xtheadmemidx, TH.SRD + if ((opcode & 0xf800707f) == 0x6000500b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.imm2 = FX(opcode, 26, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, 0x%x(%d)", "TH.SRD", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], a.imm2, a.imm2); + return buff; + } + + // rv_xtheadmemidx, TH.SRH + if ((opcode & 0xf800707f) == 0x2000500b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.imm2 = FX(opcode, 26, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, 0x%x(%d)", "TH.SRH", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], a.imm2, a.imm2); + return buff; + } + // rv_xtheadbb, TH.SRRI if ((opcode & 0xfc00707f) == 0x1000100b) { a.rd = FX(opcode, 11, 7); @@ -435,6 +605,56 @@ const char* rv64_print(uint32_t opcode, uintptr_t addr) return buff; } + // rv_xtheadmemidx, TH.SRW + if ((opcode & 0xf800707f) == 0x4000500b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.imm2 = FX(opcode, 26, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, 0x%x(%d)", "TH.SRW", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], a.imm2, a.imm2); + return buff; + } + + // rv_xtheadmemidx, TH.SURB + if ((opcode & 0xf800707f) == 0x1000500b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.imm2 = FX(opcode, 26, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, 0x%x(%d)", "TH.SURB", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], a.imm2, a.imm2); + return buff; + } + + // rv_xtheadmemidx, TH.SURD + if ((opcode & 0xf800707f) == 0x7000500b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.imm2 = FX(opcode, 26, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, 0x%x(%d)", "TH.SURD", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], a.imm2, a.imm2); + return buff; + } + + // rv_xtheadmemidx, TH.SURH + if ((opcode & 0xf800707f) == 0x3000500b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.imm2 = FX(opcode, 26, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, 0x%x(%d)", "TH.SURH", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], a.imm2, a.imm2); + return buff; + } + + // rv_xtheadmemidx, TH.SURW + if ((opcode & 0xf800707f) == 0x5000500b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.imm2 = FX(opcode, 26, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, 0x%x(%d)", "TH.SURW", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], a.imm2, a.imm2); + return buff; + } + // rv_xtheadmempair, TH.SWD if ((opcode & 0xf800707f) == 0xe000500b) { a.rd = FX(opcode, 11, 7); |