rexcode/mips: DSP ASE replicate-immediate forms (REPL.PH/QB)

REPL.PH (signed 10-bit broadcast, reuses MSA_S10) and REPL.QB (8-bit,
reuses MSA_I8). Byte-exact vs llvm-mc including a negative .PH immediate;
281 tests green.
This commit is contained in:
Brendan Punsky
2026-06-18 03:46:50 -04:00
committed by Flāvius
parent 5b91624cd3
commit f290347c24
10 changed files with 466 additions and 438 deletions

View File

@@ -1216,8 +1216,12 @@ inst_absq_s_ph_r_r :: #force_inline proc "contextless" (dst: GPR, src: G
emit_absq_s_ph_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_absq_s_ph_r_r(dst, src)) }
inst_absq_s_w_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .ABSQ_S_W, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} }
emit_absq_s_w_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_absq_s_w_r_r(dst, src)) }
inst_repl_ph_r_i5 :: #force_inline proc "contextless" (dst: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .REPL_PH, operand_count = 2, length = 4, ops = {op_gpr(dst), op_imm(imm, 1), {}, {}}} }
emit_repl_ph_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append(instructions, inst_repl_ph_r_i5(dst, imm)) }
inst_replv_ph_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .REPLV_PH, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} }
emit_replv_ph_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_replv_ph_r_r(dst, src)) }
inst_repl_qb_r_i5 :: #force_inline proc "contextless" (dst: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .REPL_QB, operand_count = 2, length = 4, ops = {op_gpr(dst), op_imm(imm, 1), {}, {}}} }
emit_repl_qb_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append(instructions, inst_repl_qb_r_i5(dst, imm)) }
inst_replv_qb_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .REPLV_QB, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} }
emit_replv_qb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_replv_qb_r_r(dst, src)) }
inst_addv_b_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDV_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} }
@@ -3193,8 +3197,12 @@ inst_absq_s_ph :: inst_absq_s_ph_r_r
emit_absq_s_ph :: emit_absq_s_ph_r_r
inst_absq_s_w :: inst_absq_s_w_r_r
emit_absq_s_w :: emit_absq_s_w_r_r
inst_repl_ph :: inst_repl_ph_r_i5
emit_repl_ph :: emit_repl_ph_r_i5
inst_replv_ph :: inst_replv_ph_r_r
emit_replv_ph :: emit_replv_ph_r_r
inst_repl_qb :: inst_repl_qb_r_i5
emit_repl_qb :: emit_repl_qb_r_i5
inst_replv_qb :: inst_replv_qb_r_r
emit_replv_qb :: emit_replv_qb_r_r
inst_addv_b :: inst_addv_b_w_w_w

View File

@@ -1640,6 +1640,8 @@ 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, {}} },
.REPL_PH = { {.REPL_PH, {.GPR,.IMM5,.NONE,.NONE}, {.RD,.MSA_S10,.NONE,.NONE}, 0x7C000292, 0xFC0007FF, .DSP_R1, {}} },
.REPL_QB = { {.REPL_QB, {.GPR,.IMM5,.NONE,.NONE}, {.RD,.MSA_I8,.NONE,.NONE}, 0x7C000092, 0xFF0007FF, .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, {}} },
.EXTRV_R_W = { {.EXTRV_R_W, {.GPR,.IMM5,.GPR,.NONE}, {.RT,.AC_NUM,.RS,.NONE}, 0x7C000178, 0xFC00E7FF, .DSP_R2, {}} },

View File

@@ -8,7 +8,7 @@ package rexcode_mips_generated
import lib "../.."
@(rodata)
DECODE_ENTRIES := [986]lib.Decode_Entry{
DECODE_ENTRIES := [988]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, {} },
@@ -784,6 +784,8 @@ DECODE_ENTRIES := [986]lib.Decode_Entry{
{ .ABSQ_S_W, {.GPR,.GPR,.NONE,.NONE}, {.RD,.RT,.NONE,.NONE}, 0x7C000452, 0xFFE007FF, .DSP_R1, {} },
{ .REPLV_PH, {.GPR,.GPR,.NONE,.NONE}, {.RD,.RT,.NONE,.NONE}, 0x7C0002D2, 0xFFE007FF, .DSP_R2, {} },
{ .REPLV_QB, {.GPR,.GPR,.NONE,.NONE}, {.RD,.RT,.NONE,.NONE}, 0x7C0000D2, 0xFFE007FF, .DSP_R2, {} },
{ .REPL_QB, {.GPR,.IMM5,.NONE,.NONE}, {.RD,.MSA_I8,.NONE,.NONE}, 0x7C000092, 0xFF0007FF, .DSP_R1, {} },
{ .REPL_PH, {.GPR,.IMM5,.NONE,.NONE}, {.RD,.MSA_S10,.NONE,.NONE}, 0x7C000292, 0xFC0007FF, .DSP_R1, {} },
{ .SHLL_QB, {.GPR,.GPR,.IMM5,.NONE}, {.RD,.RT,.IMM_5,.NONE}, 0x7C000013, 0xFFE0073F, .DSP_R1, {} },
{ .SHLL_PH, {.GPR,.GPR,.IMM5,.NONE}, {.RD,.RT,.IMM_5,.NONE}, 0x7C000213, 0xFFE0073F, .DSP_R1, {} },
{ .SHLL_S_PH, {.GPR,.GPR,.IMM5,.NONE}, {.RD,.RT,.IMM_5,.NONE}, 0x7C000313, 0xFFE0073F, .DSP_R1, {} },
@@ -1030,39 +1032,39 @@ DECODE_INDEX_PRIMARY := [64]lib.Decode_Index{
0x1C = { 364, 109},
0x1D = { 473, 1},
0x1E = { 474, 228},
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},
0x1F = { 702, 141},
0x20 = { 843, 1},
0x21 = { 844, 1},
0x22 = { 845, 1},
0x23 = { 846, 1},
0x24 = { 847, 1},
0x25 = { 848, 1},
0x26 = { 849, 1},
0x27 = { 850, 1},
0x28 = { 851, 1},
0x29 = { 852, 1},
0x2A = { 853, 1},
0x2B = { 854, 1},
0x2C = { 855, 1},
0x2D = { 856, 1},
0x2E = { 857, 1},
0x2F = { 858, 1},
0x30 = { 859, 1},
0x31 = { 860, 1},
0x32 = { 861, 3},
0x33 = { 864, 1},
0x34 = { 865, 63},
0x35 = { 928, 3},
0x36 = { 931, 5},
0x37 = { 936, 6},
0x38 = { 942, 1},
0x39 = { 943, 1},
0x3A = { 944, 3},
0x3B = { 947, 2},
0x3C = { 949, 27},
0x3D = { 976, 3},
0x3E = { 979, 5},
0x3F = { 984, 4},
}
@(rodata)
@@ -1232,12 +1234,12 @@ DECODE_INDEX_SPECIAL3 := [64]lib.Decode_Index{
0x0F = { 715, 8},
0x10 = { 723, 22},
0x11 = { 745, 15},
0x12 = { 760, 15},
0x13 = { 775, 22},
0x20 = { 797, 5},
0x24 = { 802, 4},
0x30 = { 806, 17},
0x38 = { 823, 17},
0x3B = { 840, 1},
0x12 = { 760, 17},
0x13 = { 777, 22},
0x20 = { 799, 5},
0x24 = { 804, 4},
0x30 = { 808, 17},
0x38 = { 825, 17},
0x3B = { 842, 1},
}

View File

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

View File

@@ -294,6 +294,18 @@ do
if r then sections[#sections+1]=r end
end
-- ---- DSP ASE replicate immediate (Rd <- broadcast imm) --------------------
-- REPL.PH = signed 10-bit at 25:16 (reuse MSA_S10); REPL.QB = 8-bit at 23:16
-- (reuse MSA_I8). Vary REPL.PH's imm to -1 so all ten field bits toggle.
do
local r = entry("REPL_PH", "{.GPR,.IMM5,.NONE,.NONE}", "{.RD,.MSA_S10,.NONE,.NONE}", "DSP_R1",
function(v) return string.format("repl.ph $%d,%d", v[1], v[2]) end, {31,-1})
if r then sections[#sections+1]=r end
r = entry("REPL_QB", "{.GPR,.IMM5,.NONE,.NONE}", "{.RD,.MSA_I8,.NONE,.NONE}", "DSP_R1",
function(v) return string.format("repl.qb $%d,%d", v[1], v[2]) end, {31,255})
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",