diff --git a/core/rexcode/mips/decoder.odin b/core/rexcode/mips/decoder.odin index a1535bf0d..c588a776e 100644 --- a/core/rexcode/mips/decoder.odin +++ b/core/rexcode/mips/decoder.odin @@ -206,6 +206,8 @@ extract_operand_inline :: #force_inline proc "contextless" ( return reg_operand(decode_reg(word, 6, ot), ot) case .GPR_AT_11: return reg_operand(decode_reg(word, 11, ot), ot) + case .DSP_SA: + return Operand{immediate = i64((word >> 21) & 0xF), kind = .IMMEDIATE, size = 1} // Immediates ------------------------------------------------------------ case .IMM_16: diff --git a/core/rexcode/mips/encoder.odin b/core/rexcode/mips/encoder.odin index ef08bda3d..1ddd45424 100644 --- a/core/rexcode/mips/encoder.odin +++ b/core/rexcode/mips/encoder.odin @@ -400,6 +400,8 @@ pack_operand_inline :: #force_inline proc( return (u32(reg_hw(op.reg)) & 0x1F) << 6 case .GPR_AT_11: return (u32(reg_hw(op.reg)) & 0x1F) << 11 + case .DSP_SA: + return (u32(op.immediate) & 0xF) << 21 // MSA memory operand: base GPR at 15:11, signed-10 disp at 25:16 // (caller has already scaled the displacement by element size). diff --git a/core/rexcode/mips/encoding_types.odin b/core/rexcode/mips/encoding_types.odin index cc9d99386..1afaf7d0a 100644 --- a/core/rexcode/mips/encoding_types.odin +++ b/core/rexcode/mips/encoding_types.odin @@ -240,6 +240,7 @@ Operand_Encoding :: enum u8 { FR, // FP register at bits 25:21 (COP1X 4-register FMA: fr) GPR_AT_6, // GPR at bits 10:6 (MSA COPY destination) GPR_AT_11, // GPR at bits 15:11 (MSA INSERT source) + DSP_SA, // DSP shift amount at bits 24:21 (.PH 4-bit, .QB 3-bit) // 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). diff --git a/core/rexcode/mips/mnemonic_builders.odin b/core/rexcode/mips/mnemonic_builders.odin index 7b5e5d725..4c9ee226a 100644 --- a/core/rexcode/mips/mnemonic_builders.odin +++ b/core/rexcode/mips/mnemonic_builders.odin @@ -1142,12 +1142,20 @@ inst_shllv_s_w_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: G emit_shllv_s_w_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_shllv_s_w_r_r_r(dst, src, src2)) } inst_shrl_qb_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SHRL_QB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } emit_shrl_qb_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_shrl_qb_r_r_i5(dst, src, imm)) } +inst_shrl_ph_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SHRL_PH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } +emit_shrl_ph_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_shrl_ph_r_r_i5(dst, src, imm)) } inst_shrlv_qb_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SHRLV_QB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } emit_shrlv_qb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_shrlv_qb_r_r_r(dst, src, src2)) } inst_shrlv_ph_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SHRLV_PH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } emit_shrlv_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_shrlv_ph_r_r_r(dst, src, src2)) } +inst_shra_qb_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SHRA_QB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } +emit_shra_qb_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_shra_qb_r_r_i5(dst, src, imm)) } +inst_shra_r_qb_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SHRA_R_QB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } +emit_shra_r_qb_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_shra_r_qb_r_r_i5(dst, src, imm)) } inst_shra_ph_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SHRA_PH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } emit_shra_ph_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_shra_ph_r_r_i5(dst, src, imm)) } +inst_shra_r_ph_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SHRA_R_PH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } +emit_shra_r_ph_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_shra_r_ph_r_r_i5(dst, src, imm)) } inst_shra_r_w_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SHRA_R_W, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } emit_shra_r_w_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_shra_r_w_r_r_i5(dst, src, imm)) } inst_shrav_qb_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SHRAV_QB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } @@ -3059,12 +3067,20 @@ inst_shllv_s_w :: inst_shllv_s_w_r_r_r emit_shllv_s_w :: emit_shllv_s_w_r_r_r inst_shrl_qb :: inst_shrl_qb_r_r_i5 emit_shrl_qb :: emit_shrl_qb_r_r_i5 +inst_shrl_ph :: inst_shrl_ph_r_r_i5 +emit_shrl_ph :: emit_shrl_ph_r_r_i5 inst_shrlv_qb :: inst_shrlv_qb_r_r_r emit_shrlv_qb :: emit_shrlv_qb_r_r_r inst_shrlv_ph :: inst_shrlv_ph_r_r_r emit_shrlv_ph :: emit_shrlv_ph_r_r_r +inst_shra_qb :: inst_shra_qb_r_r_i5 +emit_shra_qb :: emit_shra_qb_r_r_i5 +inst_shra_r_qb :: inst_shra_r_qb_r_r_i5 +emit_shra_r_qb :: emit_shra_r_qb_r_r_i5 inst_shra_ph :: inst_shra_ph_r_r_i5 emit_shra_ph :: emit_shra_ph_r_r_i5 +inst_shra_r_ph :: inst_shra_r_ph_r_r_i5 +emit_shra_r_ph :: emit_shra_r_ph_r_r_i5 inst_shra_r_w :: inst_shra_r_w_r_r_i5 emit_shra_r_w :: emit_shra_r_w_r_r_i5 inst_shrav_qb :: inst_shrav_qb_r_r_r diff --git a/core/rexcode/mips/tablegen/encoding_table.odin b/core/rexcode/mips/tablegen/encoding_table.odin index 00f84eadb..7e794885b 100644 --- a/core/rexcode/mips/tablegen/encoding_table.odin +++ b/core/rexcode/mips/tablegen/encoding_table.odin @@ -1625,5 +1625,9 @@ ENCODING_TABLE := #partial [Mnemonic][]Encoding{ .DI = { {.DI, {.GPR,.NONE,.NONE,.NONE}, {.RT,.NONE,.NONE,.NONE}, 0x41606000, 0xFFE0FFFF, .MIPS32_R2, {}} }, .EI = { {.EI, {.GPR,.NONE,.NONE,.NONE}, {.RT,.NONE,.NONE,.NONE}, 0x41606020, 0xFFE0FFFF, .MIPS32_R2, {}} }, .RDHWR = { {.RDHWR, {.GPR,.GPR,.NONE,.NONE}, {.RT,.RD,.NONE,.NONE}, 0x7C00003B, 0xFFE007FF, .MIPS32_R2, {}} }, + .SHRA_QB = { {.SHRA_QB, {.GPR,.GPR,.IMM5,.NONE}, {.RD,.RT,.DSP_SA,.NONE}, 0x7C000113, 0xFF0007FF, .DSP_R2, {}} }, + .SHRA_R_QB = { {.SHRA_R_QB, {.GPR,.GPR,.IMM5,.NONE}, {.RD,.RT,.DSP_SA,.NONE}, 0x7C000153, 0xFF0007FF, .DSP_R2, {}} }, + .SHRA_R_PH = { {.SHRA_R_PH, {.GPR,.GPR,.IMM5,.NONE}, {.RD,.RT,.DSP_SA,.NONE}, 0x7C000353, 0xFE0007FF, .DSP_R2, {}} }, + .SHRL_PH = { {.SHRL_PH, {.GPR,.GPR,.IMM5,.NONE}, {.RD,.RT,.DSP_SA,.NONE}, 0x7C000653, 0xFE0007FF, .DSP_R2, {}} }, // SPECGEN:END } diff --git a/core/rexcode/mips/tablegen/generated/decode_tables.odin b/core/rexcode/mips/tablegen/generated/decode_tables.odin index 295814fc0..f92217d61 100644 --- a/core/rexcode/mips/tablegen/generated/decode_tables.odin +++ b/core/rexcode/mips/tablegen/generated/decode_tables.odin @@ -8,7 +8,7 @@ package rexcode_mips_generated import lib "../.." @(rodata) -DECODE_ENTRIES := [956]lib.Decode_Entry{ +DECODE_ENTRIES := [960]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, {} }, @@ -781,6 +781,10 @@ DECODE_ENTRIES := [956]lib.Decode_Entry{ { .SHRL_QB, {.GPR,.GPR,.IMM5,.NONE}, {.RD,.RT,.IMM_5,.NONE}, 0x7C000053, 0xFFE0073F, .DSP_R1, {} }, { .SHRA_PH, {.GPR,.GPR,.IMM5,.NONE}, {.RD,.RT,.IMM_5,.NONE}, 0x7C000253, 0xFFE0073F, .DSP_R1, {} }, { .SHRA_R_W, {.GPR,.GPR,.IMM5,.NONE}, {.RD,.RT,.IMM_5,.NONE}, 0x7C000553, 0xFFE0073F, .DSP_R1, {} }, + { .SHRA_QB, {.GPR,.GPR,.IMM5,.NONE}, {.RD,.RT,.DSP_SA,.NONE}, 0x7C000113, 0xFF0007FF, .DSP_R2, {} }, + { .SHRA_R_QB, {.GPR,.GPR,.IMM5,.NONE}, {.RD,.RT,.DSP_SA,.NONE}, 0x7C000153, 0xFF0007FF, .DSP_R2, {} }, + { .SHRL_PH, {.GPR,.GPR,.IMM5,.NONE}, {.RD,.RT,.DSP_SA,.NONE}, 0x7C000653, 0xFE0007FF, .DSP_R2, {} }, + { .SHRA_R_PH, {.GPR,.GPR,.IMM5,.NONE}, {.RD,.RT,.DSP_SA,.NONE}, 0x7C000353, 0xFE0007FF, .DSP_R2, {} }, { .SHLLV_QB, {.GPR,.GPR,.GPR,.NONE}, {.RD,.RT,.RS,.NONE}, 0x7C000093, 0xFC0007FF, .DSP_R1, {} }, { .SHLLV_PH, {.GPR,.GPR,.GPR,.NONE}, {.RD,.RT,.RS,.NONE}, 0x7C000293, 0xFC0007FF, .DSP_R2, {} }, { .SHLLV_S_PH, {.GPR,.GPR,.GPR,.NONE}, {.RD,.RT,.RS,.NONE}, 0x7C000393, 0xFC0007FF, .DSP_R2, {} }, @@ -1000,39 +1004,39 @@ DECODE_INDEX_PRIMARY := [64]lib.Decode_Index{ 0x1C = { 354, 109}, 0x1D = { 463, 1}, 0x1E = { 464, 228}, - 0x1F = { 692, 119}, - 0x20 = { 811, 1}, - 0x21 = { 812, 1}, - 0x22 = { 813, 1}, - 0x23 = { 814, 1}, - 0x24 = { 815, 1}, - 0x25 = { 816, 1}, - 0x26 = { 817, 1}, - 0x27 = { 818, 1}, - 0x28 = { 819, 1}, - 0x29 = { 820, 1}, - 0x2A = { 821, 1}, - 0x2B = { 822, 1}, - 0x2C = { 823, 1}, - 0x2D = { 824, 1}, - 0x2E = { 825, 1}, - 0x2F = { 826, 1}, - 0x30 = { 827, 1}, - 0x31 = { 828, 1}, - 0x32 = { 829, 3}, - 0x33 = { 832, 1}, - 0x34 = { 833, 63}, - 0x35 = { 896, 3}, - 0x36 = { 899, 5}, - 0x37 = { 904, 6}, - 0x38 = { 910, 1}, - 0x39 = { 911, 1}, - 0x3A = { 912, 3}, - 0x3B = { 915, 2}, - 0x3C = { 917, 27}, - 0x3D = { 944, 3}, - 0x3E = { 947, 5}, - 0x3F = { 952, 4}, + 0x1F = { 692, 123}, + 0x20 = { 815, 1}, + 0x21 = { 816, 1}, + 0x22 = { 817, 1}, + 0x23 = { 818, 1}, + 0x24 = { 819, 1}, + 0x25 = { 820, 1}, + 0x26 = { 821, 1}, + 0x27 = { 822, 1}, + 0x28 = { 823, 1}, + 0x29 = { 824, 1}, + 0x2A = { 825, 1}, + 0x2B = { 826, 1}, + 0x2C = { 827, 1}, + 0x2D = { 828, 1}, + 0x2E = { 829, 1}, + 0x2F = { 830, 1}, + 0x30 = { 831, 1}, + 0x31 = { 832, 1}, + 0x32 = { 833, 3}, + 0x33 = { 836, 1}, + 0x34 = { 837, 63}, + 0x35 = { 900, 3}, + 0x36 = { 903, 5}, + 0x37 = { 908, 6}, + 0x38 = { 914, 1}, + 0x39 = { 915, 1}, + 0x3A = { 916, 3}, + 0x3B = { 919, 2}, + 0x3C = { 921, 27}, + 0x3D = { 948, 3}, + 0x3E = { 951, 5}, + 0x3F = { 956, 4}, } @(rodata) @@ -1193,11 +1197,11 @@ DECODE_INDEX_SPECIAL3 := [64]lib.Decode_Index{ 0x10 = { 713, 22}, 0x11 = { 735, 15}, 0x12 = { 750, 15}, - 0x13 = { 765, 18}, - 0x20 = { 783, 5}, - 0x24 = { 788, 4}, - 0x30 = { 792, 9}, - 0x38 = { 801, 9}, - 0x3B = { 810, 1}, + 0x13 = { 765, 22}, + 0x20 = { 787, 5}, + 0x24 = { 792, 4}, + 0x30 = { 796, 9}, + 0x38 = { 805, 9}, + 0x3B = { 814, 1}, } diff --git a/core/rexcode/mips/tablegen/generated/encode_tables.odin b/core/rexcode/mips/tablegen/generated/encode_tables.odin index 746a22687..6e0404f5c 100644 --- a/core/rexcode/mips/tablegen/generated/encode_tables.odin +++ b/core/rexcode/mips/tablegen/generated/encode_tables.odin @@ -8,7 +8,7 @@ package rexcode_mips_generated import lib "../.." @(rodata) -ENCODE_FORMS := [956]lib.Encoding{ +ENCODE_FORMS := [960]lib.Encoding{ // .ADD { .ADD, {.GPR,.GPR,.GPR,.NONE}, {.RD,.RS,.RT,.NONE}, 0x00000020, 0xFC0007FF, .MIPS_I, {} }, // .ADDU @@ -1123,12 +1123,20 @@ ENCODE_FORMS := [956]lib.Encoding{ { .SHLLV_S_W, {.GPR,.GPR,.GPR,.NONE}, {.RD,.RT,.RS,.NONE}, 0x7C000593, 0xFC0007FF, .DSP_R2, {} }, // .SHRL_QB { .SHRL_QB, {.GPR,.GPR,.IMM5,.NONE}, {.RD,.RT,.IMM_5,.NONE}, 0x7C000053, 0xFFE0073F, .DSP_R1, {} }, + // .SHRL_PH + { .SHRL_PH, {.GPR,.GPR,.IMM5,.NONE}, {.RD,.RT,.DSP_SA,.NONE}, 0x7C000653, 0xFE0007FF, .DSP_R2, {} }, // .SHRLV_QB { .SHRLV_QB, {.GPR,.GPR,.GPR,.NONE}, {.RD,.RT,.RS,.NONE}, 0x7C0000D3, 0xFC0007FF, .DSP_R1, {} }, // .SHRLV_PH { .SHRLV_PH, {.GPR,.GPR,.GPR,.NONE}, {.RD,.RT,.RS,.NONE}, 0x7C0006D3, 0xFC0007FF, .DSP_R2, {} }, + // .SHRA_QB + { .SHRA_QB, {.GPR,.GPR,.IMM5,.NONE}, {.RD,.RT,.DSP_SA,.NONE}, 0x7C000113, 0xFF0007FF, .DSP_R2, {} }, + // .SHRA_R_QB + { .SHRA_R_QB, {.GPR,.GPR,.IMM5,.NONE}, {.RD,.RT,.DSP_SA,.NONE}, 0x7C000153, 0xFF0007FF, .DSP_R2, {} }, // .SHRA_PH { .SHRA_PH, {.GPR,.GPR,.IMM5,.NONE}, {.RD,.RT,.IMM_5,.NONE}, 0x7C000253, 0xFFE0073F, .DSP_R1, {} }, + // .SHRA_R_PH + { .SHRA_R_PH, {.GPR,.GPR,.IMM5,.NONE}, {.RD,.RT,.DSP_SA,.NONE}, 0x7C000353, 0xFE0007FF, .DSP_R2, {} }, // .SHRA_R_W { .SHRA_R_W, {.GPR,.GPR,.IMM5,.NONE}, {.RD,.RT,.IMM_5,.NONE}, 0x7C000553, 0xFFE0073F, .DSP_R1, {} }, // .SHRAV_QB @@ -2535,422 +2543,422 @@ ENCODE_RUNS := [lib.Mnemonic]lib.Encode_Run{ .SHLLV_S_PH = { 554, 1}, .SHLLV_S_W = { 555, 1}, .SHRL_QB = { 556, 1}, - .SHRL_PH = { 557, 0}, - .SHRLV_QB = { 557, 1}, - .SHRLV_PH = { 558, 1}, - .SHRA_QB = { 559, 0}, - .SHRA_R_QB = { 559, 0}, - .SHRA_PH = { 559, 1}, - .SHRA_R_PH = { 560, 0}, - .SHRA_R_W = { 560, 1}, - .SHRAV_QB = { 561, 1}, - .SHRAV_R_QB = { 562, 1}, - .SHRAV_PH = { 563, 1}, - .SHRAV_R_PH = { 564, 1}, - .SHRAV_R_W = { 565, 1}, - .LBUX = { 566, 1}, - .LHX = { 567, 1}, - .LWX = { 568, 1}, - .BPOSGE32 = { 569, 1}, - .BPOSGE64 = { 570, 0}, - .INSV = { 570, 1}, - .BITREV = { 571, 1}, - .ABSQ_S_PH = { 572, 1}, - .ABSQ_S_W = { 573, 1}, - .REPL_PH = { 574, 0}, - .REPLV_PH = { 574, 1}, - .REPL_QB = { 575, 0}, - .REPLV_QB = { 575, 1}, - .ADDV_B = { 576, 1}, - .ADDV_H = { 577, 1}, - .ADDV_W = { 578, 1}, - .ADDV_D = { 579, 1}, - .SUBV_B = { 580, 1}, - .SUBV_H = { 581, 1}, - .SUBV_W = { 582, 1}, - .SUBV_D = { 583, 1}, - .ADDS_S_B = { 584, 1}, - .ADDS_S_H = { 585, 1}, - .ADDS_S_W = { 586, 1}, - .ADDS_S_D = { 587, 1}, - .ADDS_U_B = { 588, 1}, - .ADDS_U_H = { 589, 1}, - .ADDS_U_W = { 590, 1}, - .ADDS_U_D = { 591, 1}, - .SUBS_S_B = { 592, 1}, - .SUBS_S_H = { 593, 1}, - .SUBS_S_W = { 594, 1}, - .SUBS_S_D = { 595, 1}, - .SUBS_U_B = { 596, 1}, - .SUBS_U_H = { 597, 1}, - .SUBS_U_W = { 598, 1}, - .SUBS_U_D = { 599, 1}, - .MULV_B = { 600, 1}, - .MULV_H = { 601, 1}, - .MULV_W = { 602, 1}, - .MULV_D = { 603, 1}, - .DIV_S_B = { 604, 1}, - .DIV_S_H = { 605, 1}, - .DIV_S_W = { 606, 1}, - .DIV_S_D = { 607, 1}, - .DIV_U_B = { 608, 1}, - .DIV_U_H = { 609, 1}, - .DIV_U_W = { 610, 1}, - .DIV_U_D = { 611, 1}, - .MOD_S_B = { 612, 1}, - .MOD_S_H = { 613, 1}, - .MOD_S_W = { 614, 1}, - .MOD_S_D = { 615, 1}, - .MOD_U_B = { 616, 1}, - .MOD_U_H = { 617, 1}, - .MOD_U_W = { 618, 1}, - .MOD_U_D = { 619, 1}, - .MADDV_B = { 620, 1}, - .MADDV_H = { 621, 1}, - .MADDV_W = { 622, 1}, - .MADDV_D = { 623, 1}, - .MSUBV_B = { 624, 1}, - .MSUBV_H = { 625, 1}, - .MSUBV_W = { 626, 1}, - .MSUBV_D = { 627, 1}, - .DOTP_S_H = { 628, 1}, - .DOTP_S_W = { 629, 1}, - .DOTP_S_D = { 630, 1}, - .DOTP_U_H = { 631, 1}, - .DOTP_U_W = { 632, 1}, - .DOTP_U_D = { 633, 1}, - .AND_V = { 634, 1}, - .OR_V = { 635, 1}, - .NOR_V = { 636, 1}, - .XOR_V = { 637, 1}, - .ANDI_B = { 638, 1}, - .ORI_B = { 639, 1}, - .NORI_B = { 640, 1}, - .XORI_B = { 641, 1}, - .BSEL_V = { 642, 1}, - .BSELI_B = { 643, 1}, - .BMNZ_V = { 644, 1}, - .BMNZI_B = { 645, 1}, - .BMZ_V = { 646, 1}, - .BMZI_B = { 647, 1}, - .CEQ_B = { 648, 1}, - .CEQ_H = { 649, 1}, - .CEQ_W = { 650, 1}, - .CEQ_D = { 651, 1}, - .CLT_S_B = { 652, 1}, - .CLT_S_H = { 653, 1}, - .CLT_S_W = { 654, 1}, - .CLT_S_D = { 655, 1}, - .CLT_U_B = { 656, 1}, - .CLT_U_H = { 657, 1}, - .CLT_U_W = { 658, 1}, - .CLT_U_D = { 659, 1}, - .CLE_S_B = { 660, 1}, - .CLE_S_H = { 661, 1}, - .CLE_S_W = { 662, 1}, - .CLE_S_D = { 663, 1}, - .CLE_U_B = { 664, 1}, - .CLE_U_H = { 665, 1}, - .CLE_U_W = { 666, 1}, - .CLE_U_D = { 667, 1}, - .MIN_S_B = { 668, 1}, - .MIN_S_H = { 669, 1}, - .MIN_S_W = { 670, 1}, - .MIN_S_D = { 671, 1}, - .MIN_U_B = { 672, 1}, - .MIN_U_H = { 673, 1}, - .MIN_U_W = { 674, 1}, - .MIN_U_D = { 675, 1}, - .MAX_S_B = { 676, 1}, - .MAX_S_H = { 677, 1}, - .MAX_S_W = { 678, 1}, - .MAX_S_D = { 679, 1}, - .MAX_U_B = { 680, 1}, - .MAX_U_H = { 681, 1}, - .MAX_U_W = { 682, 1}, - .MAX_U_D = { 683, 1}, - .SLL_B = { 684, 1}, - .SLL_H = { 685, 1}, - .SLL_W = { 686, 1}, - .SLL_D = { 687, 1}, - .SRL_B = { 688, 1}, - .SRL_H = { 689, 1}, - .SRL_W = { 690, 1}, - .SRL_D = { 691, 1}, - .SRA_B = { 692, 1}, - .SRA_H = { 693, 1}, - .SRA_W = { 694, 1}, - .SRA_D = { 695, 1}, - .SLLI_B = { 696, 1}, - .SLLI_H = { 697, 1}, - .SLLI_W = { 698, 1}, - .SLLI_D = { 699, 1}, - .SRLI_B = { 700, 1}, - .SRLI_H = { 701, 1}, - .SRLI_W = { 702, 1}, - .SRLI_D = { 703, 1}, - .SRAI_B = { 704, 1}, - .SRAI_H = { 705, 1}, - .SRAI_W = { 706, 1}, - .SRAI_D = { 707, 1}, - .FADD_W = { 708, 1}, - .FADD_D = { 709, 1}, - .FSUB_W = { 710, 1}, - .FSUB_D = { 711, 1}, - .FMUL_W = { 712, 1}, - .FMUL_D = { 713, 1}, - .FDIV_W = { 714, 1}, - .FDIV_D = { 715, 1}, - .FSQRT_W = { 716, 1}, - .FSQRT_D = { 717, 1}, - .FRSQRT_W = { 718, 1}, - .FRSQRT_D = { 719, 1}, - .FRCP_W = { 720, 1}, - .FRCP_D = { 721, 1}, - .FRINT_W = { 722, 1}, - .FRINT_D = { 723, 1}, - .FMAX_W = { 724, 1}, - .FMAX_D = { 725, 1}, - .FMIN_W = { 726, 1}, - .FMIN_D = { 727, 1}, - .FCEQ_W = { 728, 1}, - .FCEQ_D = { 729, 1}, - .FCNE_W = { 730, 1}, - .FCNE_D = { 731, 1}, - .FCLT_W = { 732, 1}, - .FCLT_D = { 733, 1}, - .FCLE_W = { 734, 1}, - .FCLE_D = { 735, 1}, - .FFINT_S_W = { 736, 1}, - .FFINT_S_D = { 737, 1}, - .FFINT_U_W = { 738, 1}, - .FFINT_U_D = { 739, 1}, - .FTRUNC_S_W = { 740, 1}, - .FTRUNC_S_D = { 741, 1}, - .FTRUNC_U_W = { 742, 1}, - .FTRUNC_U_D = { 743, 1}, - .FCVT_S_W = { 744, 1}, - .FCVT_S_D = { 745, 1}, - .FCVT_D_W = { 746, 1}, - .LD_B = { 747, 1}, - .LD_H = { 748, 1}, - .LD_W = { 749, 1}, - .LD_D = { 750, 1}, - .ST_B = { 751, 1}, - .ST_H = { 752, 1}, - .ST_W = { 753, 1}, - .ST_D = { 754, 1}, - .LDI_B = { 755, 1}, - .LDI_H = { 756, 1}, - .LDI_W = { 757, 1}, - .LDI_D = { 758, 1}, - .COPY_S_B = { 759, 1}, - .COPY_S_H = { 760, 1}, - .COPY_S_W = { 761, 1}, - .COPY_U_B = { 762, 1}, - .COPY_U_H = { 763, 1}, - .COPY_U_W = { 764, 0}, - .INSERT_B = { 764, 1}, - .INSERT_H = { 765, 1}, - .INSERT_W = { 766, 1}, - .INSERT_D = { 767, 0}, - .INSVE_B = { 767, 1}, - .INSVE_H = { 768, 1}, - .INSVE_W = { 769, 1}, - .INSVE_D = { 770, 1}, - .SHF_B = { 771, 1}, - .SHF_H = { 772, 1}, - .SHF_W = { 773, 1}, - .VSHF_B = { 774, 1}, - .VSHF_H = { 775, 1}, - .VSHF_W = { 776, 1}, - .VSHF_D = { 777, 1}, - .SLD_B = { 778, 1}, - .SLD_H = { 779, 1}, - .SLD_W = { 780, 1}, - .SLD_D = { 781, 1}, - .SLDI_B = { 782, 1}, - .SLDI_H = { 783, 1}, - .SLDI_W = { 784, 1}, - .SLDI_D = { 785, 1}, - .SPLAT_B = { 786, 1}, - .SPLAT_H = { 787, 1}, - .SPLAT_W = { 788, 1}, - .SPLAT_D = { 789, 1}, - .SPLATI_B = { 790, 1}, - .SPLATI_H = { 791, 1}, - .SPLATI_W = { 792, 1}, - .SPLATI_D = { 793, 1}, - .BZ_V = { 794, 0}, - .BNZ_V = { 794, 0}, - .BZ_B = { 794, 0}, - .BZ_H = { 794, 0}, - .BZ_W = { 794, 0}, - .BZ_D = { 794, 0}, - .BNZ_B = { 794, 0}, - .BNZ_H = { 794, 0}, - .BNZ_W = { 794, 0}, - .BNZ_D = { 794, 0}, - .NLOC_B = { 794, 1}, - .NLOC_H = { 795, 1}, - .NLOC_W = { 796, 1}, - .NLOC_D = { 797, 1}, - .NLZC_B = { 798, 1}, - .NLZC_H = { 799, 1}, - .NLZC_W = { 800, 1}, - .NLZC_D = { 801, 1}, - .PCNT_B = { 802, 1}, - .PCNT_H = { 803, 1}, - .PCNT_W = { 804, 1}, - .PCNT_D = { 805, 1}, - .VMOV_S = { 806, 1}, - .VMOV_P = { 807, 1}, - .VMOV_T = { 808, 1}, - .VMOV_Q = { 809, 1}, - .LV_S = { 810, 1}, - .LV_Q = { 811, 1}, - .SV_S = { 812, 1}, - .SV_Q = { 813, 1}, - .LVL_Q = { 814, 1}, - .LVR_Q = { 815, 1}, - .SVL_Q = { 816, 1}, - .SVR_Q = { 817, 1}, - .VIIM_S = { 818, 1}, - .VFIM_S = { 819, 1}, - .VADD_S = { 820, 1}, - .VADD_P = { 821, 1}, - .VADD_T = { 822, 1}, - .VADD_Q = { 823, 1}, - .VSUB_S = { 824, 1}, - .VSUB_P = { 825, 1}, - .VSUB_T = { 826, 1}, - .VSUB_Q = { 827, 1}, - .VMUL_S = { 828, 1}, - .VMUL_P = { 829, 1}, - .VMUL_T = { 830, 1}, - .VMUL_Q = { 831, 1}, - .VDIV_S = { 832, 1}, - .VDIV_P = { 833, 1}, - .VDIV_T = { 834, 1}, - .VDIV_Q = { 835, 1}, - .VABS_S = { 836, 1}, - .VABS_P = { 837, 1}, - .VABS_T = { 838, 1}, - .VABS_Q = { 839, 1}, - .VNEG_S = { 840, 1}, - .VNEG_P = { 841, 1}, - .VNEG_T = { 842, 1}, - .VNEG_Q = { 843, 1}, - .VSQRT_S = { 844, 1}, - .VRCP_S = { 845, 1}, - .VRCP_P = { 846, 1}, - .VRCP_T = { 847, 1}, - .VRCP_Q = { 848, 1}, - .VRSQ_S = { 849, 1}, - .VRSQ_P = { 850, 1}, - .VRSQ_T = { 851, 1}, - .VRSQ_Q = { 852, 1}, - .VDOT_P = { 853, 1}, - .VDOT_T = { 854, 1}, - .VDOT_Q = { 855, 1}, - .VSCL_P = { 856, 1}, - .VSCL_T = { 857, 1}, - .VSCL_Q = { 858, 1}, - .VHDP_P = { 859, 1}, - .VHDP_T = { 860, 1}, - .VHDP_Q = { 861, 1}, - .VAVG_P = { 862, 1}, - .VAVG_T = { 863, 1}, - .VAVG_Q = { 864, 1}, - .VFAD_P = { 865, 1}, - .VFAD_T = { 866, 1}, - .VFAD_Q = { 867, 1}, - .VMMUL_P = { 868, 1}, - .VMMUL_T = { 869, 1}, - .VMMUL_Q = { 870, 1}, - .VTFM2_P = { 871, 1}, - .VTFM3_T = { 872, 1}, - .VTFM4_Q = { 873, 1}, - .VHTFM2_P = { 874, 1}, - .VHTFM3_T = { 875, 1}, - .VHTFM4_Q = { 876, 1}, - .VMSCL_P = { 877, 1}, - .VMSCL_T = { 878, 1}, - .VMSCL_Q = { 879, 1}, - .VMMOV_P = { 880, 1}, - .VMMOV_T = { 881, 1}, - .VMMOV_Q = { 882, 1}, - .VMIDT_P = { 883, 1}, - .VMIDT_T = { 884, 1}, - .VMIDT_Q = { 885, 1}, - .VMZERO_P = { 886, 1}, - .VMZERO_T = { 887, 1}, - .VMZERO_Q = { 888, 1}, - .VMONE_P = { 889, 1}, - .VMONE_T = { 890, 1}, - .VMONE_Q = { 891, 1}, - .VCRS_T = { 892, 1}, - .VCRSP_T = { 893, 1}, - .VQMUL_Q = { 894, 1}, - .VCMP_S = { 895, 1}, - .VCMP_P = { 896, 1}, - .VCMP_T = { 897, 1}, - .VCMP_Q = { 898, 1}, - .VMIN_S = { 899, 1}, - .VMIN_P = { 900, 1}, - .VMIN_T = { 901, 1}, - .VMIN_Q = { 902, 1}, - .VMAX_S = { 903, 1}, - .VMAX_P = { 904, 1}, - .VMAX_T = { 905, 1}, - .VMAX_Q = { 906, 1}, - .VSIN_S = { 907, 1}, - .VCOS_S = { 908, 1}, - .VEXP2_S = { 909, 1}, - .VLOG2_S = { 910, 1}, - .VASIN_S = { 911, 1}, - .VNRCP_S = { 912, 1}, - .VNSIN_S = { 913, 1}, - .VREXP2_S = { 914, 1}, - .VSGN_S = { 915, 1}, - .VI2F_S = { 916, 1}, - .VI2F_P = { 917, 1}, - .VI2F_T = { 918, 1}, - .VI2F_Q = { 919, 1}, - .VF2IN_S = { 920, 1}, - .VF2IN_P = { 921, 1}, - .VF2IN_T = { 922, 1}, - .VF2IN_Q = { 923, 1}, - .VF2IZ_S = { 924, 1}, - .VF2IZ_P = { 925, 1}, - .VF2IZ_T = { 926, 1}, - .VF2IZ_Q = { 927, 1}, - .VF2IU_S = { 928, 1}, - .VF2IU_P = { 929, 1}, - .VF2IU_T = { 930, 1}, - .VF2IU_Q = { 931, 1}, - .VF2ID_S = { 932, 1}, - .VF2ID_P = { 933, 1}, - .VF2ID_T = { 934, 1}, - .VF2ID_Q = { 935, 1}, - .VF2H_P = { 936, 1}, - .VH2F_S = { 937, 1}, - .VFLUSH = { 938, 1}, - .VSYNC = { 939, 1}, - .VNOP = { 940, 1}, - .VPFXS = { 941, 1}, - .VPFXT = { 942, 1}, - .VPFXD = { 943, 1}, - .VCST_S = { 944, 1}, - .VCST_P = { 945, 1}, - .VCST_T = { 946, 1}, - .VCST_Q = { 947, 1}, - .MFV = { 948, 1}, - .MTV = { 949, 1}, - .MFVC = { 950, 1}, - .MTVC = { 951, 1}, - .BVF = { 952, 1}, - .BVT = { 953, 1}, - .BVFL = { 954, 1}, - .BVTL = { 955, 1}, + .SHRL_PH = { 557, 1}, + .SHRLV_QB = { 558, 1}, + .SHRLV_PH = { 559, 1}, + .SHRA_QB = { 560, 1}, + .SHRA_R_QB = { 561, 1}, + .SHRA_PH = { 562, 1}, + .SHRA_R_PH = { 563, 1}, + .SHRA_R_W = { 564, 1}, + .SHRAV_QB = { 565, 1}, + .SHRAV_R_QB = { 566, 1}, + .SHRAV_PH = { 567, 1}, + .SHRAV_R_PH = { 568, 1}, + .SHRAV_R_W = { 569, 1}, + .LBUX = { 570, 1}, + .LHX = { 571, 1}, + .LWX = { 572, 1}, + .BPOSGE32 = { 573, 1}, + .BPOSGE64 = { 574, 0}, + .INSV = { 574, 1}, + .BITREV = { 575, 1}, + .ABSQ_S_PH = { 576, 1}, + .ABSQ_S_W = { 577, 1}, + .REPL_PH = { 578, 0}, + .REPLV_PH = { 578, 1}, + .REPL_QB = { 579, 0}, + .REPLV_QB = { 579, 1}, + .ADDV_B = { 580, 1}, + .ADDV_H = { 581, 1}, + .ADDV_W = { 582, 1}, + .ADDV_D = { 583, 1}, + .SUBV_B = { 584, 1}, + .SUBV_H = { 585, 1}, + .SUBV_W = { 586, 1}, + .SUBV_D = { 587, 1}, + .ADDS_S_B = { 588, 1}, + .ADDS_S_H = { 589, 1}, + .ADDS_S_W = { 590, 1}, + .ADDS_S_D = { 591, 1}, + .ADDS_U_B = { 592, 1}, + .ADDS_U_H = { 593, 1}, + .ADDS_U_W = { 594, 1}, + .ADDS_U_D = { 595, 1}, + .SUBS_S_B = { 596, 1}, + .SUBS_S_H = { 597, 1}, + .SUBS_S_W = { 598, 1}, + .SUBS_S_D = { 599, 1}, + .SUBS_U_B = { 600, 1}, + .SUBS_U_H = { 601, 1}, + .SUBS_U_W = { 602, 1}, + .SUBS_U_D = { 603, 1}, + .MULV_B = { 604, 1}, + .MULV_H = { 605, 1}, + .MULV_W = { 606, 1}, + .MULV_D = { 607, 1}, + .DIV_S_B = { 608, 1}, + .DIV_S_H = { 609, 1}, + .DIV_S_W = { 610, 1}, + .DIV_S_D = { 611, 1}, + .DIV_U_B = { 612, 1}, + .DIV_U_H = { 613, 1}, + .DIV_U_W = { 614, 1}, + .DIV_U_D = { 615, 1}, + .MOD_S_B = { 616, 1}, + .MOD_S_H = { 617, 1}, + .MOD_S_W = { 618, 1}, + .MOD_S_D = { 619, 1}, + .MOD_U_B = { 620, 1}, + .MOD_U_H = { 621, 1}, + .MOD_U_W = { 622, 1}, + .MOD_U_D = { 623, 1}, + .MADDV_B = { 624, 1}, + .MADDV_H = { 625, 1}, + .MADDV_W = { 626, 1}, + .MADDV_D = { 627, 1}, + .MSUBV_B = { 628, 1}, + .MSUBV_H = { 629, 1}, + .MSUBV_W = { 630, 1}, + .MSUBV_D = { 631, 1}, + .DOTP_S_H = { 632, 1}, + .DOTP_S_W = { 633, 1}, + .DOTP_S_D = { 634, 1}, + .DOTP_U_H = { 635, 1}, + .DOTP_U_W = { 636, 1}, + .DOTP_U_D = { 637, 1}, + .AND_V = { 638, 1}, + .OR_V = { 639, 1}, + .NOR_V = { 640, 1}, + .XOR_V = { 641, 1}, + .ANDI_B = { 642, 1}, + .ORI_B = { 643, 1}, + .NORI_B = { 644, 1}, + .XORI_B = { 645, 1}, + .BSEL_V = { 646, 1}, + .BSELI_B = { 647, 1}, + .BMNZ_V = { 648, 1}, + .BMNZI_B = { 649, 1}, + .BMZ_V = { 650, 1}, + .BMZI_B = { 651, 1}, + .CEQ_B = { 652, 1}, + .CEQ_H = { 653, 1}, + .CEQ_W = { 654, 1}, + .CEQ_D = { 655, 1}, + .CLT_S_B = { 656, 1}, + .CLT_S_H = { 657, 1}, + .CLT_S_W = { 658, 1}, + .CLT_S_D = { 659, 1}, + .CLT_U_B = { 660, 1}, + .CLT_U_H = { 661, 1}, + .CLT_U_W = { 662, 1}, + .CLT_U_D = { 663, 1}, + .CLE_S_B = { 664, 1}, + .CLE_S_H = { 665, 1}, + .CLE_S_W = { 666, 1}, + .CLE_S_D = { 667, 1}, + .CLE_U_B = { 668, 1}, + .CLE_U_H = { 669, 1}, + .CLE_U_W = { 670, 1}, + .CLE_U_D = { 671, 1}, + .MIN_S_B = { 672, 1}, + .MIN_S_H = { 673, 1}, + .MIN_S_W = { 674, 1}, + .MIN_S_D = { 675, 1}, + .MIN_U_B = { 676, 1}, + .MIN_U_H = { 677, 1}, + .MIN_U_W = { 678, 1}, + .MIN_U_D = { 679, 1}, + .MAX_S_B = { 680, 1}, + .MAX_S_H = { 681, 1}, + .MAX_S_W = { 682, 1}, + .MAX_S_D = { 683, 1}, + .MAX_U_B = { 684, 1}, + .MAX_U_H = { 685, 1}, + .MAX_U_W = { 686, 1}, + .MAX_U_D = { 687, 1}, + .SLL_B = { 688, 1}, + .SLL_H = { 689, 1}, + .SLL_W = { 690, 1}, + .SLL_D = { 691, 1}, + .SRL_B = { 692, 1}, + .SRL_H = { 693, 1}, + .SRL_W = { 694, 1}, + .SRL_D = { 695, 1}, + .SRA_B = { 696, 1}, + .SRA_H = { 697, 1}, + .SRA_W = { 698, 1}, + .SRA_D = { 699, 1}, + .SLLI_B = { 700, 1}, + .SLLI_H = { 701, 1}, + .SLLI_W = { 702, 1}, + .SLLI_D = { 703, 1}, + .SRLI_B = { 704, 1}, + .SRLI_H = { 705, 1}, + .SRLI_W = { 706, 1}, + .SRLI_D = { 707, 1}, + .SRAI_B = { 708, 1}, + .SRAI_H = { 709, 1}, + .SRAI_W = { 710, 1}, + .SRAI_D = { 711, 1}, + .FADD_W = { 712, 1}, + .FADD_D = { 713, 1}, + .FSUB_W = { 714, 1}, + .FSUB_D = { 715, 1}, + .FMUL_W = { 716, 1}, + .FMUL_D = { 717, 1}, + .FDIV_W = { 718, 1}, + .FDIV_D = { 719, 1}, + .FSQRT_W = { 720, 1}, + .FSQRT_D = { 721, 1}, + .FRSQRT_W = { 722, 1}, + .FRSQRT_D = { 723, 1}, + .FRCP_W = { 724, 1}, + .FRCP_D = { 725, 1}, + .FRINT_W = { 726, 1}, + .FRINT_D = { 727, 1}, + .FMAX_W = { 728, 1}, + .FMAX_D = { 729, 1}, + .FMIN_W = { 730, 1}, + .FMIN_D = { 731, 1}, + .FCEQ_W = { 732, 1}, + .FCEQ_D = { 733, 1}, + .FCNE_W = { 734, 1}, + .FCNE_D = { 735, 1}, + .FCLT_W = { 736, 1}, + .FCLT_D = { 737, 1}, + .FCLE_W = { 738, 1}, + .FCLE_D = { 739, 1}, + .FFINT_S_W = { 740, 1}, + .FFINT_S_D = { 741, 1}, + .FFINT_U_W = { 742, 1}, + .FFINT_U_D = { 743, 1}, + .FTRUNC_S_W = { 744, 1}, + .FTRUNC_S_D = { 745, 1}, + .FTRUNC_U_W = { 746, 1}, + .FTRUNC_U_D = { 747, 1}, + .FCVT_S_W = { 748, 1}, + .FCVT_S_D = { 749, 1}, + .FCVT_D_W = { 750, 1}, + .LD_B = { 751, 1}, + .LD_H = { 752, 1}, + .LD_W = { 753, 1}, + .LD_D = { 754, 1}, + .ST_B = { 755, 1}, + .ST_H = { 756, 1}, + .ST_W = { 757, 1}, + .ST_D = { 758, 1}, + .LDI_B = { 759, 1}, + .LDI_H = { 760, 1}, + .LDI_W = { 761, 1}, + .LDI_D = { 762, 1}, + .COPY_S_B = { 763, 1}, + .COPY_S_H = { 764, 1}, + .COPY_S_W = { 765, 1}, + .COPY_U_B = { 766, 1}, + .COPY_U_H = { 767, 1}, + .COPY_U_W = { 768, 0}, + .INSERT_B = { 768, 1}, + .INSERT_H = { 769, 1}, + .INSERT_W = { 770, 1}, + .INSERT_D = { 771, 0}, + .INSVE_B = { 771, 1}, + .INSVE_H = { 772, 1}, + .INSVE_W = { 773, 1}, + .INSVE_D = { 774, 1}, + .SHF_B = { 775, 1}, + .SHF_H = { 776, 1}, + .SHF_W = { 777, 1}, + .VSHF_B = { 778, 1}, + .VSHF_H = { 779, 1}, + .VSHF_W = { 780, 1}, + .VSHF_D = { 781, 1}, + .SLD_B = { 782, 1}, + .SLD_H = { 783, 1}, + .SLD_W = { 784, 1}, + .SLD_D = { 785, 1}, + .SLDI_B = { 786, 1}, + .SLDI_H = { 787, 1}, + .SLDI_W = { 788, 1}, + .SLDI_D = { 789, 1}, + .SPLAT_B = { 790, 1}, + .SPLAT_H = { 791, 1}, + .SPLAT_W = { 792, 1}, + .SPLAT_D = { 793, 1}, + .SPLATI_B = { 794, 1}, + .SPLATI_H = { 795, 1}, + .SPLATI_W = { 796, 1}, + .SPLATI_D = { 797, 1}, + .BZ_V = { 798, 0}, + .BNZ_V = { 798, 0}, + .BZ_B = { 798, 0}, + .BZ_H = { 798, 0}, + .BZ_W = { 798, 0}, + .BZ_D = { 798, 0}, + .BNZ_B = { 798, 0}, + .BNZ_H = { 798, 0}, + .BNZ_W = { 798, 0}, + .BNZ_D = { 798, 0}, + .NLOC_B = { 798, 1}, + .NLOC_H = { 799, 1}, + .NLOC_W = { 800, 1}, + .NLOC_D = { 801, 1}, + .NLZC_B = { 802, 1}, + .NLZC_H = { 803, 1}, + .NLZC_W = { 804, 1}, + .NLZC_D = { 805, 1}, + .PCNT_B = { 806, 1}, + .PCNT_H = { 807, 1}, + .PCNT_W = { 808, 1}, + .PCNT_D = { 809, 1}, + .VMOV_S = { 810, 1}, + .VMOV_P = { 811, 1}, + .VMOV_T = { 812, 1}, + .VMOV_Q = { 813, 1}, + .LV_S = { 814, 1}, + .LV_Q = { 815, 1}, + .SV_S = { 816, 1}, + .SV_Q = { 817, 1}, + .LVL_Q = { 818, 1}, + .LVR_Q = { 819, 1}, + .SVL_Q = { 820, 1}, + .SVR_Q = { 821, 1}, + .VIIM_S = { 822, 1}, + .VFIM_S = { 823, 1}, + .VADD_S = { 824, 1}, + .VADD_P = { 825, 1}, + .VADD_T = { 826, 1}, + .VADD_Q = { 827, 1}, + .VSUB_S = { 828, 1}, + .VSUB_P = { 829, 1}, + .VSUB_T = { 830, 1}, + .VSUB_Q = { 831, 1}, + .VMUL_S = { 832, 1}, + .VMUL_P = { 833, 1}, + .VMUL_T = { 834, 1}, + .VMUL_Q = { 835, 1}, + .VDIV_S = { 836, 1}, + .VDIV_P = { 837, 1}, + .VDIV_T = { 838, 1}, + .VDIV_Q = { 839, 1}, + .VABS_S = { 840, 1}, + .VABS_P = { 841, 1}, + .VABS_T = { 842, 1}, + .VABS_Q = { 843, 1}, + .VNEG_S = { 844, 1}, + .VNEG_P = { 845, 1}, + .VNEG_T = { 846, 1}, + .VNEG_Q = { 847, 1}, + .VSQRT_S = { 848, 1}, + .VRCP_S = { 849, 1}, + .VRCP_P = { 850, 1}, + .VRCP_T = { 851, 1}, + .VRCP_Q = { 852, 1}, + .VRSQ_S = { 853, 1}, + .VRSQ_P = { 854, 1}, + .VRSQ_T = { 855, 1}, + .VRSQ_Q = { 856, 1}, + .VDOT_P = { 857, 1}, + .VDOT_T = { 858, 1}, + .VDOT_Q = { 859, 1}, + .VSCL_P = { 860, 1}, + .VSCL_T = { 861, 1}, + .VSCL_Q = { 862, 1}, + .VHDP_P = { 863, 1}, + .VHDP_T = { 864, 1}, + .VHDP_Q = { 865, 1}, + .VAVG_P = { 866, 1}, + .VAVG_T = { 867, 1}, + .VAVG_Q = { 868, 1}, + .VFAD_P = { 869, 1}, + .VFAD_T = { 870, 1}, + .VFAD_Q = { 871, 1}, + .VMMUL_P = { 872, 1}, + .VMMUL_T = { 873, 1}, + .VMMUL_Q = { 874, 1}, + .VTFM2_P = { 875, 1}, + .VTFM3_T = { 876, 1}, + .VTFM4_Q = { 877, 1}, + .VHTFM2_P = { 878, 1}, + .VHTFM3_T = { 879, 1}, + .VHTFM4_Q = { 880, 1}, + .VMSCL_P = { 881, 1}, + .VMSCL_T = { 882, 1}, + .VMSCL_Q = { 883, 1}, + .VMMOV_P = { 884, 1}, + .VMMOV_T = { 885, 1}, + .VMMOV_Q = { 886, 1}, + .VMIDT_P = { 887, 1}, + .VMIDT_T = { 888, 1}, + .VMIDT_Q = { 889, 1}, + .VMZERO_P = { 890, 1}, + .VMZERO_T = { 891, 1}, + .VMZERO_Q = { 892, 1}, + .VMONE_P = { 893, 1}, + .VMONE_T = { 894, 1}, + .VMONE_Q = { 895, 1}, + .VCRS_T = { 896, 1}, + .VCRSP_T = { 897, 1}, + .VQMUL_Q = { 898, 1}, + .VCMP_S = { 899, 1}, + .VCMP_P = { 900, 1}, + .VCMP_T = { 901, 1}, + .VCMP_Q = { 902, 1}, + .VMIN_S = { 903, 1}, + .VMIN_P = { 904, 1}, + .VMIN_T = { 905, 1}, + .VMIN_Q = { 906, 1}, + .VMAX_S = { 907, 1}, + .VMAX_P = { 908, 1}, + .VMAX_T = { 909, 1}, + .VMAX_Q = { 910, 1}, + .VSIN_S = { 911, 1}, + .VCOS_S = { 912, 1}, + .VEXP2_S = { 913, 1}, + .VLOG2_S = { 914, 1}, + .VASIN_S = { 915, 1}, + .VNRCP_S = { 916, 1}, + .VNSIN_S = { 917, 1}, + .VREXP2_S = { 918, 1}, + .VSGN_S = { 919, 1}, + .VI2F_S = { 920, 1}, + .VI2F_P = { 921, 1}, + .VI2F_T = { 922, 1}, + .VI2F_Q = { 923, 1}, + .VF2IN_S = { 924, 1}, + .VF2IN_P = { 925, 1}, + .VF2IN_T = { 926, 1}, + .VF2IN_Q = { 927, 1}, + .VF2IZ_S = { 928, 1}, + .VF2IZ_P = { 929, 1}, + .VF2IZ_T = { 930, 1}, + .VF2IZ_Q = { 931, 1}, + .VF2IU_S = { 932, 1}, + .VF2IU_P = { 933, 1}, + .VF2IU_T = { 934, 1}, + .VF2IU_Q = { 935, 1}, + .VF2ID_S = { 936, 1}, + .VF2ID_P = { 937, 1}, + .VF2ID_T = { 938, 1}, + .VF2ID_Q = { 939, 1}, + .VF2H_P = { 940, 1}, + .VH2F_S = { 941, 1}, + .VFLUSH = { 942, 1}, + .VSYNC = { 943, 1}, + .VNOP = { 944, 1}, + .VPFXS = { 945, 1}, + .VPFXT = { 946, 1}, + .VPFXD = { 947, 1}, + .VCST_S = { 948, 1}, + .VCST_P = { 949, 1}, + .VCST_T = { 950, 1}, + .VCST_Q = { 951, 1}, + .MFV = { 952, 1}, + .MTV = { 953, 1}, + .MFVC = { 954, 1}, + .MTVC = { 955, 1}, + .BVF = { 956, 1}, + .BVT = { 957, 1}, + .BVFL = { 958, 1}, + .BVTL = { 959, 1}, } diff --git a/core/rexcode/mips/tablegen/specgen.lua b/core/rexcode/mips/tablegen/specgen.lua index f33b66f28..20a133d77 100644 --- a/core/rexcode/mips/tablegen/specgen.lua +++ b/core/rexcode/mips/tablegen/specgen.lua @@ -265,6 +265,13 @@ do if r then sections[#sections+1]=r end end +-- ---- DSP ASE shift by immediate (Rd, Rt, sa) ------------------------------ +for _, b in ipairs({{"SHRA_QB","shra.qb",7},{"SHRA_R_QB","shra_r.qb",7},{"SHRA_R_PH","shra_r.ph",15},{"SHRL_PH","shrl.ph",15}}) do + local r = entry(b[1], "{.GPR,.GPR,.IMM5,.NONE}", "{.RD,.RT,.DSP_SA,.NONE}", "DSP_R2", + function(v) return string.format("%s $%d,$%d,%d", b[2], v[1], v[2], v[3]) end, {31,31,b[3]}) + if r then sections[#sections+1]=r end +end + -- ---- splice into the SoT --------------------------------------------------- local region = " // SPECGEN:BEGIN\n" .. table.concat(sections, "\n") .. "\n // SPECGEN:END" local fh = assert(io.open(TABLE, "r")); local src = fh:read("*a"); fh:close() diff --git a/core/rexcode/mips/tables/mips.encode_forms.bin b/core/rexcode/mips/tables/mips.encode_forms.bin index ae2778287..31d0462fb 100644 Binary files a/core/rexcode/mips/tables/mips.encode_forms.bin and b/core/rexcode/mips/tables/mips.encode_forms.bin differ diff --git a/core/rexcode/mips/tables/mips.encode_runs.bin b/core/rexcode/mips/tables/mips.encode_runs.bin index 72f3d8f37..d7a2776ad 100644 Binary files a/core/rexcode/mips/tables/mips.encode_runs.bin and b/core/rexcode/mips/tables/mips.encode_runs.bin differ diff --git a/core/rexcode/mips/tables/mips.entries.bin b/core/rexcode/mips/tables/mips.entries.bin index e051be632..edb71357c 100644 Binary files a/core/rexcode/mips/tables/mips.entries.bin and b/core/rexcode/mips/tables/mips.entries.bin differ diff --git a/core/rexcode/mips/tables/mips.idx_primary.bin b/core/rexcode/mips/tables/mips.idx_primary.bin index d7a76390e..f33214678 100644 Binary files a/core/rexcode/mips/tables/mips.idx_primary.bin and b/core/rexcode/mips/tables/mips.idx_primary.bin differ diff --git a/core/rexcode/mips/tables/mips.idx_special3.bin b/core/rexcode/mips/tables/mips.idx_special3.bin index 6421853e6..53ed01c63 100644 Binary files a/core/rexcode/mips/tables/mips.idx_special3.bin and b/core/rexcode/mips/tables/mips.idx_special3.bin differ