mirror of
https://github.com/odin-lang/Odin.git
synced 2026-06-20 09:02:32 +00:00
308 lines
23 KiB
Odin
308 lines
23 KiB
Odin
package rexcode_riscv
|
|
|
|
// =============================================================================
|
|
// GENERATED FILE - DO NOT EDIT
|
|
// =============================================================================
|
|
//
|
|
// Generated by tools/gen_decode_tables.odin from ENCODING_TABLE.
|
|
// Regenerate with: cd riscv && odin run tools/gen_decode_tables.odin -file
|
|
//
|
|
|
|
Decode_Entry :: struct #packed {
|
|
mnemonic: Mnemonic,
|
|
ops: [4]Operand_Type,
|
|
enc: [4]Operand_Encoding,
|
|
bits: u32,
|
|
mask: u32,
|
|
feature: Feature,
|
|
flags: Encoding_Flags,
|
|
}
|
|
#assert(size_of(Decode_Entry) == 20)
|
|
|
|
Decode_Index :: struct #packed {
|
|
start: u16,
|
|
count: u16,
|
|
}
|
|
#assert(size_of(Decode_Index) == 4)
|
|
|
|
@(rodata)
|
|
DECODE_ENTRIES := [194]Decode_Entry{
|
|
{.LB, {.GPR, .MEM, .NONE, .NONE}, {.RD, .OFFSET_BASE_I, .NONE, .NONE}, 0x00000003, 0x0000707F, .I, {}},
|
|
{.LH, {.GPR, .MEM, .NONE, .NONE}, {.RD, .OFFSET_BASE_I, .NONE, .NONE}, 0x00001003, 0x0000707F, .I, {}},
|
|
{.LW, {.GPR, .MEM, .NONE, .NONE}, {.RD, .OFFSET_BASE_I, .NONE, .NONE}, 0x00002003, 0x0000707F, .I, {}},
|
|
{.LBU, {.GPR, .MEM, .NONE, .NONE}, {.RD, .OFFSET_BASE_I, .NONE, .NONE}, 0x00004003, 0x0000707F, .I, {}},
|
|
{.LHU, {.GPR, .MEM, .NONE, .NONE}, {.RD, .OFFSET_BASE_I, .NONE, .NONE}, 0x00005003, 0x0000707F, .I, {}},
|
|
{.LWU, {.GPR, .MEM, .NONE, .NONE}, {.RD, .OFFSET_BASE_I, .NONE, .NONE}, 0x00006003, 0x0000707F, .I, {rv64_only=true}},
|
|
{.LD, {.GPR, .MEM, .NONE, .NONE}, {.RD, .OFFSET_BASE_I, .NONE, .NONE}, 0x00003003, 0x0000707F, .I, {rv64_only=true}},
|
|
{.FLW, {.FPR, .MEM, .NONE, .NONE}, {.RD, .OFFSET_BASE_I, .NONE, .NONE}, 0x00002007, 0x0000707F, .F, {}},
|
|
{.FLD, {.FPR, .MEM, .NONE, .NONE}, {.RD, .OFFSET_BASE_I, .NONE, .NONE}, 0x00003007, 0x0000707F, .D, {}},
|
|
{.FENCE_I, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x0000100F, 0xFFFFFFFF, .ZIFENCEI, {}},
|
|
{.FENCE, {.FENCE_FLAGS, .FENCE_FLAGS, .NONE, .NONE}, {.FENCE_PRED, .FENCE_SUCC, .NONE, .NONE}, 0x0000000F, 0x0000707F, .I, {}},
|
|
{.SLLI, {.GPR, .GPR, .IMM6, .NONE}, {.RD, .RS1, .SHAMT6, .NONE}, 0x00001013, 0xFC00707F, .I, {}},
|
|
{.SRLI, {.GPR, .GPR, .IMM6, .NONE}, {.RD, .RS1, .SHAMT6, .NONE}, 0x00005013, 0xFC00707F, .I, {}},
|
|
{.SRAI, {.GPR, .GPR, .IMM6, .NONE}, {.RD, .RS1, .SHAMT6, .NONE}, 0x40005013, 0xFC00707F, .I, {}},
|
|
{.ADDI, {.GPR, .GPR, .IMM12, .NONE}, {.RD, .RS1, .IMM_I, .NONE}, 0x00000013, 0x0000707F, .I, {}},
|
|
{.SLTI, {.GPR, .GPR, .IMM12, .NONE}, {.RD, .RS1, .IMM_I, .NONE}, 0x00002013, 0x0000707F, .I, {}},
|
|
{.SLTIU, {.GPR, .GPR, .IMM12, .NONE}, {.RD, .RS1, .IMM_I, .NONE}, 0x00003013, 0x0000707F, .I, {}},
|
|
{.XORI, {.GPR, .GPR, .IMM12, .NONE}, {.RD, .RS1, .IMM_I, .NONE}, 0x00004013, 0x0000707F, .I, {}},
|
|
{.ORI, {.GPR, .GPR, .IMM12, .NONE}, {.RD, .RS1, .IMM_I, .NONE}, 0x00006013, 0x0000707F, .I, {}},
|
|
{.ANDI, {.GPR, .GPR, .IMM12, .NONE}, {.RD, .RS1, .IMM_I, .NONE}, 0x00007013, 0x0000707F, .I, {}},
|
|
{.AUIPC, {.GPR, .IMM20, .NONE, .NONE}, {.RD, .IMM_U, .NONE, .NONE}, 0x00000017, 0x0000007F, .I, {}},
|
|
{.SLLIW, {.GPR, .GPR, .IMM5, .NONE}, {.RD, .RS1, .SHAMT5, .NONE}, 0x0000101B, 0xFE00707F, .I, {rv64_only=true}},
|
|
{.SRLIW, {.GPR, .GPR, .IMM5, .NONE}, {.RD, .RS1, .SHAMT5, .NONE}, 0x0000501B, 0xFE00707F, .I, {rv64_only=true}},
|
|
{.SRAIW, {.GPR, .GPR, .IMM5, .NONE}, {.RD, .RS1, .SHAMT5, .NONE}, 0x4000501B, 0xFE00707F, .I, {rv64_only=true}},
|
|
{.ADDIW, {.GPR, .GPR, .IMM12, .NONE}, {.RD, .RS1, .IMM_I, .NONE}, 0x0000001B, 0x0000707F, .I, {rv64_only=true}},
|
|
{.SB, {.GPR, .MEM, .NONE, .NONE}, {.RS2, .OFFSET_BASE_S, .NONE, .NONE}, 0x00000023, 0x0000707F, .I, {}},
|
|
{.SH, {.GPR, .MEM, .NONE, .NONE}, {.RS2, .OFFSET_BASE_S, .NONE, .NONE}, 0x00001023, 0x0000707F, .I, {}},
|
|
{.SW, {.GPR, .MEM, .NONE, .NONE}, {.RS2, .OFFSET_BASE_S, .NONE, .NONE}, 0x00002023, 0x0000707F, .I, {}},
|
|
{.SD, {.GPR, .MEM, .NONE, .NONE}, {.RS2, .OFFSET_BASE_S, .NONE, .NONE}, 0x00003023, 0x0000707F, .I, {rv64_only=true}},
|
|
{.FSW, {.FPR, .MEM, .NONE, .NONE}, {.RS2, .OFFSET_BASE_S, .NONE, .NONE}, 0x00002027, 0x0000707F, .F, {}},
|
|
{.FSD, {.FPR, .MEM, .NONE, .NONE}, {.RS2, .OFFSET_BASE_S, .NONE, .NONE}, 0x00003027, 0x0000707F, .D, {}},
|
|
{.LR_W, {.GPR, .MEM, .NONE, .NONE}, {.RD, .OFFSET_BASE_A, .NONE, .NONE}, 0x1000202F, 0xF9F0707F, .A, {}},
|
|
{.LR_D, {.GPR, .MEM, .NONE, .NONE}, {.RD, .OFFSET_BASE_A, .NONE, .NONE}, 0x1000302F, 0xF9F0707F, .A, {rv64_only=true}},
|
|
{.SC_W, {.GPR, .GPR, .MEM, .NONE}, {.RD, .RS2, .OFFSET_BASE_A, .NONE}, 0x1800202F, 0xF800707F, .A, {}},
|
|
{.AMOSWAP_W, {.GPR, .GPR, .MEM, .NONE}, {.RD, .RS2, .OFFSET_BASE_A, .NONE}, 0x0800202F, 0xF800707F, .A, {}},
|
|
{.AMOADD_W, {.GPR, .GPR, .MEM, .NONE}, {.RD, .RS2, .OFFSET_BASE_A, .NONE}, 0x0000202F, 0xF800707F, .A, {}},
|
|
{.AMOXOR_W, {.GPR, .GPR, .MEM, .NONE}, {.RD, .RS2, .OFFSET_BASE_A, .NONE}, 0x2000202F, 0xF800707F, .A, {}},
|
|
{.AMOAND_W, {.GPR, .GPR, .MEM, .NONE}, {.RD, .RS2, .OFFSET_BASE_A, .NONE}, 0x6000202F, 0xF800707F, .A, {}},
|
|
{.AMOOR_W, {.GPR, .GPR, .MEM, .NONE}, {.RD, .RS2, .OFFSET_BASE_A, .NONE}, 0x4000202F, 0xF800707F, .A, {}},
|
|
{.AMOMIN_W, {.GPR, .GPR, .MEM, .NONE}, {.RD, .RS2, .OFFSET_BASE_A, .NONE}, 0x8000202F, 0xF800707F, .A, {}},
|
|
{.AMOMAX_W, {.GPR, .GPR, .MEM, .NONE}, {.RD, .RS2, .OFFSET_BASE_A, .NONE}, 0xA000202F, 0xF800707F, .A, {}},
|
|
{.AMOMINU_W, {.GPR, .GPR, .MEM, .NONE}, {.RD, .RS2, .OFFSET_BASE_A, .NONE}, 0xC000202F, 0xF800707F, .A, {}},
|
|
{.AMOMAXU_W, {.GPR, .GPR, .MEM, .NONE}, {.RD, .RS2, .OFFSET_BASE_A, .NONE}, 0xE000202F, 0xF800707F, .A, {}},
|
|
{.SC_D, {.GPR, .GPR, .MEM, .NONE}, {.RD, .RS2, .OFFSET_BASE_A, .NONE}, 0x1800302F, 0xF800707F, .A, {rv64_only=true}},
|
|
{.AMOSWAP_D, {.GPR, .GPR, .MEM, .NONE}, {.RD, .RS2, .OFFSET_BASE_A, .NONE}, 0x0800302F, 0xF800707F, .A, {rv64_only=true}},
|
|
{.AMOADD_D, {.GPR, .GPR, .MEM, .NONE}, {.RD, .RS2, .OFFSET_BASE_A, .NONE}, 0x0000302F, 0xF800707F, .A, {rv64_only=true}},
|
|
{.AMOXOR_D, {.GPR, .GPR, .MEM, .NONE}, {.RD, .RS2, .OFFSET_BASE_A, .NONE}, 0x2000302F, 0xF800707F, .A, {rv64_only=true}},
|
|
{.AMOAND_D, {.GPR, .GPR, .MEM, .NONE}, {.RD, .RS2, .OFFSET_BASE_A, .NONE}, 0x6000302F, 0xF800707F, .A, {rv64_only=true}},
|
|
{.AMOOR_D, {.GPR, .GPR, .MEM, .NONE}, {.RD, .RS2, .OFFSET_BASE_A, .NONE}, 0x4000302F, 0xF800707F, .A, {rv64_only=true}},
|
|
{.AMOMIN_D, {.GPR, .GPR, .MEM, .NONE}, {.RD, .RS2, .OFFSET_BASE_A, .NONE}, 0x8000302F, 0xF800707F, .A, {rv64_only=true}},
|
|
{.AMOMAX_D, {.GPR, .GPR, .MEM, .NONE}, {.RD, .RS2, .OFFSET_BASE_A, .NONE}, 0xA000302F, 0xF800707F, .A, {rv64_only=true}},
|
|
{.AMOMINU_D, {.GPR, .GPR, .MEM, .NONE}, {.RD, .RS2, .OFFSET_BASE_A, .NONE}, 0xC000302F, 0xF800707F, .A, {rv64_only=true}},
|
|
{.AMOMAXU_D, {.GPR, .GPR, .MEM, .NONE}, {.RD, .RS2, .OFFSET_BASE_A, .NONE}, 0xE000302F, 0xF800707F, .A, {rv64_only=true}},
|
|
{.ADD, {.GPR, .GPR, .GPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x00000033, 0xFE00707F, .I, {}},
|
|
{.SUB, {.GPR, .GPR, .GPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x40000033, 0xFE00707F, .I, {}},
|
|
{.SLL, {.GPR, .GPR, .GPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x00001033, 0xFE00707F, .I, {}},
|
|
{.SLT, {.GPR, .GPR, .GPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x00002033, 0xFE00707F, .I, {}},
|
|
{.SLTU, {.GPR, .GPR, .GPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x00003033, 0xFE00707F, .I, {}},
|
|
{.XOR, {.GPR, .GPR, .GPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x00004033, 0xFE00707F, .I, {}},
|
|
{.SRL, {.GPR, .GPR, .GPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x00005033, 0xFE00707F, .I, {}},
|
|
{.SRA, {.GPR, .GPR, .GPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x40005033, 0xFE00707F, .I, {}},
|
|
{.OR, {.GPR, .GPR, .GPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x00006033, 0xFE00707F, .I, {}},
|
|
{.AND, {.GPR, .GPR, .GPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x00007033, 0xFE00707F, .I, {}},
|
|
{.MUL, {.GPR, .GPR, .GPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x02000033, 0xFE00707F, .M, {}},
|
|
{.MULH, {.GPR, .GPR, .GPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x02001033, 0xFE00707F, .M, {}},
|
|
{.MULHSU, {.GPR, .GPR, .GPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x02002033, 0xFE00707F, .M, {}},
|
|
{.MULHU, {.GPR, .GPR, .GPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x02003033, 0xFE00707F, .M, {}},
|
|
{.DIV, {.GPR, .GPR, .GPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x02004033, 0xFE00707F, .M, {}},
|
|
{.DIVU, {.GPR, .GPR, .GPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x02005033, 0xFE00707F, .M, {}},
|
|
{.REM, {.GPR, .GPR, .GPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x02006033, 0xFE00707F, .M, {}},
|
|
{.REMU, {.GPR, .GPR, .GPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x02007033, 0xFE00707F, .M, {}},
|
|
{.LUI, {.GPR, .IMM20, .NONE, .NONE}, {.RD, .IMM_U, .NONE, .NONE}, 0x00000037, 0x0000007F, .I, {}},
|
|
{.ADDW, {.GPR, .GPR, .GPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x0000003B, 0xFE00707F, .I, {rv64_only=true}},
|
|
{.SUBW, {.GPR, .GPR, .GPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x4000003B, 0xFE00707F, .I, {rv64_only=true}},
|
|
{.SLLW, {.GPR, .GPR, .GPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x0000103B, 0xFE00707F, .I, {rv64_only=true}},
|
|
{.SRLW, {.GPR, .GPR, .GPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x0000503B, 0xFE00707F, .I, {rv64_only=true}},
|
|
{.SRAW, {.GPR, .GPR, .GPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x4000503B, 0xFE00707F, .I, {rv64_only=true}},
|
|
{.MULW, {.GPR, .GPR, .GPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x0200003B, 0xFE00707F, .M, {rv64_only=true}},
|
|
{.DIVW, {.GPR, .GPR, .GPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x0200403B, 0xFE00707F, .M, {rv64_only=true}},
|
|
{.DIVUW, {.GPR, .GPR, .GPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x0200503B, 0xFE00707F, .M, {rv64_only=true}},
|
|
{.REMW, {.GPR, .GPR, .GPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x0200603B, 0xFE00707F, .M, {rv64_only=true}},
|
|
{.REMUW, {.GPR, .GPR, .GPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x0200703B, 0xFE00707F, .M, {rv64_only=true}},
|
|
{.FMADD_S, {.FPR, .FPR, .FPR, .FPR}, {.RD, .RS1, .RS2, .RS3}, 0x00000043, 0x0600007F, .F, {fp_round=true}},
|
|
{.FMADD_D, {.FPR, .FPR, .FPR, .FPR}, {.RD, .RS1, .RS2, .RS3}, 0x02000043, 0x0600007F, .D, {fp_round=true}},
|
|
{.FMSUB_S, {.FPR, .FPR, .FPR, .FPR}, {.RD, .RS1, .RS2, .RS3}, 0x00000047, 0x0600007F, .F, {fp_round=true}},
|
|
{.FMSUB_D, {.FPR, .FPR, .FPR, .FPR}, {.RD, .RS1, .RS2, .RS3}, 0x02000047, 0x0600007F, .D, {fp_round=true}},
|
|
{.FNMSUB_S, {.FPR, .FPR, .FPR, .FPR}, {.RD, .RS1, .RS2, .RS3}, 0x0000004B, 0x0600007F, .F, {fp_round=true}},
|
|
{.FNMSUB_D, {.FPR, .FPR, .FPR, .FPR}, {.RD, .RS1, .RS2, .RS3}, 0x0200004B, 0x0600007F, .D, {fp_round=true}},
|
|
{.FNMADD_S, {.FPR, .FPR, .FPR, .FPR}, {.RD, .RS1, .RS2, .RS3}, 0x0000004F, 0x0600007F, .F, {fp_round=true}},
|
|
{.FNMADD_D, {.FPR, .FPR, .FPR, .FPR}, {.RD, .RS1, .RS2, .RS3}, 0x0200004F, 0x0600007F, .D, {fp_round=true}},
|
|
{.FADD_S, {.FPR, .FPR, .FPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x00000053, 0xFE00007F, .F, {fp_round=true}},
|
|
{.FADD_D, {.FPR, .FPR, .FPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x02000053, 0xFE00007F, .D, {fp_round=true}},
|
|
{.FSUB_S, {.FPR, .FPR, .FPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x08000053, 0xFE00007F, .F, {fp_round=true}},
|
|
{.FSUB_D, {.FPR, .FPR, .FPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x0A000053, 0xFE00007F, .D, {fp_round=true}},
|
|
{.FMUL_S, {.FPR, .FPR, .FPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x10000053, 0xFE00007F, .F, {fp_round=true}},
|
|
{.FMUL_D, {.FPR, .FPR, .FPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x12000053, 0xFE00007F, .D, {fp_round=true}},
|
|
{.FDIV_S, {.FPR, .FPR, .FPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x18000053, 0xFE00007F, .F, {fp_round=true}},
|
|
{.FDIV_D, {.FPR, .FPR, .FPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x1A000053, 0xFE00007F, .D, {fp_round=true}},
|
|
{.FSGNJ_S, {.FPR, .FPR, .FPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x20000053, 0xFE00707F, .F, {}},
|
|
{.FSGNJN_S, {.FPR, .FPR, .FPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x20001053, 0xFE00707F, .F, {}},
|
|
{.FSGNJX_S, {.FPR, .FPR, .FPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x20002053, 0xFE00707F, .F, {}},
|
|
{.FSGNJ_D, {.FPR, .FPR, .FPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x22000053, 0xFE00707F, .D, {}},
|
|
{.FSGNJN_D, {.FPR, .FPR, .FPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x22001053, 0xFE00707F, .D, {}},
|
|
{.FSGNJX_D, {.FPR, .FPR, .FPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x22002053, 0xFE00707F, .D, {}},
|
|
{.FMIN_S, {.FPR, .FPR, .FPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x28000053, 0xFE00707F, .F, {}},
|
|
{.FMAX_S, {.FPR, .FPR, .FPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x28001053, 0xFE00707F, .F, {}},
|
|
{.FMIN_D, {.FPR, .FPR, .FPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x2A000053, 0xFE00707F, .D, {}},
|
|
{.FMAX_D, {.FPR, .FPR, .FPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0x2A001053, 0xFE00707F, .D, {}},
|
|
{.FCVT_S_D, {.FPR, .FPR, .NONE, .NONE}, {.RD, .RS1, .NONE, .NONE}, 0x40100053, 0xFFF0007F, .D, {fp_round=true}},
|
|
{.FCVT_D_S, {.FPR, .FPR, .NONE, .NONE}, {.RD, .RS1, .NONE, .NONE}, 0x42000053, 0xFFF0007F, .D, {fp_round=true}},
|
|
{.FSQRT_S, {.FPR, .FPR, .NONE, .NONE}, {.RD, .RS1, .NONE, .NONE}, 0x58000053, 0xFFF0007F, .F, {fp_round=true}},
|
|
{.FSQRT_D, {.FPR, .FPR, .NONE, .NONE}, {.RD, .RS1, .NONE, .NONE}, 0x5A000053, 0xFFF0007F, .D, {fp_round=true}},
|
|
{.FEQ_S, {.GPR, .FPR, .FPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0xA0002053, 0xFE00707F, .F, {}},
|
|
{.FLT_S, {.GPR, .FPR, .FPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0xA0001053, 0xFE00707F, .F, {}},
|
|
{.FLE_S, {.GPR, .FPR, .FPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0xA0000053, 0xFE00707F, .F, {}},
|
|
{.FEQ_D, {.GPR, .FPR, .FPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0xA2002053, 0xFE00707F, .D, {}},
|
|
{.FLT_D, {.GPR, .FPR, .FPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0xA2001053, 0xFE00707F, .D, {}},
|
|
{.FLE_D, {.GPR, .FPR, .FPR, .NONE}, {.RD, .RS1, .RS2, .NONE}, 0xA2000053, 0xFE00707F, .D, {}},
|
|
{.FCVT_W_S, {.GPR, .FPR, .NONE, .NONE}, {.RD, .RS1, .NONE, .NONE}, 0xC0000053, 0xFFF0007F, .F, {fp_round=true}},
|
|
{.FCVT_WU_S, {.GPR, .FPR, .NONE, .NONE}, {.RD, .RS1, .NONE, .NONE}, 0xC0100053, 0xFFF0007F, .F, {fp_round=true}},
|
|
{.FCVT_L_S, {.GPR, .FPR, .NONE, .NONE}, {.RD, .RS1, .NONE, .NONE}, 0xC0200053, 0xFFF0007F, .F, {rv64_only=true, fp_round=true}},
|
|
{.FCVT_LU_S, {.GPR, .FPR, .NONE, .NONE}, {.RD, .RS1, .NONE, .NONE}, 0xC0300053, 0xFFF0007F, .F, {rv64_only=true, fp_round=true}},
|
|
{.FCVT_W_D, {.GPR, .FPR, .NONE, .NONE}, {.RD, .RS1, .NONE, .NONE}, 0xC2000053, 0xFFF0007F, .D, {fp_round=true}},
|
|
{.FCVT_WU_D, {.GPR, .FPR, .NONE, .NONE}, {.RD, .RS1, .NONE, .NONE}, 0xC2100053, 0xFFF0007F, .D, {fp_round=true}},
|
|
{.FCVT_L_D, {.GPR, .FPR, .NONE, .NONE}, {.RD, .RS1, .NONE, .NONE}, 0xC2200053, 0xFFF0007F, .D, {rv64_only=true, fp_round=true}},
|
|
{.FCVT_LU_D, {.GPR, .FPR, .NONE, .NONE}, {.RD, .RS1, .NONE, .NONE}, 0xC2300053, 0xFFF0007F, .D, {rv64_only=true, fp_round=true}},
|
|
{.FCVT_S_W, {.FPR, .GPR, .NONE, .NONE}, {.RD, .RS1, .NONE, .NONE}, 0xD0000053, 0xFFF0007F, .F, {fp_round=true}},
|
|
{.FCVT_S_WU, {.FPR, .GPR, .NONE, .NONE}, {.RD, .RS1, .NONE, .NONE}, 0xD0100053, 0xFFF0007F, .F, {fp_round=true}},
|
|
{.FCVT_S_L, {.FPR, .GPR, .NONE, .NONE}, {.RD, .RS1, .NONE, .NONE}, 0xD0200053, 0xFFF0007F, .F, {rv64_only=true, fp_round=true}},
|
|
{.FCVT_S_LU, {.FPR, .GPR, .NONE, .NONE}, {.RD, .RS1, .NONE, .NONE}, 0xD0300053, 0xFFF0007F, .F, {rv64_only=true, fp_round=true}},
|
|
{.FCVT_D_W, {.FPR, .GPR, .NONE, .NONE}, {.RD, .RS1, .NONE, .NONE}, 0xD2000053, 0xFFF0007F, .D, {fp_round=true}},
|
|
{.FCVT_D_WU, {.FPR, .GPR, .NONE, .NONE}, {.RD, .RS1, .NONE, .NONE}, 0xD2100053, 0xFFF0007F, .D, {fp_round=true}},
|
|
{.FCVT_D_L, {.FPR, .GPR, .NONE, .NONE}, {.RD, .RS1, .NONE, .NONE}, 0xD2200053, 0xFFF0007F, .D, {rv64_only=true, fp_round=true}},
|
|
{.FCVT_D_LU, {.FPR, .GPR, .NONE, .NONE}, {.RD, .RS1, .NONE, .NONE}, 0xD2300053, 0xFFF0007F, .D, {rv64_only=true, fp_round=true}},
|
|
{.FMV_X_W, {.GPR, .FPR, .NONE, .NONE}, {.RD, .RS1, .NONE, .NONE}, 0xE0000053, 0xFFF0707F, .F, {}},
|
|
{.FCLASS_S, {.GPR, .FPR, .NONE, .NONE}, {.RD, .RS1, .NONE, .NONE}, 0xE0001053, 0xFFF0707F, .F, {}},
|
|
{.FCLASS_D, {.GPR, .FPR, .NONE, .NONE}, {.RD, .RS1, .NONE, .NONE}, 0xE2001053, 0xFFF0707F, .D, {}},
|
|
{.FMV_X_D, {.GPR, .FPR, .NONE, .NONE}, {.RD, .RS1, .NONE, .NONE}, 0xE2000053, 0xFFF0707F, .D, {rv64_only=true}},
|
|
{.FMV_W_X, {.FPR, .GPR, .NONE, .NONE}, {.RD, .RS1, .NONE, .NONE}, 0xF0000053, 0xFFF0707F, .F, {}},
|
|
{.FMV_D_X, {.FPR, .GPR, .NONE, .NONE}, {.RD, .RS1, .NONE, .NONE}, 0xF2000053, 0xFFF0707F, .D, {rv64_only=true}},
|
|
{.BEQ, {.GPR, .GPR, .REL13, .NONE}, {.RS1, .RS2, .IMM_B, .NONE}, 0x00000063, 0x0000707F, .I, {branch=true}},
|
|
{.BNE, {.GPR, .GPR, .REL13, .NONE}, {.RS1, .RS2, .IMM_B, .NONE}, 0x00001063, 0x0000707F, .I, {branch=true}},
|
|
{.BLT, {.GPR, .GPR, .REL13, .NONE}, {.RS1, .RS2, .IMM_B, .NONE}, 0x00004063, 0x0000707F, .I, {branch=true}},
|
|
{.BGE, {.GPR, .GPR, .REL13, .NONE}, {.RS1, .RS2, .IMM_B, .NONE}, 0x00005063, 0x0000707F, .I, {branch=true}},
|
|
{.BLTU, {.GPR, .GPR, .REL13, .NONE}, {.RS1, .RS2, .IMM_B, .NONE}, 0x00006063, 0x0000707F, .I, {branch=true}},
|
|
{.BGEU, {.GPR, .GPR, .REL13, .NONE}, {.RS1, .RS2, .IMM_B, .NONE}, 0x00007063, 0x0000707F, .I, {branch=true}},
|
|
{.JALR, {.GPR, .GPR, .IMM12, .NONE}, {.RD, .RS1, .IMM_I, .NONE}, 0x00000067, 0x0000707F, .I, {branch=true}},
|
|
{.JAL, {.GPR, .REL21, .NONE, .NONE}, {.RD, .IMM_J, .NONE, .NONE}, 0x0000006F, 0x0000007F, .I, {branch=true}},
|
|
{.ECALL, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x00000073, 0xFFFFFFFF, .I, {branch=true}},
|
|
{.EBREAK, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x00100073, 0xFFFFFFFF, .I, {branch=true}},
|
|
{.CSRRW, {.GPR, .CSR, .GPR, .NONE}, {.RD, .CSR_FIELD, .RS1, .NONE}, 0x00001073, 0x0000707F, .ZICSR, {}},
|
|
{.CSRRS, {.GPR, .CSR, .GPR, .NONE}, {.RD, .CSR_FIELD, .RS1, .NONE}, 0x00002073, 0x0000707F, .ZICSR, {}},
|
|
{.CSRRC, {.GPR, .CSR, .GPR, .NONE}, {.RD, .CSR_FIELD, .RS1, .NONE}, 0x00003073, 0x0000707F, .ZICSR, {}},
|
|
{.CSRRWI, {.GPR, .CSR, .ZIMM5, .NONE}, {.RD, .CSR_FIELD, .ZIMM_FIELD, .NONE}, 0x00005073, 0x0000707F, .ZICSR, {}},
|
|
{.CSRRSI, {.GPR, .CSR, .ZIMM5, .NONE}, {.RD, .CSR_FIELD, .ZIMM_FIELD, .NONE}, 0x00006073, 0x0000707F, .ZICSR, {}},
|
|
{.CSRRCI, {.GPR, .CSR, .ZIMM5, .NONE}, {.RD, .CSR_FIELD, .ZIMM_FIELD, .NONE}, 0x00007073, 0x0000707F, .ZICSR, {}},
|
|
{.C_ADDI4SPN, {.GPR_C, .GPR_SP, .IMM_C8U, .NONE}, {.C_RD_PRIMED, .NONE, .C_IMM_CIW, .NONE}, 0x00000000, 0x0000E003, .C, {}},
|
|
{.C_NOP, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x00000001, 0x0000FFFF, .C, {}},
|
|
{.C_ADDI, {.GPR_NONZERO, .IMM_C6S, .NONE, .NONE}, {.C_RD_RS1, .C_IMM_CI_S, .NONE, .NONE}, 0x00000001, 0x0000E003, .C, {}},
|
|
{.C_SLLI, {.GPR_NONZERO, .IMM_C6U, .NONE, .NONE}, {.C_RD_RS1, .C_IMM_CI_U, .NONE, .NONE}, 0x00000002, 0x0000E003, .C, {}},
|
|
{.C_FLD, {.FPR_C, .MEM_C_D, .NONE, .NONE}, {.C_RD_PRIMED, .C_OFFSET_BASE_D, .NONE, .NONE}, 0x00002000, 0x0000E003, .D, {}},
|
|
{.C_ADDIW, {.GPR_NONZERO, .IMM_C6S, .NONE, .NONE}, {.C_RD_RS1, .C_IMM_CI_S, .NONE, .NONE}, 0x00002001, 0x0000E003, .C, {rv64_only=true}},
|
|
{.C_JAL, {.REL12, .NONE, .NONE, .NONE}, {.C_BRANCH12, .NONE, .NONE, .NONE}, 0x00002001, 0x0000E003, .C, {rv32_only=true, branch=true}},
|
|
{.C_FLDSP, {.FPR, .MEM_C_SP_D, .NONE, .NONE}, {.C_RD_RS1, .C_SP_OFFSET_D, .NONE, .NONE}, 0x00002002, 0x0000E003, .D, {}},
|
|
{.C_LW, {.GPR_C, .MEM_C_W, .NONE, .NONE}, {.C_RD_PRIMED, .C_OFFSET_BASE_W, .NONE, .NONE}, 0x00004000, 0x0000E003, .C, {}},
|
|
{.C_LI, {.GPR_NONZERO, .IMM_C6S, .NONE, .NONE}, {.C_RD_RS1, .C_IMM_CI_S, .NONE, .NONE}, 0x00004001, 0x0000E003, .C, {}},
|
|
{.C_LWSP, {.GPR_NONZERO, .MEM_C_SP_W, .NONE, .NONE}, {.C_RD_RS1, .C_SP_OFFSET_W, .NONE, .NONE}, 0x00004002, 0x0000E003, .C, {}},
|
|
{.C_LD, {.GPR_C, .MEM_C_D, .NONE, .NONE}, {.C_RD_PRIMED, .C_OFFSET_BASE_D, .NONE, .NONE}, 0x00006000, 0x0000E003, .C, {rv64_only=true}},
|
|
{.C_ADDI16SP, {.GPR_SP, .IMM_C10S, .NONE, .NONE}, {.NONE, .C_IMM_ADDI16SP, .NONE, .NONE}, 0x00006101, 0x0000EF83, .C, {}},
|
|
{.C_LUI, {.GPR_NONZERO, .IMM_C18S, .NONE, .NONE}, {.C_RD_RS1, .C_IMM_LUI, .NONE, .NONE}, 0x00006001, 0x0000E003, .C, {}},
|
|
{.C_LDSP, {.GPR_NONZERO, .MEM_C_SP_D, .NONE, .NONE}, {.C_RD_RS1, .C_SP_OFFSET_D, .NONE, .NONE}, 0x00006002, 0x0000E003, .C, {rv64_only=true}},
|
|
{.C_SUB, {.GPR_C, .GPR_C, .NONE, .NONE}, {.C_RD_RS1_PRIMED, .C_RS2_PRIMED, .NONE, .NONE}, 0x00008C01, 0x0000FC63, .C, {}},
|
|
{.C_XOR, {.GPR_C, .GPR_C, .NONE, .NONE}, {.C_RD_RS1_PRIMED, .C_RS2_PRIMED, .NONE, .NONE}, 0x00008C21, 0x0000FC63, .C, {}},
|
|
{.C_OR, {.GPR_C, .GPR_C, .NONE, .NONE}, {.C_RD_RS1_PRIMED, .C_RS2_PRIMED, .NONE, .NONE}, 0x00008C41, 0x0000FC63, .C, {}},
|
|
{.C_AND, {.GPR_C, .GPR_C, .NONE, .NONE}, {.C_RD_RS1_PRIMED, .C_RS2_PRIMED, .NONE, .NONE}, 0x00008C61, 0x0000FC63, .C, {}},
|
|
{.C_SUBW, {.GPR_C, .GPR_C, .NONE, .NONE}, {.C_RD_RS1_PRIMED, .C_RS2_PRIMED, .NONE, .NONE}, 0x00009C01, 0x0000FC63, .C, {rv64_only=true}},
|
|
{.C_ADDW, {.GPR_C, .GPR_C, .NONE, .NONE}, {.C_RD_RS1_PRIMED, .C_RS2_PRIMED, .NONE, .NONE}, 0x00009C21, 0x0000FC63, .C, {rv64_only=true}},
|
|
{.C_SRLI, {.GPR_C, .IMM_C6U, .NONE, .NONE}, {.C_RD_RS1_PRIMED, .C_IMM_CI_U, .NONE, .NONE}, 0x00008001, 0x0000EC03, .C, {}},
|
|
{.C_SRAI, {.GPR_C, .IMM_C6U, .NONE, .NONE}, {.C_RD_RS1_PRIMED, .C_IMM_CI_U, .NONE, .NONE}, 0x00008401, 0x0000EC03, .C, {}},
|
|
{.C_ANDI, {.GPR_C, .IMM_C6S, .NONE, .NONE}, {.C_RD_RS1_PRIMED, .C_IMM_CI_S, .NONE, .NONE}, 0x00008801, 0x0000EC03, .C, {}},
|
|
{.C_EBREAK, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x00009002, 0x0000FFFF, .C, {}},
|
|
{.C_JR, {.GPR_NONZERO, .NONE, .NONE, .NONE}, {.C_RD_RS1, .NONE, .NONE, .NONE}, 0x00008002, 0x0000F07F, .C, {branch=true}},
|
|
{.C_JALR, {.GPR_NONZERO, .NONE, .NONE, .NONE}, {.C_RD_RS1, .NONE, .NONE, .NONE}, 0x00009002, 0x0000F07F, .C, {branch=true}},
|
|
{.C_MV, {.GPR_NONZERO, .GPR_NONZERO, .NONE, .NONE}, {.C_RD_RS1, .C_RS2, .NONE, .NONE}, 0x00008002, 0x0000F003, .C, {}},
|
|
{.C_ADD, {.GPR_NONZERO, .GPR_NONZERO, .NONE, .NONE}, {.C_RD_RS1, .C_RS2, .NONE, .NONE}, 0x00009002, 0x0000F003, .C, {}},
|
|
{.C_FSD, {.FPR_C, .MEM_C_D, .NONE, .NONE}, {.C_RS2_PRIMED, .C_OFFSET_BASE_D, .NONE, .NONE}, 0x0000A000, 0x0000E003, .D, {}},
|
|
{.C_J, {.REL12, .NONE, .NONE, .NONE}, {.C_BRANCH12, .NONE, .NONE, .NONE}, 0x0000A001, 0x0000E003, .C, {branch=true}},
|
|
{.C_FSDSP, {.FPR, .MEM_C_SP_D, .NONE, .NONE}, {.C_RS2, .C_IMM_CSS_D, .NONE, .NONE}, 0x0000A002, 0x0000E003, .D, {}},
|
|
{.C_SW, {.GPR_C, .MEM_C_W, .NONE, .NONE}, {.C_RS2_PRIMED, .C_OFFSET_BASE_W, .NONE, .NONE}, 0x0000C000, 0x0000E003, .C, {}},
|
|
{.C_BEQZ, {.GPR_C, .REL9, .NONE, .NONE}, {.C_RS1_PRIMED, .C_BRANCH9, .NONE, .NONE}, 0x0000C001, 0x0000E003, .C, {branch=true}},
|
|
{.C_SWSP, {.GPR, .MEM_C_SP_W, .NONE, .NONE}, {.C_RS2, .C_IMM_CSS_W, .NONE, .NONE}, 0x0000C002, 0x0000E003, .C, {}},
|
|
{.C_SD, {.GPR_C, .MEM_C_D, .NONE, .NONE}, {.C_RS2_PRIMED, .C_OFFSET_BASE_D, .NONE, .NONE}, 0x0000E000, 0x0000E003, .C, {rv64_only=true}},
|
|
{.C_BNEZ, {.GPR_C, .REL9, .NONE, .NONE}, {.C_RS1_PRIMED, .C_BRANCH9, .NONE, .NONE}, 0x0000E001, 0x0000E003, .C, {branch=true}},
|
|
{.C_SDSP, {.GPR, .MEM_C_SP_D, .NONE, .NONE}, {.C_RS2, .C_IMM_CSS_D, .NONE, .NONE}, 0x0000E002, 0x0000E003, .C, {rv64_only=true}},
|
|
}
|
|
|
|
@(rodata)
|
|
DECODE_INDEX_OPCODE := [128]Decode_Index{
|
|
0x03 = {0, 7},
|
|
0x07 = {7, 2},
|
|
0x0F = {9, 2},
|
|
0x13 = {11, 9},
|
|
0x17 = {20, 1},
|
|
0x1B = {21, 4},
|
|
0x23 = {25, 4},
|
|
0x27 = {29, 2},
|
|
0x2F = {31, 22},
|
|
0x33 = {53, 18},
|
|
0x37 = {71, 1},
|
|
0x3B = {72, 10},
|
|
0x43 = {82, 2},
|
|
0x47 = {84, 2},
|
|
0x4B = {86, 2},
|
|
0x4F = {88, 2},
|
|
0x53 = {90, 50},
|
|
0x63 = {140, 6},
|
|
0x67 = {146, 1},
|
|
0x6F = {147, 1},
|
|
0x73 = {148, 8},
|
|
}
|
|
|
|
@(rodata)
|
|
DECODE_INDEX_OP_FP := [128]Decode_Index{
|
|
0x00 = {90, 1},
|
|
0x01 = {91, 1},
|
|
0x04 = {92, 1},
|
|
0x05 = {93, 1},
|
|
0x08 = {94, 1},
|
|
0x09 = {95, 1},
|
|
0x0C = {96, 1},
|
|
0x0D = {97, 1},
|
|
0x10 = {98, 3},
|
|
0x11 = {101, 3},
|
|
0x14 = {104, 2},
|
|
0x15 = {106, 2},
|
|
0x20 = {108, 1},
|
|
0x21 = {109, 1},
|
|
0x2C = {110, 1},
|
|
0x2D = {111, 1},
|
|
0x50 = {112, 3},
|
|
0x51 = {115, 3},
|
|
0x60 = {118, 4},
|
|
0x61 = {122, 4},
|
|
0x68 = {126, 4},
|
|
0x69 = {130, 4},
|
|
0x70 = {134, 2},
|
|
0x71 = {136, 2},
|
|
0x78 = {138, 1},
|
|
0x79 = {139, 1},
|
|
}
|
|
|
|
@(rodata)
|
|
DECODE_INDEX_RVC := [32]Decode_Index{
|
|
0x00 = {156, 1},
|
|
0x01 = {157, 2},
|
|
0x02 = {159, 1},
|
|
0x04 = {160, 1},
|
|
0x05 = {161, 2},
|
|
0x06 = {163, 1},
|
|
0x08 = {164, 1},
|
|
0x09 = {165, 1},
|
|
0x0A = {166, 1},
|
|
0x0C = {167, 1},
|
|
0x0D = {168, 2},
|
|
0x0E = {170, 1},
|
|
0x11 = {171, 9},
|
|
0x12 = {180, 5},
|
|
0x14 = {185, 1},
|
|
0x15 = {186, 1},
|
|
0x16 = {187, 1},
|
|
0x18 = {188, 1},
|
|
0x19 = {189, 1},
|
|
0x1A = {190, 1},
|
|
0x1C = {191, 1},
|
|
0x1D = {192, 1},
|
|
0x1E = {193, 1},
|
|
}
|
|
|