Refactor Kelvin isa file
Split the kelvin.isa file into groups based on func1 encoding to improve the readability
PiperOrigin-RevId: 553513487
diff --git a/sim/BUILD b/sim/BUILD
index fdf1818..47c560d 100644
--- a/sim/BUILD
+++ b/sim/BUILD
@@ -52,7 +52,13 @@
mpact_isa_decoder(
name = "kelvin_isa",
src = "kelvin.isa",
- includes = [],
+ includes = [
+ "kelvin_arith.isa",
+ "kelvin_base.isa",
+ "kelvin_memory.isa",
+ "kelvin_mul.isa",
+ "kelvin_shift.isa",
+ ],
isa_name = "Kelvin",
deps = [
":kelvin_instructions",
diff --git a/sim/kelvin.isa b/sim/kelvin.isa
index 6cf7aaa..db1a680 100644
--- a/sim/kelvin.isa
+++ b/sim/kelvin.isa
@@ -11,3779 +11,15 @@
slots { kelvin; }
}
-// Basic integer ALU instructions, part of the RiscV 32i subset.
-slot riscv32i {
- includes {
- #include "riscv/riscv_i_instructions.h"
- }
- default size = 4;
- default latency = global_latency;
- resources TwoOp = { next_pc, rs1 : rd[..rd]};
- resources ThreeOp = { next_pc, rs1, rs2 : rd[..rd]};
- opcodes {
- addi{: rs1, I_imm12 : rd},
- resources: TwoOp,
- disasm: "addi", "%rd, %rs1, %I_imm12",
- semfunc: "&mpact::sim::riscv::RV32::RiscVIAdd";
- slti{: rs1, I_imm12 : rd},
- resources: TwoOp,
- disasm: "slti", "%rd, %rs1, %I_imm12",
- semfunc: "&mpact::sim::riscv::RV32::RiscVISlt";
- sltiu{: rs1, I_imm12 : rd},
- resources: TwoOp,
- disasm: "sltiu", "%rd, %rs1, %I_imm12",
- semfunc: "&mpact::sim::riscv::RV32::RiscVISltu";
- andi{: rs1, I_imm12 : rd},
- resources: TwoOp,
- disasm: "andi", "%rd, %rs1, %I_imm12",
- semfunc: "&mpact::sim::riscv::RV32::RiscVIAnd";
- ori{: rs1, I_imm12 : rd},
- resources: TwoOp,
- disasm: "ori", "%rd, %rs1, %I_imm12",
- semfunc: "&mpact::sim::riscv::RV32::RiscVIOr";
- xori{: rs1, I_imm12 : rd},
- resources: TwoOp,
- disasm: "xori", "%rd, %rs1, %I_imm12",
- semfunc: "&mpact::sim::riscv::RV32::RiscVIXor";
- slli{: rs1, I_uimm5 : rd},
- resources: TwoOp,
- disasm: "slli", "%rd, %rs1, 0x%(I_uimm5:x)",
- semfunc: "&mpact::sim::riscv::RV32::RiscVISll";
- srli{: rs1, I_uimm5 : rd},
- resources: TwoOp,
- disasm: "srli", "%rd %rs1, 0x%(I_uimm5:x)",
- semfunc: "&mpact::sim::riscv::RV32::RiscVISrl";
- srai{: rs1, I_uimm5 : rd},
- resources: TwoOp,
- disasm: "srai", "%rd, %rs1, 0x%(I_uimm5:x)",
- semfunc: "&mpact::sim::riscv::RV32::RiscVISra";
- lui{: U_imm20 : rd},
- resources: { next_pc : rd[0..]},
- disasm: "lui", "%rd, 0x%(U_imm20:08x)",
- semfunc: "&mpact::sim::riscv::RV32::RiscVILui";
- auipc{: U_imm20 : rd},
- resources: { next_pc : rd[0..]},
- disasm: "auipc", "%rd, 0x%(U_imm20:08x)",
- semfunc: "&mpact::sim::riscv::RV32::RiscVIAuipc";
- add{: rs1, rs2 : rd},
- resources: ThreeOp,
- disasm: "add", "%rd, %rs1, %rs2",
- semfunc: "&mpact::sim::riscv::RV32::RiscVIAdd";
- slt{: rs1, rs2 : rd},
- resources: ThreeOp,
- disasm: "slt", "%rd, %rs1, %rs2",
- semfunc: "&mpact::sim::riscv::RV32::RiscVISlt";
- sltu{: rs1, rs2 : rd},
- resources: ThreeOp,
- disasm: "sltu", "%rd, %rs1, %rs2",
- semfunc: "&mpact::sim::riscv::RV32::RiscVISltu";
- and{: rs1, rs2 : rd},
- resources: ThreeOp,
- disasm: "and", "%rd, %rs1, %rs2",
- semfunc: "&mpact::sim::riscv::RV32::RiscVIAnd";
- or{: rs1, rs2 : rd},
- resources: ThreeOp,
- disasm: "or", "%rd, %rs1, %rs2",
- semfunc: "&mpact::sim::riscv::RV32::RiscVIOr";
- xor{: rs1, rs2 : rd},
- resources: ThreeOp,
- disasm: "xor", "%rd, %rs1, %rs2",
- semfunc: "&mpact::sim::riscv::RV32::RiscVIXor";
- sll{: rs1, rs2 : rd},
- resources: ThreeOp,
- disasm: "sll", "%rd, %rs1, %rs2",
- semfunc: "&mpact::sim::riscv::RV32::RiscVISll";
- srl{: rs1, rs2 : rd},
- resources: ThreeOp,
- disasm: "srl", "%rd, %rs1, %rs2",
- semfunc: "&mpact::sim::riscv::RV32::RiscVISrl";
- sub{: rs1, rs2 : rd},
- resources: ThreeOp,
- disasm: "sub", "%rd, %rs1, %rs2",
- semfunc: "&mpact::sim::riscv::RV32::RiscVISub";
- sra{: rs1, rs2 : rd},
- resources: ThreeOp,
- disasm: "sra", "%rd, %rs1, %rs2",
- semfunc: "&mpact::sim::riscv::RV32::RiscVISra";
- nop{},
- disasm: "nop",
- semfunc: "&mpact::sim::riscv::RiscVINop";
- hint{},
- disasm: "hint",
- semfunc: "&mpact::sim::riscv::RiscVINop";
- jal{: J_imm20 : next_pc, rd},
- resources: { next_pc : next_pc[0..], rd[0..]},
- disasm: "jal", "%rd, %(@+J_imm20:08x)",
- semfunc: "&mpact::sim::riscv::RV32::RiscVIJal";
- jalr{: rs1, J_imm12 : next_pc, rd},
- resources: { next_pc, rs1 : next_pc[0..], rd[0..]},
- disasm: "jalr", "%rd, %rs1, %J_imm12",
- semfunc: "&mpact::sim::riscv::RV32::RiscVIJalr";
- j{: J_imm20 : next_pc, rd},
- resources: { next_pc : next_pc[0..], rd[0..]},
- disasm: "j", "%(@+J_imm20:08x)",
- semfunc: "&mpact::sim::riscv::RV32::RiscVIJal";
- jr{: rs1, J_imm12 : next_pc, rd},
- resources: { next_pc, rs1 : next_pc[0..], rd[0..]},
- disasm: "jr", "%rs1, %J_imm12",
- semfunc: "&mpact::sim::riscv::RV32::RiscVIJalr";
- beq{: rs1, rs2, B_imm12 : next_pc},
- resources: { next_pc, rs1, rs2 : next_pc[0..]},
- disasm: "beq", "%rs1, %rs2, %(@+B_imm12:08x)",
- semfunc: "&mpact::sim::riscv::RV32::RiscVIBeq";
- bne{: rs1, rs2, B_imm12 : next_pc},
- resources: { next_pc, rs1, rs2 : next_pc[0..]},
- disasm: "bne", "%rs1, %rs2, %(@+B_imm12:08x)",
- semfunc: "&mpact::sim::riscv::RV32::RiscVIBne";
- blt{: rs1, rs2, B_imm12 : next_pc},
- resources: { next_pc, rs1, rs2 : next_pc[0..]},
- disasm: "blt", "%rs1, %rs2, %(@+B_imm12:08x)",
- semfunc: "&mpact::sim::riscv::RV32::RiscVIBlt";
- bltu{: rs1, rs2, B_imm12 : next_pc},
- resources: { next_pc, rs1, rs2 : next_pc[0..]},
- disasm: "bltu", "%rs1, %rs2, %(@+B_imm12:08x)",
- semfunc: "&mpact::sim::riscv::RV32::RiscVIBltu";
- bge{: rs1, rs2, B_imm12 : next_pc},
- resources: { next_pc, rs1, rs2 : next_pc[0..]},
- disasm: "bge", "%rs1, %rs2, %(@+B_imm12:08x)",
- semfunc: "&mpact::sim::riscv::RV32::RiscVIBge";
- bgeu{: rs1, rs2, B_imm12 : next_pc},
- resources: { next_pc, rs1, rs2 : next_pc[0..]},
- disasm: "bgeu", "%rs1, %rs2, %(@+B_imm12:08x)",
- semfunc: "&mpact::sim::riscv::RV32::RiscVIBgeu";
- lw{(: rs1, I_imm12), (: : rd)},
- resources: { next_pc, rs1 : rd[0..]},
- disasm: "lw", "%rd, %I_imm12(%rs1)",
- semfunc: "&mpact::sim::riscv::RV32::RiscVILw", "&mpact::sim::riscv::RV32::RiscVILwChild";
- lh{(: rs1, I_imm12 :), (: : rd)},
- resources: { next_pc, rs1 : rd[0..]},
- disasm: "lh", "%rd, %I_imm12(%rs1)",
- semfunc: "&mpact::sim::riscv::RV32::RiscVILh", "&mpact::sim::riscv::RV32::RiscVILhChild";
- lhu{(: rs1, I_imm12 :), (: : rd)},
- resources: { next_pc, rs1 : rd[0..]},
- disasm: "lhu", "%rd, %I_imm12(%rs1)",
- semfunc: "&mpact::sim::riscv::RV32::RiscVILhu", "&mpact::sim::riscv::RV32::RiscVILhuChild";
- lb{(: rs1, I_imm12 :), (: : rd)},
- resources: { next_pc, rs1 : rd[0..]},
- disasm: "lb", "%rd, %I_imm12(%rs1)",
- semfunc: "&mpact::sim::riscv::RV32::RiscVILb", "&mpact::sim::riscv::RV32::RiscVILbChild";
- lbu{(: rs1, I_imm12 :), (: : rd)},
- resources: { next_pc, rs1 : rd[0..]},
- disasm: "lbu", "%rd, %I_imm12(%rs1)",
- semfunc: "&mpact::sim::riscv::RV32::RiscVILbu", "&mpact::sim::riscv::RV32::RiscVILbuChild";
- sw{: rs1, S_imm12, rs2 : },
- resources: { next_pc, rs1, rs2 : },
- disasm: "sw", "%rs2, %S_imm12(%rs1)",
- semfunc: "&mpact::sim::riscv::RV32::RiscVISw";
- sh{: rs1, S_imm12, rs2 : },
- resources: { next_pc, rs1, rs2 : },
- disasm: "sh", "%rs2, %S_imm12(%rs1)",
- semfunc: "&mpact::sim::riscv::RV32::RiscVISh";
- sb{: rs1, S_imm12, rs2 : },
- resources: { next_pc, rs1, rs2 : },
- disasm: "sb", "%rs2, %S_imm12(%rs1)",
- semfunc: "&mpact::sim::riscv::RV32::RiscVISb";
- fence{: I_imm12 : },
- disasm: "fence",
- semfunc: "&mpact::sim::riscv::RiscVIFence";
- ecall{},
- disasm: "ecall",
- semfunc: "&mpact::sim::riscv::RiscVIEcall";
- ebreak{},
- disasm: "ebreak",
- semfunc: "&mpact::sim::riscv::RiscVIEbreak";
- }
-}
-
-// RiscV32 multiply/divide instructions.
-slot riscv32m {
- includes {
- #include "riscv/riscv_m_instructions.h"
- }
- default size = 4;
- default latency = global_latency;
- resources ThreeOp = { next_pc, rs1, rs2 : rd[..rd]};
- opcodes {
- mul{: rs1, rs2 : rd},
- resources: ThreeOp,
- disasm: "mul", "%rd, %rs1, %rs2",
- semfunc: "&mpact::sim::riscv::RV32::MMul";
- mulh{: rs1, rs2 : rd},
- resources: ThreeOp,
- disasm: "mulh", "%rd, %rs1, %rs2",
- semfunc: "&mpact::sim::riscv::RV32::MMulh";
- mulhu{: rs1, rs2: rd},
- resources: ThreeOp,
- disasm: "mulhu", "%rd, %rs1, %rs2",
- semfunc: "&mpact::sim::riscv::RV32::MMulhu";
- mulhsu{: rs1, rs2: rd},
- resources: ThreeOp,
- disasm: "mulhsu", "%rd, %rs1, %rs2",
- semfunc: "&mpact::sim::riscv::RV32::MMulhsu";
- div{: rs1, rs2 : rd},
- resources: ThreeOp,
- disasm: "div", "%rd, %rs1, %rs2",
- semfunc: "&mpact::sim::riscv::RV32::MDiv";
- divu{: rs1, rs2 : rd},
- resources: ThreeOp,
- disasm: "divu", "%rd, %rs1, %rs2",
- semfunc: "&mpact::sim::riscv::RV32::MDivu";
- rem{: rs1, rs2 : rd},
- resources: ThreeOp,
- disasm: "rem", "%rd, %rs1, %rs2",
- semfunc: "&mpact::sim::riscv::RV32::MRem";
- remu{: rs1, rs2 : rd},
- resources: ThreeOp,
- disasm: "remu", "%rd, %rs1, %rs2",
- semfunc: "&mpact::sim::riscv::RV32::MRemu";
- }
-}
-
-// RiscV32 CSR manipulation instructions.
-slot zicsr {
- includes {
- #include "riscv/riscv_zicsr_instructions.h"
- }
- default size = 4;
- default latency = global_latency;
- opcodes {
- csrrw{: rs1, csr : rd, csr},
- resources: { next_pc, rs1, csr : rd[0..], csr[0..]},
- semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrw",
- disasm: "csrw", "%rd, %csr, %rs1";
- csrrs{: rs1, csr : rd, csr},
- resources: { next_pc, rs1, csr : rd[0..], csr[0..]},
- semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrs",
- disasm: "csrs", "%rd, %csr, %rs1";
- csrrc{: rs1, csr : rd, csr},
- resources: { next_pc, rs1, csr : rd[0..], csr[0..]},
- semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrc",
- disasm: "csrc", "%rd, %csr, %rs1";
- csrrs_nr{: rs1, csr : rd, csr},
- resources: { next_pc, rs1, csr : rd[0..], csr[0..]},
- semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrs",
- disasm: "csrs", "%csr, %rs1";
- csrrc_nr{: rs1, csr : rd, csr},
- resources: { next_pc, rs1, csr : rd[0..], csr[0..]},
- semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrc",
- disasm: "csrc", "%csr, %rs1";
- csrrw_nr{: rs1, csr : csr},
- resources: { next_pc, rs1: csr[0..]},
- semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrwNr", // rd == 0 (x0).
- disasm: "csrw", "%csr, %rs1";
- csrrs_nw{: csr : rd},
- resources: { next_pc, csr: rd[0..]},
- semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrNw", // rs1 == 0 (x0).
- disasm: "csrs", "%rd, %csr";
- csrrc_nw{: csr : rd},
- resources: { next_pc, csr: rd[0..]},
- semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrNw", // rs1 == 0 (x0).
- disasm: "csrc", "%rd, %csr";
- csrrwi{: CSR_uimm5, csr : rd, csr},
- resources: { next_pc, csr: rd[0..], csr[0..]},
- semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrw",
- disasm: "csrwi", "%rd, %csr, %CSR_uimm5";
- csrrsi{: CSR_uimm5, csr : rd, csr},
- resources: { next_pc, csr: rd[0..], csr[0..]},
- semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrs",
- disasm: "csrsi", "%rd, %csr, %CSR_uimm5";
- csrrci{: CSR_uimm5, csr : rd, csr},
- resources: { next_pc, csr: rd[0..], csr[0..]},
- semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrc",
- disasm: "csrci", "%rd, %csr, %CSR_uimm5";
- csrrsi_nr{: CSR_uimm5, csr : rd, csr},
- resources: { next_pc, csr: rd[0..], csr[0..]},
- semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrs",
- disasm: "csrsi", "%csr, %CSR_uimm5";
- csrrci_nr{: CSR_uimm5, csr : rd, csr},
- resources: { next_pc, csr: rd[0..], csr[0..]},
- semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrc",
- disasm: "csrci", "%csr, %CSR_uimm5";
- csrrwi_nr{: CSR_uimm5, csr : csr},
- resources: { next_pc : csr[0..]},
- semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrwNr", // rd == 0 (x0).
- disasm: "csrrwi", "%csr, %CSR_uimm5";
- csrrsi_nw{: csr : rd},
- resources: { next_pc, csr : rd[0..]},
- semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrNw", // uimm5 == 0.
- disasm: "csrsi", "%rd, %csr, 0";
- csrrci_nw{: csr : rd},
- resources: { next_pc, csr : rd[0..]},
- semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrNw", // uimm5 == 0.
- disasm: "csrwi", "%rd, %csr, 0";
- }
-}
-
-// Instruction fence.
-slot zfencei {
- includes {
- #include "riscv/riscv_zfencei_instructions.h"
- }
- default size = 4;
- default latency = global_latency;
- opcodes {
- fencei{: I_imm12 : },
- disasm: "fence.i",
- semfunc: "&mpact::sim::riscv::RiscVZFencei";
- }
-}
-
-// Privileged instructions.
-slot privileged {
- includes {
- #include "riscv/riscv_priv_instructions.h"
- }
- default size = 4;
- default latency = global_latency;
- opcodes {
- uret{: : next_pc},
- disasm: "uret",
- semfunc: "&mpact::sim::riscv::RV32::RiscVPrivURet";
- sret{: : next_pc},
- disasm: "sret",
- semfunc: "&mpact::sim::riscv::RV32::RiscVPrivSRet";
- mret{: : next_pc},
- disasm: "mret",
- semfunc: "&mpact::sim::riscv::RV32::RiscVPrivMRet";
- wfi{},
- disasm: "wfi",
- semfunc: "&mpact::sim::riscv::RiscVPrivWfi";
- mpause{},
- disasm: "mpause",
- // mpause is the software breakpoint to terminate the program.
- semfunc: "&KelvinIMpause";
- // The sfence instruction has 4 behaviors depending on if rs1 and/or rs2
- // are 0. These behaviors are split into 4 instructions.
- sfence_vma_zz{: rs1, rs2},
- resources: {},
- disasm: "sfence.vma", "%rs1, %rs2",
- semfunc: "&mpact::sim::riscv::RiscVPrivSFenceVmaZZ";
- sfence_vma_zn{: rs1, rs2},
- resources: {rs2},
- disasm: "sfence.vma", "%rs1, %rs2",
- semfunc: "&mpact::sim::riscv::RiscVPrivSFenceVmaZN";
- sfence_vma_nz{: rs1, rs2},
- resources: { rs1 },
- disasm: "sfence.vma", "%rs1, %rs2",
- semfunc: "&mpact::sim::riscv::RiscVPrivSFenceVmaNZ";
- sfence_vma_nn{: rs1, rs2},
- resources: {rs1, rs2},
- disasm: "sfence.vma", "%rs1, %rs2",
- semfunc: "&mpact::sim::riscv::RiscVPrivSFenceVmaNN";
- // Skipping hypervisor memory management instructions for now.
- }
-}
-
-// Kelvin simd instructions:
-// https://spacebeaker.googlesource.com/shodan/sw/kelvin/+/refs/heads/master/docs/kelvin_isa.md
-slot kelvin_arith {
- includes {
- #include "sim/kelvin_instructions.h"
- #include "sim/kelvin_vector_instructions.h"
- #include "sim/kelvin_vector_memory_instructions.h"
- #include "absl/functional/bind_front.h"
- }
- default size = 4;
- default latency = global_latency;
- opcodes {
- // vadd
- vadd_b_vv{: vs1, vs2 : vd},
- disasm: "vadd.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdd<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vadd_b_vv_m{: vs1, vs2 : vd},
- disasm: "vadd.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdd<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vadd_h_vv{: vs1, vs2 : vd},
- disasm: "vadd.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdd<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vadd_h_vv_m{: vs1, vs2 : vd},
- disasm: "vadd.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdd<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vadd_w_vv{: vs1, vs2 : vd},
- disasm: "vadd.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdd<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vadd_w_vv_m{: vs1, vs2 : vd},
- disasm: "vadd.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdd<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vadd_b_vx{: vs1, vs2 : vd},
- disasm: "vadd.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdd<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vadd_b_vx_m{: vs1, vs2 : vd},
- disasm: "vadd.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdd<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vadd_h_vx{: vs1, vs2 : vd},
- disasm: "vadd.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdd<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vadd_h_vx_m{: vs1, vs2 : vd},
- disasm: "vadd.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdd<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vadd_w_vx{: vs1, vs2 : vd},
- disasm: "vadd.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdd<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vadd_w_vx_m{: vs1, vs2 : vd},
- disasm: "vadd.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdd<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
- // vsub
- vsub_b_vv{: vs1, vs2 : vd},
- disasm: "vsub.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSub<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vsub_b_vv_m{: vs1, vs2 : vd},
- disasm: "vsub.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSub<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vsub_h_vv{: vs1, vs2 : vd},
- disasm: "vsub.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSub<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vsub_h_vv_m{: vs1, vs2 : vd},
- disasm: "vsub.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSub<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vsub_w_vv{: vs1, vs2 : vd},
- disasm: "vsub.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSub<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vsub_w_vv_m{: vs1, vs2 : vd},
- disasm: "vsub.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSub<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vsub_b_vx{: vs1, vs2 : vd},
- disasm: "vsub.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSub<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vsub_b_vx_m{: vs1, vs2 : vd},
- disasm: "vsub.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSub<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vsub_h_vx{: vs1, vs2 : vd},
- disasm: "vsub.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSub<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vsub_h_vx_m{: vs1, vs2 : vd},
- disasm: "vsub.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSub<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vsub_w_vx{: vs1, vs2 : vd},
- disasm: "vsub.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSub<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vsub_w_vx_m{: vs1, vs2 : vd},
- disasm: "vsub.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSub<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
- // vrsub
- vrsub_b_vv{: vs1, vs2 : vd},
- disasm: "vrsub.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVRSub<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vrsub_b_vv_m{: vs1, vs2 : vd},
- disasm: "vrsub.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVRSub<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vrsub_h_vv{: vs1, vs2 : vd},
- disasm: "vrsub.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVRSub<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vrsub_h_vv_m{: vs1, vs2 : vd},
- disasm: "vrsub.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVRSub<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vrsub_w_vv{: vs1, vs2 : vd},
- disasm: "vrsub.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVRSub<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vrsub_w_vv_m{: vs1, vs2 : vd},
- disasm: "vrsub.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVRSub<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vrsub_b_vx{: vs1, vs2 : vd},
- disasm: "vrsub.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVRSub<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vrsub_b_vx_m{: vs1, vs2 : vd},
- disasm: "vrsub.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVRSub<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vrsub_h_vx{: vs1, vs2 : vd},
- disasm: "vrsub.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVRSub<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vrsub_h_vx_m{: vs1, vs2 : vd},
- disasm: "vrsub.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVRSub<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vrsub_w_vx{: vs1, vs2 : vd},
- disasm: "vrsub.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVRSub<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vrsub_w_vx_m{: vs1, vs2 : vd},
- disasm: "vrsub.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVRSub<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
- // veq
- veq_b_vv{: vs1, vs2 : vd},
- disasm: "veq.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEq<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- veq_b_vv_m{: vs1, vs2 : vd},
- disasm: "veq.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEq<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- veq_h_vv{: vs1, vs2 : vd},
- disasm: "veq.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEq<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- veq_h_vv_m{: vs1, vs2 : vd},
- disasm: "veq.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEq<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- veq_w_vv{: vs1, vs2 : vd},
- disasm: "veq.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEq<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- veq_w_vv_m{: vs1, vs2 : vd},
- disasm: "veq.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEq<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- veq_b_vx{: vs1, vs2 : vd},
- disasm: "veq.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEq<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- veq_b_vx_m{: vs1, vs2 : vd},
- disasm: "veq.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEq<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- veq_h_vx{: vs1, vs2 : vd},
- disasm: "veq.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEq<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- veq_h_vx_m{: vs1, vs2 : vd},
- disasm: "veq.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEq<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- veq_w_vx{: vs1, vs2 : vd},
- disasm: "veq.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEq<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- veq_w_vx_m{: vs1, vs2 : vd},
- disasm: "veq.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEq<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
- // vne
- vne_b_vv{: vs1, vs2 : vd},
- disasm: "vne.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVNe<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vne_b_vv_m{: vs1, vs2 : vd},
- disasm: "vne.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVNe<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vne_h_vv{: vs1, vs2 : vd},
- disasm: "vne.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVNe<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vne_h_vv_m{: vs1, vs2 : vd},
- disasm: "vne.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVNe<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vne_w_vv{: vs1, vs2 : vd},
- disasm: "vne.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVNe<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vne_w_vv_m{: vs1, vs2 : vd},
- disasm: "vne.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVNe<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vne_b_vx{: vs1, vs2 : vd},
- disasm: "vne.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVNe<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vne_b_vx_m{: vs1, vs2 : vd},
- disasm: "vne.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVNe<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vne_h_vx{: vs1, vs2 : vd},
- disasm: "vne.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVNe<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vne_h_vx_m{: vs1, vs2 : vd},
- disasm: "vne.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVNe<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vne_w_vx{: vs1, vs2 : vd},
- disasm: "vne.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVNe<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vne_w_vx_m{: vs1, vs2 : vd},
- disasm: "vne.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVNe<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
- // vlt
- vlt_b_vv{: vs1, vs2 : vd},
- disasm: "vlt.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLt<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vlt_b_vv_m{: vs1, vs2 : vd},
- disasm: "vlt.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLt<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vlt_h_vv{: vs1, vs2 : vd},
- disasm: "vlt.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLt<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vlt_h_vv_m{: vs1, vs2 : vd},
- disasm: "vlt.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLt<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vlt_w_vv{: vs1, vs2 : vd},
- disasm: "vlt.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLt<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vlt_w_vv_m{: vs1, vs2 : vd},
- disasm: "vlt.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLt<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vlt_b_vx{: vs1, vs2 : vd},
- disasm: "vlt.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLt<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vlt_b_vx_m{: vs1, vs2 : vd},
- disasm: "vlt.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLt<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vlt_h_vx{: vs1, vs2 : vd},
- disasm: "vlt.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLt<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vlt_h_vx_m{: vs1, vs2 : vd},
- disasm: "vlt.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLt<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vlt_w_vx{: vs1, vs2 : vd},
- disasm: "vlt.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLt<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vlt_w_vx_m{: vs1, vs2 : vd},
- disasm: "vlt.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLt<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
- // vltu
- vlt_u_b_vv{: vs1, vs2 : vd},
- disasm: "vlt.b.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLt<uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vlt_u_b_vv_m{: vs1, vs2 : vd},
- disasm: "vlt.b.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLt<uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vlt_u_h_vv{: vs1, vs2 : vd},
- disasm: "vlt.h.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLt<uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vlt_u_h_vv_m{: vs1, vs2 : vd},
- disasm: "vlt.h.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLt<uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vlt_u_w_vv{: vs1, vs2 : vd},
- disasm: "vlt.w.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLt<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vlt_u_w_vv_m{: vs1, vs2 : vd},
- disasm: "vlt.w.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLt<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vlt_u_b_vx{: vs1, vs2 : vd},
- disasm: "vlt.b.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLt<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vlt_u_b_vx_m{: vs1, vs2 : vd},
- disasm: "vlt.b.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLt<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vlt_u_h_vx{: vs1, vs2 : vd},
- disasm: "vlt.h.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLt<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vlt_u_h_vx_m{: vs1, vs2 : vd},
- disasm: "vlt.h.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLt<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vlt_u_w_vx{: vs1, vs2 : vd},
- disasm: "vlt.w.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLt<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vlt_u_w_vx_m{: vs1, vs2 : vd},
- disasm: "vlt.w.u.vx.m", "%vd, %vs1,V %vs2",
- semfunc: "absl::bind_front(&KelvinVLt<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
- // vle
- vle_b_vv{: vs1, vs2 : vd},
- disasm: "vle.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLe<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vle_b_vv_m{: vs1, vs2 : vd},
- disasm: "vle.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLe<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vle_h_vv{: vs1, vs2 : vd},
- disasm: "vle.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLe<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vle_h_vv_m{: vs1, vs2 : vd},
- disasm: "vle.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLe<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vle_w_vv{: vs1, vs2 : vd},
- disasm: "vle.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLe<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vle_w_vv_m{: vs1, vs2 : vd},
- disasm: "vle.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLe<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vle_b_vx{: vs1, vs2 : vd},
- disasm: "vle.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLe<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vle_b_vx_m{: vs1, vs2 : vd},
- disasm: "vle.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLe<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vle_h_vx{: vs1, vs2 : vd},
- disasm: "vle.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLe<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vle_h_vx_m{: vs1, vs2 : vd},
- disasm: "vle.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLe<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vle_w_vx{: vs1, vs2 : vd},
- disasm: "vle.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLe<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vle_w_vx_m{: vs1, vs2 : vd},
- disasm: "vle.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLe<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
- // vleu
- vle_u_b_vv{: vs1, vs2 : vd},
- disasm: "vle.b.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLe<uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vle_u_b_vv_m{: vs1, vs2 : vd},
- disasm: "vle.b.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLe<uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vle_u_h_vv{: vs1, vs2 : vd},
- disasm: "vle.h.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLe<uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vle_u_h_vv_m{: vs1, vs2 : vd},
- disasm: "vle.h.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLe<uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vle_u_w_vv{: vs1, vs2 : vd},
- disasm: "vle.w.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLe<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vle_u_w_vv_m{: vs1, vs2 : vd},
- disasm: "vle.w.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLe<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vle_u_b_vx{: vs1, vs2 : vd},
- disasm: "vle.b.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLe<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vle_u_b_vx_m{: vs1, vs2 : vd},
- disasm: "vle.b.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLe<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vle_u_h_vx{: vs1, vs2 : vd},
- disasm: "vle.h.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLe<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vle_u_h_vx_m{: vs1, vs2 : vd},
- disasm: "vle.h.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLe<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vle_u_w_vx{: vs1, vs2 : vd},
- disasm: "vle.w.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLe<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vle_u_w_vx_m{: vs1, vs2 : vd},
- disasm: "vle.w.u.vx.m", "%vd, %vs1,V %vs2",
- semfunc: "absl::bind_front(&KelvinVLe<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
- // vgt
- vgt_b_vv{: vs1, vs2 : vd},
- disasm: "vgt.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGt<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vgt_b_vv_m{: vs1, vs2 : vd},
- disasm: "vgt.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGt<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vgt_h_vv{: vs1, vs2 : vd},
- disasm: "vgt.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGt<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vgt_h_vv_m{: vs1, vs2 : vd},
- disasm: "vgt.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGt<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vgt_w_vv{: vs1, vs2 : vd},
- disasm: "vgt.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGt<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vgt_w_vv_m{: vs1, vs2 : vd},
- disasm: "vgt.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGt<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vgt_b_vx{: vs1, vs2 : vd},
- disasm: "vgt.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGt<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vgt_b_vx_m{: vs1, vs2 : vd},
- disasm: "vgt.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGt<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vgt_h_vx{: vs1, vs2 : vd},
- disasm: "vgt.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGt<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vgt_h_vx_m{: vs1, vs2 : vd},
- disasm: "vgt.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGt<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vgt_w_vx{: vs1, vs2 : vd},
- disasm: "vgt.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGt<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vgt_w_vx_m{: vs1, vs2 : vd},
- disasm: "vgt.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGt<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
- // vgtu
- vgt_u_b_vv{: vs1, vs2 : vd},
- disasm: "vgt.b.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGt<uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vgt_u_b_vv_m{: vs1, vs2 : vd},
- disasm: "vgt.b.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGt<uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vgt_u_h_vv{: vs1, vs2 : vd},
- disasm: "vgt.h.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGt<uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vgt_u_h_vv_m{: vs1, vs2 : vd},
- disasm: "vgt.h.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGt<uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vgt_u_w_vv{: vs1, vs2 : vd},
- disasm: "vgt.w.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGt<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vgt_u_w_vv_m{: vs1, vs2 : vd},
- disasm: "vgt.w.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGt<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vgt_u_b_vx{: vs1, vs2 : vd},
- disasm: "vgt.b.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGt<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vgt_u_b_vx_m{: vs1, vs2 : vd},
- disasm: "vgt.b.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGt<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vgt_u_h_vx{: vs1, vs2 : vd},
- disasm: "vgt.h.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGt<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vgt_u_h_vx_m{: vs1, vs2 : vd},
- disasm: "vgt.h.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGt<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vgt_u_w_vx{: vs1, vs2 : vd},
- disasm: "vgt.w.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGt<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vgt_u_w_vx_m{: vs1, vs2 : vd},
- disasm: "vgt.w.u.vx.m", "%vd, %vs1,V %vs2",
- semfunc: "absl::bind_front(&KelvinVGt<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
- // vge
- vge_b_vv{: vs1, vs2 : vd},
- disasm: "vge.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGe<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vge_b_vv_m{: vs1, vs2 : vd},
- disasm: "vge.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGe<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vge_h_vv{: vs1, vs2 : vd},
- disasm: "vge.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGe<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vge_h_vv_m{: vs1, vs2 : vd},
- disasm: "vge.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGe<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vge_w_vv{: vs1, vs2 : vd},
- disasm: "vge.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGe<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vge_w_vv_m{: vs1, vs2 : vd},
- disasm: "vge.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGe<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vge_b_vx{: vs1, vs2 : vd},
- disasm: "vge.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGe<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vge_b_vx_m{: vs1, vs2 : vd},
- disasm: "vge.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGe<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vge_h_vx{: vs1, vs2 : vd},
- disasm: "vge.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGe<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vge_h_vx_m{: vs1, vs2 : vd},
- disasm: "vge.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGe<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vge_w_vx{: vs1, vs2 : vd},
- disasm: "vge.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGe<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vge_w_vx_m{: vs1, vs2 : vd},
- disasm: "vge.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGe<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
- // vgeu
- vge_u_b_vv{: vs1, vs2 : vd},
- disasm: "vge.b.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGe<uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vge_u_b_vv_m{: vs1, vs2 : vd},
- disasm: "vge.b.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGe<uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vge_u_h_vv{: vs1, vs2 : vd},
- disasm: "vge.h.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGe<uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vge_u_h_vv_m{: vs1, vs2 : vd},
- disasm: "vge.h.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGe<uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vge_u_w_vv{: vs1, vs2 : vd},
- disasm: "vge.w.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGe<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vge_u_w_vv_m{: vs1, vs2 : vd},
- disasm: "vge.w.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGe<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vge_u_b_vx{: vs1, vs2 : vd},
- disasm: "vge.b.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGe<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vge_u_b_vx_m{: vs1, vs2 : vd},
- disasm: "vge.b.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGe<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vge_u_h_vx{: vs1, vs2 : vd},
- disasm: "vge.h.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGe<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vge_u_h_vx_m{: vs1, vs2 : vd},
- disasm: "vge.h.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGe<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vge_u_w_vx{: vs1, vs2 : vd},
- disasm: "vge.w.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVGe<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vge_u_w_vx_m{: vs1, vs2 : vd},
- disasm: "vge.w.u.vx.m", "%vd, %vs1,V %vs2",
- semfunc: "absl::bind_front(&KelvinVGe<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
- // vabsd
- vabsd_b_vv{: vs1, vs2 : vd},
- disasm: "vabsd.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAbsd<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vabsd_b_vv_m{: vs1, vs2 : vd},
- disasm: "vabsd.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAbsd<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vabsd_h_vv{: vs1, vs2 : vd},
- disasm: "vabsd.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAbsd<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vabsd_h_vv_m{: vs1, vs2 : vd},
- disasm: "vabsd.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAbsd<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vabsd_w_vv{: vs1, vs2 : vd},
- disasm: "vabsd.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAbsd<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vabsd_w_vv_m{: vs1, vs2 : vd},
- disasm: "vabsd.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAbsd<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vabsd_b_vx{: vs1, vs2 : vd},
- disasm: "vabsd.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAbsd<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vabsd_b_vx_m{: vs1, vs2 : vd},
- disasm: "vabsd.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAbsd<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vabsd_h_vx{: vs1, vs2 : vd},
- disasm: "vabsd.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAbsd<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vabsd_h_vx_m{: vs1, vs2 : vd},
- disasm: "vabsd.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAbsd<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vabsd_w_vx{: vs1, vs2 : vd},
- disasm: "vabsd.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAbsd<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vabsd_w_vx_m{: vs1, vs2 : vd},
- disasm: "vabsd.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAbsd<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
- // vabsdu
- vabsd_u_b_vv{: vs1, vs2 : vd},
- disasm: "vabsd.b.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAbsd<uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vabsd_u_b_vv_m{: vs1, vs2 : vd},
- disasm: "vabsd.b.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAbsd<uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vabsd_u_h_vv{: vs1, vs2 : vd},
- disasm: "vabsd.h.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAbsd<uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vabsd_u_h_vv_m{: vs1, vs2 : vd},
- disasm: "vabsd.h.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAbsd<uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vabsd_u_w_vv{: vs1, vs2 : vd},
- disasm: "vabsd.w.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAbsd<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vabsd_u_w_vv_m{: vs1, vs2 : vd},
- disasm: "vabsd.w.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAbsd<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vabsd_u_b_vx{: vs1, vs2 : vd},
- disasm: "vabsd.b.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAbsd<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vabsd_u_b_vx_m{: vs1, vs2 : vd},
- disasm: "vabsd.b.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAbsd<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vabsd_u_h_vx{: vs1, vs2 : vd},
- disasm: "vabsd.h.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAbsd<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vabsd_u_h_vx_m{: vs1, vs2 : vd},
- disasm: "vabsd.h.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAbsd<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vabsd_u_w_vx{: vs1, vs2 : vd},
- disasm: "vabsd.w.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAbsd<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vabsd_u_w_vx_m{: vs1, vs2 : vd},
- disasm: "vabsd.w.u.vx.m", "%vd, %vs1,V %vs2",
- semfunc: "absl::bind_front(&KelvinVAbsd<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
- // vmax
- vmax_b_vv{: vs1, vs2 : vd},
- disasm: "vmax.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMax<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmax_b_vv_m{: vs1, vs2 : vd},
- disasm: "vmax.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMax<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmax_h_vv{: vs1, vs2 : vd},
- disasm: "vmax.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMax<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmax_h_vv_m{: vs1, vs2 : vd},
- disasm: "vmax.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMax<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmax_w_vv{: vs1, vs2 : vd},
- disasm: "vmax.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMax<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmax_w_vv_m{: vs1, vs2 : vd},
- disasm: "vmax.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMax<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmax_b_vx{: vs1, vs2 : vd},
- disasm: "vmax.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMax<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmax_b_vx_m{: vs1, vs2 : vd},
- disasm: "vmax.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMax<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vmax_h_vx{: vs1, vs2 : vd},
- disasm: "vmax.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMax<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmax_h_vx_m{: vs1, vs2 : vd},
- disasm: "vmax.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMax<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vmax_w_vx{: vs1, vs2 : vd},
- disasm: "vmax.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMax<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmax_w_vx_m{: vs1, vs2 : vd},
- disasm: "vmax.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMax<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
- // vmaxu
- vmax_u_b_vv{: vs1, vs2 : vd},
- disasm: "vmax.b.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMax<uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmax_u_b_vv_m{: vs1, vs2 : vd},
- disasm: "vmax.b.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMax<uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmax_u_h_vv{: vs1, vs2 : vd},
- disasm: "vmax.h.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMax<uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmax_u_h_vv_m{: vs1, vs2 : vd},
- disasm: "vmax.h.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMax<uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmax_u_w_vv{: vs1, vs2 : vd},
- disasm: "vmax.w.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMax<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmax_u_w_vv_m{: vs1, vs2 : vd},
- disasm: "vmax.w.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMax<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmax_u_b_vx{: vs1, vs2 : vd},
- disasm: "vmax.b.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMax<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmax_u_b_vx_m{: vs1, vs2 : vd},
- disasm: "vmax.b.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMax<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vmax_u_h_vx{: vs1, vs2 : vd},
- disasm: "vmax.h.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMax<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmax_u_h_vx_m{: vs1, vs2 : vd},
- disasm: "vmax.h.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMax<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vmax_u_w_vx{: vs1, vs2 : vd},
- disasm: "vmax.w.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMax<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmax_u_w_vx_m{: vs1, vs2 : vd},
- disasm: "vmax.w.u.vx.m", "%vd, %vs1,V %vs2",
- semfunc: "absl::bind_front(&KelvinVMax<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
- // vmin
- vmin_b_vv{: vs1, vs2 : vd},
- disasm: "vmin.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMin<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmin_b_vv_m{: vs1, vs2 : vd},
- disasm: "vmin.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMin<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmin_h_vv{: vs1, vs2 : vd},
- disasm: "vmin.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMin<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmin_h_vv_m{: vs1, vs2 : vd},
- disasm: "vmin.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMin<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmin_w_vv{: vs1, vs2 : vd},
- disasm: "vmin.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMin<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmin_w_vv_m{: vs1, vs2 : vd},
- disasm: "vmin.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMin<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmin_b_vx{: vs1, vs2 : vd},
- disasm: "vmin.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMin<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmin_b_vx_m{: vs1, vs2 : vd},
- disasm: "vmin.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMin<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vmin_h_vx{: vs1, vs2 : vd},
- disasm: "vmin.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMin<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmin_h_vx_m{: vs1, vs2 : vd},
- disasm: "vmin.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMin<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vmin_w_vx{: vs1, vs2 : vd},
- disasm: "vmin.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMin<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmin_w_vx_m{: vs1, vs2 : vd},
- disasm: "vmin.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMin<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
- // vminu
- vmin_u_b_vv{: vs1, vs2 : vd},
- disasm: "vmin.b.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMin<uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmin_u_b_vv_m{: vs1, vs2 : vd},
- disasm: "vmin.b.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMin<uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmin_u_h_vv{: vs1, vs2 : vd},
- disasm: "vmin.h.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMin<uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmin_u_h_vv_m{: vs1, vs2 : vd},
- disasm: "vmin.h.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMin<uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmin_u_w_vv{: vs1, vs2 : vd},
- disasm: "vmin.w.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMin<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmin_u_w_vv_m{: vs1, vs2 : vd},
- disasm: "vmin.w.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMin<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmin_u_b_vx{: vs1, vs2 : vd},
- disasm: "vmin.b.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMin<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmin_u_b_vx_m{: vs1, vs2 : vd},
- disasm: "vmin.b.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMin<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vmin_u_h_vx{: vs1, vs2 : vd},
- disasm: "vmin.h.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMin<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmin_u_h_vx_m{: vs1, vs2 : vd},
- disasm: "vmin.h.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMin<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vmin_u_w_vx{: vs1, vs2 : vd},
- disasm: "vmin.w.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMin<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmin_u_w_vx_m{: vs1, vs2 : vd},
- disasm: "vmin.w.u.vx.m", "%vd, %vs1,V %vs2",
- semfunc: "absl::bind_front(&KelvinVMin<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
- // vadd3
- vadd3_b_vv{: vs1, vs2, vd : vd},
- disasm: "vadd3.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdd3<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vadd3_b_vv_m{: vs1, vs2, vd : vd},
- disasm: "vadd3.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdd3<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vadd3_h_vv{: vs1, vs2, vd : vd},
- disasm: "vadd3.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdd3<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vadd3_h_vv_m{: vs1, vs2, vd : vd},
- disasm: "vadd3.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdd3<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vadd3_w_vv{: vs1, vs2, vd : vd},
- disasm: "vadd3.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdd3<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vadd3_w_vv_m{: vs1, vs2, vd : vd},
- disasm: "vadd3.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdd3<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vadd3_b_vx{: vs1, vs2, vd : vd},
- disasm: "vadd3.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdd3<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vadd3_b_vx_m{: vs1, vs2, vd : vd},
- disasm: "vadd3.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdd3<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vadd3_h_vx{: vs1, vs2, vd : vd},
- disasm: "vadd3.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdd3<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vadd3_h_vx_m{: vs1, vs2, vd : vd},
- disasm: "vadd3.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdd3<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vadd3_w_vx{: vs1, vs2, vd : vd},
- disasm: "vadd3.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdd3<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vadd3_w_vx_m{: vs1, vs2, vd : vd},
- disasm: "vadd3.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdd3<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vadds
- vadds_b_vv{: vs1, vs2 : vd},
- disasm: "vadds.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdds<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vadds_b_vv_m{: vs1, vs2 : vd},
- disasm: "vadds.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdds<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vadds_h_vv{: vs1, vs2 : vd},
- disasm: "vadds.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdds<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vadds_h_vv_m{: vs1, vs2 : vd},
- disasm: "vadds.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdds<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vadds_w_vv{: vs1, vs2 : vd},
- disasm: "vadds.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdds<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vadds_w_vv_m{: vs1, vs2 : vd},
- disasm: "vadds.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdds<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vadds_b_vx{: vs1, vs2 : vd},
- disasm: "vadds.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdds<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vadds_b_vx_m{: vs1, vs2 : vd},
- disasm: "vadds.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdds<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vadds_h_vx{: vs1, vs2 : vd},
- disasm: "vadds.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdds<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vadds_h_vx_m{: vs1, vs2 : vd},
- disasm: "vadds.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdds<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vadds_w_vx{: vs1, vs2 : vd},
- disasm: "vadds.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdds<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vadds_w_vx_m{: vs1, vs2 : vd},
- disasm: "vadds.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAdds<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vaddsu
- vadds_u_b_vv{: vs1, vs2 : vd},
- disasm: "vadds.b.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAddsu<uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vadds_u_b_vv_m{: vs1, vs2 : vd},
- disasm: "vadds.b.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAddsu<uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vadds_u_h_vv{: vs1, vs2 : vd},
- disasm: "vadds.h.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAddsu<uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vadds_u_h_vv_m{: vs1, vs2 : vd},
- disasm: "vadds.h.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAddsu<uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vadds_u_w_vv{: vs1, vs2 : vd},
- disasm: "vadds.w.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAddsu<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vadds_u_w_vv_m{: vs1, vs2 : vd},
- disasm: "vadds.w.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAddsu<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vadds_u_b_vx{: vs1, vs2 : vd},
- disasm: "vadds.b.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAddsu<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vadds_u_b_vx_m{: vs1, vs2 : vd},
- disasm: "vadds.b.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAddsu<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vadds_u_h_vx{: vs1, vs2 : vd},
- disasm: "vadds.h.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAddsu<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vadds_u_h_vx_m{: vs1, vs2 : vd},
- disasm: "vadds.h.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAddsu<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vadds_u_w_vx{: vs1, vs2 : vd},
- disasm: "vadds.w.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAddsu<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vadds_u_w_vx_m{: vs1, vs2 : vd},
- disasm: "vadds.w.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAddsu<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vsubs
- vsubs_b_vv{: vs1, vs2 : vd},
- disasm: "vsubs.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubs<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vsubs_b_vv_m{: vs1, vs2 : vd},
- disasm: "vsubs.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubs<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vsubs_h_vv{: vs1, vs2 : vd},
- disasm: "vsubs.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubs<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vsubs_h_vv_m{: vs1, vs2 : vd},
- disasm: "vsubs.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubs<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vsubs_w_vv{: vs1, vs2 : vd},
- disasm: "vsubs.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubs<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vsubs_w_vv_m{: vs1, vs2 : vd},
- disasm: "vsubs.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubs<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vsubs_b_vx{: vs1, vs2 : vd},
- disasm: "vsubs.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubs<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vsubs_b_vx_m{: vs1, vs2 : vd},
- disasm: "vsubs.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubs<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vsubs_h_vx{: vs1, vs2 : vd},
- disasm: "vsubs.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubs<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vsubs_h_vx_m{: vs1, vs2 : vd},
- disasm: "vsubs.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubs<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vsubs_w_vx{: vs1, vs2 : vd},
- disasm: "vsubs.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubs<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vsubs_w_vx_m{: vs1, vs2 : vd},
- disasm: "vsubs.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubs<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vsubsu
- vsubs_u_b_vv{: vs1, vs2 : vd},
- disasm: "vsubs.b.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubsu<uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vsubs_u_b_vv_m{: vs1, vs2 : vd},
- disasm: "vsubs.b.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubsu<uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vsubs_u_h_vv{: vs1, vs2 : vd},
- disasm: "vsubs.h.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubsu<uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vsubs_u_h_vv_m{: vs1, vs2 : vd},
- disasm: "vsubs.h.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubsu<uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vsubs_u_w_vv{: vs1, vs2 : vd},
- disasm: "vsubs.w.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubsu<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vsubs_u_w_vv_m{: vs1, vs2 : vd},
- disasm: "vsubs.w.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubsu<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vsubs_u_b_vx{: vs1, vs2 : vd},
- disasm: "vsubs.b.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubsu<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vsubs_u_b_vx_m{: vs1, vs2 : vd},
- disasm: "vsubs.b.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubsu<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vsubs_u_h_vx{: vs1, vs2 : vd},
- disasm: "vsubs.h.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubsu<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vsubs_u_h_vx_m{: vs1, vs2 : vd},
- disasm: "vsubs.h.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubsu<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vsubs_u_w_vx{: vs1, vs2 : vd},
- disasm: "vsubs.w.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubsu<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vsubs_u_w_vx_m{: vs1, vs2 : vd},
- disasm: "vsubs.w.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubsu<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vaddw
- vaddw_h_vv{: vs1, vs2 : vd},
- disasm: "vaddw.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAddw<int16_t, int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vaddw_h_vv_m{: vs1, vs2 : vd},
- disasm: "vaddw.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAddw<int16_t, int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vaddw_w_vv{: vs1, vs2 : vd},
- disasm: "vaddw.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAddw<int32_t, int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vaddw_w_vv_m{: vs1, vs2 : vd},
- disasm: "vaddw.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAddw<int32_t, int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vaddw_h_vx{: vs1, vs2 : vd},
- disasm: "vaddw.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAddw<int16_t, int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vaddw_h_vx_m{: vs1, vs2 : vd},
- disasm: "vaddw.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAddw<int16_t, int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vaddw_w_vx{: vs1, vs2 : vd},
- disasm: "vaddw.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAddw<int32_t, int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vaddw_w_vx_m{: vs1, vs2 : vd},
- disasm: "vaddw.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAddw<int32_t, int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vaddwu
- vaddw_h_u_vv{: vs1, vs2 : vd},
- disasm: "vaddw.h.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAddw<uint16_t, uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vaddw_h_u_vv_m{: vs1, vs2 : vd},
- disasm: "vaddw.h.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAddw<uint16_t, uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vaddw_w_u_vv{: vs1, vs2 : vd},
- disasm: "vaddw.w.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAddw<uint32_t, uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vaddw_w_u_vv_m{: vs1, vs2 : vd},
- disasm: "vaddw.w.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAddw<uint32_t, uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vaddw_h_u_vx{: vs1, vs2 : vd},
- disasm: "vaddw.h.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAddw<uint16_t, uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vaddw_h_u_vx_m{: vs1, vs2 : vd},
- disasm: "vaddw.h.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAddw<uint16_t, uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vaddw_w_u_vx{: vs1, vs2 : vd},
- disasm: "vaddw.w.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAddw<uint32_t, uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vaddw_w_u_vx_m{: vs1, vs2 : vd},
- disasm: "vaddw.w.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAddw<uint32_t, uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vsubw
- vsubw_h_vv{: vs1, vs2 : vd},
- disasm: "vsubw.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubw<int16_t, int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vsubw_h_vv_m{: vs1, vs2 : vd},
- disasm: "vsubw.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubw<int16_t, int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vsubw_w_vv{: vs1, vs2 : vd},
- disasm: "vsubw.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubw<int32_t, int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vsubw_w_vv_m{: vs1, vs2 : vd},
- disasm: "vsubw.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubw<int32_t, int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vsubw_h_vx{: vs1, vs2 : vd},
- disasm: "vsubw.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubw<int16_t, int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vsubw_h_vx_m{: vs1, vs2 : vd},
- disasm: "vsubw.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubw<int16_t, int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vsubw_w_vx{: vs1, vs2 : vd},
- disasm: "vsubw.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubw<int32_t, int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vsubw_w_vx_m{: vs1, vs2 : vd},
- disasm: "vsubw.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubw<int32_t, int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vsubwu
- vsubw_h_u_vv{: vs1, vs2 : vd},
- disasm: "vsubw.h.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubw<uint16_t, uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vsubw_h_u_vv_m{: vs1, vs2 : vd},
- disasm: "vsubw.h.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubw<uint16_t, uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vsubw_w_u_vv{: vs1, vs2 : vd},
- disasm: "vsubw.w.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubw<uint32_t, uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vsubw_w_u_vv_m{: vs1, vs2 : vd},
- disasm: "vsubw.w.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubw<uint32_t, uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vsubw_h_u_vx{: vs1, vs2 : vd},
- disasm: "vsubw.h.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubw<uint16_t, uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vsubw_h_u_vx_m{: vs1, vs2 : vd},
- disasm: "vsubw.h.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubw<uint16_t, uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vsubw_w_u_vx{: vs1, vs2 : vd},
- disasm: "vsubw.w.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubw<uint32_t, uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vsubw_w_u_vx_m{: vs1, vs2 : vd},
- disasm: "vsubw.w.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSubw<uint32_t, uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vacc
- vacc_h_vv{: vs1, vs2 : vd},
- disasm: "vacc.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAcc<int16_t, int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vacc_h_vv_m{: vs1, vs2 : vd},
- disasm: "vacc.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAcc<int16_t, int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vacc_w_vv{: vs1, vs2 : vd},
- disasm: "vacc.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAcc<int32_t, int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vacc_w_vv_m{: vs1, vs2 : vd},
- disasm: "vacc.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAcc<int32_t, int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vacc_h_vx{: vs1, vs2 : vd},
- disasm: "vacc.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAcc<int16_t, int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vacc_h_vx_m{: vs1, vs2 : vd},
- disasm: "vacc.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAcc<int16_t, int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vacc_w_vx{: vs1, vs2 : vd},
- disasm: "vacc.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAcc<int32_t, int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vacc_w_vx_m{: vs1, vs2 : vd},
- disasm: "vacc.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAcc<int32_t, int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vaccu
- vacc_h_u_vv{: vs1, vs2 : vd},
- disasm: "vacc.h.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAcc<uint16_t, uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vacc_h_u_vv_m{: vs1, vs2 : vd},
- disasm: "vacc.h.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAcc<uint16_t, uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vacc_w_u_vv{: vs1, vs2 : vd},
- disasm: "vacc.w.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAcc<uint32_t, uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vacc_w_u_vv_m{: vs1, vs2 : vd},
- disasm: "vacc.w.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAcc<uint32_t, uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vacc_h_u_vx{: vs1, vs2 : vd},
- disasm: "vacc.h.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAcc<uint16_t, uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vacc_h_u_vx_m{: vs1, vs2 : vd},
- disasm: "vacc.h.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAcc<uint16_t, uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vacc_w_u_vx{: vs1, vs2 : vd},
- disasm: "vacc.w.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAcc<uint32_t, uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vacc_w_u_vx_m{: vs1, vs2 : vd},
- disasm: "vacc.w.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAcc<uint32_t, uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vpadd
- vpadd_h_v{: vs1 : vd},
- disasm: "vpadd.h.v", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVPadd<int16_t, int8_t>, /*strip_mine*/ false)";
- vpadd_h_v_m{: vs1 : vd},
- disasm: "vpadd.h.v.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVPadd<int16_t, int8_t>, /*strip_mine*/ true)";
- vpadd_w_v{: vs1 : vd},
- disasm: "vpadd.w.v", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVPadd<int32_t, int16_t>, /*strip_mine*/ false)";
- vpadd_w_v_m{: vs1 : vd},
- disasm: "vpadd.w.v.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVPadd<int32_t, int16_t>, /*strip_mine*/ true)";
-
- //vpaddu
- vpadd_h_u_v{: vs1 : vd},
- disasm: "vpadd.h.u.v", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVPadd<int16_t, int8_t>, /*strip_mine*/ false)";
- vpadd_h_u_v_m{: vs1 : vd},
- disasm: "vpadd.h.u.v.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVPadd<int16_t, int8_t>, /*strip_mine*/ true)";
- vpadd_w_u_v{: vs1 : vd},
- disasm: "vpadd.w.u.v", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVPadd<int32_t, int16_t>, /*strip_mine*/ false)";
- vpadd_w_u_v_m{: vs1 : vd},
- disasm: "vpadd.w.u.v.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVPadd<int32_t, int16_t>, /*strip_mine*/ true)";
-
- //vpsub
- vpsub_h_v{: vs1 : vd},
- disasm: "vpsub.h.v", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVPsub<int16_t, int8_t>, /*strip_mine*/ false)";
- vpsub_h_v_m{: vs1 : vd},
- disasm: "vpsub.h.v.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVPsub<int16_t, int8_t>, /*strip_mine*/ true)";
- vpsub_w_v{: vs1 : vd},
- disasm: "vpsub.w.v", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVPsub<int32_t, int16_t>, /*strip_mine*/ false)";
- vpsub_w_v_m{: vs1 : vd},
- disasm: "vpsub.w.v.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVPsub<int32_t, int16_t>, /*strip_mine*/ true)";
-
- //vpsubu
- vpsub_h_u_v{: vs1 : vd},
- disasm: "vpsub.h.u.v", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVPsub<int16_t, int8_t>, /*strip_mine*/ false)";
- vpsub_h_u_v_m{: vs1 : vd},
- disasm: "vpsub.h.u.v.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVPsub<int16_t, int8_t>, /*strip_mine*/ true)";
- vpsub_w_u_v{: vs1 : vd},
- disasm: "vpsub.w.u.v", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVPsub<int32_t, int16_t>, /*strip_mine*/ false)";
- vpsub_w_u_v_m{: vs1 : vd},
- disasm: "vpsub.w.u.v.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVPsub<int32_t, int16_t>, /*strip_mine*/ true)";
-
- //vhadd
- vhadd_b_vv{: vs1, vs2 : vd},
- disasm: "vhadd.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<int8_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
- vhadd_b_vv_m{: vs1, vs2 : vd},
- disasm: "vhadd.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<int8_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
- vhadd_h_vv{: vs1, vs2 : vd},
- disasm: "vhadd.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<int16_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
- vhadd_h_vv_m{: vs1, vs2 : vd},
- disasm: "vhadd.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<int16_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
- vhadd_w_vv{: vs1, vs2 : vd},
- disasm: "vhadd.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<int32_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
- vhadd_w_vv_m{: vs1, vs2 : vd},
- disasm: "vhadd.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<int32_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
- vhadd_b_vx{: vs1, vs2 : vd},
- disasm: "vhadd.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<int8_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
- vhadd_b_vx_m{: vs1, vs2 : vd},
- disasm: "vhadd.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<int8_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
- vhadd_h_vx{: vs1, vs2 : vd},
- disasm: "vhadd.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<int16_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
- vhadd_h_vx_m{: vs1, vs2 : vd},
- disasm: "vhadd.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<int16_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
- vhadd_w_vx{: vs1, vs2 : vd},
- disasm: "vhadd.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<int32_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
- vhadd_w_vx_m{: vs1, vs2 : vd},
- disasm: "vhadd.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<int32_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
-
- //vhadd.r
- vhadd_b_r_vv{: vs1, vs2 : vd},
- disasm: "vhadd.b.r.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<int8_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
- vhadd_b_r_vv_m{: vs1, vs2 : vd},
- disasm: "vhadd.b.r.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<int8_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
- vhadd_h_r_vv{: vs1, vs2 : vd},
- disasm: "vhadd.h.r.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<int16_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
- vhadd_h_r_vv_m{: vs1, vs2 : vd},
- disasm: "vhadd.h.r.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<int16_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
- vhadd_w_r_vv{: vs1, vs2 : vd},
- disasm: "vhadd.w.r.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<int32_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
- vhadd_w_r_vv_m{: vs1, vs2 : vd},
- disasm: "vhadd.w.r.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<int32_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
- vhadd_b_r_vx{: vs1, vs2 : vd},
- disasm: "vhadd.b.r.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<int8_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
- vhadd_b_r_vx_m{: vs1, vs2 : vd},
- disasm: "vhadd.b.r.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<int8_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
- vhadd_h_r_vx{: vs1, vs2 : vd},
- disasm: "vhadd.h.r.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<int16_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
- vhadd_h_r_vx_m{: vs1, vs2 : vd},
- disasm: "vhadd.h.r.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<int16_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
- vhadd_w_r_vx{: vs1, vs2 : vd},
- disasm: "vhadd.w.r.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<int32_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
- vhadd_w_r_vx_m{: vs1, vs2 : vd},
- disasm: "vhadd.w.r.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<int32_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
-
- //vhadd.u
- vhadd_b_u_vv{: vs1, vs2 : vd},
- disasm: "vhadd.b.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<uint8_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
- vhadd_b_u_vv_m{: vs1, vs2 : vd},
- disasm: "vhadd.b.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<uint8_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
- vhadd_h_u_vv{: vs1, vs2 : vd},
- disasm: "vhadd.h.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<uint16_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
- vhadd_h_u_vv_m{: vs1, vs2 : vd},
- disasm: "vhadd.h.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<uint16_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
- vhadd_w_u_vv{: vs1, vs2 : vd},
- disasm: "vhadd.w.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<uint32_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
- vhadd_w_u_vv_m{: vs1, vs2 : vd},
- disasm: "vhadd.w.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<uint32_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
- vhadd_b_u_vx{: vs1, vs2 : vd},
- disasm: "vhadd.b.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<uint8_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
- vhadd_b_u_vx_m{: vs1, vs2 : vd},
- disasm: "vhadd.b.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<uint8_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
- vhadd_h_u_vx{: vs1, vs2 : vd},
- disasm: "vhadd.h.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<uint16_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
- vhadd_h_u_vx_m{: vs1, vs2 : vd},
- disasm: "vhadd.h.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<uint16_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
- vhadd_w_u_vx{: vs1, vs2 : vd},
- disasm: "vhadd.w.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<uint32_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
- vhadd_w_u_vx_m{: vs1, vs2 : vd},
- disasm: "vhadd.w.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<uint32_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
-
- //vhadd.ru
- vhadd_b_ur_vv{: vs1, vs2 : vd},
- disasm: "vhadd.b.ur.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<uint8_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
- vhadd_b_ur_vv_m{: vs1, vs2 : vd},
- disasm: "vhadd.b.ur.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<uint8_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
- vhadd_h_ur_vv{: vs1, vs2 : vd},
- disasm: "vhadd.h.ur.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<uint16_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
- vhadd_h_ur_vv_m{: vs1, vs2 : vd},
- disasm: "vhadd.h.ur.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<uint16_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
- vhadd_w_ur_vv{: vs1, vs2 : vd},
- disasm: "vhadd.w.ur.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<uint32_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
- vhadd_w_ur_vv_m{: vs1, vs2 : vd},
- disasm: "vhadd.w.ur.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<uint32_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
- vhadd_b_ur_vx{: vs1, vs2 : vd},
- disasm: "vhadd.b.ur.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<uint8_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
- vhadd_b_ur_vx_m{: vs1, vs2 : vd},
- disasm: "vhadd.b.ur.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<uint8_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
- vhadd_h_ur_vx{: vs1, vs2 : vd},
- disasm: "vhadd.h.ur.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<uint16_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
- vhadd_h_ur_vx_m{: vs1, vs2 : vd},
- disasm: "vhadd.h.ur.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<uint16_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
- vhadd_w_ur_vx{: vs1, vs2 : vd},
- disasm: "vhadd.w.ur.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<uint32_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
- vhadd_w_ur_vx_m{: vs1, vs2 : vd},
- disasm: "vhadd.w.ur.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHadd<uint32_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
-
- //vhsub
- vhsub_b_vv{: vs1, vs2 : vd},
- disasm: "vhsub.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<int8_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
- vhsub_b_vv_m{: vs1, vs2 : vd},
- disasm: "vhsub.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<int8_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
- vhsub_h_vv{: vs1, vs2 : vd},
- disasm: "vhsub.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<int16_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
- vhsub_h_vv_m{: vs1, vs2 : vd},
- disasm: "vhsub.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<int16_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
- vhsub_w_vv{: vs1, vs2 : vd},
- disasm: "vhsub.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<int32_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
- vhsub_w_vv_m{: vs1, vs2 : vd},
- disasm: "vhsub.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<int32_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
- vhsub_b_vx{: vs1, vs2 : vd},
- disasm: "vhsub.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<int8_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
- vhsub_b_vx_m{: vs1, vs2 : vd},
- disasm: "vhsub.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<int8_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
- vhsub_h_vx{: vs1, vs2 : vd},
- disasm: "vhsub.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<int16_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
- vhsub_h_vx_m{: vs1, vs2 : vd},
- disasm: "vhsub.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<int16_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
- vhsub_w_vx{: vs1, vs2 : vd},
- disasm: "vhsub.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<int32_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
- vhsub_w_vx_m{: vs1, vs2 : vd},
- disasm: "vhsub.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<int32_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
-
- //vhsub.r
- vhsub_b_r_vv{: vs1, vs2 : vd},
- disasm: "vhsub.b.r.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<int8_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
- vhsub_b_r_vv_m{: vs1, vs2 : vd},
- disasm: "vhsub.b.r.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<int8_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
- vhsub_h_r_vv{: vs1, vs2 : vd},
- disasm: "vhsub.h.r.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<int16_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
- vhsub_h_r_vv_m{: vs1, vs2 : vd},
- disasm: "vhsub.h.r.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<int16_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
- vhsub_w_r_vv{: vs1, vs2 : vd},
- disasm: "vhsub.w.r.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<int32_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
- vhsub_w_r_vv_m{: vs1, vs2 : vd},
- disasm: "vhsub.w.r.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<int32_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
- vhsub_b_r_vx{: vs1, vs2 : vd},
- disasm: "vhsub.b.r.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<int8_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
- vhsub_b_r_vx_m{: vs1, vs2 : vd},
- disasm: "vhsub.b.r.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<int8_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
- vhsub_h_r_vx{: vs1, vs2 : vd},
- disasm: "vhsub.h.r.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<int16_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
- vhsub_h_r_vx_m{: vs1, vs2 : vd},
- disasm: "vhsub.h.r.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<int16_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
- vhsub_w_r_vx{: vs1, vs2 : vd},
- disasm: "vhsub.w.r.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<int32_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
- vhsub_w_r_vx_m{: vs1, vs2 : vd},
- disasm: "vhsub.w.r.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<int32_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
-
- //vhsub.u
- vhsub_b_u_vv{: vs1, vs2 : vd},
- disasm: "vhsub.b.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<uint8_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
- vhsub_b_u_vv_m{: vs1, vs2 : vd},
- disasm: "vhsub.b.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<uint8_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
- vhsub_h_u_vv{: vs1, vs2 : vd},
- disasm: "vhsub.h.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<uint16_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
- vhsub_h_u_vv_m{: vs1, vs2 : vd},
- disasm: "vhsub.h.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<uint16_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
- vhsub_w_u_vv{: vs1, vs2 : vd},
- disasm: "vhsub.w.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<uint32_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
- vhsub_w_u_vv_m{: vs1, vs2 : vd},
- disasm: "vhsub.w.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<uint32_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
- vhsub_b_u_vx{: vs1, vs2 : vd},
- disasm: "vhsub.b.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<uint8_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
- vhsub_b_u_vx_m{: vs1, vs2 : vd},
- disasm: "vhsub.b.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<uint8_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
- vhsub_h_u_vx{: vs1, vs2 : vd},
- disasm: "vhsub.h.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<uint16_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
- vhsub_h_u_vx_m{: vs1, vs2 : vd},
- disasm: "vhsub.h.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<uint16_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
- vhsub_w_u_vx{: vs1, vs2 : vd},
- disasm: "vhsub.w.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<uint32_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
- vhsub_w_u_vx_m{: vs1, vs2 : vd},
- disasm: "vhsub.w.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<uint32_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
-
- //vhsub.ru
- vhsub_b_ur_vv{: vs1, vs2 : vd},
- disasm: "vhsub.b.ur.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<uint8_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
- vhsub_b_ur_vv_m{: vs1, vs2 : vd},
- disasm: "vhsub.b.ur.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<uint8_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
- vhsub_h_ur_vv{: vs1, vs2 : vd},
- disasm: "vhsub.h.ur.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<uint16_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
- vhsub_h_ur_vv_m{: vs1, vs2 : vd},
- disasm: "vhsub.h.ur.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<uint16_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
- vhsub_w_ur_vv{: vs1, vs2 : vd},
- disasm: "vhsub.w.ur.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<uint32_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
- vhsub_w_ur_vv_m{: vs1, vs2 : vd},
- disasm: "vhsub.w.ur.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<uint32_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
- vhsub_b_ur_vx{: vs1, vs2 : vd},
- disasm: "vhsub.b.ur.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<uint8_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
- vhsub_b_ur_vx_m{: vs1, vs2 : vd},
- disasm: "vhsub.b.ur.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<uint8_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
- vhsub_h_ur_vx{: vs1, vs2 : vd},
- disasm: "vhsub.h.ur.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<uint16_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
- vhsub_h_ur_vx_m{: vs1, vs2 : vd},
- disasm: "vhsub.h.ur.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<uint16_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
- vhsub_w_ur_vx{: vs1, vs2 : vd},
- disasm: "vhsub.w.ur.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<uint32_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
- vhsub_w_ur_vx_m{: vs1, vs2 : vd},
- disasm: "vhsub.w.ur.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVHsub<uint32_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
-
- //vand
- vand_vv{: vs1, vs2 : vd},
- disasm: "vand.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAnd<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vand_vv_m{: vs1, vs2 : vd},
- disasm: "vand.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAnd<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vand_b_vx{: vs1, vs2 : vd},
- disasm: "vand.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAnd<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vand_b_vx_m{: vs1, vs2 : vd},
- disasm: "vand.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAnd<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vand_h_vx{: vs1, vs2 : vd},
- disasm: "vand.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAnd<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vand_h_vx_m{: vs1, vs2 : vd},
- disasm: "vand.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAnd<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vand_w_vx{: vs1, vs2 : vd},
- disasm: "vand.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAnd<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vand_w_vx_m{: vs1, vs2 : vd},
- disasm: "vand.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVAnd<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vor
- vor_vv{: vs1, vs2 : vd},
- disasm: "vor.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVOr<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vor_vv_m{: vs1, vs2 : vd},
- disasm: "vor.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVOr<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vor_b_vx{: vs1, vs2 : vd},
- disasm: "vor.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVOr<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vor_b_vx_m{: vs1, vs2 : vd},
- disasm: "vor.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVOr<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vor_h_vx{: vs1, vs2 : vd},
- disasm: "vor.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVOr<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vor_h_vx_m{: vs1, vs2 : vd},
- disasm: "vor.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVOr<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vor_w_vx{: vs1, vs2 : vd},
- disasm: "vor.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVOr<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vor_w_vx_m{: vs1, vs2 : vd},
- disasm: "vor.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVOr<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vxor
- vxor_vv{: vs1, vs2 : vd},
- disasm: "vxor.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVXor<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vxor_vv_m{: vs1, vs2 : vd},
- disasm: "vxor.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVXor<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vxor_b_vx{: vs1, vs2 : vd},
- disasm: "vxor.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVXor<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vxor_b_vx_m{: vs1, vs2 : vd},
- disasm: "vxor.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVXor<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vxor_h_vx{: vs1, vs2 : vd},
- disasm: "vxor.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVXor<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vxor_h_vx_m{: vs1, vs2 : vd},
- disasm: "vxor.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVXor<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vxor_w_vx{: vs1, vs2 : vd},
- disasm: "vxor.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVXor<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vxor_w_vx_m{: vs1, vs2 : vd},
- disasm: "vxor.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVXor<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vrev
- vrev_b_vx{: vs1, vs2 : vd},
- disasm: "vrev.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVRev<uint8_t>, /*strip_mine*/ false)";
- vrev_b_vx_m{: vs1, vs2 : vd},
- disasm: "vrev.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVRev<uint8_t>, /*strip_mine*/ true)";
- vrev_h_vx{: vs1, vs2 : vd},
- disasm: "vrev.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVRev<uint16_t>, /*strip_mine*/ false)";
- vrev_h_vx_m{: vs1, vs2 : vd},
- disasm: "vrev.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVRev<uint16_t>, /*strip_mine*/ true)";
- vrev_w_vx{: vs1, vs2 : vd},
- disasm: "vrev.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVRev<uint32_t>, /*strip_mine*/ false)";
- vrev_w_vx_m{: vs1, vs2 : vd},
- disasm: "vrev.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVRev<uint32_t>, /*strip_mine*/ true)";
-
- //vror
- vror_b_vx{: vs1, vs2 : vd},
- disasm: "vror.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVRor<uint8_t>, /*strip_mine*/ false)";
- vror_b_vx_m{: vs1, vs2 : vd},
- disasm: "vror.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVRor<uint8_t>, /*strip_mine*/ true)";
- vror_h_vx{: vs1, vs2 : vd},
- disasm: "vror.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVRor<uint16_t>, /*strip_mine*/ false)";
- vror_h_vx_m{: vs1, vs2 : vd},
- disasm: "vror.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVRor<uint16_t>, /*strip_mine*/ true)";
- vror_w_vx{: vs1, vs2 : vd},
- disasm: "vror.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVRor<uint32_t>, /*strip_mine*/ false)";
- vror_w_vx_m{: vs1, vs2 : vd},
- disasm: "vror.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVRor<uint32_t>, /*strip_mine*/ true)";
-
- //vmvp
- vmvp_vv{: vs1, vs2 : vd},
- disasm: "vmvp.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMvp<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmvp_vv_m{: vs1, vs2 : vd},
- disasm: "vmvp.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMvp<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmvp_b_vx{: vs1, vs2 : vd},
- disasm: "vmvp.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMvp<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmvp_b_vx_m{: vs1, vs2 : vd},
- disasm: "vmvp.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMvp<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vmvp_h_vx{: vs1, vs2 : vd},
- disasm: "vmvp.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMvp<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmvp_h_vx_m{: vs1, vs2 : vd},
- disasm: "vmvp.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMvp<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vmvp_w_vx{: vs1, vs2 : vd},
- disasm: "vmvp.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMvp<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmvp_w_vx_m{: vs1, vs2 : vd},
- disasm: "vmvp.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMvp<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vsll
- vsll_b_vv{: vs1, vs2 : vd},
- disasm: "vsll.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSll<uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vsll_b_vv_m{: vs1, vs2 : vd},
- disasm: "vsll.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSll<uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vsll_h_vv{: vs1, vs2 : vd},
- disasm: "vsll.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSll<uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vsll_h_vv_m{: vs1, vs2 : vd},
- disasm: "vsll.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSll<uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vsll_w_vv{: vs1, vs2 : vd},
- disasm: "vsll.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSll<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vsll_w_vv_m{: vs1, vs2 : vd},
- disasm: "vsll.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSll<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vsll_b_vx{: vs1, vs2 : vd},
- disasm: "vsll.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSll<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vsll_b_vx_m{: vs1, vs2 : vd},
- disasm: "vsll.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSll<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vsll_h_vx{: vs1, vs2 : vd},
- disasm: "vsll.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSll<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vsll_h_vx_m{: vs1, vs2 : vd},
- disasm: "vsll.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSll<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vsll_w_vx{: vs1, vs2 : vd},
- disasm: "vsll.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSll<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vsll_w_vx_m{: vs1, vs2 : vd},
- disasm: "vsll.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSll<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vsra
- vsra_b_vv{: vs1, vs2 : vd},
- disasm: "vsra.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSra<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vsra_b_vv_m{: vs1, vs2 : vd},
- disasm: "vsra.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSra<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vsra_h_vv{: vs1, vs2 : vd},
- disasm: "vsra.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSra<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vsra_h_vv_m{: vs1, vs2 : vd},
- disasm: "vsra.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSra<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vsra_w_vv{: vs1, vs2 : vd},
- disasm: "vsra.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSra<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vsra_w_vv_m{: vs1, vs2 : vd},
- disasm: "vsra.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSra<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vsra_b_vx{: vs1, vs2 : vd},
- disasm: "vsra.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSra<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vsra_b_vx_m{: vs1, vs2 : vd},
- disasm: "vsra.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSra<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vsra_h_vx{: vs1, vs2 : vd},
- disasm: "vsra.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSra<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vsra_h_vx_m{: vs1, vs2 : vd},
- disasm: "vsra.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSra<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vsra_w_vx{: vs1, vs2 : vd},
- disasm: "vsra.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSra<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vsra_w_vx_m{: vs1, vs2 : vd},
- disasm: "vsra.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSra<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vsrl
- vsrl_b_vv{: vs1, vs2 : vd},
- disasm: "vsrl.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrl<uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vsrl_b_vv_m{: vs1, vs2 : vd},
- disasm: "vsrl.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrl<uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vsrl_h_vv{: vs1, vs2 : vd},
- disasm: "vsrl.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrl<uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vsrl_h_vv_m{: vs1, vs2 : vd},
- disasm: "vsrl.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrl<uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vsrl_w_vv{: vs1, vs2 : vd},
- disasm: "vsrl.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrl<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vsrl_w_vv_m{: vs1, vs2 : vd},
- disasm: "vsrl.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrl<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vsrl_b_vx{: vs1, vs2 : vd},
- disasm: "vsrl.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrl<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vsrl_b_vx_m{: vs1, vs2 : vd},
- disasm: "vsrl.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrl<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vsrl_h_vx{: vs1, vs2 : vd},
- disasm: "vsrl.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrl<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vsrl_h_vx_m{: vs1, vs2 : vd},
- disasm: "vsrl.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrl<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vsrl_w_vx{: vs1, vs2 : vd},
- disasm: "vsrl.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrl<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vsrl_w_vx_m{: vs1, vs2 : vd},
- disasm: "vsrl.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrl<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vsha
- vsha_b_vv{: vs1, vs2 : vd},
- disasm: "vsha.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVShift<int8_t>, /* round */ false, /*strip_mine*/ false)";
- vsha_b_vv_m{: vs1, vs2 : vd},
- disasm: "vsha.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVShift<int8_t>, /* round */ false, /*strip_mine*/ true)";
- vsha_h_vv{: vs1, vs2 : vd},
- disasm: "vsha.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVShift<int16_t>, /* round */ false, /*strip_mine*/ false)";
- vsha_h_vv_m{: vs1, vs2 : vd},
- disasm: "vsha.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVShift<int16_t>, /* round */ false, /*strip_mine*/ true)";
- vsha_w_vv{: vs1, vs2 : vd},
- disasm: "vsha.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVShift<int32_t>, /* round */ false, /*strip_mine*/ false)";
- vsha_w_vv_m{: vs1, vs2 : vd},
- disasm: "vsha.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVShift<int32_t>, /* round */ false, /*strip_mine*/ true)";
- vsha_b_r_vv{: vs1, vs2 : vd},
- disasm: "vsha.b.r.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVShift<int8_t>, /* round */ true, /*strip_mine*/ false)";
- vsha_b_r_vv_m{: vs1, vs2 : vd},
- disasm: "vsha.b.r.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVShift<int8_t>, /* round */ true, /*strip_mine*/ true)";
- vsha_h_r_vv{: vs1, vs2 : vd},
- disasm: "vsha.h.r.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVShift<int16_t>, /* round */ true, /*strip_mine*/ false)";
- vsha_h_r_vv_m{: vs1, vs2 : vd},
- disasm: "vsha.h.r.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVShift<int16_t>, /* round */ true, /*strip_mine*/ true)";
- vsha_w_r_vv{: vs1, vs2 : vd},
- disasm: "vsha.w.r.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVShift<int32_t>, /* round */ true, /*strip_mine*/ false)";
- vsha_w_r_vv_m{: vs1, vs2 : vd},
- disasm: "vsha.w.r.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVShift<int32_t>, /* round */ true, /*strip_mine*/ true)";
-
- //vshl
- vshl_b_vv{: vs1, vs2 : vd},
- disasm: "vshl.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVShift<uint8_t>, /* round */ false, /*strip_mine*/ false)";
- vshl_b_vv_m{: vs1, vs2 : vd},
- disasm: "vshl.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVShift<uint8_t>, /* round */ false, /*strip_mine*/ true)";
- vshl_h_vv{: vs1, vs2 : vd},
- disasm: "vshl.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVShift<uint16_t>, /* round */ false, /*strip_mine*/ false)";
- vshl_h_vv_m{: vs1, vs2 : vd},
- disasm: "vshl.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVShift<uint16_t>, /* round */ false, /*strip_mine*/ true)";
- vshl_w_vv{: vs1, vs2 : vd},
- disasm: "vshl.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVShift<uint32_t>, /* round */ false, /*strip_mine*/ false)";
- vshl_w_vv_m{: vs1, vs2 : vd},
- disasm: "vshl.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVShift<uint32_t>, /* round */ false, /*strip_mine*/ true)";
- vshl_b_r_vv{: vs1, vs2 : vd},
- disasm: "vshl.b.r.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVShift<uint8_t>, /* round */ true, /*strip_mine*/ false)";
- vshl_b_r_vv_m{: vs1, vs2 : vd},
- disasm: "vshl.b.r.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVShift<uint8_t>, /* round */ true, /*strip_mine*/ true)";
- vshl_h_r_vv{: vs1, vs2 : vd},
- disasm: "vshl.h.r.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVShift<uint16_t>, /* round */ true, /*strip_mine*/ false)";
- vshl_h_r_vv_m{: vs1, vs2 : vd},
- disasm: "vshl.h.r.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVShift<uint16_t>, /* round */ true, /*strip_mine*/ true)";
- vshl_w_r_vv{: vs1, vs2 : vd},
- disasm: "vshl.w.r.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVShift<uint32_t>, /* round */ true, /*strip_mine*/ false)";
- vshl_w_r_vv_m{: vs1, vs2 : vd},
- disasm: "vshl.w.r.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVShift<uint32_t>, /* round */ true, /*strip_mine*/ true)";
-
- //vnot
- vnot_v{: vs1 : vd},
- disasm: "vnot.v", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVNot<int32_t>, /*strip_mine*/ false)";
- vnot_v_m{: vs1 : vd},
- disasm: "vnot.v.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVNot<int32_t>, /*strip_mine*/ true)";
-
- //vclb
- vclb_b_v{: vs1 : vd},
- disasm: "vclb.b.v", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVClb<uint8_t>, /*strip_mine*/ false)";
- vclb_b_v_m{: vs1 : vd},
- disasm: "vclb.b.v.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVClb<uint8_t>, /*strip_mine*/ true)";
- vclb_h_v{: vs1 : vd},
- disasm: "vclb.h.v", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVClb<uint16_t>, /*strip_mine*/ false)";
- vclb_h_v_m{: vs1 : vd},
- disasm: "vclb.h.v.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVClb<uint16_t>, /*strip_mine*/ true)";
- vclb_w_v{: vs1 : vd},
- disasm: "vclb.w.v", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVClb<uint32_t>, /*strip_mine*/ false)";
- vclb_w_v_m{: vs1 : vd},
- disasm: "vclb.w.v.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVClb<uint32_t>, /*strip_mine*/ true)";
-
- //vclz
- vclz_b_v{: vs1 : vd},
- disasm: "vclz.b.v", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVClz<uint8_t>, /*strip_mine*/ false)";
- vclz_b_v_m{: vs1 : vd},
- disasm: "vclz.b.v.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVClz<uint8_t>, /*strip_mine*/ true)";
- vclz_h_v{: vs1 : vd},
- disasm: "vclz.h.v", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVClz<uint16_t>, /*strip_mine*/ false)";
- vclz_h_v_m{: vs1 : vd},
- disasm: "vclz.h.v.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVClz<uint16_t>, /*strip_mine*/ true)";
- vclz_w_v{: vs1 : vd},
- disasm: "vclz.w.v", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVClz<uint32_t>, /*strip_mine*/ false)";
- vclz_w_v_m{: vs1 : vd},
- disasm: "vclz.w.v.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVClz<uint32_t>, /*strip_mine*/ true)";
-
- //vcpop
- vcpop_b_v{: vs1 : vd},
- disasm: "vcpop.b.v", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVCpop<uint8_t>, /*strip_mine*/ false)";
- vcpop_b_v_m{: vs1 : vd},
- disasm: "vcpop.b.v.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVCpop<uint8_t>, /*strip_mine*/ true)";
- vcpop_h_v{: vs1 : vd},
- disasm: "vcpop.h.v", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVCpop<uint16_t>, /*strip_mine*/ false)";
- vcpop_h_v_m{: vs1 : vd},
- disasm: "vcpop.h.v.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVCpop<uint16_t>, /*strip_mine*/ true)";
- vcpop_w_v{: vs1 : vd},
- disasm: "vcpop.w.v", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVCpop<uint32_t>, /*strip_mine*/ false)";
- vcpop_w_v_m{: vs1 : vd},
- disasm: "vcpop.w.v.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVCpop<uint32_t>, /*strip_mine*/ true)";
-
- //vmv
- vmv_v{: vs1 : vd},
- disasm: "vmv.v", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVMv<int32_t>, /*strip_mine*/ false)";
- vmv_v_m{: vs1 : vd},
- disasm: "vmv.v.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVMv<int32_t>, /*strip_mine*/ true)";
-
- //vsrans
- vsrans_b_vv{: vs1, vs2 : vd},
- disasm: "vsrans.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int16_t>, /*round*/ false, /*scalar*/ false, /*strip_mine*/ false)";
- vsrans_b_vv_m{: vs1, vs2 : vd},
- disasm: "vsrans.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int16_t>, /*round*/ false, /*scalar*/ false, /*strip_mine*/ true)";
- vsrans_h_vv{: vs1, vs2 : vd},
- disasm: "vsrans.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<int16_t, int32_t>, /*round*/ false, /*scalar*/ false, /*strip_mine*/ false)";
- vsrans_h_vv_m{: vs1, vs2 : vd},
- disasm: "vsrans.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<int16_t, int32_t>, /*round*/ false, /*scalar*/ false, /*strip_mine*/ true)";
- vsrans_b_vx{: vs1, vs2 : vd},
- disasm: "vsrans.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int16_t>, /*round*/ false, /*scalar*/ true, /*strip_mine*/ false)";
- vsrans_b_vx_m{: vs1, vs2 : vd},
- disasm: "vsrans.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int16_t>, /*round*/ false, /*scalar*/ true, /*strip_mine*/ true)";
- vsrans_h_vx{: vs1, vs2 : vd},
- disasm: "vsrans.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<int16_t, int32_t>, /*round*/ false, /*scalar*/ true, /*strip_mine*/ false)";
- vsrans_h_vx_m{: vs1, vs2 : vd},
- disasm: "vsrans.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<int16_t, int32_t>, /*round*/ false, /*scalar*/ true, /*strip_mine*/ true)";
- vsrans_b_r_vv{: vs1, vs2 : vd},
- disasm: "vsrans.b.r.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int16_t>, /*round*/ true, /*scalar*/ false, /*strip_mine*/ false)";
- vsrans_b_r_vv_m{: vs1, vs2 : vd},
- disasm: "vsrans.b.r.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int16_t>, /*round*/ true, /*scalar*/ false, /*strip_mine*/ true)";
- vsrans_h_r_vv{: vs1, vs2 : vd},
- disasm: "vsrans.h.r.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<int16_t, int32_t>, /*round*/ true, /*scalar*/ false, /*strip_mine*/ false)";
- vsrans_h_r_vv_m{: vs1, vs2 : vd},
- disasm: "vsrans.h.r.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<int16_t, int32_t>, /*round*/ true, /*scalar*/ false, /*strip_mine*/ true)";
- vsrans_b_r_vx{: vs1, vs2 : vd},
- disasm: "vsrans.b.r.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int16_t>, /*round*/ true, /*scalar*/ true, /*strip_mine*/ false)";
- vsrans_b_r_vx_m{: vs1, vs2 : vd},
- disasm: "vsrans.b.r.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int16_t>, /*round*/ true, /*scalar*/ true, /*strip_mine*/ true)";
- vsrans_h_r_vx{: vs1, vs2 : vd},
- disasm: "vsrans.h.r.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<int16_t, int32_t>, /*round*/ true, /*scalar*/ true, /*strip_mine*/ false)";
- vsrans_h_r_vx_m{: vs1, vs2 : vd},
- disasm: "vsrans.h.r.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<int16_t, int32_t>, /*round*/ true, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vsransu
- vsransu_b_vv{: vs1, vs2 : vd},
- disasm: "vsransu.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint16_t>, /*round*/ false, /*scalar*/ false, /*strip_mine*/ false)";
- vsransu_b_vv_m{: vs1, vs2 : vd},
- disasm: "vsransu.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint16_t>, /*round*/ false, /*scalar*/ false, /*strip_mine*/ true)";
- vsransu_h_vv{: vs1, vs2 : vd},
- disasm: "vsransu.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<uint16_t, uint32_t>, /*round*/ false, /*scalar*/ false, /*strip_mine*/ false)";
- vsransu_h_vv_m{: vs1, vs2 : vd},
- disasm: "vsransu.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<uint16_t, uint32_t>, /*round*/ false, /*scalar*/ false, /*strip_mine*/ true)";
- vsransu_b_vx{: vs1, vs2 : vd},
- disasm: "vsransu.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint16_t>, /*round*/ false, /*scalar*/ true, /*strip_mine*/ false)";
- vsransu_b_vx_m{: vs1, vs2 : vd},
- disasm: "vsransu.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint16_t>, /*round*/ false, /*scalar*/ true, /*strip_mine*/ true)";
- vsransu_h_vx{: vs1, vs2 : vd},
- disasm: "vsransu.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<uint16_t, uint32_t>, /*round*/ false, /*scalar*/ true, /*strip_mine*/ false)";
- vsransu_h_vx_m{: vs1, vs2 : vd},
- disasm: "vsransu.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<uint16_t, uint32_t>, /*round*/ false, /*scalar*/ true, /*strip_mine*/ true)";
- vsransu_b_r_vv{: vs1, vs2 : vd},
- disasm: "vsransu.b.r.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint16_t>, /*round*/ true, /*scalar*/ false, /*strip_mine*/ false)";
- vsransu_b_r_vv_m{: vs1, vs2 : vd},
- disasm: "vsransu.b.r.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint16_t>, /*round*/ true, /*scalar*/ false, /*strip_mine*/ true)";
- vsransu_h_r_vv{: vs1, vs2 : vd},
- disasm: "vsransu.h.r.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<uint16_t, uint32_t>, /*round*/ true, /*scalar*/ false, /*strip_mine*/ false)";
- vsransu_h_r_vv_m{: vs1, vs2 : vd},
- disasm: "vsransu.h.r.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<uint16_t, uint32_t>, /*round*/ true, /*scalar*/ false, /*strip_mine*/ true)";
- vsransu_b_r_vx{: vs1, vs2 : vd},
- disasm: "vsransu.b.r.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint16_t>, /*round*/ true, /*scalar*/ true, /*strip_mine*/ false)";
- vsransu_b_r_vx_m{: vs1, vs2 : vd},
- disasm: "vsransu.b.r.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint16_t>, /*round*/ true, /*scalar*/ true, /*strip_mine*/ true)";
- vsransu_h_r_vx{: vs1, vs2 : vd},
- disasm: "vsransu.h.r.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<uint16_t, uint32_t>, /*round*/ true, /*scalar*/ true, /*strip_mine*/ false)";
- vsransu_h_r_vx_m{: vs1, vs2 : vd},
- disasm: "vsransu.h.r.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<uint16_t, uint32_t>, /*round*/ true, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vsraqs
- vsraqs_b_vv{: vs1, vs2 : vd},
- disasm: "vsraqs.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int32_t>, /*round*/ false, /*scalar*/ false, /*strip_mine*/ false)";
- vsraqs_b_vv_m{: vs1, vs2 : vd},
- disasm: "vsraqs.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int32_t>, /*round*/ false, /*scalar*/ false, /*strip_mine*/ true)";
- vsraqs_b_vx{: vs1, vs2 : vd},
- disasm: "vsraqs.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int32_t>, /*round*/ false, /*scalar*/ true, /*strip_mine*/ false)";
- vsraqs_b_vx_m{: vs1, vs2 : vd},
- disasm: "vsraqs.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int32_t>, /*round*/ false, /*scalar*/ true, /*strip_mine*/ true)";
- vsraqs_b_r_vv{: vs1, vs2 : vd},
- disasm: "vsraqs.b.r.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int32_t>, /*round*/ true, /*scalar*/ false, /*strip_mine*/ false)";
- vsraqs_b_r_vv_m{: vs1, vs2 : vd},
- disasm: "vsraqs.b.r.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int32_t>, /*round*/ true, /*scalar*/ false, /*strip_mine*/ true)";
- vsraqs_b_r_vx{: vs1, vs2 : vd},
- disasm: "vsraqs.b.r.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int32_t>, /*round*/ true, /*scalar*/ true, /*strip_mine*/ false)";
- vsraqs_b_r_vx_m{: vs1, vs2 : vd},
- disasm: "vsraqs.b.r.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int32_t>, /*round*/ true, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vsraqsu
- vsraqsu_b_vv{: vs1, vs2 : vd},
- disasm: "vsraqsu.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint32_t>, /*round*/ false, /*scalar*/ false, /*strip_mine*/ false)";
- vsraqsu_b_vv_m{: vs1, vs2 : vd},
- disasm: "vsraqsu.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint32_t>, /*round*/ false, /*scalar*/ false, /*strip_mine*/ true)";
- vsraqsu_b_vx{: vs1, vs2 : vd},
- disasm: "vsraqsu.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint32_t>, /*round*/ false, /*scalar*/ true, /*strip_mine*/ false)";
- vsraqsu_b_vx_m{: vs1, vs2 : vd},
- disasm: "vsraqsu.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint32_t>, /*round*/ false, /*scalar*/ true, /*strip_mine*/ true)";
- vsraqsu_b_r_vv{: vs1, vs2 : vd},
- disasm: "vsraqsu.b.r.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint32_t>, /*round*/ true, /*scalar*/ false, /*strip_mine*/ false)";
- vsraqsu_b_r_vv_m{: vs1, vs2 : vd},
- disasm: "vsraqsu.b.r.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint32_t>, /*round*/ true, /*scalar*/ false, /*strip_mine*/ true)";
- vsraqsu_b_r_vx{: vs1, vs2 : vd},
- disasm: "vsraqsu.b.r.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint32_t>, /*round*/ true, /*scalar*/ true, /*strip_mine*/ false)";
- vsraqsu_b_r_vx_m{: vs1, vs2 : vd},
- disasm: "vsraqsu.b.r.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint32_t>, /*round*/ true, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vmul
- vmul_b_vv{: vs1, vs2 : vd},
- disasm: "vmul.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMul<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmul_b_vv_m{: vs1, vs2 : vd},
- disasm: "vmul.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMul<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmul_h_vv{: vs1, vs2 : vd},
- disasm: "vmul.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMul<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmul_h_vv_m{: vs1, vs2 : vd},
- disasm: "vmul.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMul<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmul_w_vv{: vs1, vs2 : vd},
- disasm: "vmul.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMul<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmul_w_vv_m{: vs1, vs2 : vd},
- disasm: "vmul.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMul<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmul_b_vx{: vs1, vs2 : vd},
- disasm: "vmul.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMul<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmul_b_vx_m{: vs1, vs2 : vd},
- disasm: "vmul.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMul<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vmul_h_vx{: vs1, vs2 : vd},
- disasm: "vmul.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMul<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmul_h_vx_m{: vs1, vs2 : vd},
- disasm: "vmul.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMul<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vmul_w_vx{: vs1, vs2 : vd},
- disasm: "vmul.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMul<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmul_w_vx_m{: vs1, vs2 : vd},
- disasm: "vmul.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMul<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vmuls
- vmuls_b_vv{: vs1, vs2 : vd},
- disasm: "vmuls.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMuls<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmuls_b_vv_m{: vs1, vs2 : vd},
- disasm: "vmuls.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMuls<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmuls_h_vv{: vs1, vs2 : vd},
- disasm: "vmuls.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMuls<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmuls_h_vv_m{: vs1, vs2 : vd},
- disasm: "vmuls.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMuls<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmuls_w_vv{: vs1, vs2 : vd},
- disasm: "vmuls.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMuls<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmuls_w_vv_m{: vs1, vs2 : vd},
- disasm: "vmuls.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMuls<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmuls_b_vx{: vs1, vs2 : vd},
- disasm: "vmuls.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMuls<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmuls_b_vx_m{: vs1, vs2 : vd},
- disasm: "vmuls.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMuls<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vmuls_h_vx{: vs1, vs2 : vd},
- disasm: "vmuls.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMuls<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmuls_h_vx_m{: vs1, vs2 : vd},
- disasm: "vmuls.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMuls<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vmuls_w_vx{: vs1, vs2 : vd},
- disasm: "vmuls.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMuls<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmuls_w_vx_m{: vs1, vs2 : vd},
- disasm: "vmuls.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMuls<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vmulsu
- vmulsu_b_vv{: vs1, vs2 : vd},
- disasm: "vmulsu.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMuls<uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmulsu_b_vv_m{: vs1, vs2 : vd},
- disasm: "vmulsu.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMuls<uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmulsu_h_vv{: vs1, vs2 : vd},
- disasm: "vmulsu.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMuls<uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmulsu_h_vv_m{: vs1, vs2 : vd},
- disasm: "vmulsu.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMuls<uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmulsu_w_vv{: vs1, vs2 : vd},
- disasm: "vmulsu.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMuls<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmulsu_w_vv_m{: vs1, vs2 : vd},
- disasm: "vmulsu.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMuls<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmulsu_b_vx{: vs1, vs2 : vd},
- disasm: "vmulsu.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMuls<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmulsu_b_vx_m{: vs1, vs2 : vd},
- disasm: "vmulsu.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMuls<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vmulsu_h_vx{: vs1, vs2 : vd},
- disasm: "vmulsu.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMuls<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmulsu_h_vx_m{: vs1, vs2 : vd},
- disasm: "vmulsu.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMuls<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vmulsu_w_vx{: vs1, vs2 : vd},
- disasm: "vmulsu.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMuls<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmulsu_w_vx_m{: vs1, vs2 : vd},
- disasm: "vmulsu.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMuls<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vmulw
- vmulw_h_vv{: vs1, vs2 : vd},
- disasm: "vmulw.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulw<int16_t, int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmulw_h_vv_m{: vs1, vs2 : vd},
- disasm: "vmulw.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulw<int16_t, int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmulw_w_vv{: vs1, vs2 : vd},
- disasm: "vmulw.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulw<int32_t, int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmulw_w_vv_m{: vs1, vs2 : vd},
- disasm: "vmulw.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulw<int32_t, int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmulw_h_vx{: vs1, vs2 : vd},
- disasm: "vmulw.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulw<int16_t, int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmulw_h_vx_m{: vs1, vs2 : vd},
- disasm: "vmulw.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulw<int16_t, int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vmulw_w_vx{: vs1, vs2 : vd},
- disasm: "vmulw.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulw<int32_t, int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmulw_w_vx_m{: vs1, vs2 : vd},
- disasm: "vmulw.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulw<int32_t, int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vmulwu
- vmulw_h_u_vv{: vs1, vs2 : vd},
- disasm: "vmulw.h.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulw<uint16_t, uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmulw_h_u_vv_m{: vs1, vs2 : vd},
- disasm: "vmulw.h.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulw<uint16_t, uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmulw_w_u_vv{: vs1, vs2 : vd},
- disasm: "vmulw.w.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulw<uint32_t, uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmulw_w_u_vv_m{: vs1, vs2 : vd},
- disasm: "vmulw.w.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulw<uint32_t, uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmulw_h_u_vx{: vs1, vs2 : vd},
- disasm: "vmulw.h.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulw<uint16_t, uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmulw_h_u_vx_m{: vs1, vs2 : vd},
- disasm: "vmulw.h.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulw<uint16_t, uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vmulw_w_u_vx{: vs1, vs2 : vd},
- disasm: "vmulw.w.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulw<uint32_t, uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmulw_w_u_vx_m{: vs1, vs2 : vd},
- disasm: "vmulw.w.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulw<uint32_t, uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vmulh
- vmulh_b_vv{: vs1, vs2 : vd},
- disasm: "vmulh.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<int8_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
- vmulh_b_vv_m{: vs1, vs2 : vd},
- disasm: "vmulh.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<int8_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
- vmulh_h_vv{: vs1, vs2 : vd},
- disasm: "vmulh.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<int16_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
- vmulh_h_vv_m{: vs1, vs2 : vd},
- disasm: "vmulh.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<int16_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
- vmulh_w_vv{: vs1, vs2 : vd},
- disasm: "vmulh.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<int32_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
- vmulh_w_vv_m{: vs1, vs2 : vd},
- disasm: "vmulh.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<int32_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
- vmulh_b_vx{: vs1, vs2 : vd},
- disasm: "vmulh.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<int8_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
- vmulh_b_vx_m{: vs1, vs2 : vd},
- disasm: "vmulh.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<int8_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
- vmulh_h_vx{: vs1, vs2 : vd},
- disasm: "vmulh.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<int16_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
- vmulh_h_vx_m{: vs1, vs2 : vd},
- disasm: "vmulh.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<int16_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
- vmulh_w_vx{: vs1, vs2 : vd},
- disasm: "vmulh.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<int32_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
- vmulh_w_vx_m{: vs1, vs2 : vd},
- disasm: "vmulh.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<int32_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
-
- //vmulh.r
- vmulh_b_r_vv{: vs1, vs2 : vd},
- disasm: "vmulh.b.r.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<int8_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
- vmulh_b_r_vv_m{: vs1, vs2 : vd},
- disasm: "vmulh.b.r.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<int8_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
- vmulh_h_r_vv{: vs1, vs2 : vd},
- disasm: "vmulh.h.r.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<int16_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
- vmulh_h_r_vv_m{: vs1, vs2 : vd},
- disasm: "vmulh.h.r.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<int16_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
- vmulh_w_r_vv{: vs1, vs2 : vd},
- disasm: "vmulh.w.r.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<int32_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
- vmulh_w_r_vv_m{: vs1, vs2 : vd},
- disasm: "vmulh.w.r.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<int32_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
- vmulh_b_r_vx{: vs1, vs2 : vd},
- disasm: "vmulh.b.r.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<int8_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
- vmulh_b_r_vx_m{: vs1, vs2 : vd},
- disasm: "vmulh.b.r.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<int8_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
- vmulh_h_r_vx{: vs1, vs2 : vd},
- disasm: "vmulh.h.r.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<int16_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
- vmulh_h_r_vx_m{: vs1, vs2 : vd},
- disasm: "vmulh.h.r.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<int16_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
- vmulh_w_r_vx{: vs1, vs2 : vd},
- disasm: "vmulh.w.r.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<int32_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
- vmulh_w_r_vx_m{: vs1, vs2 : vd},
- disasm: "vmulh.w.r.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<int32_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
-
- //vmulh.u
- vmulh_b_u_vv{: vs1, vs2 : vd},
- disasm: "vmulh.b.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<uint8_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
- vmulh_b_u_vv_m{: vs1, vs2 : vd},
- disasm: "vmulh.b.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<uint8_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
- vmulh_h_u_vv{: vs1, vs2 : vd},
- disasm: "vmulh.h.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<uint16_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
- vmulh_h_u_vv_m{: vs1, vs2 : vd},
- disasm: "vmulh.h.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<uint16_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
- vmulh_w_u_vv{: vs1, vs2 : vd},
- disasm: "vmulh.w.u.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<uint32_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
- vmulh_w_u_vv_m{: vs1, vs2 : vd},
- disasm: "vmulh.w.u.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<uint32_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
- vmulh_b_u_vx{: vs1, vs2 : vd},
- disasm: "vmulh.b.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<uint8_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
- vmulh_b_u_vx_m{: vs1, vs2 : vd},
- disasm: "vmulh.b.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<uint8_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
- vmulh_h_u_vx{: vs1, vs2 : vd},
- disasm: "vmulh.h.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<uint16_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
- vmulh_h_u_vx_m{: vs1, vs2 : vd},
- disasm: "vmulh.h.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<uint16_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
- vmulh_w_u_vx{: vs1, vs2 : vd},
- disasm: "vmulh.w.u.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<uint32_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
- vmulh_w_u_vx_m{: vs1, vs2 : vd},
- disasm: "vmulh.w.u.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<uint32_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
-
- //vmulh.ru
- vmulh_b_ur_vv{: vs1, vs2 : vd},
- disasm: "vmulh.b.ur.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<uint8_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
- vmulh_b_ur_vv_m{: vs1, vs2 : vd},
- disasm: "vmulh.b.ur.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<uint8_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
- vmulh_h_ur_vv{: vs1, vs2 : vd},
- disasm: "vmulh.h.ur.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<uint16_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
- vmulh_h_ur_vv_m{: vs1, vs2 : vd},
- disasm: "vmulh.h.ur.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<uint16_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
- vmulh_w_ur_vv{: vs1, vs2 : vd},
- disasm: "vmulh.w.ur.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<uint32_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
- vmulh_w_ur_vv_m{: vs1, vs2 : vd},
- disasm: "vmulh.w.ur.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<uint32_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
- vmulh_b_ur_vx{: vs1, vs2 : vd},
- disasm: "vmulh.b.ur.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<uint8_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
- vmulh_b_ur_vx_m{: vs1, vs2 : vd},
- disasm: "vmulh.b.ur.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<uint8_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
- vmulh_h_ur_vx{: vs1, vs2 : vd},
- disasm: "vmulh.h.ur.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<uint16_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
- vmulh_h_ur_vx_m{: vs1, vs2 : vd},
- disasm: "vmulh.h.ur.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<uint16_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
- vmulh_w_ur_vx{: vs1, vs2 : vd},
- disasm: "vmulh.w.ur.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<uint32_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
- vmulh_w_ur_vx_m{: vs1, vs2 : vd},
- disasm: "vmulh.w.ur.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMulh<uint32_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
-
- //vdmulh
- vdmulh_b_vv{: vs1, vs2 : vd},
- disasm: "vdmulh.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int8_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false, /* round_neg */ false)";
- vdmulh_b_vv_m{: vs1, vs2 : vd},
- disasm: "vdmulh.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int8_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false, /* round_neg */ false)";
- vdmulh_h_vv{: vs1, vs2 : vd},
- disasm: "vdmulh.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int16_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false, /* round_neg */ false)";
- vdmulh_h_vv_m{: vs1, vs2 : vd},
- disasm: "vdmulh.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int16_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false, /* round_neg */ false)";
- vdmulh_w_vv{: vs1, vs2 : vd},
- disasm: "vdmulh.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int32_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false, /* round_neg */ false)";
- vdmulh_w_vv_m{: vs1, vs2 : vd},
- disasm: "vdmulh.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int32_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false, /* round_neg */ false)";
- vdmulh_b_vx{: vs1, vs2 : vd},
- disasm: "vdmulh.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int8_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false, /* round_neg */ false)";
- vdmulh_b_vx_m{: vs1, vs2 : vd},
- disasm: "vdmulh.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int8_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false, /* round_neg */ false)";
- vdmulh_h_vx{: vs1, vs2 : vd},
- disasm: "vdmulh.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int16_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false, /* round_neg */ false)";
- vdmulh_h_vx_m{: vs1, vs2 : vd},
- disasm: "vdmulh.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int16_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false, /* round_neg */ false)";
- vdmulh_w_vx{: vs1, vs2 : vd},
- disasm: "vdmulh.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int32_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false, /* round_neg */ false)";
- vdmulh_w_vx_m{: vs1, vs2 : vd},
- disasm: "vdmulh.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int32_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false, /* round_neg */ false)";
-
- //vdmulh.r
- vdmulh_b_r_vv{: vs1, vs2 : vd},
- disasm: "vdmulh.b.r.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int8_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true, /* round_neg */ false)";
- vdmulh_b_r_vv_m{: vs1, vs2 : vd},
- disasm: "vdmulh.b.r.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int8_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true, /* round_neg */ false)";
- vdmulh_h_r_vv{: vs1, vs2 : vd},
- disasm: "vdmulh.h.r.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int16_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true, /* round_neg */ false)";
- vdmulh_h_r_vv_m{: vs1, vs2 : vd},
- disasm: "vdmulh.h.r.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int16_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true, /* round_neg */ false)";
- vdmulh_w_r_vv{: vs1, vs2 : vd},
- disasm: "vdmulh.w.r.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int32_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true, /* round_neg */ false)";
- vdmulh_w_r_vv_m{: vs1, vs2 : vd},
- disasm: "vdmulh.w.r.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int32_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true, /* round_neg */ false)";
- vdmulh_b_r_vx{: vs1, vs2 : vd},
- disasm: "vdmulh.b.r.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int8_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true, /* round_neg */ false)";
- vdmulh_b_r_vx_m{: vs1, vs2 : vd},
- disasm: "vdmulh.b.r.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int8_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true, /* round_neg */ false)";
- vdmulh_h_r_vx{: vs1, vs2 : vd},
- disasm: "vdmulh.h.r.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int16_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true, /* round_neg */ false)";
- vdmulh_h_r_vx_m{: vs1, vs2 : vd},
- disasm: "vdmulh.h.r.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int16_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true, /* round_neg */ false)";
- vdmulh_w_r_vx{: vs1, vs2 : vd},
- disasm: "vdmulh.w.r.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int32_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true, /* round_neg */ false)";
- vdmulh_w_r_vx_m{: vs1, vs2 : vd},
- disasm: "vdmulh.w.r.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int32_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true, /* round_neg */ false)";
-
- //vdmulh.rn
- vdmulh_b_rn_vv{: vs1, vs2 : vd},
- disasm: "vdmulh.b.rn.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int8_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true, /* round_neg */ true)";
- vdmulh_b_rn_vv_m{: vs1, vs2 : vd},
- disasm: "vdmulh.b.rn.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int8_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true, /* round_neg */ true)";
- vdmulh_h_rn_vv{: vs1, vs2 : vd},
- disasm: "vdmulh.h.rn.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int16_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true, /* round_neg */ true)";
- vdmulh_h_rn_vv_m{: vs1, vs2 : vd},
- disasm: "vdmulh.h.rn.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int16_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true, /* round_neg */ true)";
- vdmulh_w_rn_vv{: vs1, vs2 : vd},
- disasm: "vdmulh.w.rn.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int32_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true, /* round_neg */ true)";
- vdmulh_w_rn_vv_m{: vs1, vs2 : vd},
- disasm: "vdmulh.w.rn.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int32_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true, /* round_neg */ true)";
- vdmulh_b_rn_vx{: vs1, vs2 : vd},
- disasm: "vdmulh.b.rn.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int8_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true, /* round_neg */ true)";
- vdmulh_b_rn_vx_m{: vs1, vs2 : vd},
- disasm: "vdmulh.b.rn.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int8_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true, /* round_neg */ true)";
- vdmulh_h_rn_vx{: vs1, vs2 : vd},
- disasm: "vdmulh.h.rn.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int16_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true, /* round_neg */ true)";
- vdmulh_h_rn_vx_m{: vs1, vs2 : vd},
- disasm: "vdmulh.h.rn.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int16_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true, /* round_neg */ true)";
- vdmulh_w_rn_vx{: vs1, vs2 : vd},
- disasm: "vdmulh.w.rn.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int32_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true, /* round_neg */ true)";
- vdmulh_w_rn_vx_m{: vs1, vs2 : vd},
- disasm: "vdmulh.w.rn.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVDmulh<int32_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true, /* round_neg */ true)";
-
- //vmacc
- vmacc_b_vv{: vs1, vs2 : vd},
- disasm: "vmacc.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMacc<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmacc_b_vv_m{: vs1, vs2 : vd},
- disasm: "vmacc.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMacc<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmacc_h_vv{: vs1, vs2 : vd},
- disasm: "vmacc.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMacc<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmacc_h_vv_m{: vs1, vs2 : vd},
- disasm: "vmacc.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMacc<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmacc_w_vv{: vs1, vs2 : vd},
- disasm: "vmacc.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMacc<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmacc_w_vv_m{: vs1, vs2 : vd},
- disasm: "vmacc.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMacc<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmacc_b_vx{: vs1, vs2 : vd},
- disasm: "vmacc.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMacc<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmacc_b_vx_m{: vs1, vs2 : vd},
- disasm: "vmacc.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMacc<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vmacc_h_vx{: vs1, vs2 : vd},
- disasm: "vmacc.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMacc<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmacc_h_vx_m{: vs1, vs2 : vd},
- disasm: "vmacc.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMacc<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vmacc_w_vx{: vs1, vs2 : vd},
- disasm: "vmacc.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMacc<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmacc_w_vx_m{: vs1, vs2 : vd},
- disasm: "vmacc.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMacc<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vmadd
- vmadd_b_vv{: vs1, vs2 : vd},
- disasm: "vmadd.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMadd<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmadd_b_vv_m{: vs1, vs2 : vd},
- disasm: "vmadd.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMadd<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmadd_h_vv{: vs1, vs2 : vd},
- disasm: "vmadd.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMadd<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmadd_h_vv_m{: vs1, vs2 : vd},
- disasm: "vmadd.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMadd<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmadd_w_vv{: vs1, vs2 : vd},
- disasm: "vmadd.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMadd<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vmadd_w_vv_m{: vs1, vs2 : vd},
- disasm: "vmadd.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMadd<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vmadd_b_vx{: vs1, vs2 : vd},
- disasm: "vmadd.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMadd<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmadd_b_vx_m{: vs1, vs2 : vd},
- disasm: "vmadd.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMadd<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vmadd_h_vx{: vs1, vs2 : vd},
- disasm: "vmadd.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMadd<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmadd_h_vx_m{: vs1, vs2 : vd},
- disasm: "vmadd.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMadd<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vmadd_w_vx{: vs1, vs2 : vd},
- disasm: "vmadd.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMadd<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vmadd_w_vx_m{: vs1, vs2 : vd},
- disasm: "vmadd.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVMadd<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vslidevn
- vsliden_b_1_vv{: vs1, vs2 : vd},
- disasm: "vsliden.b.1.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevn<int8_t>, 1 /* index */, false /* strip_mine */)";
- vsliden_b_2_vv{: vs1, vs2 : vd},
- disasm: "vsliden.b.2.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevn<int8_t>, 2 /* index */, false /* strip_mine */)";
- vsliden_b_3_vv{: vs1, vs2 : vd},
- disasm: "vsliden.b.3.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevn<int8_t>, 3 /* index */, false /* strip_mine */)";
- vsliden_b_4_vv{: vs1, vs2 : vd},
- disasm: "vsliden.b.4.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevn<int8_t>, 4 /* index */, false /* strip_mine */)";
- vsliden_h_1_vv{: vs1, vs2 : vd},
- disasm: "vsliden.h.1.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevn<int16_t>, 1 /* index */, false /* strip_mine */)";
- vsliden_h_2_vv{: vs1, vs2 : vd},
- disasm: "vsliden.h.2.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevn<int16_t>, 2 /* index */, false /* strip_mine */)";
- vsliden_h_3_vv{: vs1, vs2 : vd},
- disasm: "vsliden.h.3.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevn<int16_t>, 3 /* index */, false /* strip_mine */)";
- vsliden_h_4_vv{: vs1, vs2 : vd},
- disasm: "vsliden.h.4.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevn<int16_t>, 4 /* index */, false /* strip_mine */)";
- vsliden_w_1_vv{: vs1, vs2 : vd},
- disasm: "vsliden.w.1.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevn<int32_t>, 1 /* index */, false /* strip_mine */)";
- vsliden_w_2_vv{: vs1, vs2 : vd},
- disasm: "vsliden.w.2.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevn<int32_t>, 2 /* index */, false /* strip_mine */)";
- vsliden_w_3_vv{: vs1, vs2 : vd},
- disasm: "vsliden.w.3.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevn<int32_t>, 3 /* index */, false /* strip_mine */)";
- vsliden_w_4_vv{: vs1, vs2 : vd},
- disasm: "vsliden.w.4.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevn<int32_t>, 4 /* index */, false /* strip_mine */)";
- vslidevn_b_1_vv_m{: vs1, vs2 : vd},
- disasm: "vslidevn.b.1.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevn<int8_t>, 1 /* index */, true /* strip_mine */)";
- vslidevn_b_2_vv_m{: vs1, vs2 : vd},
- disasm: "vslidevn.b.2.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevn<int8_t>, 2 /* index */, true /* strip_mine */)";
- vslidevn_b_3_vv_m{: vs1, vs2 : vd},
- disasm: "vslidevn.b.3.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevn<int8_t>, 3 /* index */, true /* strip_mine */)";
- vslidevn_b_4_vv_m{: vs1, vs2 : vd},
- disasm: "vslidevn.b.4.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevn<int8_t>, 4 /* index */, true /* strip_mine */)";
- vslidevn_h_1_vv_m{: vs1, vs2 : vd},
- disasm: "vslidevn.h.1.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevn<int16_t>, 1 /* index */, true /* strip_mine */)";
- vslidevn_h_2_vv_m{: vs1, vs2 : vd},
- disasm: "vslidevn.h.2.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevn<int16_t>, 2 /* index */, true /* strip_mine */)";
- vslidevn_h_3_vv_m{: vs1, vs2 : vd},
- disasm: "vslidevn.h.3.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevn<int16_t>, 3 /* index */, true /* strip_mine */)";
- vslidevn_h_4_vv_m{: vs1, vs2 : vd},
- disasm: "vslidevn.h.4.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevn<int16_t>, 4 /* index */, true /* strip_mine */)";
- vslidevn_w_1_vv_m{: vs1, vs2 : vd},
- disasm: "vslidevn.w.1.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevn<int32_t>, 1 /* index */, true /* strip_mine */)";
- vslidevn_w_2_vv_m{: vs1, vs2 : vd},
- disasm: "vslidevn.w.2.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevn<int32_t>, 2 /* index */, true /* strip_mine */)";
- vslidevn_w_3_vv_m{: vs1, vs2 : vd},
- disasm: "vslidevn.w.3.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevn<int32_t>, 3 /* index */, true /* strip_mine */)";
- vslidevn_w_4_vv_m{: vs1, vs2 : vd},
- disasm: "vslidevn.w.4.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevn<int32_t>, 4 /* index */, true /* strip_mine */)";
-
- //vslidehn
- vslidehn_b_1_vv_m{: vs1, vs2 : vd},
- disasm: "vslidehn.b.1.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidehn<int8_t>, 1 /* index */)";
- vslidehn_b_2_vv_m{: vs1, vs2 : vd},
- disasm: "vslidehn.b.2.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidehn<int8_t>, 2 /* index */)";
- vslidehn_b_3_vv_m{: vs1, vs2 : vd},
- disasm: "vslidehn.b.3.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidehn<int8_t>, 3 /* index */)";
- vslidehn_b_4_vv_m{: vs1, vs2 : vd},
- disasm: "vslidehn.b.4.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidehn<int8_t>, 4 /* index */)";
- vslidehn_h_1_vv_m{: vs1, vs2 : vd},
- disasm: "vslidehn.h.1.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidehn<int16_t>, 1 /* index */)";
- vslidehn_h_2_vv_m{: vs1, vs2 : vd},
- disasm: "vslidehn.h.2.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidehn<int16_t>, 2 /* index */)";
- vslidehn_h_3_vv_m{: vs1, vs2 : vd},
- disasm: "vslidehn.h.3.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidehn<int16_t>, 3 /* index */)";
- vslidehn_h_4_vv_m{: vs1, vs2 : vd},
- disasm: "vslidehn.h.4.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidehn<int16_t>, 4 /* index */)";
- vslidehn_w_1_vv_m{: vs1, vs2 : vd},
- disasm: "vslidehn.w.1.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidehn<int32_t>, 1 /* index */)";
- vslidehn_w_2_vv_m{: vs1, vs2 : vd},
- disasm: "vslidehn.w.2.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidehn<int32_t>, 2 /* index */)";
- vslidehn_w_3_vv_m{: vs1, vs2 : vd},
- disasm: "vslidehn.w.3.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidehn<int32_t>, 3 /* index */)";
- vslidehn_w_4_vv_m{: vs1, vs2 : vd},
- disasm: "vslidehn.w.4.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidehn<int32_t>, 4 /* index */)";
-
- //vslidevp
- vslidep_b_1_vv{: vs1, vs2 : vd},
- disasm: "vslidep.b.1.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevp<int8_t>, 1 /* index */, false /* strip_mine */)";
- vslidep_b_2_vv{: vs1, vs2 : vd},
- disasm: "vslidep.b.2.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevp<int8_t>, 2 /* index */, false /* strip_mine */)";
- vslidep_b_3_vv{: vs1, vs2 : vd},
- disasm: "vslidep.b.3.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevp<int8_t>, 3 /* index */, false /* strip_mine */)";
- vslidep_b_4_vv{: vs1, vs2 : vd},
- disasm: "vslidep.b.4.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevp<int8_t>, 4 /* index */, false /* strip_mine */)";
- vslidep_h_1_vv{: vs1, vs2 : vd},
- disasm: "vslidep.h.1.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevp<int16_t>, 1 /* index */, false /* strip_mine */)";
- vslidep_h_2_vv{: vs1, vs2 : vd},
- disasm: "vslidep.h.2.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevp<int16_t>, 2 /* index */, false /* strip_mine */)";
- vslidep_h_3_vv{: vs1, vs2 : vd},
- disasm: "vslidep.h.3.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevp<int16_t>, 3 /* index */, false /* strip_mine */)";
- vslidep_h_4_vv{: vs1, vs2 : vd},
- disasm: "vslidep.h.4.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevp<int16_t>, 4 /* index */, false /* strip_mine */)";
- vslidep_w_1_vv{: vs1, vs2 : vd},
- disasm: "vslidep.w.1.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevp<int32_t>, 1 /* index */, false /* strip_mine */)";
- vslidep_w_2_vv{: vs1, vs2 : vd},
- disasm: "vslidep.w.2.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevp<int32_t>, 2 /* index */, false /* strip_mine */)";
- vslidep_w_3_vv{: vs1, vs2 : vd},
- disasm: "vslidep.w.3.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevp<int32_t>, 3 /* index */, false /* strip_mine */)";
- vslidep_w_4_vv{: vs1, vs2 : vd},
- disasm: "vslidep.w.4.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevp<int32_t>, 4 /* index */, false /* strip_mine */)";
- vslidevp_b_1_vv_m{: vs1, vs2 : vd},
- disasm: "vslidevp.b.1.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevp<int8_t>, 1 /* index */, true /* strip_mine */)";
- vslidevp_b_2_vv_m{: vs1, vs2 : vd},
- disasm: "vslidevp.b.2.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevp<int8_t>, 2 /* index */, true /* strip_mine */)";
- vslidevp_b_3_vv_m{: vs1, vs2 : vd},
- disasm: "vslidevp.b.3.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevp<int8_t>, 3 /* index */, true /* strip_mine */)";
- vslidevp_b_4_vv_m{: vs1, vs2 : vd},
- disasm: "vslidevp.b.4.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevp<int8_t>, 4 /* index */, true /* strip_mine */)";
- vslidevp_h_1_vv_m{: vs1, vs2 : vd},
- disasm: "vslidevp.h.1.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevp<int16_t>, 1 /* index */, true /* strip_mine */)";
- vslidevp_h_2_vv_m{: vs1, vs2 : vd},
- disasm: "vslidevp.h.2.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevp<int16_t>, 2 /* index */, true /* strip_mine */)";
- vslidevp_h_3_vv_m{: vs1, vs2 : vd},
- disasm: "vslidevp.h.3.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevp<int16_t>, 3 /* index */, true /* strip_mine */)";
- vslidevp_h_4_vv_m{: vs1, vs2 : vd},
- disasm: "vslidevp.h.4.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevp<int16_t>, 4 /* index */, true /* strip_mine */)";
- vslidevp_w_1_vv_m{: vs1, vs2 : vd},
- disasm: "vslidevp.w.1.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevp<int32_t>, 1 /* index */, true /* strip_mine */)";
- vslidevp_w_2_vv_m{: vs1, vs2 : vd},
- disasm: "vslidevp.w.2.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevp<int32_t>, 2 /* index */, true /* strip_mine */)";
- vslidevp_w_3_vv_m{: vs1, vs2 : vd},
- disasm: "vslidevp.w.3.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevp<int32_t>, 3 /* index */, true /* strip_mine */)";
- vslidevp_w_4_vv_m{: vs1, vs2 : vd},
- disasm: "vslidevp.w.4.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidevp<int32_t>, 4 /* index */, true /* strip_mine */)";
-
- //vslidehp
- vslidehp_b_1_vv_m{: vs1, vs2 : vd},
- disasm: "vslidehp.b.1.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidehp<int8_t>, 1 /* index */)";
- vslidehp_b_2_vv_m{: vs1, vs2 : vd},
- disasm: "vslidehp.b.2.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidehp<int8_t>, 2 /* index */)";
- vslidehp_b_3_vv_m{: vs1, vs2 : vd},
- disasm: "vslidehp.b.3.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidehp<int8_t>, 3 /* index */)";
- vslidehp_b_4_vv_m{: vs1, vs2 : vd},
- disasm: "vslidehp.b.4.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidehp<int8_t>, 4 /* index */)";
- vslidehp_h_1_vv_m{: vs1, vs2 : vd},
- disasm: "vslidehp.h.1.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidehp<int16_t>, 1 /* index */)";
- vslidehp_h_2_vv_m{: vs1, vs2 : vd},
- disasm: "vslidehp.h.2.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidehp<int16_t>, 2 /* index */)";
- vslidehp_h_3_vv_m{: vs1, vs2 : vd},
- disasm: "vslidehp.h.3.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidehp<int16_t>, 3 /* index */)";
- vslidehp_h_4_vv_m{: vs1, vs2 : vd},
- disasm: "vslidehp.h.4.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidehp<int16_t>, 4 /* index */)";
- vslidehp_w_1_vv_m{: vs1, vs2 : vd},
- disasm: "vslidehp.w.1.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidehp<int32_t>, 1 /* index */)";
- vslidehp_w_2_vv_m{: vs1, vs2 : vd},
- disasm: "vslidehp.w.2.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidehp<int32_t>, 2 /* index */)";
- vslidehp_w_3_vv_m{: vs1, vs2 : vd},
- disasm: "vslidehp.w.3.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidehp<int32_t>, 3 /* index */)";
- vslidehp_w_4_vv_m{: vs1, vs2 : vd},
- disasm: "vslidehp.w.4.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSlidehp<int32_t>, 4 /* index */)";
-
- //vsel
- vsel_b_vv{: vs1, vs2, vd : vd},
- disasm: "vsel.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSel<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vsel_b_vv_m{: vs1, vs2, vd : vd},
- disasm: "vsel.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSel<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vsel_h_vv{: vs1, vs2, vd : vd},
- disasm: "vsel.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSel<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vsel_h_vv_m{: vs1, vs2, vd : vd},
- disasm: "vsel.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSel<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vsel_w_vv{: vs1, vs2, vd : vd},
- disasm: "vsel.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSel<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vsel_w_vv_m{: vs1, vs2, vd : vd},
- disasm: "vsel.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSel<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vsel_b_vx{: vs1, vs2, vd : vd},
- disasm: "vsel.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSel<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vsel_b_vx_m{: vs1, vs2, vd : vd},
- disasm: "vsel.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSel<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vsel_h_vx{: vs1, vs2, vd : vd},
- disasm: "vsel.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSel<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vsel_h_vx_m{: vs1, vs2, vd : vd},
- disasm: "vsel.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSel<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vsel_w_vx{: vs1, vs2, vd : vd},
- disasm: "vsel.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSel<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vsel_w_vx_m{: vs1, vs2, vd : vd},
- disasm: "vsel.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSel<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vevn
- vevn_b_vv{: vs1, vs2 : vd},
- disasm: "vevn.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEvn<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vevn_b_vv_m{: vs1, vs2 : vd},
- disasm: "vevn.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEvn<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vevn_h_vv{: vs1, vs2 : vd},
- disasm: "vevn.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEvn<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vevn_h_vv_m{: vs1, vs2 : vd},
- disasm: "vevn.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEvn<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vevn_w_vv{: vs1, vs2 : vd},
- disasm: "vevn.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEvn<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vevn_w_vv_m{: vs1, vs2 : vd},
- disasm: "vevn.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEvn<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vevn_b_vx{: vs1, vs2 : vd},
- disasm: "vevn.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEvn<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vevn_b_vx_m{: vs1, vs2 : vd},
- disasm: "vevn.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEvn<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vevn_h_vx{: vs1, vs2 : vd},
- disasm: "vevn.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEvn<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vevn_h_vx_m{: vs1, vs2 : vd},
- disasm: "vevn.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEvn<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vevn_w_vx{: vs1, vs2 : vd},
- disasm: "vevn.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEvn<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vevn_w_vx_m{: vs1, vs2 : vd},
- disasm: "vevn.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEvn<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vodd
- vodd_b_vv{: vs1, vs2 : vd},
- disasm: "vodd.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVOdd<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vodd_b_vv_m{: vs1, vs2 : vd},
- disasm: "vodd.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVOdd<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vodd_h_vv{: vs1, vs2 : vd},
- disasm: "vodd.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVOdd<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vodd_h_vv_m{: vs1, vs2 : vd},
- disasm: "vodd.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVOdd<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vodd_w_vv{: vs1, vs2 : vd},
- disasm: "vodd.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVOdd<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vodd_w_vv_m{: vs1, vs2 : vd},
- disasm: "vodd.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVOdd<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vodd_b_vx{: vs1, vs2 : vd},
- disasm: "vodd.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVOdd<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vodd_b_vx_m{: vs1, vs2 : vd},
- disasm: "vodd.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVOdd<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vodd_h_vx{: vs1, vs2 : vd},
- disasm: "vodd.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVOdd<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vodd_h_vx_m{: vs1, vs2 : vd},
- disasm: "vodd.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVOdd<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vodd_w_vx{: vs1, vs2 : vd},
- disasm: "vodd.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVOdd<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vodd_w_vx_m{: vs1, vs2 : vd},
- disasm: "vodd.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVOdd<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vevnodd
- vevnodd_b_vv{: vs1, vs2 : vd},
- disasm: "vevnodd.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEvnodd<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vevnodd_b_vv_m{: vs1, vs2 : vd},
- disasm: "vevnodd.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEvnodd<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vevnodd_h_vv{: vs1, vs2 : vd},
- disasm: "vevnodd.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEvnodd<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vevnodd_h_vv_m{: vs1, vs2 : vd},
- disasm: "vevnodd.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEvnodd<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vevnodd_w_vv{: vs1, vs2 : vd},
- disasm: "vevnodd.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEvnodd<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vevnodd_w_vv_m{: vs1, vs2 : vd},
- disasm: "vevnodd.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEvnodd<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vevnodd_b_vx{: vs1, vs2 : vd},
- disasm: "vevnodd.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEvnodd<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vevnodd_b_vx_m{: vs1, vs2 : vd},
- disasm: "vevnodd.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEvnodd<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vevnodd_h_vx{: vs1, vs2 : vd},
- disasm: "vevnodd.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEvnodd<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vevnodd_h_vx_m{: vs1, vs2 : vd},
- disasm: "vevnodd.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEvnodd<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vevnodd_w_vx{: vs1, vs2 : vd},
- disasm: "vevnodd.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEvnodd<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vevnodd_w_vx_m{: vs1, vs2 : vd},
- disasm: "vevnodd.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVEvnodd<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vzip
- vzip_b_vv{: vs1, vs2 : vd},
- disasm: "vzip.b.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVZip<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vzip_b_vv_m{: vs1, vs2 : vd},
- disasm: "vzip.b.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVZip<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vzip_h_vv{: vs1, vs2 : vd},
- disasm: "vzip.h.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVZip<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vzip_h_vv_m{: vs1, vs2 : vd},
- disasm: "vzip.h.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVZip<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vzip_w_vv{: vs1, vs2 : vd},
- disasm: "vzip.w.vv", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVZip<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
- vzip_w_vv_m{: vs1, vs2 : vd},
- disasm: "vzip.w.vv.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVZip<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
- vzip_b_vx{: vs1, vs2 : vd},
- disasm: "vzip.b.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVZip<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vzip_b_vx_m{: vs1, vs2 : vd},
- disasm: "vzip.b.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVZip<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vzip_h_vx{: vs1, vs2 : vd},
- disasm: "vzip.h.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVZip<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vzip_h_vx_m{: vs1, vs2 : vd},
- disasm: "vzip.h.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVZip<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
- vzip_w_vx{: vs1, vs2 : vd},
- disasm: "vzip.w.vx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVZip<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
- vzip_w_vx_m{: vs1, vs2 : vd},
- disasm: "vzip.w.vx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVZip<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
-
- //vld
- vld_b_x{(: vs1 :), (: : vd)},
- disasm: "vld.b.x", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)",
- "absl::bind_front(&KelvinVLdRegWrite<int8_t>, /*strip_mine*/ false)";
- vld_h_x{(: vs1 :), (: : vd)},
- disasm: "vld.h.x", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)",
- "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ false)";
- vld_w_x{(: vs1 :), (: : vd)},
- disasm: "vld.w.x", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)",
- "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ false)";
- vld_b_x_m{(: vs1 :), (: : vd)},
- disasm: "vld.b.x.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)",
- "absl::bind_front(&KelvinVLdRegWrite<int8_t>,/*strip_mine*/ true)";
- vld_h_x_m{(: vs1 :), (: : vd)},
- disasm: "vld.h.x.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)",
- "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ true)";
- vld_w_x_m{(: vs1 :), (: : vd)},
- disasm: "vld.w.x.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)",
- "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ true)";
- vld_b_p_x{(: vs1 : vs1), (: : vd)},
- disasm: "vld.b.p.x", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)",
- "absl::bind_front(&KelvinVLdRegWrite<int8_t>,/*strip_mine*/ false)";
- vld_h_p_x{(: vs1 : vs1), (: : vd)},
- disasm: "vld.h.p.x", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)",
- "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ false)";
- vld_w_p_x{(: vs1 : vs1), (: : vd)},
- disasm: "vld.w.p.x", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)",
- "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ false)";
- vld_b_p_x_m{(: vs1 : vs1), (: : vd)},
- disasm: "vld.b.p.x.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)",
- "absl::bind_front(&KelvinVLdRegWrite<int8_t>,/*strip_mine*/ true)";
- vld_h_p_x_m{(: vs1 : vs1), (: : vd)},
- disasm: "vld.h.p.x.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)",
- "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ true)";
- vld_w_p_x_m{(: vs1 : vs1), (: : vd)},
- disasm: "vld.w.p.x.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)",
- "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ true)";
- vld_b_p_xx{(: vs1, vs2 : vs1), (: : vd)},
- disasm: "vld.b.p.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)",
- "absl::bind_front(&KelvinVLdRegWrite<int8_t>,/*strip_mine*/ false)";
- vld_h_p_xx{(: vs1, vs2 : vs1), (: : vd)},
- disasm: "vld.h.p.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)",
- "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ false)";
- vld_w_p_xx{(: vs1, vs2 : vs1), (: : vd)},
- disasm: "vld.w.p.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)",
- "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ false)";
- vld_b_p_xx_m{(: vs1, vs2 : vs1), (: : vd)},
- disasm: "vld.b.p.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)",
- "absl::bind_front(&KelvinVLdRegWrite<int8_t>,/*strip_mine*/ true)";
- vld_h_p_xx_m{(: vs1, vs2 : vs1), (: : vd)},
- disasm: "vld.h.p.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)",
- "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ true)";
- vld_w_p_xx_m{(: vs1, vs2 : vs1), (: : vd)},
- disasm: "vld.w.p.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)",
- "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ true)";
- vld_b_l_xx{(: vs1, vs2 :), (: : vd)},
- disasm: "vld.b.l.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ false)",
- "absl::bind_front(&KelvinVLdRegWrite<int8_t>, /*strip_mine*/ false)";
- vld_h_l_xx{(: vs1, vs2 :), (: : vd)},
- disasm: "vld.h.l.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ false)",
- "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ false)";
- vld_w_l_xx{(: vs1, vs2 :), (: : vd)},
- disasm: "vld.w.l.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ false)",
- "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ false)";
- vld_b_l_xx_m{(: vs1, vs2 :), (: : vd)},
- disasm: "vld.b.l.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ true)",
- "absl::bind_front(&KelvinVLdRegWrite<int8_t>,/*strip_mine*/ true)";
- vld_h_l_xx_m{(: vs1, vs2 :), (: : vd)},
- disasm: "vld.h.l.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ true)",
- "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ true)";
- vld_w_l_xx_m{(: vs1, vs2 :), (: : vd)},
- disasm: "vld.w.l.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ true)",
- "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ true)";
- vld_b_lp_xx{(: vs1, vs2 : vs1), (: : vd)},
- disasm: "vld.b.lp.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ false)",
- "absl::bind_front(&KelvinVLdRegWrite<int8_t>,/*strip_mine*/ false)";
- vld_h_lp_xx{(: vs1, vs2 : vs1), (: : vd)},
- disasm: "vld.h.lp.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ false)",
- "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ false)";
- vld_w_lp_xx{(: vs1, vs2 : vs1), (: : vd)},
- disasm: "vld.w.lp.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ false)",
- "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ false)";
- vld_b_lp_xx_m{(: vs1, vs2 : vs1), (: : vd)},
- disasm: "vld.b.lp.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ true)",
- "absl::bind_front(&KelvinVLdRegWrite<int8_t>,/*strip_mine*/ true)";
- vld_h_lp_xx_m{(: vs1, vs2 : vs1), (: : vd)},
- disasm: "vld.h.lp.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ true)",
- "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ true)";
- vld_w_lp_xx_m{(: vs1, vs2 : vs1), (: : vd)},
- disasm: "vld.w.lp.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ true)",
- "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ true)";
- vld_b_s_xx{(: vs1, vs2 :), (: : vd)},
- disasm: "vld.b.s.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ false)",
- "absl::bind_front(&KelvinVLdRegWrite<int8_t>, /*strip_mine*/ false)";
- vld_h_s_xx{(: vs1, vs2 :), (: : vd)},
- disasm: "vld.h.s.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ false)",
- "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ false)";
- vld_w_s_xx{(: vs1, vs2 :), (: : vd)},
- disasm: "vld.w.s.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ false)",
- "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ false)";
- vld_b_s_xx_m{(: vs1, vs2 :), (: : vd)},
- disasm: "vld.b.s.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ true)",
- "absl::bind_front(&KelvinVLdRegWrite<int8_t>,/*strip_mine*/ true)";
- vld_h_s_xx_m{(: vs1, vs2 :), (: : vd)},
- disasm: "vld.h.s.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ true)",
- "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ true)";
- vld_w_s_xx_m{(: vs1, vs2 :), (: : vd)},
- disasm: "vld.w.s.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ true)",
- "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ true)";
- vld_b_sp_xx{(: vs1, vs2 : vs1), (: : vd)},
- disasm: "vld.b.sp.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ false)",
- "absl::bind_front(&KelvinVLdRegWrite<int8_t>,/*strip_mine*/ false)";
- vld_h_sp_xx{(: vs1, vs2 : vs1), (: : vd)},
- disasm: "vld.h.sp.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ false)",
- "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ false)";
- vld_w_sp_xx{(: vs1, vs2 : vs1), (: : vd)},
- disasm: "vld.w.sp.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ false)",
- "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ false)";
- vld_b_sp_xx_m{(: vs1, vs2 : vs1), (: : vd)},
- disasm: "vld.b.sp.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ true)",
- "absl::bind_front(&KelvinVLdRegWrite<int8_t>,/*strip_mine*/ true)";
- vld_h_sp_xx_m{(: vs1, vs2 : vs1), (: : vd)},
- disasm: "vld.h.sp.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ true)",
- "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ true)";
- vld_w_sp_xx_m{(: vs1, vs2 : vs1), (: : vd)},
- disasm: "vld.w.sp.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ true)",
- "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ true)";
- vld_b_tp_xx{(: vs1, vs2 : vs1), (: : vd)},
- disasm: "vld.b.tp.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ true, /*stride*/ true, /*strip_mine*/ false)",
- "absl::bind_front(&KelvinVLdRegWrite<int8_t>,/*strip_mine*/ false)";
- vld_h_tp_xx{(: vs1, vs2 : vs1), (: : vd)},
- disasm: "vld.h.tp.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ true, /*stride*/ true, /*strip_mine*/ false)",
- "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ false)";
- vld_w_tp_xx{(: vs1, vs2 : vs1), (: : vd)},
- disasm: "vld.w.tp.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ true, /*stride*/ true, /*strip_mine*/ false)",
- "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ false)";
- vld_b_tp_xx_m{(: vs1, vs2 : vs1), (: : vd)},
- disasm: "vld.b.tp.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ true, /*stride*/ true, /*strip_mine*/ true)",
- "absl::bind_front(&KelvinVLdRegWrite<int8_t>,/*strip_mine*/ true)";
- vld_h_tp_xx_m{(: vs1, vs2 : vs1), (: : vd)},
- disasm: "vld.h.tp.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ true, /*stride*/ true, /*strip_mine*/ true)",
- "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ true)";
- vld_w_tp_xx_m{(: vs1, vs2 : vs1), (: : vd)},
- disasm: "vld.w.tp.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ true, /*stride*/ true, /*strip_mine*/ true)",
- "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ true)";
- //vst, note `vd` is actually the source vector register, and `vs1` is actually the scaler register.
- vst_b_x{: vd, vs1 :},
- disasm: "vst.b.x", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)";
- vst_h_x{: vd, vs1 :},
- disasm: "vst.h.x", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)";
- vst_w_x{: vd, vs1 :},
- disasm: "vst.w.x", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)";
- vst_b_x_m{: vd, vs1 :},
- disasm: "vst.b.x.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)";
- vst_h_x_m{: vd, vs1 :},
- disasm: "vst.h.x.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)";
- vst_w_x_m{: vd, vs1 :},
- disasm: "vst.w.x.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)";
- vst_b_p_x{: vd, vs1 : vs1},
- disasm: "vst.b.p.x", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)";
- vst_h_p_x{: vd, vs1 : vs1},
- disasm: "vst.h.p.x", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)";
- vst_w_p_x{: vd, vs1 : vs1},
- disasm: "vst.w.p.x", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)";
- vst_b_p_x_m{: vd, vs1 : vs1},
- disasm: "vst.b.p.x.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)";
- vst_h_p_x_m{: vd, vs1 : vs1},
- disasm: "vst.h.p.x.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)";
- vst_w_p_x_m{: vd, vs1 : vs1},
- disasm: "vst.w.p.x.m", "%vd, %vs1",
- semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)";
- vst_b_p_xx{: vd, vs1, vs2 : vs1},
- disasm: "vst.b.p.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)";
- vst_h_p_xx{: vd, vs1, vs2 : vs1},
- disasm: "vst.h.p.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)";
- vst_w_p_xx{: vd, vs1, vs2 : vs1},
- disasm: "vst.w.p.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)";
- vst_b_p_xx_m{: vd, vs1, vs2 : vs1},
- disasm: "vst.b.p.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)";
- vst_h_p_xx_m{: vd, vs1, vs2 : vs1},
- disasm: "vst.h.p.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)";
- vst_w_p_xx_m{: vd, vs1, vs2 : vs1},
- disasm: "vld.w.p.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)";
- vst_b_l_xx{: vd, vs1, vs2 :},
- disasm: "vst.b.l.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ false)";
- vst_h_l_xx{: vd, vs1, vs2 :},
- disasm: "vst.h.l.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ false)";
- vst_w_l_xx{: vd, vs1, vs2 :},
- disasm: "vst.w.l.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ false)";
- vst_b_l_xx_m{: vd, vs1, vs2 :},
- disasm: "vst.b.l.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ true)";
- vst_h_l_xx_m{: vd, vs1, vs2 :},
- disasm: "vst.h.l.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ true)";
- vst_w_l_xx_m{: vd, vs1, vs2 :},
- disasm: "vst.w.l.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ true)";
- vst_b_lp_xx{: vd, vs1, vs2 : vs1},
- disasm: "vst.b.lp.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ false)";
- vst_h_lp_xx{: vd, vs1, vs2 : vs1},
- disasm: "vst.h.lp.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ false)";
- vst_w_lp_xx{: vd, vs1, vs2 : vs1},
- disasm: "vst.w.lp.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ false)";
- vst_b_lp_xx_m{: vd, vs1, vs2 : vs1},
- disasm: "vst.b.lp.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ true)";
- vst_h_lp_xx_m{: vd, vs1, vs2 : vs1},
- disasm: "vst.h.lp.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ true)";
- vst_w_lp_xx_m{: vd, vs1, vs2 : vs1},
- disasm: "vst.w.lp.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ true)";
- vst_b_s_xx{: vd, vs1, vs2 :},
- disasm: "vst.b.s.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ false)";
- vst_h_s_xx{: vd, vs1, vs2 :},
- disasm: "vst.h.s.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ false)";
- vst_w_s_xx{: vd, vs1, vs2 :},
- disasm: "vst.w.s.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ false)";
- vst_b_s_xx_m{: vd, vs1, vs2 :},
- disasm: "vst.b.s.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ true)";
- vst_h_s_xx_m{: vd, vs1, vs2 :},
- disasm: "vst.h.s.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ true)";
- vst_w_s_xx_m{: vd, vs1, vs2 :},
- disasm: "vst.w.s.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ true)";
- vst_b_sp_xx{: vd, vs1, vs2 : vs1},
- disasm: "vst.b.sp.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ false)";
- vst_h_sp_xx{: vd, vs1, vs2 : vs1},
- disasm: "vst.h.sp.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ false)";
- vst_w_sp_xx{: vd, vs1, vs2 : vs1},
- disasm: "vst.w.sp.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ false)";
- vst_b_sp_xx_m{: vd, vs1, vs2 : vs1},
- disasm: "vst.b.sp.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ true)";
- vst_h_sp_xx_m{: vd, vs1, vs2 : vs1},
- disasm: "vst.h.sp.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ true)";
- vst_w_sp_xx_m{: vd, vs1, vs2 : vs1},
- disasm: "vst.w.sp.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ true)";
- vst_b_tp_xx{: vd, vs1, vs2 : vs1},
- disasm: "vst.b.tp.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ true, /*stride*/ true, /*strip_mine*/ false)";
- vst_h_tp_xx{: vd, vs1, vs2 : vs1},
- disasm: "vst.h.tp.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ true, /*stride*/ true, /*strip_mine*/ false)";
- vst_w_tp_xx{: vd, vs1, vs2 : vs1},
- disasm: "vst.w.tp.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ true, /*stride*/ true, /*strip_mine*/ false)";
- vst_b_tp_xx_m{: vd, vs1, vs2 : vs1},
- disasm: "vst.b.tp.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ true, /*stride*/ true, /*strip_mine*/ true)";
- vst_h_tp_xx_m{: vd, vs1, vs2 : vs1},
- disasm: "vst.h.tp.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ true, /*stride*/ true, /*strip_mine*/ true)";
- vst_w_tp_xx_m{: vd, vs1, vs2 : vs1},
- disasm: "vst.w.tp.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ true, /*stride*/ true, /*strip_mine*/ true)";
- vstq_b_s_xx{: vd, vs1, vs2 :},
- disasm: "vstq.b.s.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVStQ<int8_t>, /*strip_mine*/ false)";
- vstq_h_s_xx{: vd, vs1, vs2 :},
- disasm: "vstq.h.s.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVStQ<int16_t>, /*strip_mine*/ false)";
- vstq_w_s_xx{: vd, vs1, vs2 :},
- disasm: "vstq.w.s.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVStQ<int32_t>, /*strip_mine*/ false)";
- vstq_b_sp_xx{: vd, vs1, vs2 : vs1},
- disasm: "vstq.b.s.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVStQ<int8_t>, /*strip_mine*/ false)";
- vstq_h_sp_xx{: vd, vs1, vs2 : vs1},
- disasm: "vstq.h.s.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVStQ<int16_t>, /*strip_mine*/ false)";
- vstq_w_sp_xx{: vd, vs1, vs2 : vs1},
- disasm: "vstq.w.s.xx", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVStQ<int32_t>, /*strip_mine*/ false)";
- vstq_b_s_xx_m{: vd, vs1, vs2 :},
- disasm: "vstq.b.s.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVStQ<int8_t>, /*strip_mine*/ true)";
- vstq_h_s_xx_m{: vd, vs1, vs2 :},
- disasm: "vstq.h.s.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVStQ<int16_t>, /*strip_mine*/ true)";
- vstq_w_s_xx_m{: vd, vs1, vs2 :},
- disasm: "vstq.w.s.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVStQ<int32_t>, /*strip_mine*/ true)";
- vstq_b_sp_xx_m{: vd, vs1, vs2 : vs1},
- disasm: "vstq.b.s.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVStQ<int8_t>, /*strip_mine*/ true)";
- vstq_h_sp_xx_m{: vd, vs1, vs2 : vs1},
- disasm: "vstq.h.s.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVStQ<int16_t>, /*strip_mine*/ true)";
- vstq_w_sp_xx_m{: vd, vs1, vs2 : vs1},
- disasm: "vstq.w.s.xx.m", "%vd, %vs1, %vs2",
- semfunc: "absl::bind_front(&KelvinVStQ<int32_t>, /*strip_mine*/ true)";
- }
-}
-
-slot kelvin_memory {
- includes {
- #include "sim/kelvin_instructions.h"
- }
- default size = 4;
- default latency = global_latency;
- opcodes {
- flushall{},
- disasm: "flushall",
- semfunc: "&KelvinNopInstruction";
- flushat{: rs1 :},
- disasm: "flushat", "%rs1",
- semfunc: "&KelvinNopInstruction";
- }
-}
-
-slot kelvin_system {
- includes {
- #include "sim/kelvin_vector_memory_instructions.h"
- }
- default size = 4;
- default latency = global_latency;
- resources TwoOp = { next_pc, rs1 : rd[..rd]};
- resources ThreeOp = { next_pc, rs1, rs2 : rd[..rd]};
- opcodes {
- getmaxvl_b{: : rd},
- resources: { next_pc : rd[0..]},
- disasm: "getmaxvl.b", "%rd",
- semfunc: "absl::bind_front(&KelvinGetVl<int8_t>, /*strip_mine*/ false, /*is_rs1*/ false, /*is_rs2*/ false)";
- getmaxvl_h{: : rd},
- resources: { next_pc : rd[0..]},
- disasm: "getmaxvl.h", "%rd",
- semfunc: "absl::bind_front(&KelvinGetVl<int16_t>, /*strip_mine*/ false, /*is_rs1*/ false, /*is_rs2*/ false)";
- getmaxvl_w{: : rd},
- resources: { next_pc : rd[0..]},
- disasm: "getmaxvl.w", "%rd",
- semfunc: "absl::bind_front(&KelvinGetVl<int32_t>, /*strip_mine*/ false, /*is_rs1*/ false, /*is_rs2*/ false)";
- getvl_b_x{: rs1 : rd},
- resources: TwoOp,
- disasm: "getvl.b.x", "%rd, %rs1",
- semfunc: "absl::bind_front(&KelvinGetVl<int8_t>, /*strip_mine*/ false, /*is_rs1*/ true, /*is_rs2*/ false)";
- getvl_h_x{: rs1 : rd},
- resources: TwoOp,
- disasm: "getvl.h.x", "%rd, %rs1",
- semfunc: "absl::bind_front(&KelvinGetVl<int16_t>, /*strip_mine*/ false, /*is_rs1*/ true, /*is_rs2*/ false)";
- getvl_w_x{: rs1 : rd},
- resources: TwoOp,
- disasm: "getvl.w.x", "%rd, %rs1",
- semfunc: "absl::bind_front(&KelvinGetVl<int32_t>, /*strip_mine*/ false, /*is_rs1*/ true, /*is_rs2*/ false)";
- getvl_b_xx{: rs1, rs2 : rd},
- resources: ThreeOp,
- disasm: "getvl.b.xx", "%rd, %rs1, %rs2",
- semfunc: "absl::bind_front(&KelvinGetVl<int8_t>, /*strip_mine*/ false, /*is_rs1*/ true, /*is_rs2*/ true)";
- getvl_h_xx{: rs1, rs2 : rd},
- resources: ThreeOp,
- disasm: "getvl.h.xx", "%rd, %rs1, %rs2",
- semfunc: "absl::bind_front(&KelvinGetVl<int16_t>, /*strip_mine*/ false, /*is_rs1*/ true, /*is_rs2*/ true)";
- getvl_w_xx{: rs1, rs2 : rd},
- resources: ThreeOp,
- disasm: "getvl.w.xx", "%rd, %rs1, %rs2",
- semfunc: "absl::bind_front(&KelvinGetVl<int32_t>, /*strip_mine*/ false, /*is_rs1*/ true, /*is_rs2*/ true)";
- getmaxvl_b_m{: : rd},
- resources: { next_pc : rd[0..]},
- disasm: "getmaxvl.b.m", "%rd",
- semfunc: "absl::bind_front(&KelvinGetVl<int8_t>, /*strip_mine*/ true, /*is_rs1*/ false, /*is_rs2*/ false)";
- getmaxvl_h_m{: : rd},
- resources: { next_pc : rd[0..]},
- disasm: "getmaxvl.h.m", "%rd",
- semfunc: "absl::bind_front(&KelvinGetVl<int16_t>, /*strip_mine*/ true, /*is_rs1*/ false, /*is_rs2*/ false)";
- getmaxvl_w_m{: : rd},
- resources: { next_pc : rd[0..]},
- disasm: "getmaxvl.w.m", "%rd",
- semfunc: "absl::bind_front(&KelvinGetVl<int32_t>, /*strip_mine*/ true, /*is_rs1*/ false, /*is_rs2*/ false)";
- getvl_b_x_m{: rs1 : rd},
- resources: TwoOp,
- disasm: "getvl.b.x.m", "%rd, %rs1",
- semfunc: "absl::bind_front(&KelvinGetVl<int8_t>, /*strip_mine*/ true, /*is_rs1*/ true, /*is_rs2*/ false)";
- getvl_h_x_m{: rs1 : rd},
- resources: TwoOp,
- disasm: "getvl.h.x.m", "%rd, %rs1",
- semfunc: "absl::bind_front(&KelvinGetVl<int16_t>, /*strip_mine*/ true, /*is_rs1*/ true, /*is_rs2*/ false)";
- getvl_w_x_m{: rs1 : rd},
- resources: TwoOp,
- disasm: "getvl.w.x.m", "%rd, %rs1",
- semfunc: "absl::bind_front(&KelvinGetVl<int32_t>, /*strip_mine*/ true, /*is_rs1*/ true, /*is_rs2*/ false)";
- getvl_b_xx_m{: rs1, rs2 : rd},
- resources: ThreeOp,
- disasm: "getvl.b.xx.m", "%rd, %rs1, %rs2",
- semfunc: "absl::bind_front(&KelvinGetVl<int8_t>, /*strip_mine*/ true, /*is_rs1*/ true, /*is_rs2*/ true)";
- getvl_h_xx_m{: rs1, rs2 : rd},
- resources: ThreeOp,
- disasm: "getvl.h.xx.m", "%rd, %rs1, %rs2",
- semfunc: "absl::bind_front(&KelvinGetVl<int16_t>, /*strip_mine*/ true, /*is_rs1*/ true, /*is_rs2*/ true)";
- getvl_w_xx_m{: rs1, rs2 : rd},
- resources: ThreeOp,
- disasm: "getvl.w.xx.m", "%rd, %rs1, %rs2",
- semfunc: "absl::bind_front(&KelvinGetVl<int32_t>, /*strip_mine*/ true, /*is_rs1*/ true, /*is_rs2*/ true)";
- }
-}
-
-slot kelvin_log {
- includes {
- #include "sim/kelvin_instructions.h"
- }
- default size = 4;
- default latency = global_latency;
- opcodes {
- flog{: rs1 :},
- resources: { next_pc : rs1[0..]},
- disasm: "flog", "%rs1",
- semfunc: "absl::bind_front(&KelvinLogInstruction, /*log_mode*/ 0)";
- slog{: rs1 :},
- resources: { next_pc : rs1[0..]},
- disasm: "slog", "%rs1",
- semfunc: "absl::bind_front(&KelvinLogInstruction, /*log_mode*/ 1)";
- clog{: rs1 :},
- resources: { next_pc : rs1[0..]},
- disasm: "clog", "%rs1",
- semfunc: "absl::bind_front(&KelvinLogInstruction, /*log_mode*/ 2)";
- klog{: rs1 :},
- resources: { next_pc : rs1[0..]},
- disasm: "klog", "%rs1",
- semfunc: "absl::bind_front(&KelvinLogInstruction, /*log_mode*/ 3)";
- }
-}
+#include "sim/kelvin_base.isa"
+#include "sim/kelvin_arith.isa"
+#include "sim/kelvin_shift.isa"
+#include "sim/kelvin_memory.isa"
+#include "sim/kelvin_mul.isa"
// Combining all kelvin instruction sets.
-slot kelvin : riscv32i, riscv32m, zicsr, zfencei, privileged, kelvin_arith, kelvin_log, kelvin_memory, kelvin_system {
+slot kelvin : riscv32i, riscv32m, zicsr, zfencei, privileged, kelvin_arith,
+ kelvin_log, kelvin_memory, kelvin_mul, kelvin_shift, kelvin_vector_memory {
includes {
#include "sim/kelvin_instructions.h"
}
diff --git a/sim/kelvin_arith.isa b/sim/kelvin_arith.isa
new file mode 100644
index 0000000..afb36ff
--- /dev/null
+++ b/sim/kelvin_arith.isa
@@ -0,0 +1,1572 @@
+// This file define the kelvin base isa for mpact-sim. For more info on mpact-sim
+// isa format, check: go/mpact-sim-codelabs-riscv-instruction-decoder
+
+// First disasm field is 18 char wide and left justified.
+disasm widths = {-18};
+
+// Kelvin simd instructions:
+// https://spacebeaker.googlesource.com/shodan/sw/kelvin/+/refs/heads/master/docs/kelvin_isa.md
+// Arithmetics/Logical instructions (func1 000/100/001)
+slot kelvin_arith {
+ includes {
+ #include "sim/kelvin_instructions.h"
+ #include "sim/kelvin_vector_instructions.h"
+ #include "absl/functional/bind_front.h"
+ }
+ default size = 4;
+ default latency = global_latency;
+ opcodes {
+ // vadd
+ vadd_b_vv{: vs1, vs2 : vd},
+ disasm: "vadd.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdd<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vadd_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vadd.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdd<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vadd_h_vv{: vs1, vs2 : vd},
+ disasm: "vadd.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdd<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vadd_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vadd.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdd<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vadd_w_vv{: vs1, vs2 : vd},
+ disasm: "vadd.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdd<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vadd_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vadd.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdd<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vadd_b_vx{: vs1, vs2 : vd},
+ disasm: "vadd.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdd<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vadd_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vadd.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdd<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vadd_h_vx{: vs1, vs2 : vd},
+ disasm: "vadd.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdd<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vadd_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vadd.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdd<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vadd_w_vx{: vs1, vs2 : vd},
+ disasm: "vadd.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdd<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vadd_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vadd.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdd<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ // vsub
+ vsub_b_vv{: vs1, vs2 : vd},
+ disasm: "vsub.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSub<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vsub_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vsub.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSub<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vsub_h_vv{: vs1, vs2 : vd},
+ disasm: "vsub.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSub<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vsub_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vsub.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSub<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vsub_w_vv{: vs1, vs2 : vd},
+ disasm: "vsub.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSub<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vsub_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vsub.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSub<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vsub_b_vx{: vs1, vs2 : vd},
+ disasm: "vsub.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSub<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vsub_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vsub.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSub<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vsub_h_vx{: vs1, vs2 : vd},
+ disasm: "vsub.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSub<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vsub_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vsub.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSub<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vsub_w_vx{: vs1, vs2 : vd},
+ disasm: "vsub.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSub<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vsub_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vsub.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSub<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ // vrsub
+ vrsub_b_vv{: vs1, vs2 : vd},
+ disasm: "vrsub.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVRSub<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vrsub_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vrsub.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVRSub<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vrsub_h_vv{: vs1, vs2 : vd},
+ disasm: "vrsub.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVRSub<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vrsub_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vrsub.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVRSub<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vrsub_w_vv{: vs1, vs2 : vd},
+ disasm: "vrsub.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVRSub<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vrsub_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vrsub.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVRSub<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vrsub_b_vx{: vs1, vs2 : vd},
+ disasm: "vrsub.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVRSub<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vrsub_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vrsub.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVRSub<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vrsub_h_vx{: vs1, vs2 : vd},
+ disasm: "vrsub.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVRSub<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vrsub_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vrsub.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVRSub<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vrsub_w_vx{: vs1, vs2 : vd},
+ disasm: "vrsub.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVRSub<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vrsub_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vrsub.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVRSub<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ // veq
+ veq_b_vv{: vs1, vs2 : vd},
+ disasm: "veq.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEq<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ veq_b_vv_m{: vs1, vs2 : vd},
+ disasm: "veq.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEq<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ veq_h_vv{: vs1, vs2 : vd},
+ disasm: "veq.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEq<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ veq_h_vv_m{: vs1, vs2 : vd},
+ disasm: "veq.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEq<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ veq_w_vv{: vs1, vs2 : vd},
+ disasm: "veq.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEq<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ veq_w_vv_m{: vs1, vs2 : vd},
+ disasm: "veq.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEq<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ veq_b_vx{: vs1, vs2 : vd},
+ disasm: "veq.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEq<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ veq_b_vx_m{: vs1, vs2 : vd},
+ disasm: "veq.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEq<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ veq_h_vx{: vs1, vs2 : vd},
+ disasm: "veq.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEq<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ veq_h_vx_m{: vs1, vs2 : vd},
+ disasm: "veq.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEq<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ veq_w_vx{: vs1, vs2 : vd},
+ disasm: "veq.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEq<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ veq_w_vx_m{: vs1, vs2 : vd},
+ disasm: "veq.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEq<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ // vne
+ vne_b_vv{: vs1, vs2 : vd},
+ disasm: "vne.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVNe<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vne_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vne.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVNe<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vne_h_vv{: vs1, vs2 : vd},
+ disasm: "vne.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVNe<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vne_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vne.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVNe<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vne_w_vv{: vs1, vs2 : vd},
+ disasm: "vne.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVNe<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vne_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vne.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVNe<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vne_b_vx{: vs1, vs2 : vd},
+ disasm: "vne.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVNe<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vne_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vne.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVNe<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vne_h_vx{: vs1, vs2 : vd},
+ disasm: "vne.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVNe<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vne_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vne.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVNe<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vne_w_vx{: vs1, vs2 : vd},
+ disasm: "vne.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVNe<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vne_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vne.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVNe<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ // vlt
+ vlt_b_vv{: vs1, vs2 : vd},
+ disasm: "vlt.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLt<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vlt_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vlt.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLt<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vlt_h_vv{: vs1, vs2 : vd},
+ disasm: "vlt.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLt<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vlt_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vlt.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLt<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vlt_w_vv{: vs1, vs2 : vd},
+ disasm: "vlt.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLt<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vlt_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vlt.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLt<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vlt_b_vx{: vs1, vs2 : vd},
+ disasm: "vlt.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLt<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vlt_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vlt.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLt<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vlt_h_vx{: vs1, vs2 : vd},
+ disasm: "vlt.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLt<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vlt_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vlt.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLt<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vlt_w_vx{: vs1, vs2 : vd},
+ disasm: "vlt.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLt<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vlt_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vlt.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLt<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ // vltu
+ vlt_u_b_vv{: vs1, vs2 : vd},
+ disasm: "vlt.b.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLt<uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vlt_u_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vlt.b.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLt<uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vlt_u_h_vv{: vs1, vs2 : vd},
+ disasm: "vlt.h.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLt<uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vlt_u_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vlt.h.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLt<uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vlt_u_w_vv{: vs1, vs2 : vd},
+ disasm: "vlt.w.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLt<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vlt_u_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vlt.w.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLt<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vlt_u_b_vx{: vs1, vs2 : vd},
+ disasm: "vlt.b.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLt<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vlt_u_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vlt.b.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLt<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vlt_u_h_vx{: vs1, vs2 : vd},
+ disasm: "vlt.h.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLt<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vlt_u_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vlt.h.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLt<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vlt_u_w_vx{: vs1, vs2 : vd},
+ disasm: "vlt.w.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLt<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vlt_u_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vlt.w.u.vx.m", "%vd, %vs1,V %vs2",
+ semfunc: "absl::bind_front(&KelvinVLt<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ // vle
+ vle_b_vv{: vs1, vs2 : vd},
+ disasm: "vle.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLe<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vle_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vle.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLe<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vle_h_vv{: vs1, vs2 : vd},
+ disasm: "vle.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLe<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vle_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vle.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLe<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vle_w_vv{: vs1, vs2 : vd},
+ disasm: "vle.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLe<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vle_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vle.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLe<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vle_b_vx{: vs1, vs2 : vd},
+ disasm: "vle.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLe<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vle_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vle.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLe<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vle_h_vx{: vs1, vs2 : vd},
+ disasm: "vle.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLe<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vle_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vle.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLe<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vle_w_vx{: vs1, vs2 : vd},
+ disasm: "vle.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLe<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vle_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vle.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLe<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ // vleu
+ vle_u_b_vv{: vs1, vs2 : vd},
+ disasm: "vle.b.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLe<uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vle_u_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vle.b.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLe<uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vle_u_h_vv{: vs1, vs2 : vd},
+ disasm: "vle.h.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLe<uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vle_u_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vle.h.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLe<uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vle_u_w_vv{: vs1, vs2 : vd},
+ disasm: "vle.w.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLe<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vle_u_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vle.w.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLe<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vle_u_b_vx{: vs1, vs2 : vd},
+ disasm: "vle.b.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLe<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vle_u_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vle.b.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLe<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vle_u_h_vx{: vs1, vs2 : vd},
+ disasm: "vle.h.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLe<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vle_u_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vle.h.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLe<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vle_u_w_vx{: vs1, vs2 : vd},
+ disasm: "vle.w.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLe<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vle_u_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vle.w.u.vx.m", "%vd, %vs1,V %vs2",
+ semfunc: "absl::bind_front(&KelvinVLe<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ // vgt
+ vgt_b_vv{: vs1, vs2 : vd},
+ disasm: "vgt.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGt<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vgt_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vgt.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGt<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vgt_h_vv{: vs1, vs2 : vd},
+ disasm: "vgt.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGt<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vgt_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vgt.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGt<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vgt_w_vv{: vs1, vs2 : vd},
+ disasm: "vgt.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGt<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vgt_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vgt.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGt<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vgt_b_vx{: vs1, vs2 : vd},
+ disasm: "vgt.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGt<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vgt_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vgt.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGt<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vgt_h_vx{: vs1, vs2 : vd},
+ disasm: "vgt.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGt<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vgt_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vgt.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGt<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vgt_w_vx{: vs1, vs2 : vd},
+ disasm: "vgt.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGt<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vgt_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vgt.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGt<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ // vgtu
+ vgt_u_b_vv{: vs1, vs2 : vd},
+ disasm: "vgt.b.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGt<uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vgt_u_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vgt.b.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGt<uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vgt_u_h_vv{: vs1, vs2 : vd},
+ disasm: "vgt.h.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGt<uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vgt_u_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vgt.h.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGt<uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vgt_u_w_vv{: vs1, vs2 : vd},
+ disasm: "vgt.w.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGt<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vgt_u_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vgt.w.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGt<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vgt_u_b_vx{: vs1, vs2 : vd},
+ disasm: "vgt.b.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGt<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vgt_u_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vgt.b.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGt<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vgt_u_h_vx{: vs1, vs2 : vd},
+ disasm: "vgt.h.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGt<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vgt_u_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vgt.h.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGt<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vgt_u_w_vx{: vs1, vs2 : vd},
+ disasm: "vgt.w.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGt<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vgt_u_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vgt.w.u.vx.m", "%vd, %vs1,V %vs2",
+ semfunc: "absl::bind_front(&KelvinVGt<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ // vge
+ vge_b_vv{: vs1, vs2 : vd},
+ disasm: "vge.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGe<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vge_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vge.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGe<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vge_h_vv{: vs1, vs2 : vd},
+ disasm: "vge.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGe<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vge_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vge.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGe<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vge_w_vv{: vs1, vs2 : vd},
+ disasm: "vge.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGe<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vge_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vge.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGe<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vge_b_vx{: vs1, vs2 : vd},
+ disasm: "vge.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGe<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vge_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vge.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGe<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vge_h_vx{: vs1, vs2 : vd},
+ disasm: "vge.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGe<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vge_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vge.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGe<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vge_w_vx{: vs1, vs2 : vd},
+ disasm: "vge.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGe<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vge_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vge.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGe<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ // vgeu
+ vge_u_b_vv{: vs1, vs2 : vd},
+ disasm: "vge.b.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGe<uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vge_u_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vge.b.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGe<uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vge_u_h_vv{: vs1, vs2 : vd},
+ disasm: "vge.h.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGe<uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vge_u_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vge.h.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGe<uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vge_u_w_vv{: vs1, vs2 : vd},
+ disasm: "vge.w.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGe<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vge_u_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vge.w.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGe<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vge_u_b_vx{: vs1, vs2 : vd},
+ disasm: "vge.b.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGe<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vge_u_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vge.b.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGe<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vge_u_h_vx{: vs1, vs2 : vd},
+ disasm: "vge.h.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGe<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vge_u_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vge.h.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGe<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vge_u_w_vx{: vs1, vs2 : vd},
+ disasm: "vge.w.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVGe<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vge_u_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vge.w.u.vx.m", "%vd, %vs1,V %vs2",
+ semfunc: "absl::bind_front(&KelvinVGe<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ // vabsd
+ vabsd_b_vv{: vs1, vs2 : vd},
+ disasm: "vabsd.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAbsd<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vabsd_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vabsd.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAbsd<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vabsd_h_vv{: vs1, vs2 : vd},
+ disasm: "vabsd.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAbsd<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vabsd_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vabsd.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAbsd<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vabsd_w_vv{: vs1, vs2 : vd},
+ disasm: "vabsd.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAbsd<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vabsd_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vabsd.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAbsd<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vabsd_b_vx{: vs1, vs2 : vd},
+ disasm: "vabsd.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAbsd<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vabsd_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vabsd.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAbsd<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vabsd_h_vx{: vs1, vs2 : vd},
+ disasm: "vabsd.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAbsd<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vabsd_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vabsd.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAbsd<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vabsd_w_vx{: vs1, vs2 : vd},
+ disasm: "vabsd.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAbsd<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vabsd_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vabsd.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAbsd<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ // vabsdu
+ vabsd_u_b_vv{: vs1, vs2 : vd},
+ disasm: "vabsd.b.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAbsd<uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vabsd_u_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vabsd.b.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAbsd<uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vabsd_u_h_vv{: vs1, vs2 : vd},
+ disasm: "vabsd.h.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAbsd<uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vabsd_u_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vabsd.h.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAbsd<uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vabsd_u_w_vv{: vs1, vs2 : vd},
+ disasm: "vabsd.w.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAbsd<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vabsd_u_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vabsd.w.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAbsd<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vabsd_u_b_vx{: vs1, vs2 : vd},
+ disasm: "vabsd.b.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAbsd<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vabsd_u_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vabsd.b.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAbsd<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vabsd_u_h_vx{: vs1, vs2 : vd},
+ disasm: "vabsd.h.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAbsd<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vabsd_u_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vabsd.h.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAbsd<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vabsd_u_w_vx{: vs1, vs2 : vd},
+ disasm: "vabsd.w.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAbsd<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vabsd_u_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vabsd.w.u.vx.m", "%vd, %vs1,V %vs2",
+ semfunc: "absl::bind_front(&KelvinVAbsd<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ // vmax
+ vmax_b_vv{: vs1, vs2 : vd},
+ disasm: "vmax.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMax<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmax_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vmax.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMax<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmax_h_vv{: vs1, vs2 : vd},
+ disasm: "vmax.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMax<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmax_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vmax.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMax<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmax_w_vv{: vs1, vs2 : vd},
+ disasm: "vmax.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMax<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmax_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vmax.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMax<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmax_b_vx{: vs1, vs2 : vd},
+ disasm: "vmax.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMax<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmax_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vmax.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMax<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vmax_h_vx{: vs1, vs2 : vd},
+ disasm: "vmax.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMax<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmax_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vmax.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMax<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vmax_w_vx{: vs1, vs2 : vd},
+ disasm: "vmax.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMax<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmax_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vmax.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMax<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ // vmaxu
+ vmax_u_b_vv{: vs1, vs2 : vd},
+ disasm: "vmax.b.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMax<uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmax_u_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vmax.b.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMax<uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmax_u_h_vv{: vs1, vs2 : vd},
+ disasm: "vmax.h.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMax<uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmax_u_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vmax.h.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMax<uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmax_u_w_vv{: vs1, vs2 : vd},
+ disasm: "vmax.w.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMax<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmax_u_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vmax.w.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMax<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmax_u_b_vx{: vs1, vs2 : vd},
+ disasm: "vmax.b.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMax<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmax_u_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vmax.b.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMax<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vmax_u_h_vx{: vs1, vs2 : vd},
+ disasm: "vmax.h.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMax<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmax_u_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vmax.h.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMax<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vmax_u_w_vx{: vs1, vs2 : vd},
+ disasm: "vmax.w.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMax<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmax_u_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vmax.w.u.vx.m", "%vd, %vs1,V %vs2",
+ semfunc: "absl::bind_front(&KelvinVMax<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ // vmin
+ vmin_b_vv{: vs1, vs2 : vd},
+ disasm: "vmin.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMin<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmin_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vmin.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMin<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmin_h_vv{: vs1, vs2 : vd},
+ disasm: "vmin.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMin<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmin_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vmin.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMin<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmin_w_vv{: vs1, vs2 : vd},
+ disasm: "vmin.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMin<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmin_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vmin.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMin<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmin_b_vx{: vs1, vs2 : vd},
+ disasm: "vmin.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMin<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmin_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vmin.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMin<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vmin_h_vx{: vs1, vs2 : vd},
+ disasm: "vmin.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMin<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmin_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vmin.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMin<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vmin_w_vx{: vs1, vs2 : vd},
+ disasm: "vmin.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMin<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmin_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vmin.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMin<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ // vminu
+ vmin_u_b_vv{: vs1, vs2 : vd},
+ disasm: "vmin.b.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMin<uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmin_u_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vmin.b.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMin<uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmin_u_h_vv{: vs1, vs2 : vd},
+ disasm: "vmin.h.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMin<uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmin_u_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vmin.h.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMin<uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmin_u_w_vv{: vs1, vs2 : vd},
+ disasm: "vmin.w.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMin<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmin_u_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vmin.w.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMin<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmin_u_b_vx{: vs1, vs2 : vd},
+ disasm: "vmin.b.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMin<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmin_u_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vmin.b.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMin<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vmin_u_h_vx{: vs1, vs2 : vd},
+ disasm: "vmin.h.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMin<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmin_u_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vmin.h.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMin<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vmin_u_w_vx{: vs1, vs2 : vd},
+ disasm: "vmin.w.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMin<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmin_u_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vmin.w.u.vx.m", "%vd, %vs1,V %vs2",
+ semfunc: "absl::bind_front(&KelvinVMin<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ // vadd3
+ vadd3_b_vv{: vs1, vs2, vd : vd},
+ disasm: "vadd3.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdd3<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vadd3_b_vv_m{: vs1, vs2, vd : vd},
+ disasm: "vadd3.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdd3<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vadd3_h_vv{: vs1, vs2, vd : vd},
+ disasm: "vadd3.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdd3<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vadd3_h_vv_m{: vs1, vs2, vd : vd},
+ disasm: "vadd3.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdd3<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vadd3_w_vv{: vs1, vs2, vd : vd},
+ disasm: "vadd3.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdd3<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vadd3_w_vv_m{: vs1, vs2, vd : vd},
+ disasm: "vadd3.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdd3<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vadd3_b_vx{: vs1, vs2, vd : vd},
+ disasm: "vadd3.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdd3<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vadd3_b_vx_m{: vs1, vs2, vd : vd},
+ disasm: "vadd3.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdd3<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vadd3_h_vx{: vs1, vs2, vd : vd},
+ disasm: "vadd3.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdd3<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vadd3_h_vx_m{: vs1, vs2, vd : vd},
+ disasm: "vadd3.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdd3<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vadd3_w_vx{: vs1, vs2, vd : vd},
+ disasm: "vadd3.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdd3<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vadd3_w_vx_m{: vs1, vs2, vd : vd},
+ disasm: "vadd3.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdd3<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vadds
+ vadds_b_vv{: vs1, vs2 : vd},
+ disasm: "vadds.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdds<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vadds_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vadds.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdds<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vadds_h_vv{: vs1, vs2 : vd},
+ disasm: "vadds.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdds<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vadds_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vadds.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdds<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vadds_w_vv{: vs1, vs2 : vd},
+ disasm: "vadds.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdds<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vadds_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vadds.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdds<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vadds_b_vx{: vs1, vs2 : vd},
+ disasm: "vadds.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdds<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vadds_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vadds.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdds<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vadds_h_vx{: vs1, vs2 : vd},
+ disasm: "vadds.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdds<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vadds_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vadds.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdds<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vadds_w_vx{: vs1, vs2 : vd},
+ disasm: "vadds.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdds<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vadds_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vadds.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAdds<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vaddsu
+ vadds_u_b_vv{: vs1, vs2 : vd},
+ disasm: "vadds.b.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAddsu<uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vadds_u_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vadds.b.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAddsu<uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vadds_u_h_vv{: vs1, vs2 : vd},
+ disasm: "vadds.h.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAddsu<uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vadds_u_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vadds.h.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAddsu<uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vadds_u_w_vv{: vs1, vs2 : vd},
+ disasm: "vadds.w.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAddsu<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vadds_u_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vadds.w.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAddsu<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vadds_u_b_vx{: vs1, vs2 : vd},
+ disasm: "vadds.b.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAddsu<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vadds_u_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vadds.b.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAddsu<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vadds_u_h_vx{: vs1, vs2 : vd},
+ disasm: "vadds.h.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAddsu<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vadds_u_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vadds.h.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAddsu<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vadds_u_w_vx{: vs1, vs2 : vd},
+ disasm: "vadds.w.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAddsu<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vadds_u_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vadds.w.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAddsu<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vsubs
+ vsubs_b_vv{: vs1, vs2 : vd},
+ disasm: "vsubs.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubs<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vsubs_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vsubs.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubs<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vsubs_h_vv{: vs1, vs2 : vd},
+ disasm: "vsubs.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubs<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vsubs_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vsubs.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubs<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vsubs_w_vv{: vs1, vs2 : vd},
+ disasm: "vsubs.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubs<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vsubs_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vsubs.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubs<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vsubs_b_vx{: vs1, vs2 : vd},
+ disasm: "vsubs.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubs<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vsubs_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vsubs.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubs<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vsubs_h_vx{: vs1, vs2 : vd},
+ disasm: "vsubs.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubs<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vsubs_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vsubs.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubs<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vsubs_w_vx{: vs1, vs2 : vd},
+ disasm: "vsubs.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubs<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vsubs_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vsubs.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubs<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vsubsu
+ vsubs_u_b_vv{: vs1, vs2 : vd},
+ disasm: "vsubs.b.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubsu<uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vsubs_u_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vsubs.b.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubsu<uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vsubs_u_h_vv{: vs1, vs2 : vd},
+ disasm: "vsubs.h.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubsu<uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vsubs_u_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vsubs.h.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubsu<uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vsubs_u_w_vv{: vs1, vs2 : vd},
+ disasm: "vsubs.w.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubsu<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vsubs_u_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vsubs.w.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubsu<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vsubs_u_b_vx{: vs1, vs2 : vd},
+ disasm: "vsubs.b.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubsu<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vsubs_u_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vsubs.b.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubsu<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vsubs_u_h_vx{: vs1, vs2 : vd},
+ disasm: "vsubs.h.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubsu<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vsubs_u_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vsubs.h.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubsu<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vsubs_u_w_vx{: vs1, vs2 : vd},
+ disasm: "vsubs.w.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubsu<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vsubs_u_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vsubs.w.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubsu<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vaddw
+ vaddw_h_vv{: vs1, vs2 : vd},
+ disasm: "vaddw.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAddw<int16_t, int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vaddw_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vaddw.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAddw<int16_t, int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vaddw_w_vv{: vs1, vs2 : vd},
+ disasm: "vaddw.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAddw<int32_t, int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vaddw_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vaddw.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAddw<int32_t, int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vaddw_h_vx{: vs1, vs2 : vd},
+ disasm: "vaddw.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAddw<int16_t, int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vaddw_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vaddw.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAddw<int16_t, int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vaddw_w_vx{: vs1, vs2 : vd},
+ disasm: "vaddw.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAddw<int32_t, int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vaddw_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vaddw.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAddw<int32_t, int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vaddwu
+ vaddw_h_u_vv{: vs1, vs2 : vd},
+ disasm: "vaddw.h.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAddw<uint16_t, uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vaddw_h_u_vv_m{: vs1, vs2 : vd},
+ disasm: "vaddw.h.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAddw<uint16_t, uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vaddw_w_u_vv{: vs1, vs2 : vd},
+ disasm: "vaddw.w.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAddw<uint32_t, uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vaddw_w_u_vv_m{: vs1, vs2 : vd},
+ disasm: "vaddw.w.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAddw<uint32_t, uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vaddw_h_u_vx{: vs1, vs2 : vd},
+ disasm: "vaddw.h.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAddw<uint16_t, uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vaddw_h_u_vx_m{: vs1, vs2 : vd},
+ disasm: "vaddw.h.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAddw<uint16_t, uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vaddw_w_u_vx{: vs1, vs2 : vd},
+ disasm: "vaddw.w.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAddw<uint32_t, uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vaddw_w_u_vx_m{: vs1, vs2 : vd},
+ disasm: "vaddw.w.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAddw<uint32_t, uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vsubw
+ vsubw_h_vv{: vs1, vs2 : vd},
+ disasm: "vsubw.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubw<int16_t, int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vsubw_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vsubw.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubw<int16_t, int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vsubw_w_vv{: vs1, vs2 : vd},
+ disasm: "vsubw.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubw<int32_t, int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vsubw_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vsubw.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubw<int32_t, int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vsubw_h_vx{: vs1, vs2 : vd},
+ disasm: "vsubw.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubw<int16_t, int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vsubw_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vsubw.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubw<int16_t, int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vsubw_w_vx{: vs1, vs2 : vd},
+ disasm: "vsubw.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubw<int32_t, int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vsubw_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vsubw.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubw<int32_t, int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vsubwu
+ vsubw_h_u_vv{: vs1, vs2 : vd},
+ disasm: "vsubw.h.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubw<uint16_t, uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vsubw_h_u_vv_m{: vs1, vs2 : vd},
+ disasm: "vsubw.h.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubw<uint16_t, uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vsubw_w_u_vv{: vs1, vs2 : vd},
+ disasm: "vsubw.w.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubw<uint32_t, uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vsubw_w_u_vv_m{: vs1, vs2 : vd},
+ disasm: "vsubw.w.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubw<uint32_t, uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vsubw_h_u_vx{: vs1, vs2 : vd},
+ disasm: "vsubw.h.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubw<uint16_t, uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vsubw_h_u_vx_m{: vs1, vs2 : vd},
+ disasm: "vsubw.h.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubw<uint16_t, uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vsubw_w_u_vx{: vs1, vs2 : vd},
+ disasm: "vsubw.w.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubw<uint32_t, uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vsubw_w_u_vx_m{: vs1, vs2 : vd},
+ disasm: "vsubw.w.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSubw<uint32_t, uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vacc
+ vacc_h_vv{: vs1, vs2 : vd},
+ disasm: "vacc.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAcc<int16_t, int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vacc_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vacc.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAcc<int16_t, int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vacc_w_vv{: vs1, vs2 : vd},
+ disasm: "vacc.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAcc<int32_t, int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vacc_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vacc.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAcc<int32_t, int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vacc_h_vx{: vs1, vs2 : vd},
+ disasm: "vacc.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAcc<int16_t, int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vacc_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vacc.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAcc<int16_t, int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vacc_w_vx{: vs1, vs2 : vd},
+ disasm: "vacc.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAcc<int32_t, int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vacc_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vacc.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAcc<int32_t, int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vaccu
+ vacc_h_u_vv{: vs1, vs2 : vd},
+ disasm: "vacc.h.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAcc<uint16_t, uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vacc_h_u_vv_m{: vs1, vs2 : vd},
+ disasm: "vacc.h.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAcc<uint16_t, uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vacc_w_u_vv{: vs1, vs2 : vd},
+ disasm: "vacc.w.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAcc<uint32_t, uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vacc_w_u_vv_m{: vs1, vs2 : vd},
+ disasm: "vacc.w.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAcc<uint32_t, uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vacc_h_u_vx{: vs1, vs2 : vd},
+ disasm: "vacc.h.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAcc<uint16_t, uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vacc_h_u_vx_m{: vs1, vs2 : vd},
+ disasm: "vacc.h.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAcc<uint16_t, uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vacc_w_u_vx{: vs1, vs2 : vd},
+ disasm: "vacc.w.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAcc<uint32_t, uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vacc_w_u_vx_m{: vs1, vs2 : vd},
+ disasm: "vacc.w.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAcc<uint32_t, uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vpadd
+ vpadd_h_v{: vs1 : vd},
+ disasm: "vpadd.h.v", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVPadd<int16_t, int8_t>, /*strip_mine*/ false)";
+ vpadd_h_v_m{: vs1 : vd},
+ disasm: "vpadd.h.v.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVPadd<int16_t, int8_t>, /*strip_mine*/ true)";
+ vpadd_w_v{: vs1 : vd},
+ disasm: "vpadd.w.v", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVPadd<int32_t, int16_t>, /*strip_mine*/ false)";
+ vpadd_w_v_m{: vs1 : vd},
+ disasm: "vpadd.w.v.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVPadd<int32_t, int16_t>, /*strip_mine*/ true)";
+
+ //vpaddu
+ vpadd_h_u_v{: vs1 : vd},
+ disasm: "vpadd.h.u.v", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVPadd<int16_t, int8_t>, /*strip_mine*/ false)";
+ vpadd_h_u_v_m{: vs1 : vd},
+ disasm: "vpadd.h.u.v.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVPadd<int16_t, int8_t>, /*strip_mine*/ true)";
+ vpadd_w_u_v{: vs1 : vd},
+ disasm: "vpadd.w.u.v", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVPadd<int32_t, int16_t>, /*strip_mine*/ false)";
+ vpadd_w_u_v_m{: vs1 : vd},
+ disasm: "vpadd.w.u.v.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVPadd<int32_t, int16_t>, /*strip_mine*/ true)";
+
+ //vpsub
+ vpsub_h_v{: vs1 : vd},
+ disasm: "vpsub.h.v", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVPsub<int16_t, int8_t>, /*strip_mine*/ false)";
+ vpsub_h_v_m{: vs1 : vd},
+ disasm: "vpsub.h.v.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVPsub<int16_t, int8_t>, /*strip_mine*/ true)";
+ vpsub_w_v{: vs1 : vd},
+ disasm: "vpsub.w.v", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVPsub<int32_t, int16_t>, /*strip_mine*/ false)";
+ vpsub_w_v_m{: vs1 : vd},
+ disasm: "vpsub.w.v.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVPsub<int32_t, int16_t>, /*strip_mine*/ true)";
+
+ //vpsubu
+ vpsub_h_u_v{: vs1 : vd},
+ disasm: "vpsub.h.u.v", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVPsub<int16_t, int8_t>, /*strip_mine*/ false)";
+ vpsub_h_u_v_m{: vs1 : vd},
+ disasm: "vpsub.h.u.v.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVPsub<int16_t, int8_t>, /*strip_mine*/ true)";
+ vpsub_w_u_v{: vs1 : vd},
+ disasm: "vpsub.w.u.v", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVPsub<int32_t, int16_t>, /*strip_mine*/ false)";
+ vpsub_w_u_v_m{: vs1 : vd},
+ disasm: "vpsub.w.u.v.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVPsub<int32_t, int16_t>, /*strip_mine*/ true)";
+
+ //vhadd
+ vhadd_b_vv{: vs1, vs2 : vd},
+ disasm: "vhadd.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<int8_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
+ vhadd_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vhadd.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<int8_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
+ vhadd_h_vv{: vs1, vs2 : vd},
+ disasm: "vhadd.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<int16_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
+ vhadd_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vhadd.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<int16_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
+ vhadd_w_vv{: vs1, vs2 : vd},
+ disasm: "vhadd.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<int32_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
+ vhadd_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vhadd.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<int32_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
+ vhadd_b_vx{: vs1, vs2 : vd},
+ disasm: "vhadd.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<int8_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
+ vhadd_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vhadd.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<int8_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
+ vhadd_h_vx{: vs1, vs2 : vd},
+ disasm: "vhadd.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<int16_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
+ vhadd_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vhadd.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<int16_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
+ vhadd_w_vx{: vs1, vs2 : vd},
+ disasm: "vhadd.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<int32_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
+ vhadd_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vhadd.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<int32_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
+
+ //vhadd.r
+ vhadd_b_r_vv{: vs1, vs2 : vd},
+ disasm: "vhadd.b.r.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<int8_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
+ vhadd_b_r_vv_m{: vs1, vs2 : vd},
+ disasm: "vhadd.b.r.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<int8_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
+ vhadd_h_r_vv{: vs1, vs2 : vd},
+ disasm: "vhadd.h.r.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<int16_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
+ vhadd_h_r_vv_m{: vs1, vs2 : vd},
+ disasm: "vhadd.h.r.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<int16_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
+ vhadd_w_r_vv{: vs1, vs2 : vd},
+ disasm: "vhadd.w.r.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<int32_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
+ vhadd_w_r_vv_m{: vs1, vs2 : vd},
+ disasm: "vhadd.w.r.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<int32_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
+ vhadd_b_r_vx{: vs1, vs2 : vd},
+ disasm: "vhadd.b.r.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<int8_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
+ vhadd_b_r_vx_m{: vs1, vs2 : vd},
+ disasm: "vhadd.b.r.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<int8_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
+ vhadd_h_r_vx{: vs1, vs2 : vd},
+ disasm: "vhadd.h.r.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<int16_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
+ vhadd_h_r_vx_m{: vs1, vs2 : vd},
+ disasm: "vhadd.h.r.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<int16_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
+ vhadd_w_r_vx{: vs1, vs2 : vd},
+ disasm: "vhadd.w.r.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<int32_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
+ vhadd_w_r_vx_m{: vs1, vs2 : vd},
+ disasm: "vhadd.w.r.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<int32_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
+
+ //vhadd.u
+ vhadd_b_u_vv{: vs1, vs2 : vd},
+ disasm: "vhadd.b.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<uint8_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
+ vhadd_b_u_vv_m{: vs1, vs2 : vd},
+ disasm: "vhadd.b.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<uint8_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
+ vhadd_h_u_vv{: vs1, vs2 : vd},
+ disasm: "vhadd.h.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<uint16_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
+ vhadd_h_u_vv_m{: vs1, vs2 : vd},
+ disasm: "vhadd.h.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<uint16_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
+ vhadd_w_u_vv{: vs1, vs2 : vd},
+ disasm: "vhadd.w.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<uint32_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
+ vhadd_w_u_vv_m{: vs1, vs2 : vd},
+ disasm: "vhadd.w.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<uint32_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
+ vhadd_b_u_vx{: vs1, vs2 : vd},
+ disasm: "vhadd.b.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<uint8_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
+ vhadd_b_u_vx_m{: vs1, vs2 : vd},
+ disasm: "vhadd.b.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<uint8_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
+ vhadd_h_u_vx{: vs1, vs2 : vd},
+ disasm: "vhadd.h.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<uint16_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
+ vhadd_h_u_vx_m{: vs1, vs2 : vd},
+ disasm: "vhadd.h.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<uint16_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
+ vhadd_w_u_vx{: vs1, vs2 : vd},
+ disasm: "vhadd.w.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<uint32_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
+ vhadd_w_u_vx_m{: vs1, vs2 : vd},
+ disasm: "vhadd.w.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<uint32_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
+
+ //vhadd.ru
+ vhadd_b_ur_vv{: vs1, vs2 : vd},
+ disasm: "vhadd.b.ur.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<uint8_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
+ vhadd_b_ur_vv_m{: vs1, vs2 : vd},
+ disasm: "vhadd.b.ur.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<uint8_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
+ vhadd_h_ur_vv{: vs1, vs2 : vd},
+ disasm: "vhadd.h.ur.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<uint16_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
+ vhadd_h_ur_vv_m{: vs1, vs2 : vd},
+ disasm: "vhadd.h.ur.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<uint16_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
+ vhadd_w_ur_vv{: vs1, vs2 : vd},
+ disasm: "vhadd.w.ur.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<uint32_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
+ vhadd_w_ur_vv_m{: vs1, vs2 : vd},
+ disasm: "vhadd.w.ur.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<uint32_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
+ vhadd_b_ur_vx{: vs1, vs2 : vd},
+ disasm: "vhadd.b.ur.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<uint8_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
+ vhadd_b_ur_vx_m{: vs1, vs2 : vd},
+ disasm: "vhadd.b.ur.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<uint8_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
+ vhadd_h_ur_vx{: vs1, vs2 : vd},
+ disasm: "vhadd.h.ur.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<uint16_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
+ vhadd_h_ur_vx_m{: vs1, vs2 : vd},
+ disasm: "vhadd.h.ur.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<uint16_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
+ vhadd_w_ur_vx{: vs1, vs2 : vd},
+ disasm: "vhadd.w.ur.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<uint32_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
+ vhadd_w_ur_vx_m{: vs1, vs2 : vd},
+ disasm: "vhadd.w.ur.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHadd<uint32_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
+
+ //vhsub
+ vhsub_b_vv{: vs1, vs2 : vd},
+ disasm: "vhsub.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<int8_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
+ vhsub_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vhsub.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<int8_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
+ vhsub_h_vv{: vs1, vs2 : vd},
+ disasm: "vhsub.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<int16_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
+ vhsub_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vhsub.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<int16_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
+ vhsub_w_vv{: vs1, vs2 : vd},
+ disasm: "vhsub.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<int32_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
+ vhsub_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vhsub.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<int32_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
+ vhsub_b_vx{: vs1, vs2 : vd},
+ disasm: "vhsub.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<int8_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
+ vhsub_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vhsub.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<int8_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
+ vhsub_h_vx{: vs1, vs2 : vd},
+ disasm: "vhsub.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<int16_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
+ vhsub_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vhsub.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<int16_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
+ vhsub_w_vx{: vs1, vs2 : vd},
+ disasm: "vhsub.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<int32_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
+ vhsub_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vhsub.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<int32_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
+
+ //vhsub.r
+ vhsub_b_r_vv{: vs1, vs2 : vd},
+ disasm: "vhsub.b.r.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<int8_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
+ vhsub_b_r_vv_m{: vs1, vs2 : vd},
+ disasm: "vhsub.b.r.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<int8_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
+ vhsub_h_r_vv{: vs1, vs2 : vd},
+ disasm: "vhsub.h.r.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<int16_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
+ vhsub_h_r_vv_m{: vs1, vs2 : vd},
+ disasm: "vhsub.h.r.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<int16_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
+ vhsub_w_r_vv{: vs1, vs2 : vd},
+ disasm: "vhsub.w.r.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<int32_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
+ vhsub_w_r_vv_m{: vs1, vs2 : vd},
+ disasm: "vhsub.w.r.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<int32_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
+ vhsub_b_r_vx{: vs1, vs2 : vd},
+ disasm: "vhsub.b.r.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<int8_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
+ vhsub_b_r_vx_m{: vs1, vs2 : vd},
+ disasm: "vhsub.b.r.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<int8_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
+ vhsub_h_r_vx{: vs1, vs2 : vd},
+ disasm: "vhsub.h.r.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<int16_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
+ vhsub_h_r_vx_m{: vs1, vs2 : vd},
+ disasm: "vhsub.h.r.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<int16_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
+ vhsub_w_r_vx{: vs1, vs2 : vd},
+ disasm: "vhsub.w.r.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<int32_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
+ vhsub_w_r_vx_m{: vs1, vs2 : vd},
+ disasm: "vhsub.w.r.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<int32_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
+
+ //vhsub.u
+ vhsub_b_u_vv{: vs1, vs2 : vd},
+ disasm: "vhsub.b.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<uint8_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
+ vhsub_b_u_vv_m{: vs1, vs2 : vd},
+ disasm: "vhsub.b.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<uint8_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
+ vhsub_h_u_vv{: vs1, vs2 : vd},
+ disasm: "vhsub.h.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<uint16_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
+ vhsub_h_u_vv_m{: vs1, vs2 : vd},
+ disasm: "vhsub.h.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<uint16_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
+ vhsub_w_u_vv{: vs1, vs2 : vd},
+ disasm: "vhsub.w.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<uint32_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
+ vhsub_w_u_vv_m{: vs1, vs2 : vd},
+ disasm: "vhsub.w.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<uint32_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
+ vhsub_b_u_vx{: vs1, vs2 : vd},
+ disasm: "vhsub.b.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<uint8_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
+ vhsub_b_u_vx_m{: vs1, vs2 : vd},
+ disasm: "vhsub.b.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<uint8_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
+ vhsub_h_u_vx{: vs1, vs2 : vd},
+ disasm: "vhsub.h.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<uint16_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
+ vhsub_h_u_vx_m{: vs1, vs2 : vd},
+ disasm: "vhsub.h.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<uint16_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
+ vhsub_w_u_vx{: vs1, vs2 : vd},
+ disasm: "vhsub.w.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<uint32_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
+ vhsub_w_u_vx_m{: vs1, vs2 : vd},
+ disasm: "vhsub.w.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<uint32_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
+
+ //vhsub.ru
+ vhsub_b_ur_vv{: vs1, vs2 : vd},
+ disasm: "vhsub.b.ur.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<uint8_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
+ vhsub_b_ur_vv_m{: vs1, vs2 : vd},
+ disasm: "vhsub.b.ur.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<uint8_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
+ vhsub_h_ur_vv{: vs1, vs2 : vd},
+ disasm: "vhsub.h.ur.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<uint16_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
+ vhsub_h_ur_vv_m{: vs1, vs2 : vd},
+ disasm: "vhsub.h.ur.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<uint16_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
+ vhsub_w_ur_vv{: vs1, vs2 : vd},
+ disasm: "vhsub.w.ur.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<uint32_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
+ vhsub_w_ur_vv_m{: vs1, vs2 : vd},
+ disasm: "vhsub.w.ur.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<uint32_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
+ vhsub_b_ur_vx{: vs1, vs2 : vd},
+ disasm: "vhsub.b.ur.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<uint8_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
+ vhsub_b_ur_vx_m{: vs1, vs2 : vd},
+ disasm: "vhsub.b.ur.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<uint8_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
+ vhsub_h_ur_vx{: vs1, vs2 : vd},
+ disasm: "vhsub.h.ur.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<uint16_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
+ vhsub_h_ur_vx_m{: vs1, vs2 : vd},
+ disasm: "vhsub.h.ur.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<uint16_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
+ vhsub_w_ur_vx{: vs1, vs2 : vd},
+ disasm: "vhsub.w.ur.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<uint32_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
+ vhsub_w_ur_vx_m{: vs1, vs2 : vd},
+ disasm: "vhsub.w.ur.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVHsub<uint32_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
+
+ //vand
+ vand_vv{: vs1, vs2 : vd},
+ disasm: "vand.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAnd<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vand_vv_m{: vs1, vs2 : vd},
+ disasm: "vand.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAnd<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vand_b_vx{: vs1, vs2 : vd},
+ disasm: "vand.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAnd<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vand_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vand.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAnd<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vand_h_vx{: vs1, vs2 : vd},
+ disasm: "vand.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAnd<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vand_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vand.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAnd<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vand_w_vx{: vs1, vs2 : vd},
+ disasm: "vand.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAnd<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vand_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vand.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVAnd<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vor
+ vor_vv{: vs1, vs2 : vd},
+ disasm: "vor.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVOr<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vor_vv_m{: vs1, vs2 : vd},
+ disasm: "vor.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVOr<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vor_b_vx{: vs1, vs2 : vd},
+ disasm: "vor.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVOr<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vor_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vor.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVOr<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vor_h_vx{: vs1, vs2 : vd},
+ disasm: "vor.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVOr<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vor_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vor.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVOr<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vor_w_vx{: vs1, vs2 : vd},
+ disasm: "vor.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVOr<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vor_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vor.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVOr<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vxor
+ vxor_vv{: vs1, vs2 : vd},
+ disasm: "vxor.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVXor<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vxor_vv_m{: vs1, vs2 : vd},
+ disasm: "vxor.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVXor<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vxor_b_vx{: vs1, vs2 : vd},
+ disasm: "vxor.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVXor<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vxor_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vxor.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVXor<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vxor_h_vx{: vs1, vs2 : vd},
+ disasm: "vxor.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVXor<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vxor_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vxor.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVXor<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vxor_w_vx{: vs1, vs2 : vd},
+ disasm: "vxor.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVXor<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vxor_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vxor.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVXor<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vrev
+ vrev_b_vx{: vs1, vs2 : vd},
+ disasm: "vrev.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVRev<uint8_t>, /*strip_mine*/ false)";
+ vrev_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vrev.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVRev<uint8_t>, /*strip_mine*/ true)";
+ vrev_h_vx{: vs1, vs2 : vd},
+ disasm: "vrev.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVRev<uint16_t>, /*strip_mine*/ false)";
+ vrev_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vrev.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVRev<uint16_t>, /*strip_mine*/ true)";
+ vrev_w_vx{: vs1, vs2 : vd},
+ disasm: "vrev.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVRev<uint32_t>, /*strip_mine*/ false)";
+ vrev_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vrev.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVRev<uint32_t>, /*strip_mine*/ true)";
+
+ //vror
+ vror_b_vx{: vs1, vs2 : vd},
+ disasm: "vror.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVRor<uint8_t>, /*strip_mine*/ false)";
+ vror_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vror.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVRor<uint8_t>, /*strip_mine*/ true)";
+ vror_h_vx{: vs1, vs2 : vd},
+ disasm: "vror.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVRor<uint16_t>, /*strip_mine*/ false)";
+ vror_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vror.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVRor<uint16_t>, /*strip_mine*/ true)";
+ vror_w_vx{: vs1, vs2 : vd},
+ disasm: "vror.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVRor<uint32_t>, /*strip_mine*/ false)";
+ vror_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vror.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVRor<uint32_t>, /*strip_mine*/ true)";
+
+ //vmvp
+ vmvp_vv{: vs1, vs2 : vd},
+ disasm: "vmvp.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMvp<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmvp_vv_m{: vs1, vs2 : vd},
+ disasm: "vmvp.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMvp<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmvp_b_vx{: vs1, vs2 : vd},
+ disasm: "vmvp.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMvp<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmvp_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vmvp.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMvp<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vmvp_h_vx{: vs1, vs2 : vd},
+ disasm: "vmvp.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMvp<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmvp_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vmvp.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMvp<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vmvp_w_vx{: vs1, vs2 : vd},
+ disasm: "vmvp.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMvp<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmvp_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vmvp.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMvp<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ }
+}
diff --git a/sim/kelvin_base.isa b/sim/kelvin_base.isa
new file mode 100644
index 0000000..2809371
--- /dev/null
+++ b/sim/kelvin_base.isa
@@ -0,0 +1,396 @@
+// This file define the kelvin base isa for mpact-sim. For more info on mpact-sim
+// isa format, check: go/mpact-sim-codelabs-riscv-instruction-decoder
+
+// First disasm field is 18 char wide and left justified.
+disasm widths = {-18};
+
+// Basic integer ALU instructions, part of the RiscV 32i subset.
+slot riscv32i {
+ includes {
+ #include "riscv/riscv_i_instructions.h"
+ }
+ default size = 4;
+ default latency = global_latency;
+ resources TwoOp = { next_pc, rs1 : rd[..rd]};
+ resources ThreeOp = { next_pc, rs1, rs2 : rd[..rd]};
+ opcodes {
+ addi{: rs1, I_imm12 : rd},
+ resources: TwoOp,
+ disasm: "addi", "%rd, %rs1, %I_imm12",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVIAdd";
+ slti{: rs1, I_imm12 : rd},
+ resources: TwoOp,
+ disasm: "slti", "%rd, %rs1, %I_imm12",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVISlt";
+ sltiu{: rs1, I_imm12 : rd},
+ resources: TwoOp,
+ disasm: "sltiu", "%rd, %rs1, %I_imm12",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVISltu";
+ andi{: rs1, I_imm12 : rd},
+ resources: TwoOp,
+ disasm: "andi", "%rd, %rs1, %I_imm12",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVIAnd";
+ ori{: rs1, I_imm12 : rd},
+ resources: TwoOp,
+ disasm: "ori", "%rd, %rs1, %I_imm12",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVIOr";
+ xori{: rs1, I_imm12 : rd},
+ resources: TwoOp,
+ disasm: "xori", "%rd, %rs1, %I_imm12",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVIXor";
+ slli{: rs1, I_uimm5 : rd},
+ resources: TwoOp,
+ disasm: "slli", "%rd, %rs1, 0x%(I_uimm5:x)",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVISll";
+ srli{: rs1, I_uimm5 : rd},
+ resources: TwoOp,
+ disasm: "srli", "%rd %rs1, 0x%(I_uimm5:x)",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVISrl";
+ srai{: rs1, I_uimm5 : rd},
+ resources: TwoOp,
+ disasm: "srai", "%rd, %rs1, 0x%(I_uimm5:x)",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVISra";
+ lui{: U_imm20 : rd},
+ resources: { next_pc : rd[0..]},
+ disasm: "lui", "%rd, 0x%(U_imm20:08x)",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVILui";
+ auipc{: U_imm20 : rd},
+ resources: { next_pc : rd[0..]},
+ disasm: "auipc", "%rd, 0x%(U_imm20:08x)",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVIAuipc";
+ add{: rs1, rs2 : rd},
+ resources: ThreeOp,
+ disasm: "add", "%rd, %rs1, %rs2",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVIAdd";
+ slt{: rs1, rs2 : rd},
+ resources: ThreeOp,
+ disasm: "slt", "%rd, %rs1, %rs2",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVISlt";
+ sltu{: rs1, rs2 : rd},
+ resources: ThreeOp,
+ disasm: "sltu", "%rd, %rs1, %rs2",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVISltu";
+ and{: rs1, rs2 : rd},
+ resources: ThreeOp,
+ disasm: "and", "%rd, %rs1, %rs2",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVIAnd";
+ or{: rs1, rs2 : rd},
+ resources: ThreeOp,
+ disasm: "or", "%rd, %rs1, %rs2",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVIOr";
+ xor{: rs1, rs2 : rd},
+ resources: ThreeOp,
+ disasm: "xor", "%rd, %rs1, %rs2",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVIXor";
+ sll{: rs1, rs2 : rd},
+ resources: ThreeOp,
+ disasm: "sll", "%rd, %rs1, %rs2",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVISll";
+ srl{: rs1, rs2 : rd},
+ resources: ThreeOp,
+ disasm: "srl", "%rd, %rs1, %rs2",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVISrl";
+ sub{: rs1, rs2 : rd},
+ resources: ThreeOp,
+ disasm: "sub", "%rd, %rs1, %rs2",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVISub";
+ sra{: rs1, rs2 : rd},
+ resources: ThreeOp,
+ disasm: "sra", "%rd, %rs1, %rs2",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVISra";
+ nop{},
+ disasm: "nop",
+ semfunc: "&mpact::sim::riscv::RiscVINop";
+ hint{},
+ disasm: "hint",
+ semfunc: "&mpact::sim::riscv::RiscVINop";
+ jal{: J_imm20 : next_pc, rd},
+ resources: { next_pc : next_pc[0..], rd[0..]},
+ disasm: "jal", "%rd, %(@+J_imm20:08x)",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVIJal";
+ jalr{: rs1, J_imm12 : next_pc, rd},
+ resources: { next_pc, rs1 : next_pc[0..], rd[0..]},
+ disasm: "jalr", "%rd, %rs1, %J_imm12",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVIJalr";
+ j{: J_imm20 : next_pc, rd},
+ resources: { next_pc : next_pc[0..], rd[0..]},
+ disasm: "j", "%(@+J_imm20:08x)",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVIJal";
+ jr{: rs1, J_imm12 : next_pc, rd},
+ resources: { next_pc, rs1 : next_pc[0..], rd[0..]},
+ disasm: "jr", "%rs1, %J_imm12",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVIJalr";
+ beq{: rs1, rs2, B_imm12 : next_pc},
+ resources: { next_pc, rs1, rs2 : next_pc[0..]},
+ disasm: "beq", "%rs1, %rs2, %(@+B_imm12:08x)",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVIBeq";
+ bne{: rs1, rs2, B_imm12 : next_pc},
+ resources: { next_pc, rs1, rs2 : next_pc[0..]},
+ disasm: "bne", "%rs1, %rs2, %(@+B_imm12:08x)",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVIBne";
+ blt{: rs1, rs2, B_imm12 : next_pc},
+ resources: { next_pc, rs1, rs2 : next_pc[0..]},
+ disasm: "blt", "%rs1, %rs2, %(@+B_imm12:08x)",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVIBlt";
+ bltu{: rs1, rs2, B_imm12 : next_pc},
+ resources: { next_pc, rs1, rs2 : next_pc[0..]},
+ disasm: "bltu", "%rs1, %rs2, %(@+B_imm12:08x)",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVIBltu";
+ bge{: rs1, rs2, B_imm12 : next_pc},
+ resources: { next_pc, rs1, rs2 : next_pc[0..]},
+ disasm: "bge", "%rs1, %rs2, %(@+B_imm12:08x)",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVIBge";
+ bgeu{: rs1, rs2, B_imm12 : next_pc},
+ resources: { next_pc, rs1, rs2 : next_pc[0..]},
+ disasm: "bgeu", "%rs1, %rs2, %(@+B_imm12:08x)",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVIBgeu";
+ lw{(: rs1, I_imm12), (: : rd)},
+ resources: { next_pc, rs1 : rd[0..]},
+ disasm: "lw", "%rd, %I_imm12(%rs1)",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVILw", "&mpact::sim::riscv::RV32::RiscVILwChild";
+ lh{(: rs1, I_imm12 :), (: : rd)},
+ resources: { next_pc, rs1 : rd[0..]},
+ disasm: "lh", "%rd, %I_imm12(%rs1)",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVILh", "&mpact::sim::riscv::RV32::RiscVILhChild";
+ lhu{(: rs1, I_imm12 :), (: : rd)},
+ resources: { next_pc, rs1 : rd[0..]},
+ disasm: "lhu", "%rd, %I_imm12(%rs1)",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVILhu", "&mpact::sim::riscv::RV32::RiscVILhuChild";
+ lb{(: rs1, I_imm12 :), (: : rd)},
+ resources: { next_pc, rs1 : rd[0..]},
+ disasm: "lb", "%rd, %I_imm12(%rs1)",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVILb", "&mpact::sim::riscv::RV32::RiscVILbChild";
+ lbu{(: rs1, I_imm12 :), (: : rd)},
+ resources: { next_pc, rs1 : rd[0..]},
+ disasm: "lbu", "%rd, %I_imm12(%rs1)",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVILbu", "&mpact::sim::riscv::RV32::RiscVILbuChild";
+ sw{: rs1, S_imm12, rs2 : },
+ resources: { next_pc, rs1, rs2 : },
+ disasm: "sw", "%rs2, %S_imm12(%rs1)",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVISw";
+ sh{: rs1, S_imm12, rs2 : },
+ resources: { next_pc, rs1, rs2 : },
+ disasm: "sh", "%rs2, %S_imm12(%rs1)",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVISh";
+ sb{: rs1, S_imm12, rs2 : },
+ resources: { next_pc, rs1, rs2 : },
+ disasm: "sb", "%rs2, %S_imm12(%rs1)",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVISb";
+ fence{: I_imm12 : },
+ disasm: "fence",
+ semfunc: "&mpact::sim::riscv::RiscVIFence";
+ ecall{},
+ disasm: "ecall",
+ semfunc: "&mpact::sim::riscv::RiscVIEcall";
+ ebreak{},
+ disasm: "ebreak",
+ semfunc: "&mpact::sim::riscv::RiscVIEbreak";
+ }
+}
+
+// RiscV32 multiply/divide instructions.
+slot riscv32m {
+ includes {
+ #include "riscv/riscv_m_instructions.h"
+ }
+ default size = 4;
+ default latency = global_latency;
+ resources ThreeOp = { next_pc, rs1, rs2 : rd[..rd]};
+ opcodes {
+ mul{: rs1, rs2 : rd},
+ resources: ThreeOp,
+ disasm: "mul", "%rd, %rs1, %rs2",
+ semfunc: "&mpact::sim::riscv::RV32::MMul";
+ mulh{: rs1, rs2 : rd},
+ resources: ThreeOp,
+ disasm: "mulh", "%rd, %rs1, %rs2",
+ semfunc: "&mpact::sim::riscv::RV32::MMulh";
+ mulhu{: rs1, rs2: rd},
+ resources: ThreeOp,
+ disasm: "mulhu", "%rd, %rs1, %rs2",
+ semfunc: "&mpact::sim::riscv::RV32::MMulhu";
+ mulhsu{: rs1, rs2: rd},
+ resources: ThreeOp,
+ disasm: "mulhsu", "%rd, %rs1, %rs2",
+ semfunc: "&mpact::sim::riscv::RV32::MMulhsu";
+ div{: rs1, rs2 : rd},
+ resources: ThreeOp,
+ disasm: "div", "%rd, %rs1, %rs2",
+ semfunc: "&mpact::sim::riscv::RV32::MDiv";
+ divu{: rs1, rs2 : rd},
+ resources: ThreeOp,
+ disasm: "divu", "%rd, %rs1, %rs2",
+ semfunc: "&mpact::sim::riscv::RV32::MDivu";
+ rem{: rs1, rs2 : rd},
+ resources: ThreeOp,
+ disasm: "rem", "%rd, %rs1, %rs2",
+ semfunc: "&mpact::sim::riscv::RV32::MRem";
+ remu{: rs1, rs2 : rd},
+ resources: ThreeOp,
+ disasm: "remu", "%rd, %rs1, %rs2",
+ semfunc: "&mpact::sim::riscv::RV32::MRemu";
+ }
+}
+
+// RiscV32 CSR manipulation instructions.
+slot zicsr {
+ includes {
+ #include "riscv/riscv_zicsr_instructions.h"
+ }
+ default size = 4;
+ default latency = global_latency;
+ opcodes {
+ csrrw{: rs1, csr : rd, csr},
+ resources: { next_pc, rs1, csr : rd[0..], csr[0..]},
+ semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrw",
+ disasm: "csrw", "%rd, %csr, %rs1";
+ csrrs{: rs1, csr : rd, csr},
+ resources: { next_pc, rs1, csr : rd[0..], csr[0..]},
+ semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrs",
+ disasm: "csrs", "%rd, %csr, %rs1";
+ csrrc{: rs1, csr : rd, csr},
+ resources: { next_pc, rs1, csr : rd[0..], csr[0..]},
+ semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrc",
+ disasm: "csrc", "%rd, %csr, %rs1";
+ csrrs_nr{: rs1, csr : rd, csr},
+ resources: { next_pc, rs1, csr : rd[0..], csr[0..]},
+ semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrs",
+ disasm: "csrs", "%csr, %rs1";
+ csrrc_nr{: rs1, csr : rd, csr},
+ resources: { next_pc, rs1, csr : rd[0..], csr[0..]},
+ semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrc",
+ disasm: "csrc", "%csr, %rs1";
+ csrrw_nr{: rs1, csr : csr},
+ resources: { next_pc, rs1: csr[0..]},
+ semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrwNr", // rd == 0 (x0).
+ disasm: "csrw", "%csr, %rs1";
+ csrrs_nw{: csr : rd},
+ resources: { next_pc, csr: rd[0..]},
+ semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrNw", // rs1 == 0 (x0).
+ disasm: "csrs", "%rd, %csr";
+ csrrc_nw{: csr : rd},
+ resources: { next_pc, csr: rd[0..]},
+ semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrNw", // rs1 == 0 (x0).
+ disasm: "csrc", "%rd, %csr";
+ csrrwi{: CSR_uimm5, csr : rd, csr},
+ resources: { next_pc, csr: rd[0..], csr[0..]},
+ semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrw",
+ disasm: "csrwi", "%rd, %csr, %CSR_uimm5";
+ csrrsi{: CSR_uimm5, csr : rd, csr},
+ resources: { next_pc, csr: rd[0..], csr[0..]},
+ semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrs",
+ disasm: "csrsi", "%rd, %csr, %CSR_uimm5";
+ csrrci{: CSR_uimm5, csr : rd, csr},
+ resources: { next_pc, csr: rd[0..], csr[0..]},
+ semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrc",
+ disasm: "csrci", "%rd, %csr, %CSR_uimm5";
+ csrrsi_nr{: CSR_uimm5, csr : rd, csr},
+ resources: { next_pc, csr: rd[0..], csr[0..]},
+ semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrs",
+ disasm: "csrsi", "%csr, %CSR_uimm5";
+ csrrci_nr{: CSR_uimm5, csr : rd, csr},
+ resources: { next_pc, csr: rd[0..], csr[0..]},
+ semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrc",
+ disasm: "csrci", "%csr, %CSR_uimm5";
+ csrrwi_nr{: CSR_uimm5, csr : csr},
+ resources: { next_pc : csr[0..]},
+ semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrwNr", // rd == 0 (x0).
+ disasm: "csrrwi", "%csr, %CSR_uimm5";
+ csrrsi_nw{: csr : rd},
+ resources: { next_pc, csr : rd[0..]},
+ semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrNw", // uimm5 == 0.
+ disasm: "csrsi", "%rd, %csr, 0";
+ csrrci_nw{: csr : rd},
+ resources: { next_pc, csr : rd[0..]},
+ semfunc: "&mpact::sim::riscv::RV32::RiscVZiCsrrNw", // uimm5 == 0.
+ disasm: "csrwi", "%rd, %csr, 0";
+ }
+}
+
+// Instruction fence.
+slot zfencei {
+ includes {
+ #include "riscv/riscv_zfencei_instructions.h"
+ }
+ default size = 4;
+ default latency = global_latency;
+ opcodes {
+ fencei{: I_imm12 : },
+ disasm: "fence.i",
+ semfunc: "&mpact::sim::riscv::RiscVZFencei";
+ }
+}
+
+// Privileged instructions.
+slot privileged {
+ includes {
+ #include "riscv/riscv_priv_instructions.h"
+ #include "sim/kelvin_instructions.h"
+ }
+ default size = 4;
+ default latency = global_latency;
+ opcodes {
+ uret{: : next_pc},
+ disasm: "uret",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVPrivURet";
+ sret{: : next_pc},
+ disasm: "sret",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVPrivSRet";
+ mret{: : next_pc},
+ disasm: "mret",
+ semfunc: "&mpact::sim::riscv::RV32::RiscVPrivMRet";
+ wfi{},
+ disasm: "wfi",
+ semfunc: "&mpact::sim::riscv::RiscVPrivWfi";
+ mpause{},
+ disasm: "mpause",
+ // mpause is the software breakpoint to terminate the program.
+ semfunc: "&KelvinIMpause";
+ // The sfence instruction has 4 behaviors depending on if rs1 and/or rs2
+ // are 0. These behaviors are split into 4 instructions.
+ sfence_vma_zz{: rs1, rs2},
+ resources: {},
+ disasm: "sfence.vma", "%rs1, %rs2",
+ semfunc: "&mpact::sim::riscv::RiscVPrivSFenceVmaZZ";
+ sfence_vma_zn{: rs1, rs2},
+ resources: {rs2},
+ disasm: "sfence.vma", "%rs1, %rs2",
+ semfunc: "&mpact::sim::riscv::RiscVPrivSFenceVmaZN";
+ sfence_vma_nz{: rs1, rs2},
+ resources: { rs1 },
+ disasm: "sfence.vma", "%rs1, %rs2",
+ semfunc: "&mpact::sim::riscv::RiscVPrivSFenceVmaNZ";
+ sfence_vma_nn{: rs1, rs2},
+ resources: {rs1, rs2},
+ disasm: "sfence.vma", "%rs1, %rs2",
+ semfunc: "&mpact::sim::riscv::RiscVPrivSFenceVmaNN";
+ // Skipping hypervisor memory management instructions for now.
+ }
+}
+
+slot kelvin_log {
+ includes {
+ #include "sim/kelvin_instructions.h"
+ #include "absl/functional/bind_front.h"
+ }
+ default size = 4;
+ default latency = global_latency;
+ opcodes {
+ flog{: rs1 :},
+ resources: { next_pc : rs1[0..]},
+ disasm: "flog", "%rs1",
+ semfunc: "absl::bind_front(&KelvinLogInstruction, /*log_mode*/ 0)";
+ slog{: rs1 :},
+ resources: { next_pc : rs1[0..]},
+ disasm: "slog", "%rs1",
+ semfunc: "absl::bind_front(&KelvinLogInstruction, /*log_mode*/ 1)";
+ clog{: rs1 :},
+ resources: { next_pc : rs1[0..]},
+ disasm: "clog", "%rs1",
+ semfunc: "absl::bind_front(&KelvinLogInstruction, /*log_mode*/ 2)";
+ klog{: rs1 :},
+ resources: { next_pc : rs1[0..]},
+ disasm: "klog", "%rs1",
+ semfunc: "absl::bind_front(&KelvinLogInstruction, /*log_mode*/ 3)";
+ }
+}
diff --git a/sim/kelvin_memory.isa b/sim/kelvin_memory.isa
new file mode 100644
index 0000000..5ecb15a
--- /dev/null
+++ b/sim/kelvin_memory.isa
@@ -0,0 +1,485 @@
+// This file define the kelvin base isa for mpact-sim. For more info on mpact-sim
+// isa format, check: go/mpact-sim-codelabs-riscv-instruction-decoder
+
+// First disasm field is 18 char wide and left justified.
+disasm widths = {-18};
+
+slot kelvin_memory {
+ includes {
+ #include "sim/kelvin_instructions.h"
+ }
+ default size = 4;
+ default latency = global_latency;
+ opcodes {
+ flushall{},
+ disasm: "flushall",
+ semfunc: "&KelvinNopInstruction";
+ flushat{: rs1 :},
+ disasm: "flushat", "%rs1",
+ semfunc: "&KelvinNopInstruction";
+ }
+}
+
+// Kelvin simd instructions:
+// https://spacebeaker.googlesource.com/shodan/sw/kelvin/+/refs/heads/master/docs/kelvin_isa.md
+// Load / Store
+slot kelvin_vector_memory {
+ includes {
+ #include "sim/kelvin_vector_memory_instructions.h"
+ #include "absl/functional/bind_front.h"
+ }
+ default size = 4;
+ default latency = global_latency;
+ resources TwoOp = { next_pc, rs1 : rd[..rd]};
+ resources ThreeOp = { next_pc, rs1, rs2 : rd[..rd]};
+ opcodes {
+ getmaxvl_b{: : rd},
+ resources: { next_pc : rd[0..]},
+ disasm: "getmaxvl.b", "%rd",
+ semfunc: "absl::bind_front(&KelvinGetVl<int8_t>, /*strip_mine*/ false, /*is_rs1*/ false, /*is_rs2*/ false)";
+ getmaxvl_h{: : rd},
+ resources: { next_pc : rd[0..]},
+ disasm: "getmaxvl.h", "%rd",
+ semfunc: "absl::bind_front(&KelvinGetVl<int16_t>, /*strip_mine*/ false, /*is_rs1*/ false, /*is_rs2*/ false)";
+ getmaxvl_w{: : rd},
+ resources: { next_pc : rd[0..]},
+ disasm: "getmaxvl.w", "%rd",
+ semfunc: "absl::bind_front(&KelvinGetVl<int32_t>, /*strip_mine*/ false, /*is_rs1*/ false, /*is_rs2*/ false)";
+ getvl_b_x{: rs1 : rd},
+ resources: TwoOp,
+ disasm: "getvl.b.x", "%rd, %rs1",
+ semfunc: "absl::bind_front(&KelvinGetVl<int8_t>, /*strip_mine*/ false, /*is_rs1*/ true, /*is_rs2*/ false)";
+ getvl_h_x{: rs1 : rd},
+ resources: TwoOp,
+ disasm: "getvl.h.x", "%rd, %rs1",
+ semfunc: "absl::bind_front(&KelvinGetVl<int16_t>, /*strip_mine*/ false, /*is_rs1*/ true, /*is_rs2*/ false)";
+ getvl_w_x{: rs1 : rd},
+ resources: TwoOp,
+ disasm: "getvl.w.x", "%rd, %rs1",
+ semfunc: "absl::bind_front(&KelvinGetVl<int32_t>, /*strip_mine*/ false, /*is_rs1*/ true, /*is_rs2*/ false)";
+ getvl_b_xx{: rs1, rs2 : rd},
+ resources: ThreeOp,
+ disasm: "getvl.b.xx", "%rd, %rs1, %rs2",
+ semfunc: "absl::bind_front(&KelvinGetVl<int8_t>, /*strip_mine*/ false, /*is_rs1*/ true, /*is_rs2*/ true)";
+ getvl_h_xx{: rs1, rs2 : rd},
+ resources: ThreeOp,
+ disasm: "getvl.h.xx", "%rd, %rs1, %rs2",
+ semfunc: "absl::bind_front(&KelvinGetVl<int16_t>, /*strip_mine*/ false, /*is_rs1*/ true, /*is_rs2*/ true)";
+ getvl_w_xx{: rs1, rs2 : rd},
+ resources: ThreeOp,
+ disasm: "getvl.w.xx", "%rd, %rs1, %rs2",
+ semfunc: "absl::bind_front(&KelvinGetVl<int32_t>, /*strip_mine*/ false, /*is_rs1*/ true, /*is_rs2*/ true)";
+ getmaxvl_b_m{: : rd},
+ resources: { next_pc : rd[0..]},
+ disasm: "getmaxvl.b.m", "%rd",
+ semfunc: "absl::bind_front(&KelvinGetVl<int8_t>, /*strip_mine*/ true, /*is_rs1*/ false, /*is_rs2*/ false)";
+ getmaxvl_h_m{: : rd},
+ resources: { next_pc : rd[0..]},
+ disasm: "getmaxvl.h.m", "%rd",
+ semfunc: "absl::bind_front(&KelvinGetVl<int16_t>, /*strip_mine*/ true, /*is_rs1*/ false, /*is_rs2*/ false)";
+ getmaxvl_w_m{: : rd},
+ resources: { next_pc : rd[0..]},
+ disasm: "getmaxvl.w.m", "%rd",
+ semfunc: "absl::bind_front(&KelvinGetVl<int32_t>, /*strip_mine*/ true, /*is_rs1*/ false, /*is_rs2*/ false)";
+ getvl_b_x_m{: rs1 : rd},
+ resources: TwoOp,
+ disasm: "getvl.b.x.m", "%rd, %rs1",
+ semfunc: "absl::bind_front(&KelvinGetVl<int8_t>, /*strip_mine*/ true, /*is_rs1*/ true, /*is_rs2*/ false)";
+ getvl_h_x_m{: rs1 : rd},
+ resources: TwoOp,
+ disasm: "getvl.h.x.m", "%rd, %rs1",
+ semfunc: "absl::bind_front(&KelvinGetVl<int16_t>, /*strip_mine*/ true, /*is_rs1*/ true, /*is_rs2*/ false)";
+ getvl_w_x_m{: rs1 : rd},
+ resources: TwoOp,
+ disasm: "getvl.w.x.m", "%rd, %rs1",
+ semfunc: "absl::bind_front(&KelvinGetVl<int32_t>, /*strip_mine*/ true, /*is_rs1*/ true, /*is_rs2*/ false)";
+ getvl_b_xx_m{: rs1, rs2 : rd},
+ resources: ThreeOp,
+ disasm: "getvl.b.xx.m", "%rd, %rs1, %rs2",
+ semfunc: "absl::bind_front(&KelvinGetVl<int8_t>, /*strip_mine*/ true, /*is_rs1*/ true, /*is_rs2*/ true)";
+ getvl_h_xx_m{: rs1, rs2 : rd},
+ resources: ThreeOp,
+ disasm: "getvl.h.xx.m", "%rd, %rs1, %rs2",
+ semfunc: "absl::bind_front(&KelvinGetVl<int16_t>, /*strip_mine*/ true, /*is_rs1*/ true, /*is_rs2*/ true)";
+ getvl_w_xx_m{: rs1, rs2 : rd},
+ resources: ThreeOp,
+ disasm: "getvl.w.xx.m", "%rd, %rs1, %rs2",
+ semfunc: "absl::bind_front(&KelvinGetVl<int32_t>, /*strip_mine*/ true, /*is_rs1*/ true, /*is_rs2*/ true)";
+
+ //vld
+ vld_b_x{(: vs1 :), (: : vd)},
+ disasm: "vld.b.x", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)",
+ "absl::bind_front(&KelvinVLdRegWrite<int8_t>, /*strip_mine*/ false)";
+ vld_h_x{(: vs1 :), (: : vd)},
+ disasm: "vld.h.x", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)",
+ "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ false)";
+ vld_w_x{(: vs1 :), (: : vd)},
+ disasm: "vld.w.x", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)",
+ "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ false)";
+ vld_b_x_m{(: vs1 :), (: : vd)},
+ disasm: "vld.b.x.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)",
+ "absl::bind_front(&KelvinVLdRegWrite<int8_t>,/*strip_mine*/ true)";
+ vld_h_x_m{(: vs1 :), (: : vd)},
+ disasm: "vld.h.x.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)",
+ "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ true)";
+ vld_w_x_m{(: vs1 :), (: : vd)},
+ disasm: "vld.w.x.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)",
+ "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ true)";
+ vld_b_p_x{(: vs1 : vs1), (: : vd)},
+ disasm: "vld.b.p.x", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)",
+ "absl::bind_front(&KelvinVLdRegWrite<int8_t>,/*strip_mine*/ false)";
+ vld_h_p_x{(: vs1 : vs1), (: : vd)},
+ disasm: "vld.h.p.x", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)",
+ "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ false)";
+ vld_w_p_x{(: vs1 : vs1), (: : vd)},
+ disasm: "vld.w.p.x", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)",
+ "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ false)";
+ vld_b_p_x_m{(: vs1 : vs1), (: : vd)},
+ disasm: "vld.b.p.x.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)",
+ "absl::bind_front(&KelvinVLdRegWrite<int8_t>,/*strip_mine*/ true)";
+ vld_h_p_x_m{(: vs1 : vs1), (: : vd)},
+ disasm: "vld.h.p.x.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)",
+ "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ true)";
+ vld_w_p_x_m{(: vs1 : vs1), (: : vd)},
+ disasm: "vld.w.p.x.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)",
+ "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ true)";
+ vld_b_p_xx{(: vs1, vs2 : vs1), (: : vd)},
+ disasm: "vld.b.p.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)",
+ "absl::bind_front(&KelvinVLdRegWrite<int8_t>,/*strip_mine*/ false)";
+ vld_h_p_xx{(: vs1, vs2 : vs1), (: : vd)},
+ disasm: "vld.h.p.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)",
+ "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ false)";
+ vld_w_p_xx{(: vs1, vs2 : vs1), (: : vd)},
+ disasm: "vld.w.p.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)",
+ "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ false)";
+ vld_b_p_xx_m{(: vs1, vs2 : vs1), (: : vd)},
+ disasm: "vld.b.p.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)",
+ "absl::bind_front(&KelvinVLdRegWrite<int8_t>,/*strip_mine*/ true)";
+ vld_h_p_xx_m{(: vs1, vs2 : vs1), (: : vd)},
+ disasm: "vld.h.p.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)",
+ "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ true)";
+ vld_w_p_xx_m{(: vs1, vs2 : vs1), (: : vd)},
+ disasm: "vld.w.p.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)",
+ "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ true)";
+ vld_b_l_xx{(: vs1, vs2 :), (: : vd)},
+ disasm: "vld.b.l.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ false)",
+ "absl::bind_front(&KelvinVLdRegWrite<int8_t>, /*strip_mine*/ false)";
+ vld_h_l_xx{(: vs1, vs2 :), (: : vd)},
+ disasm: "vld.h.l.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ false)",
+ "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ false)";
+ vld_w_l_xx{(: vs1, vs2 :), (: : vd)},
+ disasm: "vld.w.l.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ false)",
+ "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ false)";
+ vld_b_l_xx_m{(: vs1, vs2 :), (: : vd)},
+ disasm: "vld.b.l.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ true)",
+ "absl::bind_front(&KelvinVLdRegWrite<int8_t>,/*strip_mine*/ true)";
+ vld_h_l_xx_m{(: vs1, vs2 :), (: : vd)},
+ disasm: "vld.h.l.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ true)",
+ "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ true)";
+ vld_w_l_xx_m{(: vs1, vs2 :), (: : vd)},
+ disasm: "vld.w.l.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ true)",
+ "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ true)";
+ vld_b_lp_xx{(: vs1, vs2 : vs1), (: : vd)},
+ disasm: "vld.b.lp.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ false)",
+ "absl::bind_front(&KelvinVLdRegWrite<int8_t>,/*strip_mine*/ false)";
+ vld_h_lp_xx{(: vs1, vs2 : vs1), (: : vd)},
+ disasm: "vld.h.lp.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ false)",
+ "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ false)";
+ vld_w_lp_xx{(: vs1, vs2 : vs1), (: : vd)},
+ disasm: "vld.w.lp.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ false)",
+ "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ false)";
+ vld_b_lp_xx_m{(: vs1, vs2 : vs1), (: : vd)},
+ disasm: "vld.b.lp.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ true)",
+ "absl::bind_front(&KelvinVLdRegWrite<int8_t>,/*strip_mine*/ true)";
+ vld_h_lp_xx_m{(: vs1, vs2 : vs1), (: : vd)},
+ disasm: "vld.h.lp.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ true)",
+ "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ true)";
+ vld_w_lp_xx_m{(: vs1, vs2 : vs1), (: : vd)},
+ disasm: "vld.w.lp.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ true)",
+ "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ true)";
+ vld_b_s_xx{(: vs1, vs2 :), (: : vd)},
+ disasm: "vld.b.s.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ false)",
+ "absl::bind_front(&KelvinVLdRegWrite<int8_t>, /*strip_mine*/ false)";
+ vld_h_s_xx{(: vs1, vs2 :), (: : vd)},
+ disasm: "vld.h.s.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ false)",
+ "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ false)";
+ vld_w_s_xx{(: vs1, vs2 :), (: : vd)},
+ disasm: "vld.w.s.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ false)",
+ "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ false)";
+ vld_b_s_xx_m{(: vs1, vs2 :), (: : vd)},
+ disasm: "vld.b.s.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ true)",
+ "absl::bind_front(&KelvinVLdRegWrite<int8_t>,/*strip_mine*/ true)";
+ vld_h_s_xx_m{(: vs1, vs2 :), (: : vd)},
+ disasm: "vld.h.s.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ true)",
+ "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ true)";
+ vld_w_s_xx_m{(: vs1, vs2 :), (: : vd)},
+ disasm: "vld.w.s.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ true)",
+ "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ true)";
+ vld_b_sp_xx{(: vs1, vs2 : vs1), (: : vd)},
+ disasm: "vld.b.sp.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ false)",
+ "absl::bind_front(&KelvinVLdRegWrite<int8_t>,/*strip_mine*/ false)";
+ vld_h_sp_xx{(: vs1, vs2 : vs1), (: : vd)},
+ disasm: "vld.h.sp.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ false)",
+ "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ false)";
+ vld_w_sp_xx{(: vs1, vs2 : vs1), (: : vd)},
+ disasm: "vld.w.sp.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ false)",
+ "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ false)";
+ vld_b_sp_xx_m{(: vs1, vs2 : vs1), (: : vd)},
+ disasm: "vld.b.sp.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ true)",
+ "absl::bind_front(&KelvinVLdRegWrite<int8_t>,/*strip_mine*/ true)";
+ vld_h_sp_xx_m{(: vs1, vs2 : vs1), (: : vd)},
+ disasm: "vld.h.sp.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ true)",
+ "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ true)";
+ vld_w_sp_xx_m{(: vs1, vs2 : vs1), (: : vd)},
+ disasm: "vld.w.sp.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ true)",
+ "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ true)";
+ vld_b_tp_xx{(: vs1, vs2 : vs1), (: : vd)},
+ disasm: "vld.b.tp.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ true, /*stride*/ true, /*strip_mine*/ false)",
+ "absl::bind_front(&KelvinVLdRegWrite<int8_t>,/*strip_mine*/ false)";
+ vld_h_tp_xx{(: vs1, vs2 : vs1), (: : vd)},
+ disasm: "vld.h.tp.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ true, /*stride*/ true, /*strip_mine*/ false)",
+ "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ false)";
+ vld_w_tp_xx{(: vs1, vs2 : vs1), (: : vd)},
+ disasm: "vld.w.tp.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ true, /*stride*/ true, /*strip_mine*/ false)",
+ "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ false)";
+ vld_b_tp_xx_m{(: vs1, vs2 : vs1), (: : vd)},
+ disasm: "vld.b.tp.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int8_t>, /*len*/ true, /*stride*/ true, /*strip_mine*/ true)",
+ "absl::bind_front(&KelvinVLdRegWrite<int8_t>,/*strip_mine*/ true)";
+ vld_h_tp_xx_m{(: vs1, vs2 : vs1), (: : vd)},
+ disasm: "vld.h.tp.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int16_t>, /*len*/ true, /*stride*/ true, /*strip_mine*/ true)",
+ "absl::bind_front(&KelvinVLdRegWrite<int16_t>,/*strip_mine*/ true)";
+ vld_w_tp_xx_m{(: vs1, vs2 : vs1), (: : vd)},
+ disasm: "vld.w.tp.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVLd<int32_t>, /*len*/ true, /*stride*/ true, /*strip_mine*/ true)",
+ "absl::bind_front(&KelvinVLdRegWrite<int32_t>,/*strip_mine*/ true)";
+
+ //vst, note `vd` is actually the source vector register, and `vs1` is actually the scaler register.
+ vst_b_x{: vd, vs1 :},
+ disasm: "vst.b.x", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)";
+ vst_h_x{: vd, vs1 :},
+ disasm: "vst.h.x", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)";
+ vst_w_x{: vd, vs1 :},
+ disasm: "vst.w.x", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)";
+ vst_b_x_m{: vd, vs1 :},
+ disasm: "vst.b.x.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)";
+ vst_h_x_m{: vd, vs1 :},
+ disasm: "vst.h.x.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)";
+ vst_w_x_m{: vd, vs1 :},
+ disasm: "vst.w.x.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)";
+ vst_b_p_x{: vd, vs1 : vs1},
+ disasm: "vst.b.p.x", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)";
+ vst_h_p_x{: vd, vs1 : vs1},
+ disasm: "vst.h.p.x", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)";
+ vst_w_p_x{: vd, vs1 : vs1},
+ disasm: "vst.w.p.x", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)";
+ vst_b_p_x_m{: vd, vs1 : vs1},
+ disasm: "vst.b.p.x.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)";
+ vst_h_p_x_m{: vd, vs1 : vs1},
+ disasm: "vst.h.p.x.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)";
+ vst_w_p_x_m{: vd, vs1 : vs1},
+ disasm: "vst.w.p.x.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)";
+ vst_b_p_xx{: vd, vs1, vs2 : vs1},
+ disasm: "vst.b.p.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)";
+ vst_h_p_xx{: vd, vs1, vs2 : vs1},
+ disasm: "vst.h.p.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)";
+ vst_w_p_xx{: vd, vs1, vs2 : vs1},
+ disasm: "vst.w.p.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ false)";
+ vst_b_p_xx_m{: vd, vs1, vs2 : vs1},
+ disasm: "vst.b.p.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)";
+ vst_h_p_xx_m{: vd, vs1, vs2 : vs1},
+ disasm: "vst.h.p.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)";
+ vst_w_p_xx_m{: vd, vs1, vs2 : vs1},
+ disasm: "vld.w.p.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ false, /*stride*/ false, /*strip_mine*/ true)";
+ vst_b_l_xx{: vd, vs1, vs2 :},
+ disasm: "vst.b.l.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ false)";
+ vst_h_l_xx{: vd, vs1, vs2 :},
+ disasm: "vst.h.l.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ false)";
+ vst_w_l_xx{: vd, vs1, vs2 :},
+ disasm: "vst.w.l.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ false)";
+ vst_b_l_xx_m{: vd, vs1, vs2 :},
+ disasm: "vst.b.l.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ true)";
+ vst_h_l_xx_m{: vd, vs1, vs2 :},
+ disasm: "vst.h.l.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ true)";
+ vst_w_l_xx_m{: vd, vs1, vs2 :},
+ disasm: "vst.w.l.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ true)";
+ vst_b_lp_xx{: vd, vs1, vs2 : vs1},
+ disasm: "vst.b.lp.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ false)";
+ vst_h_lp_xx{: vd, vs1, vs2 : vs1},
+ disasm: "vst.h.lp.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ false)";
+ vst_w_lp_xx{: vd, vs1, vs2 : vs1},
+ disasm: "vst.w.lp.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ false)";
+ vst_b_lp_xx_m{: vd, vs1, vs2 : vs1},
+ disasm: "vst.b.lp.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ true)";
+ vst_h_lp_xx_m{: vd, vs1, vs2 : vs1},
+ disasm: "vst.h.lp.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ true)";
+ vst_w_lp_xx_m{: vd, vs1, vs2 : vs1},
+ disasm: "vst.w.lp.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ true, /*stride*/ false, /*strip_mine*/ true)";
+ vst_b_s_xx{: vd, vs1, vs2 :},
+ disasm: "vst.b.s.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ false)";
+ vst_h_s_xx{: vd, vs1, vs2 :},
+ disasm: "vst.h.s.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ false)";
+ vst_w_s_xx{: vd, vs1, vs2 :},
+ disasm: "vst.w.s.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ false)";
+ vst_b_s_xx_m{: vd, vs1, vs2 :},
+ disasm: "vst.b.s.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ true)";
+ vst_h_s_xx_m{: vd, vs1, vs2 :},
+ disasm: "vst.h.s.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ true)";
+ vst_w_s_xx_m{: vd, vs1, vs2 :},
+ disasm: "vst.w.s.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ true)";
+ vst_b_sp_xx{: vd, vs1, vs2 : vs1},
+ disasm: "vst.b.sp.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ false)";
+ vst_h_sp_xx{: vd, vs1, vs2 : vs1},
+ disasm: "vst.h.sp.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ false)";
+ vst_w_sp_xx{: vd, vs1, vs2 : vs1},
+ disasm: "vst.w.sp.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ false)";
+ vst_b_sp_xx_m{: vd, vs1, vs2 : vs1},
+ disasm: "vst.b.sp.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ true)";
+ vst_h_sp_xx_m{: vd, vs1, vs2 : vs1},
+ disasm: "vst.h.sp.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ true)";
+ vst_w_sp_xx_m{: vd, vs1, vs2 : vs1},
+ disasm: "vst.w.sp.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ false, /*stride*/ true, /*strip_mine*/ true)";
+ vst_b_tp_xx{: vd, vs1, vs2 : vs1},
+ disasm: "vst.b.tp.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ true, /*stride*/ true, /*strip_mine*/ false)";
+ vst_h_tp_xx{: vd, vs1, vs2 : vs1},
+ disasm: "vst.h.tp.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ true, /*stride*/ true, /*strip_mine*/ false)";
+ vst_w_tp_xx{: vd, vs1, vs2 : vs1},
+ disasm: "vst.w.tp.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ true, /*stride*/ true, /*strip_mine*/ false)";
+ vst_b_tp_xx_m{: vd, vs1, vs2 : vs1},
+ disasm: "vst.b.tp.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int8_t>, /*len*/ true, /*stride*/ true, /*strip_mine*/ true)";
+ vst_h_tp_xx_m{: vd, vs1, vs2 : vs1},
+ disasm: "vst.h.tp.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int16_t>, /*len*/ true, /*stride*/ true, /*strip_mine*/ true)";
+ vst_w_tp_xx_m{: vd, vs1, vs2 : vs1},
+ disasm: "vst.w.tp.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSt<int32_t>, /*len*/ true, /*stride*/ true, /*strip_mine*/ true)";
+ vstq_b_s_xx{: vd, vs1, vs2 :},
+ disasm: "vstq.b.s.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVStQ<int8_t>, /*strip_mine*/ false)";
+ vstq_h_s_xx{: vd, vs1, vs2 :},
+ disasm: "vstq.h.s.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVStQ<int16_t>, /*strip_mine*/ false)";
+ vstq_w_s_xx{: vd, vs1, vs2 :},
+ disasm: "vstq.w.s.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVStQ<int32_t>, /*strip_mine*/ false)";
+ vstq_b_sp_xx{: vd, vs1, vs2 : vs1},
+ disasm: "vstq.b.s.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVStQ<int8_t>, /*strip_mine*/ false)";
+ vstq_h_sp_xx{: vd, vs1, vs2 : vs1},
+ disasm: "vstq.h.s.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVStQ<int16_t>, /*strip_mine*/ false)";
+ vstq_w_sp_xx{: vd, vs1, vs2 : vs1},
+ disasm: "vstq.w.s.xx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVStQ<int32_t>, /*strip_mine*/ false)";
+ vstq_b_s_xx_m{: vd, vs1, vs2 :},
+ disasm: "vstq.b.s.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVStQ<int8_t>, /*strip_mine*/ true)";
+ vstq_h_s_xx_m{: vd, vs1, vs2 :},
+ disasm: "vstq.h.s.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVStQ<int16_t>, /*strip_mine*/ true)";
+ vstq_w_s_xx_m{: vd, vs1, vs2 :},
+ disasm: "vstq.w.s.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVStQ<int32_t>, /*strip_mine*/ true)";
+ vstq_b_sp_xx_m{: vd, vs1, vs2 : vs1},
+ disasm: "vstq.b.s.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVStQ<int8_t>, /*strip_mine*/ true)";
+ vstq_h_sp_xx_m{: vd, vs1, vs2 : vs1},
+ disasm: "vstq.h.s.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVStQ<int16_t>, /*strip_mine*/ true)";
+ vstq_w_sp_xx_m{: vd, vs1, vs2 : vs1},
+ disasm: "vstq.w.s.xx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVStQ<int32_t>, /*strip_mine*/ true)";
+ }
+}
diff --git a/sim/kelvin_mul.isa b/sim/kelvin_mul.isa
new file mode 100644
index 0000000..f1456ac
--- /dev/null
+++ b/sim/kelvin_mul.isa
@@ -0,0 +1,527 @@
+// This file define the kelvin isa for mpact-sim. For more info on mpact-sim isa
+// format, check: go/mpact-sim-codelabs-riscv-instruction-decoder
+
+// First disasm field is 18 char wide and left justified.
+disasm widths = {-18};
+
+// Kelvin simd instructions:
+// https://spacebeaker.googlesource.com/shodan/sw/kelvin/+/refs/heads/master/docs/kelvin_isa.md
+// Mul/Div instructions (func1 011)
+slot kelvin_mul {
+ includes {
+ #include "sim/kelvin_instructions.h"
+ #include "sim/kelvin_vector_instructions.h"
+ #include "absl/functional/bind_front.h"
+ }
+ default size = 4;
+ default latency = global_latency;
+ opcodes {
+ //vmul
+ vmul_b_vv{: vs1, vs2 : vd},
+ disasm: "vmul.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMul<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmul_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vmul.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMul<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmul_h_vv{: vs1, vs2 : vd},
+ disasm: "vmul.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMul<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmul_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vmul.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMul<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmul_w_vv{: vs1, vs2 : vd},
+ disasm: "vmul.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMul<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmul_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vmul.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMul<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmul_b_vx{: vs1, vs2 : vd},
+ disasm: "vmul.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMul<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmul_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vmul.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMul<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vmul_h_vx{: vs1, vs2 : vd},
+ disasm: "vmul.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMul<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmul_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vmul.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMul<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vmul_w_vx{: vs1, vs2 : vd},
+ disasm: "vmul.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMul<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmul_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vmul.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMul<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vmuls
+ vmuls_b_vv{: vs1, vs2 : vd},
+ disasm: "vmuls.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMuls<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmuls_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vmuls.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMuls<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmuls_h_vv{: vs1, vs2 : vd},
+ disasm: "vmuls.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMuls<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmuls_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vmuls.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMuls<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmuls_w_vv{: vs1, vs2 : vd},
+ disasm: "vmuls.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMuls<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmuls_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vmuls.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMuls<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmuls_b_vx{: vs1, vs2 : vd},
+ disasm: "vmuls.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMuls<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmuls_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vmuls.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMuls<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vmuls_h_vx{: vs1, vs2 : vd},
+ disasm: "vmuls.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMuls<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmuls_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vmuls.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMuls<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vmuls_w_vx{: vs1, vs2 : vd},
+ disasm: "vmuls.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMuls<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmuls_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vmuls.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMuls<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vmulsu
+ vmulsu_b_vv{: vs1, vs2 : vd},
+ disasm: "vmulsu.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMuls<uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmulsu_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vmulsu.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMuls<uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmulsu_h_vv{: vs1, vs2 : vd},
+ disasm: "vmulsu.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMuls<uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmulsu_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vmulsu.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMuls<uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmulsu_w_vv{: vs1, vs2 : vd},
+ disasm: "vmulsu.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMuls<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmulsu_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vmulsu.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMuls<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmulsu_b_vx{: vs1, vs2 : vd},
+ disasm: "vmulsu.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMuls<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmulsu_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vmulsu.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMuls<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vmulsu_h_vx{: vs1, vs2 : vd},
+ disasm: "vmulsu.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMuls<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmulsu_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vmulsu.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMuls<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vmulsu_w_vx{: vs1, vs2 : vd},
+ disasm: "vmulsu.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMuls<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmulsu_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vmulsu.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMuls<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vmulw
+ vmulw_h_vv{: vs1, vs2 : vd},
+ disasm: "vmulw.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulw<int16_t, int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmulw_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vmulw.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulw<int16_t, int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmulw_w_vv{: vs1, vs2 : vd},
+ disasm: "vmulw.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulw<int32_t, int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmulw_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vmulw.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulw<int32_t, int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmulw_h_vx{: vs1, vs2 : vd},
+ disasm: "vmulw.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulw<int16_t, int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmulw_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vmulw.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulw<int16_t, int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vmulw_w_vx{: vs1, vs2 : vd},
+ disasm: "vmulw.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulw<int32_t, int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmulw_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vmulw.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulw<int32_t, int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vmulwu
+ vmulw_h_u_vv{: vs1, vs2 : vd},
+ disasm: "vmulw.h.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulw<uint16_t, uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmulw_h_u_vv_m{: vs1, vs2 : vd},
+ disasm: "vmulw.h.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulw<uint16_t, uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmulw_w_u_vv{: vs1, vs2 : vd},
+ disasm: "vmulw.w.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulw<uint32_t, uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmulw_w_u_vv_m{: vs1, vs2 : vd},
+ disasm: "vmulw.w.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulw<uint32_t, uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmulw_h_u_vx{: vs1, vs2 : vd},
+ disasm: "vmulw.h.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulw<uint16_t, uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmulw_h_u_vx_m{: vs1, vs2 : vd},
+ disasm: "vmulw.h.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulw<uint16_t, uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vmulw_w_u_vx{: vs1, vs2 : vd},
+ disasm: "vmulw.w.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulw<uint32_t, uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmulw_w_u_vx_m{: vs1, vs2 : vd},
+ disasm: "vmulw.w.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulw<uint32_t, uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vmulh
+ vmulh_b_vv{: vs1, vs2 : vd},
+ disasm: "vmulh.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<int8_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
+ vmulh_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vmulh.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<int8_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
+ vmulh_h_vv{: vs1, vs2 : vd},
+ disasm: "vmulh.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<int16_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
+ vmulh_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vmulh.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<int16_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
+ vmulh_w_vv{: vs1, vs2 : vd},
+ disasm: "vmulh.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<int32_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
+ vmulh_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vmulh.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<int32_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
+ vmulh_b_vx{: vs1, vs2 : vd},
+ disasm: "vmulh.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<int8_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
+ vmulh_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vmulh.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<int8_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
+ vmulh_h_vx{: vs1, vs2 : vd},
+ disasm: "vmulh.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<int16_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
+ vmulh_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vmulh.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<int16_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
+ vmulh_w_vx{: vs1, vs2 : vd},
+ disasm: "vmulh.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<int32_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
+ vmulh_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vmulh.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<int32_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
+
+ //vmulh.r
+ vmulh_b_r_vv{: vs1, vs2 : vd},
+ disasm: "vmulh.b.r.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<int8_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
+ vmulh_b_r_vv_m{: vs1, vs2 : vd},
+ disasm: "vmulh.b.r.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<int8_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
+ vmulh_h_r_vv{: vs1, vs2 : vd},
+ disasm: "vmulh.h.r.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<int16_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
+ vmulh_h_r_vv_m{: vs1, vs2 : vd},
+ disasm: "vmulh.h.r.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<int16_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
+ vmulh_w_r_vv{: vs1, vs2 : vd},
+ disasm: "vmulh.w.r.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<int32_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
+ vmulh_w_r_vv_m{: vs1, vs2 : vd},
+ disasm: "vmulh.w.r.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<int32_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
+ vmulh_b_r_vx{: vs1, vs2 : vd},
+ disasm: "vmulh.b.r.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<int8_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
+ vmulh_b_r_vx_m{: vs1, vs2 : vd},
+ disasm: "vmulh.b.r.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<int8_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
+ vmulh_h_r_vx{: vs1, vs2 : vd},
+ disasm: "vmulh.h.r.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<int16_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
+ vmulh_h_r_vx_m{: vs1, vs2 : vd},
+ disasm: "vmulh.h.r.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<int16_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
+ vmulh_w_r_vx{: vs1, vs2 : vd},
+ disasm: "vmulh.w.r.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<int32_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
+ vmulh_w_r_vx_m{: vs1, vs2 : vd},
+ disasm: "vmulh.w.r.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<int32_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
+
+ //vmulh.u
+ vmulh_b_u_vv{: vs1, vs2 : vd},
+ disasm: "vmulh.b.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<uint8_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
+ vmulh_b_u_vv_m{: vs1, vs2 : vd},
+ disasm: "vmulh.b.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<uint8_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
+ vmulh_h_u_vv{: vs1, vs2 : vd},
+ disasm: "vmulh.h.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<uint16_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
+ vmulh_h_u_vv_m{: vs1, vs2 : vd},
+ disasm: "vmulh.h.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<uint16_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
+ vmulh_w_u_vv{: vs1, vs2 : vd},
+ disasm: "vmulh.w.u.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<uint32_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false)";
+ vmulh_w_u_vv_m{: vs1, vs2 : vd},
+ disasm: "vmulh.w.u.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<uint32_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false)";
+ vmulh_b_u_vx{: vs1, vs2 : vd},
+ disasm: "vmulh.b.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<uint8_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
+ vmulh_b_u_vx_m{: vs1, vs2 : vd},
+ disasm: "vmulh.b.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<uint8_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
+ vmulh_h_u_vx{: vs1, vs2 : vd},
+ disasm: "vmulh.h.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<uint16_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
+ vmulh_h_u_vx_m{: vs1, vs2 : vd},
+ disasm: "vmulh.h.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<uint16_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
+ vmulh_w_u_vx{: vs1, vs2 : vd},
+ disasm: "vmulh.w.u.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<uint32_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false)";
+ vmulh_w_u_vx_m{: vs1, vs2 : vd},
+ disasm: "vmulh.w.u.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<uint32_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false)";
+
+ //vmulh.ru
+ vmulh_b_ur_vv{: vs1, vs2 : vd},
+ disasm: "vmulh.b.ur.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<uint8_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
+ vmulh_b_ur_vv_m{: vs1, vs2 : vd},
+ disasm: "vmulh.b.ur.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<uint8_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
+ vmulh_h_ur_vv{: vs1, vs2 : vd},
+ disasm: "vmulh.h.ur.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<uint16_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
+ vmulh_h_ur_vv_m{: vs1, vs2 : vd},
+ disasm: "vmulh.h.ur.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<uint16_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
+ vmulh_w_ur_vv{: vs1, vs2 : vd},
+ disasm: "vmulh.w.ur.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<uint32_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true)";
+ vmulh_w_ur_vv_m{: vs1, vs2 : vd},
+ disasm: "vmulh.w.ur.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<uint32_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true)";
+ vmulh_b_ur_vx{: vs1, vs2 : vd},
+ disasm: "vmulh.b.ur.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<uint8_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
+ vmulh_b_ur_vx_m{: vs1, vs2 : vd},
+ disasm: "vmulh.b.ur.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<uint8_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
+ vmulh_h_ur_vx{: vs1, vs2 : vd},
+ disasm: "vmulh.h.ur.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<uint16_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
+ vmulh_h_ur_vx_m{: vs1, vs2 : vd},
+ disasm: "vmulh.h.ur.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<uint16_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
+ vmulh_w_ur_vx{: vs1, vs2 : vd},
+ disasm: "vmulh.w.ur.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<uint32_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true)";
+ vmulh_w_ur_vx_m{: vs1, vs2 : vd},
+ disasm: "vmulh.w.ur.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMulh<uint32_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true)";
+
+ //vdmulh
+ vdmulh_b_vv{: vs1, vs2 : vd},
+ disasm: "vdmulh.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int8_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false, /* round_neg */ false)";
+ vdmulh_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vdmulh.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int8_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false, /* round_neg */ false)";
+ vdmulh_h_vv{: vs1, vs2 : vd},
+ disasm: "vdmulh.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int16_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false, /* round_neg */ false)";
+ vdmulh_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vdmulh.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int16_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false, /* round_neg */ false)";
+ vdmulh_w_vv{: vs1, vs2 : vd},
+ disasm: "vdmulh.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int32_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ false, /* round_neg */ false)";
+ vdmulh_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vdmulh.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int32_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ false, /* round_neg */ false)";
+ vdmulh_b_vx{: vs1, vs2 : vd},
+ disasm: "vdmulh.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int8_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false, /* round_neg */ false)";
+ vdmulh_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vdmulh.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int8_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false, /* round_neg */ false)";
+ vdmulh_h_vx{: vs1, vs2 : vd},
+ disasm: "vdmulh.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int16_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false, /* round_neg */ false)";
+ vdmulh_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vdmulh.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int16_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false, /* round_neg */ false)";
+ vdmulh_w_vx{: vs1, vs2 : vd},
+ disasm: "vdmulh.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int32_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ false, /* round_neg */ false)";
+ vdmulh_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vdmulh.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int32_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ false, /* round_neg */ false)";
+
+ //vdmulh.r
+ vdmulh_b_r_vv{: vs1, vs2 : vd},
+ disasm: "vdmulh.b.r.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int8_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true, /* round_neg */ false)";
+ vdmulh_b_r_vv_m{: vs1, vs2 : vd},
+ disasm: "vdmulh.b.r.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int8_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true, /* round_neg */ false)";
+ vdmulh_h_r_vv{: vs1, vs2 : vd},
+ disasm: "vdmulh.h.r.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int16_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true, /* round_neg */ false)";
+ vdmulh_h_r_vv_m{: vs1, vs2 : vd},
+ disasm: "vdmulh.h.r.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int16_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true, /* round_neg */ false)";
+ vdmulh_w_r_vv{: vs1, vs2 : vd},
+ disasm: "vdmulh.w.r.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int32_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true, /* round_neg */ false)";
+ vdmulh_w_r_vv_m{: vs1, vs2 : vd},
+ disasm: "vdmulh.w.r.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int32_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true, /* round_neg */ false)";
+ vdmulh_b_r_vx{: vs1, vs2 : vd},
+ disasm: "vdmulh.b.r.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int8_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true, /* round_neg */ false)";
+ vdmulh_b_r_vx_m{: vs1, vs2 : vd},
+ disasm: "vdmulh.b.r.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int8_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true, /* round_neg */ false)";
+ vdmulh_h_r_vx{: vs1, vs2 : vd},
+ disasm: "vdmulh.h.r.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int16_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true, /* round_neg */ false)";
+ vdmulh_h_r_vx_m{: vs1, vs2 : vd},
+ disasm: "vdmulh.h.r.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int16_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true, /* round_neg */ false)";
+ vdmulh_w_r_vx{: vs1, vs2 : vd},
+ disasm: "vdmulh.w.r.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int32_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true, /* round_neg */ false)";
+ vdmulh_w_r_vx_m{: vs1, vs2 : vd},
+ disasm: "vdmulh.w.r.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int32_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true, /* round_neg */ false)";
+
+ //vdmulh.rn
+ vdmulh_b_rn_vv{: vs1, vs2 : vd},
+ disasm: "vdmulh.b.rn.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int8_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true, /* round_neg */ true)";
+ vdmulh_b_rn_vv_m{: vs1, vs2 : vd},
+ disasm: "vdmulh.b.rn.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int8_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true, /* round_neg */ true)";
+ vdmulh_h_rn_vv{: vs1, vs2 : vd},
+ disasm: "vdmulh.h.rn.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int16_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true, /* round_neg */ true)";
+ vdmulh_h_rn_vv_m{: vs1, vs2 : vd},
+ disasm: "vdmulh.h.rn.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int16_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true, /* round_neg */ true)";
+ vdmulh_w_rn_vv{: vs1, vs2 : vd},
+ disasm: "vdmulh.w.rn.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int32_t>, /*scalar*/ false, /*strip_mine*/ false, /* round */ true, /* round_neg */ true)";
+ vdmulh_w_rn_vv_m{: vs1, vs2 : vd},
+ disasm: "vdmulh.w.rn.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int32_t>, /*scalar*/ false, /*strip_mine*/ true, /* round */ true, /* round_neg */ true)";
+ vdmulh_b_rn_vx{: vs1, vs2 : vd},
+ disasm: "vdmulh.b.rn.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int8_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true, /* round_neg */ true)";
+ vdmulh_b_rn_vx_m{: vs1, vs2 : vd},
+ disasm: "vdmulh.b.rn.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int8_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true, /* round_neg */ true)";
+ vdmulh_h_rn_vx{: vs1, vs2 : vd},
+ disasm: "vdmulh.h.rn.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int16_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true, /* round_neg */ true)";
+ vdmulh_h_rn_vx_m{: vs1, vs2 : vd},
+ disasm: "vdmulh.h.rn.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int16_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true, /* round_neg */ true)";
+ vdmulh_w_rn_vx{: vs1, vs2 : vd},
+ disasm: "vdmulh.w.rn.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int32_t>, /*scalar*/ true, /*strip_mine*/ false, /* round */ true, /* round_neg */ true)";
+ vdmulh_w_rn_vx_m{: vs1, vs2 : vd},
+ disasm: "vdmulh.w.rn.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVDmulh<int32_t>, /*scalar*/ true, /*strip_mine*/ true, /* round */ true, /* round_neg */ true)";
+
+ //vmacc
+ vmacc_b_vv{: vs1, vs2 : vd},
+ disasm: "vmacc.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMacc<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmacc_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vmacc.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMacc<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmacc_h_vv{: vs1, vs2 : vd},
+ disasm: "vmacc.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMacc<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmacc_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vmacc.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMacc<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmacc_w_vv{: vs1, vs2 : vd},
+ disasm: "vmacc.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMacc<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmacc_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vmacc.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMacc<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmacc_b_vx{: vs1, vs2 : vd},
+ disasm: "vmacc.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMacc<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmacc_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vmacc.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMacc<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vmacc_h_vx{: vs1, vs2 : vd},
+ disasm: "vmacc.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMacc<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmacc_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vmacc.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMacc<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vmacc_w_vx{: vs1, vs2 : vd},
+ disasm: "vmacc.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMacc<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmacc_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vmacc.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMacc<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vmadd
+ vmadd_b_vv{: vs1, vs2 : vd},
+ disasm: "vmadd.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMadd<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmadd_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vmadd.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMadd<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmadd_h_vv{: vs1, vs2 : vd},
+ disasm: "vmadd.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMadd<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmadd_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vmadd.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMadd<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmadd_w_vv{: vs1, vs2 : vd},
+ disasm: "vmadd.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMadd<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vmadd_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vmadd.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMadd<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vmadd_b_vx{: vs1, vs2 : vd},
+ disasm: "vmadd.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMadd<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmadd_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vmadd.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMadd<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vmadd_h_vx{: vs1, vs2 : vd},
+ disasm: "vmadd.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMadd<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmadd_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vmadd.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMadd<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vmadd_w_vx{: vs1, vs2 : vd},
+ disasm: "vmadd.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMadd<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vmadd_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vmadd.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVMadd<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ }
+}
diff --git a/sim/kelvin_shift.isa b/sim/kelvin_shift.isa
new file mode 100644
index 0000000..9477806
--- /dev/null
+++ b/sim/kelvin_shift.isa
@@ -0,0 +1,851 @@
+// This file define the kelvin base isa for mpact-sim. For more info on mpact-sim
+// isa format, check: go/mpact-sim-codelabs-riscv-instruction-decoder
+
+// First disasm field is 18 char wide and left justified.
+disasm widths = {-18};
+
+// Kelvin simd instructions:
+// https://spacebeaker.googlesource.com/shodan/sw/kelvin/+/refs/heads/master/docs/kelvin_isa.md
+// Shift / Shuffle instructions (func1 010/110)
+slot kelvin_shift {
+ includes {
+ #include "sim/kelvin_instructions.h"
+ #include "sim/kelvin_vector_instructions.h"
+ #include "absl/functional/bind_front.h"
+ }
+ default size = 4;
+ default latency = global_latency;
+ opcodes {
+ //vsll
+ vsll_b_vv{: vs1, vs2 : vd},
+ disasm: "vsll.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSll<uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vsll_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vsll.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSll<uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vsll_h_vv{: vs1, vs2 : vd},
+ disasm: "vsll.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSll<uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vsll_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vsll.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSll<uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vsll_w_vv{: vs1, vs2 : vd},
+ disasm: "vsll.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSll<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vsll_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vsll.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSll<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vsll_b_vx{: vs1, vs2 : vd},
+ disasm: "vsll.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSll<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vsll_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vsll.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSll<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vsll_h_vx{: vs1, vs2 : vd},
+ disasm: "vsll.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSll<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vsll_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vsll.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSll<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vsll_w_vx{: vs1, vs2 : vd},
+ disasm: "vsll.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSll<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vsll_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vsll.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSll<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vsra
+ vsra_b_vv{: vs1, vs2 : vd},
+ disasm: "vsra.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSra<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vsra_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vsra.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSra<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vsra_h_vv{: vs1, vs2 : vd},
+ disasm: "vsra.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSra<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vsra_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vsra.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSra<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vsra_w_vv{: vs1, vs2 : vd},
+ disasm: "vsra.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSra<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vsra_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vsra.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSra<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vsra_b_vx{: vs1, vs2 : vd},
+ disasm: "vsra.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSra<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vsra_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vsra.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSra<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vsra_h_vx{: vs1, vs2 : vd},
+ disasm: "vsra.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSra<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vsra_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vsra.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSra<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vsra_w_vx{: vs1, vs2 : vd},
+ disasm: "vsra.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSra<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vsra_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vsra.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSra<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vsrl
+ vsrl_b_vv{: vs1, vs2 : vd},
+ disasm: "vsrl.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrl<uint8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vsrl_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vsrl.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrl<uint8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vsrl_h_vv{: vs1, vs2 : vd},
+ disasm: "vsrl.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrl<uint16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vsrl_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vsrl.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrl<uint16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vsrl_w_vv{: vs1, vs2 : vd},
+ disasm: "vsrl.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrl<uint32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vsrl_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vsrl.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrl<uint32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vsrl_b_vx{: vs1, vs2 : vd},
+ disasm: "vsrl.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrl<uint8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vsrl_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vsrl.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrl<uint8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vsrl_h_vx{: vs1, vs2 : vd},
+ disasm: "vsrl.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrl<uint16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vsrl_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vsrl.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrl<uint16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vsrl_w_vx{: vs1, vs2 : vd},
+ disasm: "vsrl.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrl<uint32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vsrl_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vsrl.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrl<uint32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vsha
+ vsha_b_vv{: vs1, vs2 : vd},
+ disasm: "vsha.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVShift<int8_t>, /* round */ false, /*strip_mine*/ false)";
+ vsha_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vsha.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVShift<int8_t>, /* round */ false, /*strip_mine*/ true)";
+ vsha_h_vv{: vs1, vs2 : vd},
+ disasm: "vsha.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVShift<int16_t>, /* round */ false, /*strip_mine*/ false)";
+ vsha_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vsha.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVShift<int16_t>, /* round */ false, /*strip_mine*/ true)";
+ vsha_w_vv{: vs1, vs2 : vd},
+ disasm: "vsha.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVShift<int32_t>, /* round */ false, /*strip_mine*/ false)";
+ vsha_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vsha.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVShift<int32_t>, /* round */ false, /*strip_mine*/ true)";
+ vsha_b_r_vv{: vs1, vs2 : vd},
+ disasm: "vsha.b.r.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVShift<int8_t>, /* round */ true, /*strip_mine*/ false)";
+ vsha_b_r_vv_m{: vs1, vs2 : vd},
+ disasm: "vsha.b.r.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVShift<int8_t>, /* round */ true, /*strip_mine*/ true)";
+ vsha_h_r_vv{: vs1, vs2 : vd},
+ disasm: "vsha.h.r.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVShift<int16_t>, /* round */ true, /*strip_mine*/ false)";
+ vsha_h_r_vv_m{: vs1, vs2 : vd},
+ disasm: "vsha.h.r.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVShift<int16_t>, /* round */ true, /*strip_mine*/ true)";
+ vsha_w_r_vv{: vs1, vs2 : vd},
+ disasm: "vsha.w.r.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVShift<int32_t>, /* round */ true, /*strip_mine*/ false)";
+ vsha_w_r_vv_m{: vs1, vs2 : vd},
+ disasm: "vsha.w.r.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVShift<int32_t>, /* round */ true, /*strip_mine*/ true)";
+
+ //vshl
+ vshl_b_vv{: vs1, vs2 : vd},
+ disasm: "vshl.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVShift<uint8_t>, /* round */ false, /*strip_mine*/ false)";
+ vshl_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vshl.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVShift<uint8_t>, /* round */ false, /*strip_mine*/ true)";
+ vshl_h_vv{: vs1, vs2 : vd},
+ disasm: "vshl.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVShift<uint16_t>, /* round */ false, /*strip_mine*/ false)";
+ vshl_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vshl.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVShift<uint16_t>, /* round */ false, /*strip_mine*/ true)";
+ vshl_w_vv{: vs1, vs2 : vd},
+ disasm: "vshl.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVShift<uint32_t>, /* round */ false, /*strip_mine*/ false)";
+ vshl_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vshl.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVShift<uint32_t>, /* round */ false, /*strip_mine*/ true)";
+ vshl_b_r_vv{: vs1, vs2 : vd},
+ disasm: "vshl.b.r.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVShift<uint8_t>, /* round */ true, /*strip_mine*/ false)";
+ vshl_b_r_vv_m{: vs1, vs2 : vd},
+ disasm: "vshl.b.r.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVShift<uint8_t>, /* round */ true, /*strip_mine*/ true)";
+ vshl_h_r_vv{: vs1, vs2 : vd},
+ disasm: "vshl.h.r.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVShift<uint16_t>, /* round */ true, /*strip_mine*/ false)";
+ vshl_h_r_vv_m{: vs1, vs2 : vd},
+ disasm: "vshl.h.r.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVShift<uint16_t>, /* round */ true, /*strip_mine*/ true)";
+ vshl_w_r_vv{: vs1, vs2 : vd},
+ disasm: "vshl.w.r.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVShift<uint32_t>, /* round */ true, /*strip_mine*/ false)";
+ vshl_w_r_vv_m{: vs1, vs2 : vd},
+ disasm: "vshl.w.r.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVShift<uint32_t>, /* round */ true, /*strip_mine*/ true)";
+
+ //vnot
+ vnot_v{: vs1 : vd},
+ disasm: "vnot.v", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVNot<int32_t>, /*strip_mine*/ false)";
+ vnot_v_m{: vs1 : vd},
+ disasm: "vnot.v.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVNot<int32_t>, /*strip_mine*/ true)";
+
+ //vclb
+ vclb_b_v{: vs1 : vd},
+ disasm: "vclb.b.v", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVClb<uint8_t>, /*strip_mine*/ false)";
+ vclb_b_v_m{: vs1 : vd},
+ disasm: "vclb.b.v.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVClb<uint8_t>, /*strip_mine*/ true)";
+ vclb_h_v{: vs1 : vd},
+ disasm: "vclb.h.v", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVClb<uint16_t>, /*strip_mine*/ false)";
+ vclb_h_v_m{: vs1 : vd},
+ disasm: "vclb.h.v.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVClb<uint16_t>, /*strip_mine*/ true)";
+ vclb_w_v{: vs1 : vd},
+ disasm: "vclb.w.v", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVClb<uint32_t>, /*strip_mine*/ false)";
+ vclb_w_v_m{: vs1 : vd},
+ disasm: "vclb.w.v.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVClb<uint32_t>, /*strip_mine*/ true)";
+
+ //vclz
+ vclz_b_v{: vs1 : vd},
+ disasm: "vclz.b.v", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVClz<uint8_t>, /*strip_mine*/ false)";
+ vclz_b_v_m{: vs1 : vd},
+ disasm: "vclz.b.v.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVClz<uint8_t>, /*strip_mine*/ true)";
+ vclz_h_v{: vs1 : vd},
+ disasm: "vclz.h.v", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVClz<uint16_t>, /*strip_mine*/ false)";
+ vclz_h_v_m{: vs1 : vd},
+ disasm: "vclz.h.v.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVClz<uint16_t>, /*strip_mine*/ true)";
+ vclz_w_v{: vs1 : vd},
+ disasm: "vclz.w.v", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVClz<uint32_t>, /*strip_mine*/ false)";
+ vclz_w_v_m{: vs1 : vd},
+ disasm: "vclz.w.v.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVClz<uint32_t>, /*strip_mine*/ true)";
+
+ //vcpop
+ vcpop_b_v{: vs1 : vd},
+ disasm: "vcpop.b.v", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVCpop<uint8_t>, /*strip_mine*/ false)";
+ vcpop_b_v_m{: vs1 : vd},
+ disasm: "vcpop.b.v.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVCpop<uint8_t>, /*strip_mine*/ true)";
+ vcpop_h_v{: vs1 : vd},
+ disasm: "vcpop.h.v", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVCpop<uint16_t>, /*strip_mine*/ false)";
+ vcpop_h_v_m{: vs1 : vd},
+ disasm: "vcpop.h.v.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVCpop<uint16_t>, /*strip_mine*/ true)";
+ vcpop_w_v{: vs1 : vd},
+ disasm: "vcpop.w.v", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVCpop<uint32_t>, /*strip_mine*/ false)";
+ vcpop_w_v_m{: vs1 : vd},
+ disasm: "vcpop.w.v.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVCpop<uint32_t>, /*strip_mine*/ true)";
+
+ //vmv
+ vmv_v{: vs1 : vd},
+ disasm: "vmv.v", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVMv<int32_t>, /*strip_mine*/ false)";
+ vmv_v_m{: vs1 : vd},
+ disasm: "vmv.v.m", "%vd, %vs1",
+ semfunc: "absl::bind_front(&KelvinVMv<int32_t>, /*strip_mine*/ true)";
+
+ //vsrans
+ vsrans_b_vv{: vs1, vs2 : vd},
+ disasm: "vsrans.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int16_t>, /*round*/ false, /*scalar*/ false, /*strip_mine*/ false)";
+ vsrans_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vsrans.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int16_t>, /*round*/ false, /*scalar*/ false, /*strip_mine*/ true)";
+ vsrans_h_vv{: vs1, vs2 : vd},
+ disasm: "vsrans.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<int16_t, int32_t>, /*round*/ false, /*scalar*/ false, /*strip_mine*/ false)";
+ vsrans_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vsrans.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<int16_t, int32_t>, /*round*/ false, /*scalar*/ false, /*strip_mine*/ true)";
+ vsrans_b_vx{: vs1, vs2 : vd},
+ disasm: "vsrans.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int16_t>, /*round*/ false, /*scalar*/ true, /*strip_mine*/ false)";
+ vsrans_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vsrans.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int16_t>, /*round*/ false, /*scalar*/ true, /*strip_mine*/ true)";
+ vsrans_h_vx{: vs1, vs2 : vd},
+ disasm: "vsrans.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<int16_t, int32_t>, /*round*/ false, /*scalar*/ true, /*strip_mine*/ false)";
+ vsrans_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vsrans.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<int16_t, int32_t>, /*round*/ false, /*scalar*/ true, /*strip_mine*/ true)";
+ vsrans_b_r_vv{: vs1, vs2 : vd},
+ disasm: "vsrans.b.r.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int16_t>, /*round*/ true, /*scalar*/ false, /*strip_mine*/ false)";
+ vsrans_b_r_vv_m{: vs1, vs2 : vd},
+ disasm: "vsrans.b.r.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int16_t>, /*round*/ true, /*scalar*/ false, /*strip_mine*/ true)";
+ vsrans_h_r_vv{: vs1, vs2 : vd},
+ disasm: "vsrans.h.r.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<int16_t, int32_t>, /*round*/ true, /*scalar*/ false, /*strip_mine*/ false)";
+ vsrans_h_r_vv_m{: vs1, vs2 : vd},
+ disasm: "vsrans.h.r.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<int16_t, int32_t>, /*round*/ true, /*scalar*/ false, /*strip_mine*/ true)";
+ vsrans_b_r_vx{: vs1, vs2 : vd},
+ disasm: "vsrans.b.r.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int16_t>, /*round*/ true, /*scalar*/ true, /*strip_mine*/ false)";
+ vsrans_b_r_vx_m{: vs1, vs2 : vd},
+ disasm: "vsrans.b.r.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int16_t>, /*round*/ true, /*scalar*/ true, /*strip_mine*/ true)";
+ vsrans_h_r_vx{: vs1, vs2 : vd},
+ disasm: "vsrans.h.r.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<int16_t, int32_t>, /*round*/ true, /*scalar*/ true, /*strip_mine*/ false)";
+ vsrans_h_r_vx_m{: vs1, vs2 : vd},
+ disasm: "vsrans.h.r.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<int16_t, int32_t>, /*round*/ true, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vsransu
+ vsransu_b_vv{: vs1, vs2 : vd},
+ disasm: "vsransu.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint16_t>, /*round*/ false, /*scalar*/ false, /*strip_mine*/ false)";
+ vsransu_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vsransu.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint16_t>, /*round*/ false, /*scalar*/ false, /*strip_mine*/ true)";
+ vsransu_h_vv{: vs1, vs2 : vd},
+ disasm: "vsransu.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<uint16_t, uint32_t>, /*round*/ false, /*scalar*/ false, /*strip_mine*/ false)";
+ vsransu_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vsransu.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<uint16_t, uint32_t>, /*round*/ false, /*scalar*/ false, /*strip_mine*/ true)";
+ vsransu_b_vx{: vs1, vs2 : vd},
+ disasm: "vsransu.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint16_t>, /*round*/ false, /*scalar*/ true, /*strip_mine*/ false)";
+ vsransu_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vsransu.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint16_t>, /*round*/ false, /*scalar*/ true, /*strip_mine*/ true)";
+ vsransu_h_vx{: vs1, vs2 : vd},
+ disasm: "vsransu.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<uint16_t, uint32_t>, /*round*/ false, /*scalar*/ true, /*strip_mine*/ false)";
+ vsransu_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vsransu.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<uint16_t, uint32_t>, /*round*/ false, /*scalar*/ true, /*strip_mine*/ true)";
+ vsransu_b_r_vv{: vs1, vs2 : vd},
+ disasm: "vsransu.b.r.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint16_t>, /*round*/ true, /*scalar*/ false, /*strip_mine*/ false)";
+ vsransu_b_r_vv_m{: vs1, vs2 : vd},
+ disasm: "vsransu.b.r.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint16_t>, /*round*/ true, /*scalar*/ false, /*strip_mine*/ true)";
+ vsransu_h_r_vv{: vs1, vs2 : vd},
+ disasm: "vsransu.h.r.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<uint16_t, uint32_t>, /*round*/ true, /*scalar*/ false, /*strip_mine*/ false)";
+ vsransu_h_r_vv_m{: vs1, vs2 : vd},
+ disasm: "vsransu.h.r.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<uint16_t, uint32_t>, /*round*/ true, /*scalar*/ false, /*strip_mine*/ true)";
+ vsransu_b_r_vx{: vs1, vs2 : vd},
+ disasm: "vsransu.b.r.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint16_t>, /*round*/ true, /*scalar*/ true, /*strip_mine*/ false)";
+ vsransu_b_r_vx_m{: vs1, vs2 : vd},
+ disasm: "vsransu.b.r.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint16_t>, /*round*/ true, /*scalar*/ true, /*strip_mine*/ true)";
+ vsransu_h_r_vx{: vs1, vs2 : vd},
+ disasm: "vsransu.h.r.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<uint16_t, uint32_t>, /*round*/ true, /*scalar*/ true, /*strip_mine*/ false)";
+ vsransu_h_r_vx_m{: vs1, vs2 : vd},
+ disasm: "vsransu.h.r.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<uint16_t, uint32_t>, /*round*/ true, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vsraqs
+ vsraqs_b_vv{: vs1, vs2 : vd},
+ disasm: "vsraqs.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int32_t>, /*round*/ false, /*scalar*/ false, /*strip_mine*/ false)";
+ vsraqs_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vsraqs.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int32_t>, /*round*/ false, /*scalar*/ false, /*strip_mine*/ true)";
+ vsraqs_b_vx{: vs1, vs2 : vd},
+ disasm: "vsraqs.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int32_t>, /*round*/ false, /*scalar*/ true, /*strip_mine*/ false)";
+ vsraqs_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vsraqs.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int32_t>, /*round*/ false, /*scalar*/ true, /*strip_mine*/ true)";
+ vsraqs_b_r_vv{: vs1, vs2 : vd},
+ disasm: "vsraqs.b.r.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int32_t>, /*round*/ true, /*scalar*/ false, /*strip_mine*/ false)";
+ vsraqs_b_r_vv_m{: vs1, vs2 : vd},
+ disasm: "vsraqs.b.r.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int32_t>, /*round*/ true, /*scalar*/ false, /*strip_mine*/ true)";
+ vsraqs_b_r_vx{: vs1, vs2 : vd},
+ disasm: "vsraqs.b.r.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int32_t>, /*round*/ true, /*scalar*/ true, /*strip_mine*/ false)";
+ vsraqs_b_r_vx_m{: vs1, vs2 : vd},
+ disasm: "vsraqs.b.r.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<int8_t, int32_t>, /*round*/ true, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vsraqsu
+ vsraqsu_b_vv{: vs1, vs2 : vd},
+ disasm: "vsraqsu.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint32_t>, /*round*/ false, /*scalar*/ false, /*strip_mine*/ false)";
+ vsraqsu_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vsraqsu.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint32_t>, /*round*/ false, /*scalar*/ false, /*strip_mine*/ true)";
+ vsraqsu_b_vx{: vs1, vs2 : vd},
+ disasm: "vsraqsu.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint32_t>, /*round*/ false, /*scalar*/ true, /*strip_mine*/ false)";
+ vsraqsu_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vsraqsu.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint32_t>, /*round*/ false, /*scalar*/ true, /*strip_mine*/ true)";
+ vsraqsu_b_r_vv{: vs1, vs2 : vd},
+ disasm: "vsraqsu.b.r.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint32_t>, /*round*/ true, /*scalar*/ false, /*strip_mine*/ false)";
+ vsraqsu_b_r_vv_m{: vs1, vs2 : vd},
+ disasm: "vsraqsu.b.r.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint32_t>, /*round*/ true, /*scalar*/ false, /*strip_mine*/ true)";
+ vsraqsu_b_r_vx{: vs1, vs2 : vd},
+ disasm: "vsraqsu.b.r.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint32_t>, /*round*/ true, /*scalar*/ true, /*strip_mine*/ false)";
+ vsraqsu_b_r_vx_m{: vs1, vs2 : vd},
+ disasm: "vsraqsu.b.r.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSrans<uint8_t, uint32_t>, /*round*/ true, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vslidevn
+ vsliden_b_1_vv{: vs1, vs2 : vd},
+ disasm: "vsliden.b.1.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevn<int8_t>, 1 /* index */, false /* strip_mine */)";
+ vsliden_b_2_vv{: vs1, vs2 : vd},
+ disasm: "vsliden.b.2.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevn<int8_t>, 2 /* index */, false /* strip_mine */)";
+ vsliden_b_3_vv{: vs1, vs2 : vd},
+ disasm: "vsliden.b.3.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevn<int8_t>, 3 /* index */, false /* strip_mine */)";
+ vsliden_b_4_vv{: vs1, vs2 : vd},
+ disasm: "vsliden.b.4.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevn<int8_t>, 4 /* index */, false /* strip_mine */)";
+ vsliden_h_1_vv{: vs1, vs2 : vd},
+ disasm: "vsliden.h.1.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevn<int16_t>, 1 /* index */, false /* strip_mine */)";
+ vsliden_h_2_vv{: vs1, vs2 : vd},
+ disasm: "vsliden.h.2.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevn<int16_t>, 2 /* index */, false /* strip_mine */)";
+ vsliden_h_3_vv{: vs1, vs2 : vd},
+ disasm: "vsliden.h.3.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevn<int16_t>, 3 /* index */, false /* strip_mine */)";
+ vsliden_h_4_vv{: vs1, vs2 : vd},
+ disasm: "vsliden.h.4.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevn<int16_t>, 4 /* index */, false /* strip_mine */)";
+ vsliden_w_1_vv{: vs1, vs2 : vd},
+ disasm: "vsliden.w.1.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevn<int32_t>, 1 /* index */, false /* strip_mine */)";
+ vsliden_w_2_vv{: vs1, vs2 : vd},
+ disasm: "vsliden.w.2.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevn<int32_t>, 2 /* index */, false /* strip_mine */)";
+ vsliden_w_3_vv{: vs1, vs2 : vd},
+ disasm: "vsliden.w.3.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevn<int32_t>, 3 /* index */, false /* strip_mine */)";
+ vsliden_w_4_vv{: vs1, vs2 : vd},
+ disasm: "vsliden.w.4.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevn<int32_t>, 4 /* index */, false /* strip_mine */)";
+ vslidevn_b_1_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidevn.b.1.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevn<int8_t>, 1 /* index */, true /* strip_mine */)";
+ vslidevn_b_2_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidevn.b.2.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevn<int8_t>, 2 /* index */, true /* strip_mine */)";
+ vslidevn_b_3_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidevn.b.3.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevn<int8_t>, 3 /* index */, true /* strip_mine */)";
+ vslidevn_b_4_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidevn.b.4.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevn<int8_t>, 4 /* index */, true /* strip_mine */)";
+ vslidevn_h_1_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidevn.h.1.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevn<int16_t>, 1 /* index */, true /* strip_mine */)";
+ vslidevn_h_2_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidevn.h.2.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevn<int16_t>, 2 /* index */, true /* strip_mine */)";
+ vslidevn_h_3_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidevn.h.3.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevn<int16_t>, 3 /* index */, true /* strip_mine */)";
+ vslidevn_h_4_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidevn.h.4.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevn<int16_t>, 4 /* index */, true /* strip_mine */)";
+ vslidevn_w_1_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidevn.w.1.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevn<int32_t>, 1 /* index */, true /* strip_mine */)";
+ vslidevn_w_2_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidevn.w.2.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevn<int32_t>, 2 /* index */, true /* strip_mine */)";
+ vslidevn_w_3_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidevn.w.3.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevn<int32_t>, 3 /* index */, true /* strip_mine */)";
+ vslidevn_w_4_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidevn.w.4.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevn<int32_t>, 4 /* index */, true /* strip_mine */)";
+
+ //vslidehn
+ vslidehn_b_1_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidehn.b.1.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidehn<int8_t>, 1 /* index */)";
+ vslidehn_b_2_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidehn.b.2.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidehn<int8_t>, 2 /* index */)";
+ vslidehn_b_3_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidehn.b.3.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidehn<int8_t>, 3 /* index */)";
+ vslidehn_b_4_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidehn.b.4.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidehn<int8_t>, 4 /* index */)";
+ vslidehn_h_1_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidehn.h.1.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidehn<int16_t>, 1 /* index */)";
+ vslidehn_h_2_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidehn.h.2.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidehn<int16_t>, 2 /* index */)";
+ vslidehn_h_3_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidehn.h.3.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidehn<int16_t>, 3 /* index */)";
+ vslidehn_h_4_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidehn.h.4.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidehn<int16_t>, 4 /* index */)";
+ vslidehn_w_1_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidehn.w.1.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidehn<int32_t>, 1 /* index */)";
+ vslidehn_w_2_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidehn.w.2.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidehn<int32_t>, 2 /* index */)";
+ vslidehn_w_3_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidehn.w.3.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidehn<int32_t>, 3 /* index */)";
+ vslidehn_w_4_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidehn.w.4.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidehn<int32_t>, 4 /* index */)";
+
+ //vslidevp
+ vslidep_b_1_vv{: vs1, vs2 : vd},
+ disasm: "vslidep.b.1.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevp<int8_t>, 1 /* index */, false /* strip_mine */)";
+ vslidep_b_2_vv{: vs1, vs2 : vd},
+ disasm: "vslidep.b.2.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevp<int8_t>, 2 /* index */, false /* strip_mine */)";
+ vslidep_b_3_vv{: vs1, vs2 : vd},
+ disasm: "vslidep.b.3.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevp<int8_t>, 3 /* index */, false /* strip_mine */)";
+ vslidep_b_4_vv{: vs1, vs2 : vd},
+ disasm: "vslidep.b.4.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevp<int8_t>, 4 /* index */, false /* strip_mine */)";
+ vslidep_h_1_vv{: vs1, vs2 : vd},
+ disasm: "vslidep.h.1.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevp<int16_t>, 1 /* index */, false /* strip_mine */)";
+ vslidep_h_2_vv{: vs1, vs2 : vd},
+ disasm: "vslidep.h.2.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevp<int16_t>, 2 /* index */, false /* strip_mine */)";
+ vslidep_h_3_vv{: vs1, vs2 : vd},
+ disasm: "vslidep.h.3.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevp<int16_t>, 3 /* index */, false /* strip_mine */)";
+ vslidep_h_4_vv{: vs1, vs2 : vd},
+ disasm: "vslidep.h.4.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevp<int16_t>, 4 /* index */, false /* strip_mine */)";
+ vslidep_w_1_vv{: vs1, vs2 : vd},
+ disasm: "vslidep.w.1.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevp<int32_t>, 1 /* index */, false /* strip_mine */)";
+ vslidep_w_2_vv{: vs1, vs2 : vd},
+ disasm: "vslidep.w.2.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevp<int32_t>, 2 /* index */, false /* strip_mine */)";
+ vslidep_w_3_vv{: vs1, vs2 : vd},
+ disasm: "vslidep.w.3.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevp<int32_t>, 3 /* index */, false /* strip_mine */)";
+ vslidep_w_4_vv{: vs1, vs2 : vd},
+ disasm: "vslidep.w.4.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevp<int32_t>, 4 /* index */, false /* strip_mine */)";
+ vslidevp_b_1_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidevp.b.1.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevp<int8_t>, 1 /* index */, true /* strip_mine */)";
+ vslidevp_b_2_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidevp.b.2.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevp<int8_t>, 2 /* index */, true /* strip_mine */)";
+ vslidevp_b_3_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidevp.b.3.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevp<int8_t>, 3 /* index */, true /* strip_mine */)";
+ vslidevp_b_4_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidevp.b.4.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevp<int8_t>, 4 /* index */, true /* strip_mine */)";
+ vslidevp_h_1_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidevp.h.1.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevp<int16_t>, 1 /* index */, true /* strip_mine */)";
+ vslidevp_h_2_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidevp.h.2.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevp<int16_t>, 2 /* index */, true /* strip_mine */)";
+ vslidevp_h_3_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidevp.h.3.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevp<int16_t>, 3 /* index */, true /* strip_mine */)";
+ vslidevp_h_4_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidevp.h.4.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevp<int16_t>, 4 /* index */, true /* strip_mine */)";
+ vslidevp_w_1_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidevp.w.1.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevp<int32_t>, 1 /* index */, true /* strip_mine */)";
+ vslidevp_w_2_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidevp.w.2.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevp<int32_t>, 2 /* index */, true /* strip_mine */)";
+ vslidevp_w_3_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidevp.w.3.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevp<int32_t>, 3 /* index */, true /* strip_mine */)";
+ vslidevp_w_4_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidevp.w.4.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidevp<int32_t>, 4 /* index */, true /* strip_mine */)";
+
+ //vslidehp
+ vslidehp_b_1_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidehp.b.1.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidehp<int8_t>, 1 /* index */)";
+ vslidehp_b_2_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidehp.b.2.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidehp<int8_t>, 2 /* index */)";
+ vslidehp_b_3_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidehp.b.3.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidehp<int8_t>, 3 /* index */)";
+ vslidehp_b_4_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidehp.b.4.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidehp<int8_t>, 4 /* index */)";
+ vslidehp_h_1_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidehp.h.1.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidehp<int16_t>, 1 /* index */)";
+ vslidehp_h_2_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidehp.h.2.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidehp<int16_t>, 2 /* index */)";
+ vslidehp_h_3_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidehp.h.3.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidehp<int16_t>, 3 /* index */)";
+ vslidehp_h_4_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidehp.h.4.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidehp<int16_t>, 4 /* index */)";
+ vslidehp_w_1_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidehp.w.1.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidehp<int32_t>, 1 /* index */)";
+ vslidehp_w_2_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidehp.w.2.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidehp<int32_t>, 2 /* index */)";
+ vslidehp_w_3_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidehp.w.3.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidehp<int32_t>, 3 /* index */)";
+ vslidehp_w_4_vv_m{: vs1, vs2 : vd},
+ disasm: "vslidehp.w.4.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSlidehp<int32_t>, 4 /* index */)";
+
+ //vsel
+ vsel_b_vv{: vs1, vs2, vd : vd},
+ disasm: "vsel.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSel<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vsel_b_vv_m{: vs1, vs2, vd : vd},
+ disasm: "vsel.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSel<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vsel_h_vv{: vs1, vs2, vd : vd},
+ disasm: "vsel.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSel<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vsel_h_vv_m{: vs1, vs2, vd : vd},
+ disasm: "vsel.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSel<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vsel_w_vv{: vs1, vs2, vd : vd},
+ disasm: "vsel.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSel<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vsel_w_vv_m{: vs1, vs2, vd : vd},
+ disasm: "vsel.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSel<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vsel_b_vx{: vs1, vs2, vd : vd},
+ disasm: "vsel.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSel<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vsel_b_vx_m{: vs1, vs2, vd : vd},
+ disasm: "vsel.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSel<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vsel_h_vx{: vs1, vs2, vd : vd},
+ disasm: "vsel.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSel<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vsel_h_vx_m{: vs1, vs2, vd : vd},
+ disasm: "vsel.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSel<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vsel_w_vx{: vs1, vs2, vd : vd},
+ disasm: "vsel.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSel<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vsel_w_vx_m{: vs1, vs2, vd : vd},
+ disasm: "vsel.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVSel<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vevn
+ vevn_b_vv{: vs1, vs2 : vd},
+ disasm: "vevn.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEvn<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vevn_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vevn.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEvn<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vevn_h_vv{: vs1, vs2 : vd},
+ disasm: "vevn.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEvn<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vevn_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vevn.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEvn<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vevn_w_vv{: vs1, vs2 : vd},
+ disasm: "vevn.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEvn<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vevn_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vevn.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEvn<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vevn_b_vx{: vs1, vs2 : vd},
+ disasm: "vevn.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEvn<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vevn_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vevn.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEvn<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vevn_h_vx{: vs1, vs2 : vd},
+ disasm: "vevn.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEvn<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vevn_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vevn.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEvn<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vevn_w_vx{: vs1, vs2 : vd},
+ disasm: "vevn.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEvn<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vevn_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vevn.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEvn<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vodd
+ vodd_b_vv{: vs1, vs2 : vd},
+ disasm: "vodd.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVOdd<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vodd_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vodd.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVOdd<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vodd_h_vv{: vs1, vs2 : vd},
+ disasm: "vodd.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVOdd<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vodd_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vodd.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVOdd<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vodd_w_vv{: vs1, vs2 : vd},
+ disasm: "vodd.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVOdd<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vodd_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vodd.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVOdd<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vodd_b_vx{: vs1, vs2 : vd},
+ disasm: "vodd.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVOdd<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vodd_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vodd.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVOdd<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vodd_h_vx{: vs1, vs2 : vd},
+ disasm: "vodd.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVOdd<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vodd_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vodd.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVOdd<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vodd_w_vx{: vs1, vs2 : vd},
+ disasm: "vodd.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVOdd<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vodd_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vodd.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVOdd<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vevnodd
+ vevnodd_b_vv{: vs1, vs2 : vd},
+ disasm: "vevnodd.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEvnodd<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vevnodd_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vevnodd.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEvnodd<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vevnodd_h_vv{: vs1, vs2 : vd},
+ disasm: "vevnodd.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEvnodd<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vevnodd_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vevnodd.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEvnodd<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vevnodd_w_vv{: vs1, vs2 : vd},
+ disasm: "vevnodd.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEvnodd<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vevnodd_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vevnodd.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEvnodd<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vevnodd_b_vx{: vs1, vs2 : vd},
+ disasm: "vevnodd.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEvnodd<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vevnodd_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vevnodd.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEvnodd<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vevnodd_h_vx{: vs1, vs2 : vd},
+ disasm: "vevnodd.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEvnodd<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vevnodd_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vevnodd.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEvnodd<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vevnodd_w_vx{: vs1, vs2 : vd},
+ disasm: "vevnodd.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEvnodd<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vevnodd_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vevnodd.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVEvnodd<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+
+ //vzip
+ vzip_b_vv{: vs1, vs2 : vd},
+ disasm: "vzip.b.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVZip<int8_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vzip_b_vv_m{: vs1, vs2 : vd},
+ disasm: "vzip.b.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVZip<int8_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vzip_h_vv{: vs1, vs2 : vd},
+ disasm: "vzip.h.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVZip<int16_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vzip_h_vv_m{: vs1, vs2 : vd},
+ disasm: "vzip.h.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVZip<int16_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vzip_w_vv{: vs1, vs2 : vd},
+ disasm: "vzip.w.vv", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVZip<int32_t>, /*scalar*/ false, /*strip_mine*/ false)";
+ vzip_w_vv_m{: vs1, vs2 : vd},
+ disasm: "vzip.w.vv.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVZip<int32_t>, /*scalar*/ false, /*strip_mine*/ true)";
+ vzip_b_vx{: vs1, vs2 : vd},
+ disasm: "vzip.b.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVZip<int8_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vzip_b_vx_m{: vs1, vs2 : vd},
+ disasm: "vzip.b.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVZip<int8_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vzip_h_vx{: vs1, vs2 : vd},
+ disasm: "vzip.h.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVZip<int16_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vzip_h_vx_m{: vs1, vs2 : vd},
+ disasm: "vzip.h.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVZip<int16_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ vzip_w_vx{: vs1, vs2 : vd},
+ disasm: "vzip.w.vx", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVZip<int32_t>, /*scalar*/ true, /*strip_mine*/ false)";
+ vzip_w_vx_m{: vs1, vs2 : vd},
+ disasm: "vzip.w.vx.m", "%vd, %vs1, %vs2",
+ semfunc: "absl::bind_front(&KelvinVZip<int32_t>, /*scalar*/ true, /*strip_mine*/ true)";
+ }
+}