rexcode/mips: DSP ASE extract-from-accumulator forms

New EXT_SIZE encoding (5-bit extract size at 25:21). EXTPDP (immediate
size), and the variable forms EXTPDPV / EXTRV_R.W / EXTRV_RS.W / EXTRV_S.H
(extract via a GPR-specified position). Byte-exact vs llvm-mc and decode-
clean; 281 tests green.
This commit is contained in:
Brendan Punsky
2026-06-18 03:45:23 -04:00
committed by Flāvius
parent 82f62ce9a9
commit 5b91624cd3
13 changed files with 558 additions and 501 deletions

View File

@@ -216,6 +216,8 @@ extract_operand_inline :: #force_inline proc "contextless" (
v := i32((word >> 20) & 0x3F)
if v & 0x20 != 0 { v |= ~i32(0x3F) }
return Operand{immediate = i64(v), kind = .IMMEDIATE, size = 1}
case .EXT_SIZE:
return Operand{immediate = i64((word >> 21) & 0x1F), kind = .IMMEDIATE, size = 1}
// Immediates ------------------------------------------------------------
case .IMM_16:

View File

@@ -409,6 +409,8 @@ pack_operand_inline :: #force_inline proc(
return (u32(op.immediate) & 0x3) << 11
case .SHILO_IMM:
return (u32(op.immediate) & 0x3F) << 20
case .EXT_SIZE:
return (u32(op.immediate) & 0x1F) << 21
// MSA memory operand: base GPR at 15:11, signed-10 disp at 25:16
// (caller has already scaled the displacement by element size).

View File

@@ -244,6 +244,7 @@ Operand_Encoding :: enum u8 {
RS_RT, // same GPR in both rs (25:21) and rt (20:16) (R6 BGEZC/BLTZC)
AC_NUM, // DSP accumulator number ac0..ac3 at bits 12:11 (immediate)
SHILO_IMM, // DSP SHILO signed 6-bit shift at bits 25:20
EXT_SIZE, // DSP EXTPDP extract size, 5-bit immediate at bits 25:21
// MSA memory operand: base GPR at bits 15:11 + signed 10-bit disp at 25:16,
// scaled by element size (1/2/4/8 for B/H/W/D).

View File

@@ -1082,10 +1082,20 @@ inst_extr_s_h_r_i5_i5 :: #force_inline proc "contextless" (dst: GPR, imm: i
emit_extr_s_h_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, imm2: i64) { append(instructions, inst_extr_s_h_r_i5_i5(dst, imm, imm2)) }
inst_extrv_w_r_i5_r :: #force_inline proc "contextless" (dst: GPR, imm: i64, src: GPR) -> Instruction { return Instruction{mnemonic = .EXTRV_W, operand_count = 3, length = 4, ops = {op_gpr(dst), op_imm(imm, 1), op_gpr(src), {}}} }
emit_extrv_w_r_i5_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, src: GPR) { append(instructions, inst_extrv_w_r_i5_r(dst, imm, src)) }
inst_extrv_r_w_r_i5_r :: #force_inline proc "contextless" (dst: GPR, imm: i64, src: GPR) -> Instruction { return Instruction{mnemonic = .EXTRV_R_W, operand_count = 3, length = 4, ops = {op_gpr(dst), op_imm(imm, 1), op_gpr(src), {}}} }
emit_extrv_r_w_r_i5_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, src: GPR) { append(instructions, inst_extrv_r_w_r_i5_r(dst, imm, src)) }
inst_extrv_rs_w_r_i5_r :: #force_inline proc "contextless" (dst: GPR, imm: i64, src: GPR) -> Instruction { return Instruction{mnemonic = .EXTRV_RS_W, operand_count = 3, length = 4, ops = {op_gpr(dst), op_imm(imm, 1), op_gpr(src), {}}} }
emit_extrv_rs_w_r_i5_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, src: GPR) { append(instructions, inst_extrv_rs_w_r_i5_r(dst, imm, src)) }
inst_extrv_s_h_r_i5_r :: #force_inline proc "contextless" (dst: GPR, imm: i64, src: GPR) -> Instruction { return Instruction{mnemonic = .EXTRV_S_H, operand_count = 3, length = 4, ops = {op_gpr(dst), op_imm(imm, 1), op_gpr(src), {}}} }
emit_extrv_s_h_r_i5_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, src: GPR) { append(instructions, inst_extrv_s_h_r_i5_r(dst, imm, src)) }
inst_extp_r_i5_i5 :: #force_inline proc "contextless" (dst: GPR, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .EXTP, operand_count = 3, length = 4, ops = {op_gpr(dst), op_imm(imm, 1), op_imm(imm2, 1), {}}} }
emit_extp_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, imm2: i64) { append(instructions, inst_extp_r_i5_i5(dst, imm, imm2)) }
inst_extpv_r_i5_r :: #force_inline proc "contextless" (dst: GPR, imm: i64, src: GPR) -> Instruction { return Instruction{mnemonic = .EXTPV, operand_count = 3, length = 4, ops = {op_gpr(dst), op_imm(imm, 1), op_gpr(src), {}}} }
emit_extpv_r_i5_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, src: GPR) { append(instructions, inst_extpv_r_i5_r(dst, imm, src)) }
inst_extpdp_r_i5_i5 :: #force_inline proc "contextless" (dst: GPR, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .EXTPDP, operand_count = 3, length = 4, ops = {op_gpr(dst), op_imm(imm, 1), op_imm(imm2, 1), {}}} }
emit_extpdp_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, imm2: i64) { append(instructions, inst_extpdp_r_i5_i5(dst, imm, imm2)) }
inst_extpdpv_r_i5_r :: #force_inline proc "contextless" (dst: GPR, imm: i64, src: GPR) -> Instruction { return Instruction{mnemonic = .EXTPDPV, operand_count = 3, length = 4, ops = {op_gpr(dst), op_imm(imm, 1), op_gpr(src), {}}} }
emit_extpdpv_r_i5_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, src: GPR) { append(instructions, inst_extpdpv_r_i5_r(dst, imm, src)) }
inst_shilo_i5_i5 :: #force_inline proc "contextless" (imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .SHILO, operand_count = 2, length = 4, ops = {op_imm(imm, 1), op_imm(imm2, 1), {}, {}}} }
emit_shilo_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append(instructions, inst_shilo_i5_i5(imm, imm2)) }
inst_shilov_i5_r :: #force_inline proc "contextless" (imm: i64, dst: GPR) -> Instruction { return Instruction{mnemonic = .SHILOV, operand_count = 2, length = 4, ops = {op_imm(imm, 1), op_gpr(dst), {}, {}}} }
@@ -3049,10 +3059,20 @@ inst_extr_s_h :: inst_extr_s_h_r_i5_i5
emit_extr_s_h :: emit_extr_s_h_r_i5_i5
inst_extrv_w :: inst_extrv_w_r_i5_r
emit_extrv_w :: emit_extrv_w_r_i5_r
inst_extrv_r_w :: inst_extrv_r_w_r_i5_r
emit_extrv_r_w :: emit_extrv_r_w_r_i5_r
inst_extrv_rs_w :: inst_extrv_rs_w_r_i5_r
emit_extrv_rs_w :: emit_extrv_rs_w_r_i5_r
inst_extrv_s_h :: inst_extrv_s_h_r_i5_r
emit_extrv_s_h :: emit_extrv_s_h_r_i5_r
inst_extp :: inst_extp_r_i5_i5
emit_extp :: emit_extp_r_i5_i5
inst_extpv :: inst_extpv_r_i5_r
emit_extpv :: emit_extpv_r_i5_r
inst_extpdp :: inst_extpdp_r_i5_i5
emit_extpdp :: emit_extpdp_r_i5_i5
inst_extpdpv :: inst_extpdpv_r_i5_r
emit_extpdpv :: emit_extpdpv_r_i5_r
inst_shilo :: inst_shilo_i5_i5
emit_shilo :: emit_shilo_i5_i5
inst_shilov :: inst_shilov_i5_r

View File

@@ -1640,6 +1640,11 @@ ENCODING_TABLE := #partial [Mnemonic][]Encoding{
.MTHLIP = { {.MTHLIP, {.GPR,.IMM5,.NONE,.NONE}, {.RS,.AC_NUM,.NONE,.NONE}, 0x7C0007F8, 0xFC1FE7FF, .DSP_R2, {}} },
.SHILOV = { {.SHILOV, {.IMM5,.GPR,.NONE,.NONE}, {.AC_NUM,.RS,.NONE,.NONE}, 0x7C0006F8, 0xFC1FE7FF, .DSP_R2, {}} },
.SHILO = { {.SHILO, {.IMM5,.IMM5,.NONE,.NONE}, {.AC_NUM,.SHILO_IMM,.NONE,.NONE}, 0x7C0006B8, 0xFC0FE7FF, .DSP_R2, {}} },
.EXTPDP = { {.EXTPDP, {.GPR,.IMM5,.IMM5,.NONE}, {.RT,.AC_NUM,.EXT_SIZE,.NONE}, 0x7C0002B8, 0xFC00E7FF, .DSP_R2, {}} },
.EXTPDPV = { {.EXTPDPV, {.GPR,.IMM5,.GPR,.NONE}, {.RT,.AC_NUM,.RS,.NONE}, 0x7C0002F8, 0xFC00E7FF, .DSP_R2, {}} },
.EXTRV_R_W = { {.EXTRV_R_W, {.GPR,.IMM5,.GPR,.NONE}, {.RT,.AC_NUM,.RS,.NONE}, 0x7C000178, 0xFC00E7FF, .DSP_R2, {}} },
.EXTRV_RS_W = { {.EXTRV_RS_W, {.GPR,.IMM5,.GPR,.NONE}, {.RT,.AC_NUM,.RS,.NONE}, 0x7C0001F8, 0xFC00E7FF, .DSP_R2, {}} },
.EXTRV_S_H = { {.EXTRV_S_H, {.GPR,.IMM5,.GPR,.NONE}, {.RT,.AC_NUM,.RS,.NONE}, 0x7C0003F8, 0xFC00E7FF, .DSP_R2, {}} },
.BZ_B = { {.BZ_B, {.MSA_VEC,.REL16,.NONE,.NONE}, {.WT,.BRANCH_16,.NONE,.NONE}, 0x47000000, 0xFFE00000, .MSA, {}} },
.BZ_H = { {.BZ_H, {.MSA_VEC,.REL16,.NONE,.NONE}, {.WT,.BRANCH_16,.NONE,.NONE}, 0x47200000, 0xFFE00000, .MSA, {}} },
.BZ_W = { {.BZ_W, {.MSA_VEC,.REL16,.NONE,.NONE}, {.WT,.BRANCH_16,.NONE,.NONE}, 0x47400000, 0xFFE00000, .MSA, {}} },

View File

@@ -8,7 +8,7 @@ package rexcode_mips_generated
import lib "../.."
@(rodata)
DECODE_ENTRIES := [981]lib.Decode_Entry{
DECODE_ENTRIES := [986]lib.Decode_Entry{
{ .NOP, {.NONE,.NONE,.NONE,.NONE}, {.NONE,.NONE,.NONE,.NONE}, 0x00000000, 0xFFFFFFFF, .MIPS_I, {} },
{ .SSNOP, {.NONE,.NONE,.NONE,.NONE}, {.NONE,.NONE,.NONE,.NONE}, 0x00000040, 0xFFFFFFFF, .MIPS32_R1, {} },
{ .EHB, {.NONE,.NONE,.NONE,.NONE}, {.NONE,.NONE,.NONE,.NONE}, 0x000000C0, 0xFFFFFFFF, .MIPS32_R2, {} },
@@ -837,6 +837,11 @@ DECODE_ENTRIES := [981]lib.Decode_Entry{
{ .SHILO, {.IMM5,.IMM5,.NONE,.NONE}, {.AC_NUM,.SHILO_IMM,.NONE,.NONE}, 0x7C0006B8, 0xFC0FE7FF, .DSP_R2, {} },
{ .WRDSP, {.GPR,.IMM5,.NONE,.NONE}, {.RS,.RD,.NONE,.NONE}, 0x7C0004F8, 0xFC00FFFF, .DSP_R1, {} },
{ .RDDSP, {.GPR,.IMM5,.NONE,.NONE}, {.RD,.RS,.NONE,.NONE}, 0x7C0004B8, 0xFC1F07FF, .DSP_R1, {} },
{ .EXTRV_R_W, {.GPR,.IMM5,.GPR,.NONE}, {.RT,.AC_NUM,.RS,.NONE}, 0x7C000178, 0xFC00E7FF, .DSP_R2, {} },
{ .EXTRV_RS_W, {.GPR,.IMM5,.GPR,.NONE}, {.RT,.AC_NUM,.RS,.NONE}, 0x7C0001F8, 0xFC00E7FF, .DSP_R2, {} },
{ .EXTRV_S_H, {.GPR,.IMM5,.GPR,.NONE}, {.RT,.AC_NUM,.RS,.NONE}, 0x7C0003F8, 0xFC00E7FF, .DSP_R2, {} },
{ .EXTPDP, {.GPR,.IMM5,.IMM5,.NONE}, {.RT,.AC_NUM,.EXT_SIZE,.NONE}, 0x7C0002B8, 0xFC00E7FF, .DSP_R2, {} },
{ .EXTPDPV, {.GPR,.IMM5,.GPR,.NONE}, {.RT,.AC_NUM,.RS,.NONE}, 0x7C0002F8, 0xFC00E7FF, .DSP_R2, {} },
{ .EXTRV_W, {.GPR,.IMM5,.GPR,.NONE}, {.RT,.RD,.RS,.NONE}, 0x7C000078, 0xFC0007FF, .DSP_R1, {} },
{ .EXTPV, {.GPR,.IMM5,.GPR,.NONE}, {.RT,.RD,.RS,.NONE}, 0x7C0000F8, 0xFC0007FF, .DSP_R1, {} },
{ .EXTR_W, {.GPR,.IMM5,.IMM5,.NONE}, {.RT,.RS,.RD,.NONE}, 0x7C000038, 0xFC00073F, .DSP_R1, {} },
@@ -1025,39 +1030,39 @@ DECODE_INDEX_PRIMARY := [64]lib.Decode_Index{
0x1C = { 364, 109},
0x1D = { 473, 1},
0x1E = { 474, 228},
0x1F = { 702, 134},
0x20 = { 836, 1},
0x21 = { 837, 1},
0x22 = { 838, 1},
0x23 = { 839, 1},
0x24 = { 840, 1},
0x25 = { 841, 1},
0x26 = { 842, 1},
0x27 = { 843, 1},
0x28 = { 844, 1},
0x29 = { 845, 1},
0x2A = { 846, 1},
0x2B = { 847, 1},
0x2C = { 848, 1},
0x2D = { 849, 1},
0x2E = { 850, 1},
0x2F = { 851, 1},
0x30 = { 852, 1},
0x31 = { 853, 1},
0x32 = { 854, 3},
0x33 = { 857, 1},
0x34 = { 858, 63},
0x35 = { 921, 3},
0x36 = { 924, 5},
0x37 = { 929, 6},
0x38 = { 935, 1},
0x39 = { 936, 1},
0x3A = { 937, 3},
0x3B = { 940, 2},
0x3C = { 942, 27},
0x3D = { 969, 3},
0x3E = { 972, 5},
0x3F = { 977, 4},
0x1F = { 702, 139},
0x20 = { 841, 1},
0x21 = { 842, 1},
0x22 = { 843, 1},
0x23 = { 844, 1},
0x24 = { 845, 1},
0x25 = { 846, 1},
0x26 = { 847, 1},
0x27 = { 848, 1},
0x28 = { 849, 1},
0x29 = { 850, 1},
0x2A = { 851, 1},
0x2B = { 852, 1},
0x2C = { 853, 1},
0x2D = { 854, 1},
0x2E = { 855, 1},
0x2F = { 856, 1},
0x30 = { 857, 1},
0x31 = { 858, 1},
0x32 = { 859, 3},
0x33 = { 862, 1},
0x34 = { 863, 63},
0x35 = { 926, 3},
0x36 = { 929, 5},
0x37 = { 934, 6},
0x38 = { 940, 1},
0x39 = { 941, 1},
0x3A = { 942, 3},
0x3B = { 945, 2},
0x3C = { 947, 27},
0x3D = { 974, 3},
0x3E = { 977, 5},
0x3F = { 982, 4},
}
@(rodata)
@@ -1232,7 +1237,7 @@ DECODE_INDEX_SPECIAL3 := [64]lib.Decode_Index{
0x20 = { 797, 5},
0x24 = { 802, 4},
0x30 = { 806, 17},
0x38 = { 823, 12},
0x3B = { 835, 1},
0x38 = { 823, 17},
0x3B = { 840, 1},
}

View File

@@ -8,7 +8,7 @@ package rexcode_mips_generated
import lib "../.."
@(rodata)
ENCODE_FORMS := [981]lib.Encoding{
ENCODE_FORMS := [986]lib.Encoding{
// .ADD
{ .ADD, {.GPR,.GPR,.GPR,.NONE}, {.RD,.RS,.RT,.NONE}, 0x00000020, 0xFC0007FF, .MIPS_I, {} },
// .ADDU
@@ -1063,10 +1063,20 @@ ENCODE_FORMS := [981]lib.Encoding{
{ .EXTR_S_H, {.GPR,.IMM5,.IMM5,.NONE}, {.RT,.RS,.RD,.NONE}, 0x7C0003B8, 0xFC00073F, .DSP_R1, {} },
// .EXTRV_W
{ .EXTRV_W, {.GPR,.IMM5,.GPR,.NONE}, {.RT,.RD,.RS,.NONE}, 0x7C000078, 0xFC0007FF, .DSP_R1, {} },
// .EXTRV_R_W
{ .EXTRV_R_W, {.GPR,.IMM5,.GPR,.NONE}, {.RT,.AC_NUM,.RS,.NONE}, 0x7C000178, 0xFC00E7FF, .DSP_R2, {} },
// .EXTRV_RS_W
{ .EXTRV_RS_W, {.GPR,.IMM5,.GPR,.NONE}, {.RT,.AC_NUM,.RS,.NONE}, 0x7C0001F8, 0xFC00E7FF, .DSP_R2, {} },
// .EXTRV_S_H
{ .EXTRV_S_H, {.GPR,.IMM5,.GPR,.NONE}, {.RT,.AC_NUM,.RS,.NONE}, 0x7C0003F8, 0xFC00E7FF, .DSP_R2, {} },
// .EXTP
{ .EXTP, {.GPR,.IMM5,.IMM5,.NONE}, {.RT,.RS,.RD,.NONE}, 0x7C0000B8, 0xFC00073F, .DSP_R1, {} },
// .EXTPV
{ .EXTPV, {.GPR,.IMM5,.GPR,.NONE}, {.RT,.RD,.RS,.NONE}, 0x7C0000F8, 0xFC0007FF, .DSP_R1, {} },
// .EXTPDP
{ .EXTPDP, {.GPR,.IMM5,.IMM5,.NONE}, {.RT,.AC_NUM,.EXT_SIZE,.NONE}, 0x7C0002B8, 0xFC00E7FF, .DSP_R2, {} },
// .EXTPDPV
{ .EXTPDPV, {.GPR,.IMM5,.GPR,.NONE}, {.RT,.AC_NUM,.RS,.NONE}, 0x7C0002F8, 0xFC00E7FF, .DSP_R2, {} },
// .SHILO
{ .SHILO, {.IMM5,.IMM5,.NONE,.NONE}, {.AC_NUM,.SHILO_IMM,.NONE,.NONE}, 0x7C0006B8, 0xFC0FE7FF, .DSP_R2, {} },
// .SHILOV
@@ -2539,468 +2549,468 @@ ENCODE_RUNS := [lib.Mnemonic]lib.Encode_Run{
.EXTR_RS_W = { 524, 1},
.EXTR_S_H = { 525, 1},
.EXTRV_W = { 526, 1},
.EXTRV_R_W = { 527, 0},
.EXTRV_RS_W = { 527, 0},
.EXTRV_S_H = { 527, 0},
.EXTP = { 527, 1},
.EXTPV = { 528, 1},
.EXTPDP = { 529, 0},
.EXTPDPV = { 529, 0},
.SHILO = { 529, 1},
.SHILOV = { 530, 1},
.MTHLIP = { 531, 1},
.WRDSP = { 532, 1},
.RDDSP = { 533, 1},
.PRECRQ_QB_PH = { 534, 1},
.PRECRQ_PH_W = { 535, 1},
.PRECRQU_S_QB_PH = { 536, 1},
.PRECEQ_W_PHL = { 537, 1},
.PRECEQ_W_PHR = { 538, 1},
.PRECEQU_PH_QBL = { 539, 1},
.PRECEQU_PH_QBR = { 540, 1},
.PRECEQU_PH_QBLA = { 541, 1},
.PRECEQU_PH_QBRA = { 542, 1},
.PRECEU_PH_QBL = { 543, 1},
.PRECEU_PH_QBR = { 544, 1},
.PRECEU_PH_QBLA = { 545, 1},
.PRECEU_PH_QBRA = { 546, 1},
.PRECRQ_RS_PH_W = { 547, 1},
.CMPU_EQ_QB = { 548, 1},
.CMPU_LT_QB = { 549, 1},
.CMPU_LE_QB = { 550, 1},
.CMP_EQ_PH = { 551, 1},
.CMP_LT_PH = { 552, 1},
.CMP_LE_PH = { 553, 1},
.CMPGU_EQ_QB = { 554, 1},
.CMPGU_LT_QB = { 555, 1},
.CMPGU_LE_QB = { 556, 1},
.PICK_QB = { 557, 1},
.PICK_PH = { 558, 1},
.SHLL_QB = { 559, 1},
.SHLL_PH = { 560, 1},
.SHLL_S_PH = { 561, 1},
.SHLL_S_W = { 562, 1},
.SHLLV_QB = { 563, 1},
.SHLLV_PH = { 564, 1},
.SHLLV_S_PH = { 565, 1},
.SHLLV_S_W = { 566, 1},
.SHRL_QB = { 567, 1},
.SHRL_PH = { 568, 1},
.SHRLV_QB = { 569, 1},
.SHRLV_PH = { 570, 1},
.SHRA_QB = { 571, 1},
.SHRA_R_QB = { 572, 1},
.SHRA_PH = { 573, 1},
.SHRA_R_PH = { 574, 1},
.SHRA_R_W = { 575, 1},
.SHRAV_QB = { 576, 1},
.SHRAV_R_QB = { 577, 1},
.SHRAV_PH = { 578, 1},
.SHRAV_R_PH = { 579, 1},
.SHRAV_R_W = { 580, 1},
.LBUX = { 581, 1},
.LHX = { 582, 1},
.LWX = { 583, 1},
.BPOSGE32 = { 584, 1},
.BPOSGE64 = { 585, 0},
.INSV = { 585, 1},
.BITREV = { 586, 1},
.ABSQ_S_PH = { 587, 1},
.ABSQ_S_W = { 588, 1},
.REPL_PH = { 589, 0},
.REPLV_PH = { 589, 1},
.REPL_QB = { 590, 0},
.REPLV_QB = { 590, 1},
.ADDV_B = { 591, 1},
.ADDV_H = { 592, 1},
.ADDV_W = { 593, 1},
.ADDV_D = { 594, 1},
.SUBV_B = { 595, 1},
.SUBV_H = { 596, 1},
.SUBV_W = { 597, 1},
.SUBV_D = { 598, 1},
.ADDS_S_B = { 599, 1},
.ADDS_S_H = { 600, 1},
.ADDS_S_W = { 601, 1},
.ADDS_S_D = { 602, 1},
.ADDS_U_B = { 603, 1},
.ADDS_U_H = { 604, 1},
.ADDS_U_W = { 605, 1},
.ADDS_U_D = { 606, 1},
.SUBS_S_B = { 607, 1},
.SUBS_S_H = { 608, 1},
.SUBS_S_W = { 609, 1},
.SUBS_S_D = { 610, 1},
.SUBS_U_B = { 611, 1},
.SUBS_U_H = { 612, 1},
.SUBS_U_W = { 613, 1},
.SUBS_U_D = { 614, 1},
.MULV_B = { 615, 1},
.MULV_H = { 616, 1},
.MULV_W = { 617, 1},
.MULV_D = { 618, 1},
.DIV_S_B = { 619, 1},
.DIV_S_H = { 620, 1},
.DIV_S_W = { 621, 1},
.DIV_S_D = { 622, 1},
.DIV_U_B = { 623, 1},
.DIV_U_H = { 624, 1},
.DIV_U_W = { 625, 1},
.DIV_U_D = { 626, 1},
.MOD_S_B = { 627, 1},
.MOD_S_H = { 628, 1},
.MOD_S_W = { 629, 1},
.MOD_S_D = { 630, 1},
.MOD_U_B = { 631, 1},
.MOD_U_H = { 632, 1},
.MOD_U_W = { 633, 1},
.MOD_U_D = { 634, 1},
.MADDV_B = { 635, 1},
.MADDV_H = { 636, 1},
.MADDV_W = { 637, 1},
.MADDV_D = { 638, 1},
.MSUBV_B = { 639, 1},
.MSUBV_H = { 640, 1},
.MSUBV_W = { 641, 1},
.MSUBV_D = { 642, 1},
.DOTP_S_H = { 643, 1},
.DOTP_S_W = { 644, 1},
.DOTP_S_D = { 645, 1},
.DOTP_U_H = { 646, 1},
.DOTP_U_W = { 647, 1},
.DOTP_U_D = { 648, 1},
.AND_V = { 649, 1},
.OR_V = { 650, 1},
.NOR_V = { 651, 1},
.XOR_V = { 652, 1},
.ANDI_B = { 653, 1},
.ORI_B = { 654, 1},
.NORI_B = { 655, 1},
.XORI_B = { 656, 1},
.BSEL_V = { 657, 1},
.BSELI_B = { 658, 1},
.BMNZ_V = { 659, 1},
.BMNZI_B = { 660, 1},
.BMZ_V = { 661, 1},
.BMZI_B = { 662, 1},
.CEQ_B = { 663, 1},
.CEQ_H = { 664, 1},
.CEQ_W = { 665, 1},
.CEQ_D = { 666, 1},
.CLT_S_B = { 667, 1},
.CLT_S_H = { 668, 1},
.CLT_S_W = { 669, 1},
.CLT_S_D = { 670, 1},
.CLT_U_B = { 671, 1},
.CLT_U_H = { 672, 1},
.CLT_U_W = { 673, 1},
.CLT_U_D = { 674, 1},
.CLE_S_B = { 675, 1},
.CLE_S_H = { 676, 1},
.CLE_S_W = { 677, 1},
.CLE_S_D = { 678, 1},
.CLE_U_B = { 679, 1},
.CLE_U_H = { 680, 1},
.CLE_U_W = { 681, 1},
.CLE_U_D = { 682, 1},
.MIN_S_B = { 683, 1},
.MIN_S_H = { 684, 1},
.MIN_S_W = { 685, 1},
.MIN_S_D = { 686, 1},
.MIN_U_B = { 687, 1},
.MIN_U_H = { 688, 1},
.MIN_U_W = { 689, 1},
.MIN_U_D = { 690, 1},
.MAX_S_B = { 691, 1},
.MAX_S_H = { 692, 1},
.MAX_S_W = { 693, 1},
.MAX_S_D = { 694, 1},
.MAX_U_B = { 695, 1},
.MAX_U_H = { 696, 1},
.MAX_U_W = { 697, 1},
.MAX_U_D = { 698, 1},
.SLL_B = { 699, 1},
.SLL_H = { 700, 1},
.SLL_W = { 701, 1},
.SLL_D = { 702, 1},
.SRL_B = { 703, 1},
.SRL_H = { 704, 1},
.SRL_W = { 705, 1},
.SRL_D = { 706, 1},
.SRA_B = { 707, 1},
.SRA_H = { 708, 1},
.SRA_W = { 709, 1},
.SRA_D = { 710, 1},
.SLLI_B = { 711, 1},
.SLLI_H = { 712, 1},
.SLLI_W = { 713, 1},
.SLLI_D = { 714, 1},
.SRLI_B = { 715, 1},
.SRLI_H = { 716, 1},
.SRLI_W = { 717, 1},
.SRLI_D = { 718, 1},
.SRAI_B = { 719, 1},
.SRAI_H = { 720, 1},
.SRAI_W = { 721, 1},
.SRAI_D = { 722, 1},
.FADD_W = { 723, 1},
.FADD_D = { 724, 1},
.FSUB_W = { 725, 1},
.FSUB_D = { 726, 1},
.FMUL_W = { 727, 1},
.FMUL_D = { 728, 1},
.FDIV_W = { 729, 1},
.FDIV_D = { 730, 1},
.FSQRT_W = { 731, 1},
.FSQRT_D = { 732, 1},
.FRSQRT_W = { 733, 1},
.FRSQRT_D = { 734, 1},
.FRCP_W = { 735, 1},
.FRCP_D = { 736, 1},
.FRINT_W = { 737, 1},
.FRINT_D = { 738, 1},
.FMAX_W = { 739, 1},
.FMAX_D = { 740, 1},
.FMIN_W = { 741, 1},
.FMIN_D = { 742, 1},
.FCEQ_W = { 743, 1},
.FCEQ_D = { 744, 1},
.FCNE_W = { 745, 1},
.FCNE_D = { 746, 1},
.FCLT_W = { 747, 1},
.FCLT_D = { 748, 1},
.FCLE_W = { 749, 1},
.FCLE_D = { 750, 1},
.FFINT_S_W = { 751, 1},
.FFINT_S_D = { 752, 1},
.FFINT_U_W = { 753, 1},
.FFINT_U_D = { 754, 1},
.FTRUNC_S_W = { 755, 1},
.FTRUNC_S_D = { 756, 1},
.FTRUNC_U_W = { 757, 1},
.FTRUNC_U_D = { 758, 1},
.FCVT_S_W = { 759, 1},
.FCVT_S_D = { 760, 1},
.FCVT_D_W = { 761, 1},
.LD_B = { 762, 1},
.LD_H = { 763, 1},
.LD_W = { 764, 1},
.LD_D = { 765, 1},
.ST_B = { 766, 1},
.ST_H = { 767, 1},
.ST_W = { 768, 1},
.ST_D = { 769, 1},
.LDI_B = { 770, 1},
.LDI_H = { 771, 1},
.LDI_W = { 772, 1},
.LDI_D = { 773, 1},
.COPY_S_B = { 774, 1},
.COPY_S_H = { 775, 1},
.COPY_S_W = { 776, 1},
.COPY_U_B = { 777, 1},
.COPY_U_H = { 778, 1},
.COPY_U_W = { 779, 0},
.INSERT_B = { 779, 1},
.INSERT_H = { 780, 1},
.INSERT_W = { 781, 1},
.INSERT_D = { 782, 0},
.INSVE_B = { 782, 1},
.INSVE_H = { 783, 1},
.INSVE_W = { 784, 1},
.INSVE_D = { 785, 1},
.SHF_B = { 786, 1},
.SHF_H = { 787, 1},
.SHF_W = { 788, 1},
.VSHF_B = { 789, 1},
.VSHF_H = { 790, 1},
.VSHF_W = { 791, 1},
.VSHF_D = { 792, 1},
.SLD_B = { 793, 1},
.SLD_H = { 794, 1},
.SLD_W = { 795, 1},
.SLD_D = { 796, 1},
.SLDI_B = { 797, 1},
.SLDI_H = { 798, 1},
.SLDI_W = { 799, 1},
.SLDI_D = { 800, 1},
.SPLAT_B = { 801, 1},
.SPLAT_H = { 802, 1},
.SPLAT_W = { 803, 1},
.SPLAT_D = { 804, 1},
.SPLATI_B = { 805, 1},
.SPLATI_H = { 806, 1},
.SPLATI_W = { 807, 1},
.SPLATI_D = { 808, 1},
.BZ_V = { 809, 1},
.BNZ_V = { 810, 1},
.BZ_B = { 811, 1},
.BZ_H = { 812, 1},
.BZ_W = { 813, 1},
.BZ_D = { 814, 1},
.BNZ_B = { 815, 1},
.BNZ_H = { 816, 1},
.BNZ_W = { 817, 1},
.BNZ_D = { 818, 1},
.NLOC_B = { 819, 1},
.NLOC_H = { 820, 1},
.NLOC_W = { 821, 1},
.NLOC_D = { 822, 1},
.NLZC_B = { 823, 1},
.NLZC_H = { 824, 1},
.NLZC_W = { 825, 1},
.NLZC_D = { 826, 1},
.PCNT_B = { 827, 1},
.PCNT_H = { 828, 1},
.PCNT_W = { 829, 1},
.PCNT_D = { 830, 1},
.VMOV_S = { 831, 1},
.VMOV_P = { 832, 1},
.VMOV_T = { 833, 1},
.VMOV_Q = { 834, 1},
.LV_S = { 835, 1},
.LV_Q = { 836, 1},
.SV_S = { 837, 1},
.SV_Q = { 838, 1},
.LVL_Q = { 839, 1},
.LVR_Q = { 840, 1},
.SVL_Q = { 841, 1},
.SVR_Q = { 842, 1},
.VIIM_S = { 843, 1},
.VFIM_S = { 844, 1},
.VADD_S = { 845, 1},
.VADD_P = { 846, 1},
.VADD_T = { 847, 1},
.VADD_Q = { 848, 1},
.VSUB_S = { 849, 1},
.VSUB_P = { 850, 1},
.VSUB_T = { 851, 1},
.VSUB_Q = { 852, 1},
.VMUL_S = { 853, 1},
.VMUL_P = { 854, 1},
.VMUL_T = { 855, 1},
.VMUL_Q = { 856, 1},
.VDIV_S = { 857, 1},
.VDIV_P = { 858, 1},
.VDIV_T = { 859, 1},
.VDIV_Q = { 860, 1},
.VABS_S = { 861, 1},
.VABS_P = { 862, 1},
.VABS_T = { 863, 1},
.VABS_Q = { 864, 1},
.VNEG_S = { 865, 1},
.VNEG_P = { 866, 1},
.VNEG_T = { 867, 1},
.VNEG_Q = { 868, 1},
.VSQRT_S = { 869, 1},
.VRCP_S = { 870, 1},
.VRCP_P = { 871, 1},
.VRCP_T = { 872, 1},
.VRCP_Q = { 873, 1},
.VRSQ_S = { 874, 1},
.VRSQ_P = { 875, 1},
.VRSQ_T = { 876, 1},
.VRSQ_Q = { 877, 1},
.VDOT_P = { 878, 1},
.VDOT_T = { 879, 1},
.VDOT_Q = { 880, 1},
.VSCL_P = { 881, 1},
.VSCL_T = { 882, 1},
.VSCL_Q = { 883, 1},
.VHDP_P = { 884, 1},
.VHDP_T = { 885, 1},
.VHDP_Q = { 886, 1},
.VAVG_P = { 887, 1},
.VAVG_T = { 888, 1},
.VAVG_Q = { 889, 1},
.VFAD_P = { 890, 1},
.VFAD_T = { 891, 1},
.VFAD_Q = { 892, 1},
.VMMUL_P = { 893, 1},
.VMMUL_T = { 894, 1},
.VMMUL_Q = { 895, 1},
.VTFM2_P = { 896, 1},
.VTFM3_T = { 897, 1},
.VTFM4_Q = { 898, 1},
.VHTFM2_P = { 899, 1},
.VHTFM3_T = { 900, 1},
.VHTFM4_Q = { 901, 1},
.VMSCL_P = { 902, 1},
.VMSCL_T = { 903, 1},
.VMSCL_Q = { 904, 1},
.VMMOV_P = { 905, 1},
.VMMOV_T = { 906, 1},
.VMMOV_Q = { 907, 1},
.VMIDT_P = { 908, 1},
.VMIDT_T = { 909, 1},
.VMIDT_Q = { 910, 1},
.VMZERO_P = { 911, 1},
.VMZERO_T = { 912, 1},
.VMZERO_Q = { 913, 1},
.VMONE_P = { 914, 1},
.VMONE_T = { 915, 1},
.VMONE_Q = { 916, 1},
.VCRS_T = { 917, 1},
.VCRSP_T = { 918, 1},
.VQMUL_Q = { 919, 1},
.VCMP_S = { 920, 1},
.VCMP_P = { 921, 1},
.VCMP_T = { 922, 1},
.VCMP_Q = { 923, 1},
.VMIN_S = { 924, 1},
.VMIN_P = { 925, 1},
.VMIN_T = { 926, 1},
.VMIN_Q = { 927, 1},
.VMAX_S = { 928, 1},
.VMAX_P = { 929, 1},
.VMAX_T = { 930, 1},
.VMAX_Q = { 931, 1},
.VSIN_S = { 932, 1},
.VCOS_S = { 933, 1},
.VEXP2_S = { 934, 1},
.VLOG2_S = { 935, 1},
.VASIN_S = { 936, 1},
.VNRCP_S = { 937, 1},
.VNSIN_S = { 938, 1},
.VREXP2_S = { 939, 1},
.VSGN_S = { 940, 1},
.VI2F_S = { 941, 1},
.VI2F_P = { 942, 1},
.VI2F_T = { 943, 1},
.VI2F_Q = { 944, 1},
.VF2IN_S = { 945, 1},
.VF2IN_P = { 946, 1},
.VF2IN_T = { 947, 1},
.VF2IN_Q = { 948, 1},
.VF2IZ_S = { 949, 1},
.VF2IZ_P = { 950, 1},
.VF2IZ_T = { 951, 1},
.VF2IZ_Q = { 952, 1},
.VF2IU_S = { 953, 1},
.VF2IU_P = { 954, 1},
.VF2IU_T = { 955, 1},
.VF2IU_Q = { 956, 1},
.VF2ID_S = { 957, 1},
.VF2ID_P = { 958, 1},
.VF2ID_T = { 959, 1},
.VF2ID_Q = { 960, 1},
.VF2H_P = { 961, 1},
.VH2F_S = { 962, 1},
.VFLUSH = { 963, 1},
.VSYNC = { 964, 1},
.VNOP = { 965, 1},
.VPFXS = { 966, 1},
.VPFXT = { 967, 1},
.VPFXD = { 968, 1},
.VCST_S = { 969, 1},
.VCST_P = { 970, 1},
.VCST_T = { 971, 1},
.VCST_Q = { 972, 1},
.MFV = { 973, 1},
.MTV = { 974, 1},
.MFVC = { 975, 1},
.MTVC = { 976, 1},
.BVF = { 977, 1},
.BVT = { 978, 1},
.BVFL = { 979, 1},
.BVTL = { 980, 1},
.EXTRV_R_W = { 527, 1},
.EXTRV_RS_W = { 528, 1},
.EXTRV_S_H = { 529, 1},
.EXTP = { 530, 1},
.EXTPV = { 531, 1},
.EXTPDP = { 532, 1},
.EXTPDPV = { 533, 1},
.SHILO = { 534, 1},
.SHILOV = { 535, 1},
.MTHLIP = { 536, 1},
.WRDSP = { 537, 1},
.RDDSP = { 538, 1},
.PRECRQ_QB_PH = { 539, 1},
.PRECRQ_PH_W = { 540, 1},
.PRECRQU_S_QB_PH = { 541, 1},
.PRECEQ_W_PHL = { 542, 1},
.PRECEQ_W_PHR = { 543, 1},
.PRECEQU_PH_QBL = { 544, 1},
.PRECEQU_PH_QBR = { 545, 1},
.PRECEQU_PH_QBLA = { 546, 1},
.PRECEQU_PH_QBRA = { 547, 1},
.PRECEU_PH_QBL = { 548, 1},
.PRECEU_PH_QBR = { 549, 1},
.PRECEU_PH_QBLA = { 550, 1},
.PRECEU_PH_QBRA = { 551, 1},
.PRECRQ_RS_PH_W = { 552, 1},
.CMPU_EQ_QB = { 553, 1},
.CMPU_LT_QB = { 554, 1},
.CMPU_LE_QB = { 555, 1},
.CMP_EQ_PH = { 556, 1},
.CMP_LT_PH = { 557, 1},
.CMP_LE_PH = { 558, 1},
.CMPGU_EQ_QB = { 559, 1},
.CMPGU_LT_QB = { 560, 1},
.CMPGU_LE_QB = { 561, 1},
.PICK_QB = { 562, 1},
.PICK_PH = { 563, 1},
.SHLL_QB = { 564, 1},
.SHLL_PH = { 565, 1},
.SHLL_S_PH = { 566, 1},
.SHLL_S_W = { 567, 1},
.SHLLV_QB = { 568, 1},
.SHLLV_PH = { 569, 1},
.SHLLV_S_PH = { 570, 1},
.SHLLV_S_W = { 571, 1},
.SHRL_QB = { 572, 1},
.SHRL_PH = { 573, 1},
.SHRLV_QB = { 574, 1},
.SHRLV_PH = { 575, 1},
.SHRA_QB = { 576, 1},
.SHRA_R_QB = { 577, 1},
.SHRA_PH = { 578, 1},
.SHRA_R_PH = { 579, 1},
.SHRA_R_W = { 580, 1},
.SHRAV_QB = { 581, 1},
.SHRAV_R_QB = { 582, 1},
.SHRAV_PH = { 583, 1},
.SHRAV_R_PH = { 584, 1},
.SHRAV_R_W = { 585, 1},
.LBUX = { 586, 1},
.LHX = { 587, 1},
.LWX = { 588, 1},
.BPOSGE32 = { 589, 1},
.BPOSGE64 = { 590, 0},
.INSV = { 590, 1},
.BITREV = { 591, 1},
.ABSQ_S_PH = { 592, 1},
.ABSQ_S_W = { 593, 1},
.REPL_PH = { 594, 0},
.REPLV_PH = { 594, 1},
.REPL_QB = { 595, 0},
.REPLV_QB = { 595, 1},
.ADDV_B = { 596, 1},
.ADDV_H = { 597, 1},
.ADDV_W = { 598, 1},
.ADDV_D = { 599, 1},
.SUBV_B = { 600, 1},
.SUBV_H = { 601, 1},
.SUBV_W = { 602, 1},
.SUBV_D = { 603, 1},
.ADDS_S_B = { 604, 1},
.ADDS_S_H = { 605, 1},
.ADDS_S_W = { 606, 1},
.ADDS_S_D = { 607, 1},
.ADDS_U_B = { 608, 1},
.ADDS_U_H = { 609, 1},
.ADDS_U_W = { 610, 1},
.ADDS_U_D = { 611, 1},
.SUBS_S_B = { 612, 1},
.SUBS_S_H = { 613, 1},
.SUBS_S_W = { 614, 1},
.SUBS_S_D = { 615, 1},
.SUBS_U_B = { 616, 1},
.SUBS_U_H = { 617, 1},
.SUBS_U_W = { 618, 1},
.SUBS_U_D = { 619, 1},
.MULV_B = { 620, 1},
.MULV_H = { 621, 1},
.MULV_W = { 622, 1},
.MULV_D = { 623, 1},
.DIV_S_B = { 624, 1},
.DIV_S_H = { 625, 1},
.DIV_S_W = { 626, 1},
.DIV_S_D = { 627, 1},
.DIV_U_B = { 628, 1},
.DIV_U_H = { 629, 1},
.DIV_U_W = { 630, 1},
.DIV_U_D = { 631, 1},
.MOD_S_B = { 632, 1},
.MOD_S_H = { 633, 1},
.MOD_S_W = { 634, 1},
.MOD_S_D = { 635, 1},
.MOD_U_B = { 636, 1},
.MOD_U_H = { 637, 1},
.MOD_U_W = { 638, 1},
.MOD_U_D = { 639, 1},
.MADDV_B = { 640, 1},
.MADDV_H = { 641, 1},
.MADDV_W = { 642, 1},
.MADDV_D = { 643, 1},
.MSUBV_B = { 644, 1},
.MSUBV_H = { 645, 1},
.MSUBV_W = { 646, 1},
.MSUBV_D = { 647, 1},
.DOTP_S_H = { 648, 1},
.DOTP_S_W = { 649, 1},
.DOTP_S_D = { 650, 1},
.DOTP_U_H = { 651, 1},
.DOTP_U_W = { 652, 1},
.DOTP_U_D = { 653, 1},
.AND_V = { 654, 1},
.OR_V = { 655, 1},
.NOR_V = { 656, 1},
.XOR_V = { 657, 1},
.ANDI_B = { 658, 1},
.ORI_B = { 659, 1},
.NORI_B = { 660, 1},
.XORI_B = { 661, 1},
.BSEL_V = { 662, 1},
.BSELI_B = { 663, 1},
.BMNZ_V = { 664, 1},
.BMNZI_B = { 665, 1},
.BMZ_V = { 666, 1},
.BMZI_B = { 667, 1},
.CEQ_B = { 668, 1},
.CEQ_H = { 669, 1},
.CEQ_W = { 670, 1},
.CEQ_D = { 671, 1},
.CLT_S_B = { 672, 1},
.CLT_S_H = { 673, 1},
.CLT_S_W = { 674, 1},
.CLT_S_D = { 675, 1},
.CLT_U_B = { 676, 1},
.CLT_U_H = { 677, 1},
.CLT_U_W = { 678, 1},
.CLT_U_D = { 679, 1},
.CLE_S_B = { 680, 1},
.CLE_S_H = { 681, 1},
.CLE_S_W = { 682, 1},
.CLE_S_D = { 683, 1},
.CLE_U_B = { 684, 1},
.CLE_U_H = { 685, 1},
.CLE_U_W = { 686, 1},
.CLE_U_D = { 687, 1},
.MIN_S_B = { 688, 1},
.MIN_S_H = { 689, 1},
.MIN_S_W = { 690, 1},
.MIN_S_D = { 691, 1},
.MIN_U_B = { 692, 1},
.MIN_U_H = { 693, 1},
.MIN_U_W = { 694, 1},
.MIN_U_D = { 695, 1},
.MAX_S_B = { 696, 1},
.MAX_S_H = { 697, 1},
.MAX_S_W = { 698, 1},
.MAX_S_D = { 699, 1},
.MAX_U_B = { 700, 1},
.MAX_U_H = { 701, 1},
.MAX_U_W = { 702, 1},
.MAX_U_D = { 703, 1},
.SLL_B = { 704, 1},
.SLL_H = { 705, 1},
.SLL_W = { 706, 1},
.SLL_D = { 707, 1},
.SRL_B = { 708, 1},
.SRL_H = { 709, 1},
.SRL_W = { 710, 1},
.SRL_D = { 711, 1},
.SRA_B = { 712, 1},
.SRA_H = { 713, 1},
.SRA_W = { 714, 1},
.SRA_D = { 715, 1},
.SLLI_B = { 716, 1},
.SLLI_H = { 717, 1},
.SLLI_W = { 718, 1},
.SLLI_D = { 719, 1},
.SRLI_B = { 720, 1},
.SRLI_H = { 721, 1},
.SRLI_W = { 722, 1},
.SRLI_D = { 723, 1},
.SRAI_B = { 724, 1},
.SRAI_H = { 725, 1},
.SRAI_W = { 726, 1},
.SRAI_D = { 727, 1},
.FADD_W = { 728, 1},
.FADD_D = { 729, 1},
.FSUB_W = { 730, 1},
.FSUB_D = { 731, 1},
.FMUL_W = { 732, 1},
.FMUL_D = { 733, 1},
.FDIV_W = { 734, 1},
.FDIV_D = { 735, 1},
.FSQRT_W = { 736, 1},
.FSQRT_D = { 737, 1},
.FRSQRT_W = { 738, 1},
.FRSQRT_D = { 739, 1},
.FRCP_W = { 740, 1},
.FRCP_D = { 741, 1},
.FRINT_W = { 742, 1},
.FRINT_D = { 743, 1},
.FMAX_W = { 744, 1},
.FMAX_D = { 745, 1},
.FMIN_W = { 746, 1},
.FMIN_D = { 747, 1},
.FCEQ_W = { 748, 1},
.FCEQ_D = { 749, 1},
.FCNE_W = { 750, 1},
.FCNE_D = { 751, 1},
.FCLT_W = { 752, 1},
.FCLT_D = { 753, 1},
.FCLE_W = { 754, 1},
.FCLE_D = { 755, 1},
.FFINT_S_W = { 756, 1},
.FFINT_S_D = { 757, 1},
.FFINT_U_W = { 758, 1},
.FFINT_U_D = { 759, 1},
.FTRUNC_S_W = { 760, 1},
.FTRUNC_S_D = { 761, 1},
.FTRUNC_U_W = { 762, 1},
.FTRUNC_U_D = { 763, 1},
.FCVT_S_W = { 764, 1},
.FCVT_S_D = { 765, 1},
.FCVT_D_W = { 766, 1},
.LD_B = { 767, 1},
.LD_H = { 768, 1},
.LD_W = { 769, 1},
.LD_D = { 770, 1},
.ST_B = { 771, 1},
.ST_H = { 772, 1},
.ST_W = { 773, 1},
.ST_D = { 774, 1},
.LDI_B = { 775, 1},
.LDI_H = { 776, 1},
.LDI_W = { 777, 1},
.LDI_D = { 778, 1},
.COPY_S_B = { 779, 1},
.COPY_S_H = { 780, 1},
.COPY_S_W = { 781, 1},
.COPY_U_B = { 782, 1},
.COPY_U_H = { 783, 1},
.COPY_U_W = { 784, 0},
.INSERT_B = { 784, 1},
.INSERT_H = { 785, 1},
.INSERT_W = { 786, 1},
.INSERT_D = { 787, 0},
.INSVE_B = { 787, 1},
.INSVE_H = { 788, 1},
.INSVE_W = { 789, 1},
.INSVE_D = { 790, 1},
.SHF_B = { 791, 1},
.SHF_H = { 792, 1},
.SHF_W = { 793, 1},
.VSHF_B = { 794, 1},
.VSHF_H = { 795, 1},
.VSHF_W = { 796, 1},
.VSHF_D = { 797, 1},
.SLD_B = { 798, 1},
.SLD_H = { 799, 1},
.SLD_W = { 800, 1},
.SLD_D = { 801, 1},
.SLDI_B = { 802, 1},
.SLDI_H = { 803, 1},
.SLDI_W = { 804, 1},
.SLDI_D = { 805, 1},
.SPLAT_B = { 806, 1},
.SPLAT_H = { 807, 1},
.SPLAT_W = { 808, 1},
.SPLAT_D = { 809, 1},
.SPLATI_B = { 810, 1},
.SPLATI_H = { 811, 1},
.SPLATI_W = { 812, 1},
.SPLATI_D = { 813, 1},
.BZ_V = { 814, 1},
.BNZ_V = { 815, 1},
.BZ_B = { 816, 1},
.BZ_H = { 817, 1},
.BZ_W = { 818, 1},
.BZ_D = { 819, 1},
.BNZ_B = { 820, 1},
.BNZ_H = { 821, 1},
.BNZ_W = { 822, 1},
.BNZ_D = { 823, 1},
.NLOC_B = { 824, 1},
.NLOC_H = { 825, 1},
.NLOC_W = { 826, 1},
.NLOC_D = { 827, 1},
.NLZC_B = { 828, 1},
.NLZC_H = { 829, 1},
.NLZC_W = { 830, 1},
.NLZC_D = { 831, 1},
.PCNT_B = { 832, 1},
.PCNT_H = { 833, 1},
.PCNT_W = { 834, 1},
.PCNT_D = { 835, 1},
.VMOV_S = { 836, 1},
.VMOV_P = { 837, 1},
.VMOV_T = { 838, 1},
.VMOV_Q = { 839, 1},
.LV_S = { 840, 1},
.LV_Q = { 841, 1},
.SV_S = { 842, 1},
.SV_Q = { 843, 1},
.LVL_Q = { 844, 1},
.LVR_Q = { 845, 1},
.SVL_Q = { 846, 1},
.SVR_Q = { 847, 1},
.VIIM_S = { 848, 1},
.VFIM_S = { 849, 1},
.VADD_S = { 850, 1},
.VADD_P = { 851, 1},
.VADD_T = { 852, 1},
.VADD_Q = { 853, 1},
.VSUB_S = { 854, 1},
.VSUB_P = { 855, 1},
.VSUB_T = { 856, 1},
.VSUB_Q = { 857, 1},
.VMUL_S = { 858, 1},
.VMUL_P = { 859, 1},
.VMUL_T = { 860, 1},
.VMUL_Q = { 861, 1},
.VDIV_S = { 862, 1},
.VDIV_P = { 863, 1},
.VDIV_T = { 864, 1},
.VDIV_Q = { 865, 1},
.VABS_S = { 866, 1},
.VABS_P = { 867, 1},
.VABS_T = { 868, 1},
.VABS_Q = { 869, 1},
.VNEG_S = { 870, 1},
.VNEG_P = { 871, 1},
.VNEG_T = { 872, 1},
.VNEG_Q = { 873, 1},
.VSQRT_S = { 874, 1},
.VRCP_S = { 875, 1},
.VRCP_P = { 876, 1},
.VRCP_T = { 877, 1},
.VRCP_Q = { 878, 1},
.VRSQ_S = { 879, 1},
.VRSQ_P = { 880, 1},
.VRSQ_T = { 881, 1},
.VRSQ_Q = { 882, 1},
.VDOT_P = { 883, 1},
.VDOT_T = { 884, 1},
.VDOT_Q = { 885, 1},
.VSCL_P = { 886, 1},
.VSCL_T = { 887, 1},
.VSCL_Q = { 888, 1},
.VHDP_P = { 889, 1},
.VHDP_T = { 890, 1},
.VHDP_Q = { 891, 1},
.VAVG_P = { 892, 1},
.VAVG_T = { 893, 1},
.VAVG_Q = { 894, 1},
.VFAD_P = { 895, 1},
.VFAD_T = { 896, 1},
.VFAD_Q = { 897, 1},
.VMMUL_P = { 898, 1},
.VMMUL_T = { 899, 1},
.VMMUL_Q = { 900, 1},
.VTFM2_P = { 901, 1},
.VTFM3_T = { 902, 1},
.VTFM4_Q = { 903, 1},
.VHTFM2_P = { 904, 1},
.VHTFM3_T = { 905, 1},
.VHTFM4_Q = { 906, 1},
.VMSCL_P = { 907, 1},
.VMSCL_T = { 908, 1},
.VMSCL_Q = { 909, 1},
.VMMOV_P = { 910, 1},
.VMMOV_T = { 911, 1},
.VMMOV_Q = { 912, 1},
.VMIDT_P = { 913, 1},
.VMIDT_T = { 914, 1},
.VMIDT_Q = { 915, 1},
.VMZERO_P = { 916, 1},
.VMZERO_T = { 917, 1},
.VMZERO_Q = { 918, 1},
.VMONE_P = { 919, 1},
.VMONE_T = { 920, 1},
.VMONE_Q = { 921, 1},
.VCRS_T = { 922, 1},
.VCRSP_T = { 923, 1},
.VQMUL_Q = { 924, 1},
.VCMP_S = { 925, 1},
.VCMP_P = { 926, 1},
.VCMP_T = { 927, 1},
.VCMP_Q = { 928, 1},
.VMIN_S = { 929, 1},
.VMIN_P = { 930, 1},
.VMIN_T = { 931, 1},
.VMIN_Q = { 932, 1},
.VMAX_S = { 933, 1},
.VMAX_P = { 934, 1},
.VMAX_T = { 935, 1},
.VMAX_Q = { 936, 1},
.VSIN_S = { 937, 1},
.VCOS_S = { 938, 1},
.VEXP2_S = { 939, 1},
.VLOG2_S = { 940, 1},
.VASIN_S = { 941, 1},
.VNRCP_S = { 942, 1},
.VNSIN_S = { 943, 1},
.VREXP2_S = { 944, 1},
.VSGN_S = { 945, 1},
.VI2F_S = { 946, 1},
.VI2F_P = { 947, 1},
.VI2F_T = { 948, 1},
.VI2F_Q = { 949, 1},
.VF2IN_S = { 950, 1},
.VF2IN_P = { 951, 1},
.VF2IN_T = { 952, 1},
.VF2IN_Q = { 953, 1},
.VF2IZ_S = { 954, 1},
.VF2IZ_P = { 955, 1},
.VF2IZ_T = { 956, 1},
.VF2IZ_Q = { 957, 1},
.VF2IU_S = { 958, 1},
.VF2IU_P = { 959, 1},
.VF2IU_T = { 960, 1},
.VF2IU_Q = { 961, 1},
.VF2ID_S = { 962, 1},
.VF2ID_P = { 963, 1},
.VF2ID_T = { 964, 1},
.VF2ID_Q = { 965, 1},
.VF2H_P = { 966, 1},
.VH2F_S = { 967, 1},
.VFLUSH = { 968, 1},
.VSYNC = { 969, 1},
.VNOP = { 970, 1},
.VPFXS = { 971, 1},
.VPFXT = { 972, 1},
.VPFXD = { 973, 1},
.VCST_S = { 974, 1},
.VCST_P = { 975, 1},
.VCST_T = { 976, 1},
.VCST_Q = { 977, 1},
.MFV = { 978, 1},
.MTV = { 979, 1},
.MFVC = { 980, 1},
.MTVC = { 981, 1},
.BVF = { 982, 1},
.BVT = { 983, 1},
.BVFL = { 984, 1},
.BVTL = { 985, 1},
}

View File

@@ -294,6 +294,18 @@ do
if r then sections[#sections+1]=r end
end
-- ---- DSP ASE extract-from-accumulator ops ---------------------------------
do
local r = entry("EXTPDP", "{.GPR,.IMM5,.IMM5,.NONE}", "{.RT,.AC_NUM,.EXT_SIZE,.NONE}", "DSP_R2",
function(v) return string.format("extpdp $%d,$ac%d,%d", v[1], v[2], v[3]) end, {31,3,31})
if r then sections[#sections+1]=r end
end
for _, b in ipairs({{"EXTPDPV","extpdpv"},{"EXTRV_R_W","extrv_r.w"},{"EXTRV_RS_W","extrv_rs.w"},{"EXTRV_S_H","extrv_s.h"}}) do
local r = entry(b[1], "{.GPR,.IMM5,.GPR,.NONE}", "{.RT,.AC_NUM,.RS,.NONE}", "DSP_R2",
function(v) return string.format("%s $%d,$ac%d,$%d", b[2], v[1], v[2], v[3]) end, {31,3,31})
if r then sections[#sections+1]=r end
end
-- ---- Branches: derive bits/regs, then mark the PC-relative offset variable.
-- Compact (R6) branches need the r6 ISA, so each family passes its own mattr.
local function bword(line, mattr)