blob: 94778068d64a462939a58a2555028709e551bc7b [file] [log] [blame]
// 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)";
}
}