#pragma once
#include <cstdint>
#include <cstring>
#include <type_traits>
#include "Common/CodeBlock.h"
#include "Common/Common.h"
namespace LoongArch64Gen {
enum LoongArch64Reg {
R0 = 0, R1, R2, R3, R4, R5, R6, R7,
R8, R9, R10, R11, R12, R13, R14, R15,
R16, R17, R18, R19, R20, R21, R22, R23,
R24, R25, R26, R27, R28, R29, R30, R31,
R_ZERO = 0,
R_RA = 1,
R_SP = 3,
F0 = 0x20, F1, F2, F3, F4, F5, F6, F7,
F8, F9, F10, F11, F12, F13, F14, F15,
F16, F17, F18, F19, F20, F21, F22, F23,
F24, F25, F26, F27, F28, F29, F30, F31,
V0 = 0x40, V1, V2, V3, V4, V5, V6, V7,
V8, V9, V10, V11, V12, V13, V14, V15,
V16, V17, V18, V19, V20, V21, V22, V23,
V24, V25, V26, V27, V28, V29, V30, V31,
X0 = 0x60, X1, X2, X3, X4, X5, X6, X7,
X8, X9, X10, X11, X12, X13, X14, X15,
X16, X17, X18, X19, X20, X21, X22, X23,
X24, X25, X26, X27, X28, X29, X30, X31,
INVALID_REG = 0xFFFFFFFF,
};
enum LoongArch64CFR {
FCC0 = 0, FCC1, FCC2, FCC3, FCC4, FCC5, FCC6, FCC7,
};
enum LoongArch64FCSR {
FCSR0 = 0, FCSR1, FCSR2, FCSR3,
};
enum class FixupBranchType {
B,
J,
BZ,
};
enum class LoongArch64Fcond {
CAF = 0x0,
CUN = 0x8,
CEQ = 0x4,
CUEQ = 0xC,
CLT = 0x2,
CULT = 0xA,
CLE = 0x6,
CULE = 0xE,
CNE = 0x10,
COR = 0x14,
CUNE = 0x18,
SAF = 0x1,
SUN = 0x9,
SEQ = 0x5,
SUEQ = 0xD,
SLT = 0x3,
SULT = 0xB,
SLE = 0x7,
SULE = 0xF,
SNE = 0x11,
SOR = 0x15,
SUNE = 0x19,
};
static inline LoongArch64Reg DecodeReg(LoongArch64Reg reg) { return (LoongArch64Reg)(reg & 0x1F); }
static inline bool IsGPR(LoongArch64Reg reg) { return (reg & ~0x1F) == 0; }
static inline bool IsFPR(LoongArch64Reg reg) { return (reg & ~0x1F) == 0x20; }
static inline bool IsVPR(LoongArch64Reg reg) { return (reg & ~0x1F) == 0x40; }
static inline bool IsXPR(LoongArch64Reg reg) { return (reg & ~0x1F) == 0x60; }
static inline bool IsCFR(LoongArch64CFR cfr) { return (cfr < 8); }
static inline bool IsFCSR(LoongArch64FCSR fcsr) { return (fcsr < 4); }
inline LoongArch64Reg EncodeRegToV(LoongArch64Reg reg) { return (LoongArch64Reg)(DecodeReg(reg) + V0); }
struct FixupBranch {
FixupBranch() {}
FixupBranch(const u8 *p, FixupBranchType t) : ptr(p), type(t) {}
FixupBranch(FixupBranch &&other);
FixupBranch(const FixupBranch &) = delete;
~FixupBranch();
FixupBranch &operator =(FixupBranch &&other);
FixupBranch &operator =(const FixupBranch &other) = delete;
const u8 *ptr = nullptr;
FixupBranchType type = FixupBranchType::B;
};
class LoongArch64Emitter {
public:
LoongArch64Emitter() {}
LoongArch64Emitter(const u8 *codePtr, u8 *writablePtr);
virtual ~LoongArch64Emitter() {}
void SetCodePointer(const u8 *ptr, u8 *writePtr);
const u8 *GetCodePointer() const;
u8 *GetWritableCodePtr();
void ReserveCodeSpace(u32 bytes);
const u8 *AlignCode16();
const u8 *AlignCodePage();
void FlushIcache();
void FlushIcacheSection(const u8 *start, const u8 *end);
void SetJumpTarget(FixupBranch &branch);
bool BranchInRange(const void *func) const;
bool JumpInRange(const void *func) const;
bool BranchZeroInRange(const void *func) const;
void QuickJump(LoongArch64Reg scratchreg, LoongArch64Reg rd, const u8 *dst);
void QuickJ(LoongArch64Reg scratchreg, const u8 *dst) {
QuickJump(scratchreg, R_ZERO, dst);
}
void QuickCallFunction(const u8 *func, LoongArch64Reg scratchreg = R_RA) {
QuickJump(scratchreg, R_RA, func);
}
template <typename T>
void QuickCallFunction(T *func, LoongArch64Reg scratchreg = R_RA) {
static_assert(std::is_function<T>::value, "QuickCallFunction without function");
QuickCallFunction((const u8 *)func, scratchreg);
}
void ADD_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void ADD_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void SUB_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void SUB_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void ADDI_W(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12);
void ADDI_D(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12);
void ADDU16I_D(LoongArch64Reg rd, LoongArch64Reg rj, s16 si16);
void ALSL_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk, u8 sa2);
void ALSL_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk, u8 sa2);
void ALSL_WU(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk, u8 sa2);
void LU12I_W(LoongArch64Reg rd, s32 si20);
void LU32I_D(LoongArch64Reg rd, s32 si20);
void LU52I_D(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12);
void SLT(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void SLTU(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void SLTI(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12);
void SLTUI(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12);
void PCADDI(LoongArch64Reg rd, s32 si20);
void PCADDU12I(LoongArch64Reg rd, s32 si20);
void PCADDU18I(LoongArch64Reg rd, s32 si20);
void PCALAU12I(LoongArch64Reg rd, s32 si20);
void AND(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void OR(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void NOR(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void XOR(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void ANDN(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void ORN(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void ANDI(LoongArch64Reg rd, LoongArch64Reg rj, u16 ui12);
void ORI(LoongArch64Reg rd, LoongArch64Reg rj, u16 ui12);
void XORI(LoongArch64Reg rd, LoongArch64Reg rj, u16 ui12);
void NOP() {
ANDI(R_ZERO, R_ZERO, 0);
}
void MOVE(LoongArch64Reg rd, LoongArch64Reg rj) {
OR(rd, rj, R_ZERO);
}
template <typename T>
void LI(LoongArch64Reg rd, const T &v) {
_assert_msg_(rd != R_ZERO, "LI to X0");
_assert_msg_(rd < F0, "LI to non-GPR");
uint64_t value = AsImmediate<T, std::is_signed<T>::value>(v);
SetRegToImmediate(rd, value);
}
void MUL_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void MULH_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void MULH_WU(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void MUL_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void MULH_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void MULH_DU(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void MULW_D_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void MULW_D_WU(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void DIV_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void MOD_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void DIV_WU(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void MOD_WU(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void DIV_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void MOD_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void DIV_DU(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void MOD_DU(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void SLL_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void SRL_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void SRA_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void ROTR_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void SLLI_W(LoongArch64Reg rd, LoongArch64Reg rj, u8 ui5);
void SRLI_W(LoongArch64Reg rd, LoongArch64Reg rj, u8 ui5);
void SRAI_W(LoongArch64Reg rd, LoongArch64Reg rj, u8 ui5);
void ROTRI_W(LoongArch64Reg rd, LoongArch64Reg rj, u8 ui5);
void SLL_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void SRL_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void SRA_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void ROTR_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void SLLI_D(LoongArch64Reg rd, LoongArch64Reg rj, u8 ui6);
void SRLI_D(LoongArch64Reg rd, LoongArch64Reg rj, u8 ui6);
void SRAI_D(LoongArch64Reg rd, LoongArch64Reg rj, u8 ui6);
void ROTRI_D(LoongArch64Reg rd, LoongArch64Reg rj, u8 ui6);
void EXT_W_B(LoongArch64Reg rd, LoongArch64Reg rj);
void EXT_W_H(LoongArch64Reg rd, LoongArch64Reg rj);
void CLO_W(LoongArch64Reg rd, LoongArch64Reg rj);
void CLO_D(LoongArch64Reg rd, LoongArch64Reg rj);
void CLZ_W(LoongArch64Reg rd, LoongArch64Reg rj);
void CLZ_D(LoongArch64Reg rd, LoongArch64Reg rj);
void CTO_W(LoongArch64Reg rd, LoongArch64Reg rj);
void CTO_D(LoongArch64Reg rd, LoongArch64Reg rj);
void CTZ_W(LoongArch64Reg rd, LoongArch64Reg rj);
void CTZ_D(LoongArch64Reg rd, LoongArch64Reg rj);
void BYTEPICK_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk, u8 sa2);
void BYTEPICK_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk, u8 sa3);
void REVB_2H(LoongArch64Reg rd, LoongArch64Reg rj);
void REVB_4H(LoongArch64Reg rd, LoongArch64Reg rj);
void REVB_2W(LoongArch64Reg rd, LoongArch64Reg rj);
void REVB_D(LoongArch64Reg rd, LoongArch64Reg rj);
void BITREV_4B(LoongArch64Reg rd, LoongArch64Reg rj);
void BITREV_8B(LoongArch64Reg rd, LoongArch64Reg rj);
void BITREV_W(LoongArch64Reg rd, LoongArch64Reg rj);
void BITREV_D(LoongArch64Reg rd, LoongArch64Reg rj);
void BSTRINS_W(LoongArch64Reg rd, LoongArch64Reg rj, u8 msbw, u8 lsbw);
void BSTRINS_D(LoongArch64Reg RD, LoongArch64Reg RJ, u8 msbd, u8 lsbd);
void BSTRPICK_W(LoongArch64Reg RD, LoongArch64Reg RJ, u8 msbd, u8 lsbd);
void BSTRPICK_D(LoongArch64Reg RD, LoongArch64Reg RJ, u8 msbd, u8 lsbd);
void MASKEQZ(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void MASKNEZ(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void BEQ(LoongArch64Reg rj, LoongArch64Reg rd, const void *dst);
void BNE(LoongArch64Reg rj, LoongArch64Reg rd, const void *dst);
void BLT(LoongArch64Reg rj, LoongArch64Reg rd, const void *dst);
void BGE(LoongArch64Reg rj, LoongArch64Reg rd, const void *dst);
void BLTU(LoongArch64Reg rj, LoongArch64Reg rd, const void *dst);
void BGEU(LoongArch64Reg rj, LoongArch64Reg rd, const void *dst);
FixupBranch BEQ(LoongArch64Reg rj, LoongArch64Reg rd);
FixupBranch BNE(LoongArch64Reg rj, LoongArch64Reg rd);
FixupBranch BLT(LoongArch64Reg rj, LoongArch64Reg rd);
FixupBranch BGE(LoongArch64Reg rj, LoongArch64Reg rd);
FixupBranch BLTU(LoongArch64Reg rj, LoongArch64Reg rd);
FixupBranch BGEU(LoongArch64Reg rj, LoongArch64Reg rd);
void BEQZ(LoongArch64Reg rj, const void *dst);
void BNEZ(LoongArch64Reg rj, const void *dst);
FixupBranch BEQZ(LoongArch64Reg rj);
FixupBranch BNEZ(LoongArch64Reg rj);
void B(const void *dst);
void BL(const void *dst);
FixupBranch B();
FixupBranch BL();
void JIRL(LoongArch64Reg rd, LoongArch64Reg rj, s32 offs16);
void JR(LoongArch64Reg rj) {
JIRL(R_ZERO, rj, 0);
}
void RET() {
JIRL(R_ZERO, R_RA, 0);
}
void LD_B(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12);
void LD_H(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12);
void LD_W(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12);
void LD_D(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12);
void LD_BU(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12);
void LD_HU(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12);
void LD_WU(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12);
void ST_B(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12);
void ST_H(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12);
void ST_W(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12);
void ST_D(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12);
void LDX_B(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void LDX_H(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void LDX_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void LDX_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void LDX_BU(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void LDX_HU(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void LDX_WU(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void STX_B(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void STX_H(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void STX_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void STX_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void LDPTR_W(LoongArch64Reg rd, LoongArch64Reg rj, s16 si14);
void LDPTR_D(LoongArch64Reg rd, LoongArch64Reg rj, s16 si14);
void STPTR_W(LoongArch64Reg rd, LoongArch64Reg rj, s16 si14);
void STPTR_D(LoongArch64Reg rd, LoongArch64Reg rj, s16 si14);
void PRELD(u32 hint, LoongArch64Reg rj, s16 si12);
void PRELDX(u32 hint, LoongArch64Reg rj, LoongArch64Reg rk);
void LDGT_B(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void LDGT_H(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void LDGT_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void LDGT_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void LDLE_B(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void LDLE_H(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void LDLE_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void LDLE_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void STGT_B(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void STGT_H(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void STGT_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void STGT_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void STLE_B(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void STLE_H(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void STLE_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void STLE_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk);
void AMSWAP_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMSWAP_DB_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMSWAP_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMSWAP_DB_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMADD_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMADD_DB_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMADD_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMADD_DB_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMAND_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMAND_DB_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMAND_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMAND_DB_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMOR_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMOR_DB_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMOR_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMOR_DB_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMXOR_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMXOR_DB_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMXOR_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMXOR_DB_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMMAX_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMMAX_DB_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMMAX_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMMAX_DB_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMMIN_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMMIN_DB_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMMIN_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMMIN_DB_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMMAX_WU(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMMAX_DB_WU(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMMAX_DU(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMMAX_DB_DU(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMMIN_WU(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMMIN_DB_WU(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMMIN_DU(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMMIN_DB_DU(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMSWAP_B(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMSWAP_DB_B(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMSWAP_H(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMSWAP_DB_H(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMADD_B(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMADD_DB_B(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMADD_H(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMADD_DB_H(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMCAS_B(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMCAS_DB_B(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMCAS_H(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMCAS_DB_H(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMCAS_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMCAS_DB_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMCAS_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void AMCAS_DB_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void CRC_W_B_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void CRC_W_H_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void CRC_W_W_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void CRC_W_D_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void CRCC_W_B_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void CRCC_W_H_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void CRCC_W_W_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void CRCC_W_D_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj);
void SYSCALL(u16 code);
void BREAK(u16 code);
void ASRTLE_D(LoongArch64Reg rj, LoongArch64Reg rk);
void ASRTGT_D(LoongArch64Reg rj, LoongArch64Reg rk);
void RDTIMEL_W(LoongArch64Reg rd, LoongArch64Reg rj);
void RDTIMEH_W(LoongArch64Reg rd, LoongArch64Reg rj);
void RDTIME_D(LoongArch64Reg rd, LoongArch64Reg rj);
void CPUCFG(LoongArch64Reg rd, LoongArch64Reg rj);
void FADD_S(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk);
void FADD_D(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk);
void FSUB_S(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk);
void FSUB_D(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk);
void FMUL_S(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk);
void FMUL_D(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk);
void FDIV_S(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk);
void FDIV_D(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk);
void FMADD_S(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk, LoongArch64Reg fa);
void FMADD_D(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk, LoongArch64Reg fa);
void FMSUB_S(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk, LoongArch64Reg fa);
void FMSUB_D(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk, LoongArch64Reg fa);
void FNMADD_S(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk, LoongArch64Reg fa);
void FNMADD_D(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk, LoongArch64Reg fa);
void FNMSUB_S(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk, LoongArch64Reg fa);
void FNMSUB_D(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk, LoongArch64Reg fa);
void FMAX_S(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk);
void FMAX_D(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk);
void FMIN_S(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk);
void FMIN_D(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk);
void FMAXA_S(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk);
void FMAXA_D(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk);
void FMINA_S(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk);
void FMINA_D(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk);
void FABS_S(LoongArch64Reg fd, LoongArch64Reg fj);
void FABS_D(LoongArch64Reg fd, LoongArch64Reg fj);
void FNEG_S(LoongArch64Reg fd, LoongArch64Reg fj);
void FNEG_D(LoongArch64Reg fd, LoongArch64Reg fj);
void FSQRT_S(LoongArch64Reg fd, LoongArch64Reg fj);
void FSQRT_D(LoongArch64Reg fd, LoongArch64Reg fj);
void FRECIP_S(LoongArch64Reg fd, LoongArch64Reg fj);
void FRECIP_D(LoongArch64Reg fd, LoongArch64Reg fj);
void FRSQRT_S(LoongArch64Reg fd, LoongArch64Reg fj);
void FRSQRT_D(LoongArch64Reg fd, LoongArch64Reg fj);
void FSCALEB_S(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk);
void FSCALEB_D(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk);
void FLOGB_S(LoongArch64Reg fd, LoongArch64Reg fj);
void FLOGB_D(LoongArch64Reg fd, LoongArch64Reg fj);
void FCOPYSIGN_S(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk);
void FCOPYSIGN_D(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk);
void FCLASS_S(LoongArch64Reg fd, LoongArch64Reg fj);
void FCLASS_D(LoongArch64Reg fd, LoongArch64Reg fj);
void FRECIPE_S(LoongArch64Reg fd, LoongArch64Reg fj);
void FRECIPE_D(LoongArch64Reg fd, LoongArch64Reg fj);
void FRSQRTE_S(LoongArch64Reg fd, LoongArch64Reg fj);
void FRSQRTE_D(LoongArch64Reg fd, LoongArch64Reg fj);
void FCMP_COND_S(LoongArch64CFR cd, LoongArch64Reg fj, LoongArch64Reg fk, LoongArch64Fcond cond);
void FCMP_COND_D(LoongArch64CFR cd, LoongArch64Reg fj, LoongArch64Reg fk, LoongArch64Fcond cond);
void FCVT_S_D(LoongArch64Reg fd, LoongArch64Reg fj);
void FCVT_D_S(LoongArch64Reg fd, LoongArch64Reg fj);
void FFINT_S_W(LoongArch64Reg fd, LoongArch64Reg fj);
void FFINT_S_L(LoongArch64Reg fd, LoongArch64Reg fj);
void FFINT_D_W(LoongArch64Reg fd, LoongArch64Reg fj);
void FFINT_D_L(LoongArch64Reg fd, LoongArch64Reg fj);
void FTINT_W_S(LoongArch64Reg fd, LoongArch64Reg fj);
void FTINT_W_D(LoongArch64Reg fd, LoongArch64Reg fj);
void FTINT_L_S(LoongArch64Reg fd, LoongArch64Reg fj);
void FTINT_L_D(LoongArch64Reg fd, LoongArch64Reg fj);
void FTINTRM_W_S(LoongArch64Reg fd, LoongArch64Reg fj);
void FTINTRM_W_D(LoongArch64Reg fd, LoongArch64Reg fj);
void FTINTRM_L_S(LoongArch64Reg fd, LoongArch64Reg fj);
void FTINTRM_L_D(LoongArch64Reg fd, LoongArch64Reg fj);
void FTINTRP_W_S(LoongArch64Reg fd, LoongArch64Reg fj);
void FTINTRP_W_D(LoongArch64Reg fd, LoongArch64Reg fj);
void FTINTRP_L_S(LoongArch64Reg fd, LoongArch64Reg fj);
void FTINTRP_L_D(LoongArch64Reg fd, LoongArch64Reg fj);
void FTINTRZ_W_S(LoongArch64Reg fd, LoongArch64Reg fj);
void FTINTRZ_W_D(LoongArch64Reg fd, LoongArch64Reg fj);
void FTINTRZ_L_S(LoongArch64Reg fd, LoongArch64Reg fj);
void FTINTRZ_L_D(LoongArch64Reg fd, LoongArch64Reg fj);
void FTINTRNE_W_S(LoongArch64Reg fd, LoongArch64Reg fj);
void FTINTRNE_W_D(LoongArch64Reg fd, LoongArch64Reg fj);
void FTINTRNE_L_S(LoongArch64Reg fd, LoongArch64Reg fj);
void FTINTRNE_L_D(LoongArch64Reg fd, LoongArch64Reg fj);
void FRINT_S(LoongArch64Reg fd, LoongArch64Reg fj);
void FRINT_D(LoongArch64Reg fd, LoongArch64Reg fj);
void FMOV_S(LoongArch64Reg fd, LoongArch64Reg fj);
void FMOV_D(LoongArch64Reg fd, LoongArch64Reg fj);
void FSEL(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk, LoongArch64CFR ca);
void MOVGR2FR_W(LoongArch64Reg fd, LoongArch64Reg rj);
void MOVGR2FR_D(LoongArch64Reg fd, LoongArch64Reg rj);
void MOVGR2FRH_W(LoongArch64Reg fd, LoongArch64Reg rj);
void MOVFR2GR_S(LoongArch64Reg fd, LoongArch64Reg rj);
void MOVFR2GR_D(LoongArch64Reg fd, LoongArch64Reg rj);
void MOVFRH2GR_S(LoongArch64Reg fd, LoongArch64Reg rj);
void MOVGR2FCSR(LoongArch64FCSR fcsr, LoongArch64Reg rj);
void MOVFCSR2GR(LoongArch64Reg rd, LoongArch64FCSR fcsr);
void MOVFR2CF(LoongArch64CFR cd, LoongArch64Reg fj);
void MOVCF2FR(LoongArch64Reg fd, LoongArch64CFR cj);
void MOVGR2CF(LoongArch64CFR cd, LoongArch64Reg rj);
void MOVCF2GR(LoongArch64Reg rd, LoongArch64CFR cj);
void BCEQZ(LoongArch64CFR cj, s32 offs21);
void BCNEZ(LoongArch64CFR cj, s32 offs21);
void FLD_S(LoongArch64Reg fd, LoongArch64Reg rj, s16 si12);
void FLD_D(LoongArch64Reg fd, LoongArch64Reg rj, s16 si12);
void FST_S(LoongArch64Reg fd, LoongArch64Reg rj, s16 si12);
void FST_D(LoongArch64Reg fd, LoongArch64Reg rj, s16 si12);
void FLDX_S(LoongArch64Reg fd, LoongArch64Reg rj, LoongArch64Reg rk);
void FLDX_D(LoongArch64Reg fd, LoongArch64Reg rj, LoongArch64Reg rk);
void FSTX_S(LoongArch64Reg fd, LoongArch64Reg rj, LoongArch64Reg rk);
void FSTX_D(LoongArch64Reg fd, LoongArch64Reg rj, LoongArch64Reg rk);
void FLDGT_S(LoongArch64Reg fd, LoongArch64Reg rj, LoongArch64Reg rk);
void FLDGT_D(LoongArch64Reg fd, LoongArch64Reg rj, LoongArch64Reg rk);
void FLDLE_S(LoongArch64Reg fd, LoongArch64Reg rj, LoongArch64Reg rk);
void FLDLE_D(LoongArch64Reg fd, LoongArch64Reg rj, LoongArch64Reg rk);
void FSTGT_S(LoongArch64Reg fd, LoongArch64Reg rj, LoongArch64Reg rk);
void FSTGT_D(LoongArch64Reg fd, LoongArch64Reg rj, LoongArch64Reg rk);
void FSTLE_S(LoongArch64Reg fd, LoongArch64Reg rj, LoongArch64Reg rk);
void FSTLE_D(LoongArch64Reg fd, LoongArch64Reg rj, LoongArch64Reg rk);
void QuickFLI(int bits, LoongArch64Reg fd, double v, LoongArch64Reg scratchReg);
void QuickFLI(int bits, LoongArch64Reg fd, uint32_t pattern, LoongArch64Reg scratchReg);
void QuickFLI(int bits, LoongArch64Reg fd, float v, LoongArch64Reg scratchReg);
void VFMADD_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk, LoongArch64Reg va);
void VFMADD_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk, LoongArch64Reg va);
void VFMSUB_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk, LoongArch64Reg va);
void VFMSUB_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk, LoongArch64Reg va);
void VFNMADD_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk, LoongArch64Reg va);
void VFNMADD_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk, LoongArch64Reg va);
void VFNMSUB_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk, LoongArch64Reg va);
void VFNMSUB_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk, LoongArch64Reg va);
void VFCMP_CAF_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_SAF_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_CLT_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_SLT_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_CEQ_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_SEQ_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_CLE_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_SLE_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_CUN_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_SUN_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_CULT_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_SULT_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_CUEQ_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_SUEQ_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_CULE_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_SULE_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_CNE_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_SNE_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_COR_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_SOR_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_CUNE_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_SUNE_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_CAF_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_SAF_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_CLT_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_SLT_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_CEQ_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_SEQ_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_CLE_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_SLE_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_CUN_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_SUN_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_CULT_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_SULT_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_CUEQ_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_SUEQ_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_CULE_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_SULE_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_CNE_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_SNE_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_COR_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_SOR_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_CUNE_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCMP_SUNE_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VBITSEL_V(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk, LoongArch64Reg va);
void VSHUF_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk, LoongArch64Reg va);
void VLD(LoongArch64Reg vd, LoongArch64Reg rj, s16 si12);
void VST(LoongArch64Reg vd, LoongArch64Reg rj, s16 si12);
void VLDREPL_D(LoongArch64Reg vd, LoongArch64Reg rj, s16 si9);
void VLDREPL_W(LoongArch64Reg vd, LoongArch64Reg rj, s16 si10);
void VLDREPL_H(LoongArch64Reg vd, LoongArch64Reg rj, s16 si11);
void VLDREPL_B(LoongArch64Reg vd, LoongArch64Reg rj, s16 si12);
void VSTELM_D(LoongArch64Reg vd, LoongArch64Reg rj, s16 si8, u8 idx1);
void VSTELM_W(LoongArch64Reg vd, LoongArch64Reg rj, s16 si8, u8 idx2);
void VSTELM_H(LoongArch64Reg vd, LoongArch64Reg rj, s16 si8, u8 idx3);
void VSTELM_B(LoongArch64Reg vd, LoongArch64Reg rj, s16 si8, u8 idx4);
void VLDX(LoongArch64Reg vd, LoongArch64Reg rj, LoongArch64Reg rk);
void VSTX(LoongArch64Reg vd, LoongArch64Reg rj, LoongArch64Reg rk);
void VSEQ_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSEQ_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSEQ_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSEQ_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSLE_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSLE_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSLE_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSLE_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSLE_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSLE_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSLE_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSLE_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSLT_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSLT_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSLT_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSLT_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSLT_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSLT_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSLT_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSLT_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADD_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADD_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADD_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADD_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSUB_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSUB_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSUB_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSUB_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADDWEV_H_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADDWEV_W_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADDWEV_D_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADDWEV_Q_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSUBWEV_H_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSUBWEV_W_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSUBWEV_D_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSUBWEV_Q_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADDWOD_H_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADDWOD_W_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADDWOD_D_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADDWOD_Q_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSUBWOD_H_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSUBWOD_W_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSUBWOD_D_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSUBWOD_Q_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADDWEV_H_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADDWEV_W_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADDWEV_D_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADDWEV_Q_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSUBWEV_H_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSUBWEV_W_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSUBWEV_D_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSUBWEV_Q_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADDWOD_H_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADDWOD_W_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADDWOD_D_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADDWOD_Q_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSUBWOD_H_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSUBWOD_W_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSUBWOD_D_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSUBWOD_Q_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADDWEV_H_BU_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADDWEV_W_HU_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADDWEV_D_WU_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADDWEV_Q_DU_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADDWOD_H_BU_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADDWOD_W_HU_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADDWOD_D_WU_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADDWOD_Q_DU_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSADD_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSADD_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSADD_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSADD_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSUB_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSUB_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSUB_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSUB_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSADD_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSADD_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSADD_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSADD_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSUB_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSUB_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSUB_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSUB_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VHADDW_H_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VHADDW_W_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VHADDW_D_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VHADDW_Q_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VHSUBW_H_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VHSUBW_W_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VHSUBW_D_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VHSUBW_Q_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VHADDW_HU_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VHADDW_WU_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VHADDW_DU_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VHADDW_QU_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VHSUBW_HU_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VHSUBW_WU_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VHSUBW_DU_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VHSUBW_QU_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADDA_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADDA_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADDA_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADDA_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VABSD_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VABSD_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VABSD_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VABSD_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VABSD_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VABSD_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VABSD_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VABSD_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VAVG_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VAVG_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VAVG_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VAVG_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VAVG_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VAVG_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VAVG_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VAVG_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VAVGR_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VAVGR_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VAVGR_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VAVGR_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VAVGR_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VAVGR_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VAVGR_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VAVGR_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMAX_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMAX_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMAX_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMAX_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMIN_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMIN_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMIN_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMIN_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMAX_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMAX_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMAX_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMAX_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMIN_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMIN_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMIN_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMIN_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMUL_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMUL_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMUL_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMUL_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMUH_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMUH_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMUH_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMUH_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMUH_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMUH_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMUH_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMUH_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMULWEV_H_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMULWEV_W_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMULWEV_D_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMULWEV_Q_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMULWOD_H_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMULWOD_W_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMULWOD_D_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMULWOD_Q_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMULWEV_H_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMULWEV_W_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMULWEV_D_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMULWEV_Q_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMULWOD_H_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMULWOD_W_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMULWOD_D_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMULWOD_Q_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMULWEV_H_BU_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMULWEV_W_HU_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMULWEV_D_WU_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMULWEV_Q_DU_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMULWOD_H_BU_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMULWOD_W_HU_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMULWOD_D_WU_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMULWOD_Q_DU_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMADD_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMADD_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMADD_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMADD_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMSUB_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMSUB_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMSUB_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMSUB_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMADDWEV_H_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMADDWEV_W_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMADDWEV_D_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMADDWEV_Q_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMADDWOD_H_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMADDWOD_W_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMADDWOD_D_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMADDWOD_Q_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMADDWEV_H_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMADDWEV_W_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMADDWEV_D_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMADDWEV_Q_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMADDWOD_H_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMADDWOD_W_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMADDWOD_D_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMADDWOD_Q_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMADDWEV_H_BU_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMADDWEV_W_HU_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMADDWEV_D_WU_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMADDWEV_Q_DU_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMADDWOD_H_BU_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMADDWOD_W_HU_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMADDWOD_D_WU_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMADDWOD_Q_DU_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VDIV_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VDIV_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VDIV_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VDIV_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMOD_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMOD_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMOD_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMOD_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VDIV_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VDIV_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VDIV_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VDIV_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMOD_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMOD_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMOD_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VMOD_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSLL_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSLL_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSLL_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSLL_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSRL_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSRL_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSRL_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSRL_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSRA_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSRA_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSRA_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSRA_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VROTR_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VROTR_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VROTR_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VROTR_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSRLR_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSRLR_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSRLR_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSRLR_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSRAR_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSRAR_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSRAR_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSRAR_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSRLN_B_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSRLN_H_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSRLN_W_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSRAN_B_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSRAN_H_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSRAN_W_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSRLRN_B_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSRLRN_H_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSRLRN_W_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSRARN_B_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSRARN_H_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSRARN_W_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSRLN_B_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSRLN_H_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSRLN_W_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSRAN_B_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSRAN_H_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSRAN_W_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSRLRN_B_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSRLRN_H_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSRLRN_W_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSRARN_B_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSRARN_H_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSRARN_W_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSRLN_BU_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSRLN_HU_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSRLN_WU_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSRAN_BU_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSRAN_HU_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSRAN_WU_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSRLRN_BU_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSRLRN_HU_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSRLRN_WU_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSRARN_BU_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSRARN_HU_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSSRARN_WU_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VBITCLR_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VBITCLR_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VBITCLR_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VBITCLR_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VBITSET_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VBITSET_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VBITSET_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VBITSET_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VBITREV_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VBITREV_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VBITREV_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VBITREV_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VPACKEV_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VPACKEV_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VPACKEV_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VPACKEV_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VPACKOD_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VPACKOD_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VPACKOD_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VPACKOD_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VILVL_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VILVL_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VILVL_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VILVL_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VILVH_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VILVH_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VILVH_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VILVH_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VPICKEV_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VPICKEV_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VPICKEV_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VPICKEV_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VPICKOD_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VPICKOD_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VPICKOD_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VPICKOD_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VREPLVE_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg rk);
void VREPLVE_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg rk);
void VREPLVE_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg rk);
void VREPLVE_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg rk);
void VAND_V(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VOR_V(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VXOR_V(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VNOR_V(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VANDN_V(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VORN_V(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFRSTP_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFRSTP_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VADD_Q(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSUB_Q(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSIGNCOV_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSIGNCOV_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSIGNCOV_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSIGNCOV_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFADD_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFADD_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFSUB_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFSUB_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFMUL_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFMUL_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFDIV_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFDIV_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFMAX_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFMAX_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFMIN_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFMIN_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFMAXA_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFMAXA_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFMINA_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFMINA_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCVT_H_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFCVT_S_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFFINT_S_L(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFTINT_W_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFTINTRM_W_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFTINTRP_W_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFTINTRZ_W_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VFTINTRNE_W_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSHUF_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSHUF_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSHUF_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk);
void VSEQI_B(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5);
void VSEQI_H(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5);
void VSEQI_W(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5);
void VSEQI_D(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5);
void VSLEI_B(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5);
void VSLEI_H(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5);
void VSLEI_W(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5);
void VSLEI_D(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5);
void VSLEI_BU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VSLEI_HU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VSLEI_WU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VSLEI_DU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VSLTI_B(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5);
void VSLTI_H(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5);
void VSLTI_W(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5);
void VSLTI_D(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5);
void VSLTI_BU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VSLTI_HU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VSLTI_WU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VSLTI_DU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VADDI_BU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VADDI_HU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VADDI_WU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VADDI_DU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VSUBI_BU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VSUBI_HU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VSUBI_WU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VSUBI_DU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VBSLL_V(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VBSRL_V(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VMAXI_B(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5);
void VMAXI_H(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5);
void VMAXI_W(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5);
void VMAXI_D(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5);
void VMINI_B(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5);
void VMINI_H(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5);
void VMINI_W(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5);
void VMINI_D(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5);
void VMAXI_BU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VMAXI_HU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VMAXI_WU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VMAXI_DU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VMINI_BU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VMINI_HU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VMINI_WU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VMINI_DU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VFRSTPI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VFRSTPI_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VCLO_B(LoongArch64Reg vd, LoongArch64Reg vj);
void VCLO_H(LoongArch64Reg vd, LoongArch64Reg vj);
void VCLO_W(LoongArch64Reg vd, LoongArch64Reg vj);
void VCLO_D(LoongArch64Reg vd, LoongArch64Reg vj);
void VCLZ_B(LoongArch64Reg vd, LoongArch64Reg vj);
void VCLZ_H(LoongArch64Reg vd, LoongArch64Reg vj);
void VCLZ_W(LoongArch64Reg vd, LoongArch64Reg vj);
void VCLZ_D(LoongArch64Reg vd, LoongArch64Reg vj);
void VPCNT_B(LoongArch64Reg vd, LoongArch64Reg vj);
void VPCNT_H(LoongArch64Reg vd, LoongArch64Reg vj);
void VPCNT_W(LoongArch64Reg vd, LoongArch64Reg vj);
void VPCNT_D(LoongArch64Reg vd, LoongArch64Reg vj);
void VNEG_B(LoongArch64Reg vd, LoongArch64Reg vj);
void VNEG_H(LoongArch64Reg vd, LoongArch64Reg vj);
void VNEG_W(LoongArch64Reg vd, LoongArch64Reg vj);
void VNEG_D(LoongArch64Reg vd, LoongArch64Reg vj);
void VMSKLTZ_B(LoongArch64Reg vd, LoongArch64Reg vj);
void VMSKLTZ_H(LoongArch64Reg vd, LoongArch64Reg vj);
void VMSKLTZ_W(LoongArch64Reg vd, LoongArch64Reg vj);
void VMSKLTZ_D(LoongArch64Reg vd, LoongArch64Reg vj);
void VMSKGEZ_B(LoongArch64Reg vd, LoongArch64Reg vj);
void VMSKNZ_B(LoongArch64Reg vd, LoongArch64Reg vj);
void VSETEQZ_V(LoongArch64CFR cd, LoongArch64Reg vj);
void VSETNEZ_V(LoongArch64CFR cd, LoongArch64Reg vj);
void VSETANYEQZ_B(LoongArch64CFR cd, LoongArch64Reg vj);
void VSETANYEQZ_H(LoongArch64CFR cd, LoongArch64Reg vj);
void VSETANYEQZ_W(LoongArch64CFR cd, LoongArch64Reg vj);
void VSETANYEQZ_D(LoongArch64CFR cd, LoongArch64Reg vj);
void VSETALLNEZ_B(LoongArch64CFR cd, LoongArch64Reg vj);
void VSETALLNEZ_H(LoongArch64CFR cd, LoongArch64Reg vj);
void VSETALLNEZ_W(LoongArch64CFR cd, LoongArch64Reg vj);
void VSETALLNEZ_D(LoongArch64CFR cd, LoongArch64Reg vj);
void VFLOGB_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VFLOGB_D(LoongArch64Reg vd, LoongArch64Reg vj);
void VFCLASS_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VFCLASS_D(LoongArch64Reg vd, LoongArch64Reg vj);
void VFSQRT_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VFSQRT_D(LoongArch64Reg vd, LoongArch64Reg vj);
void VFRECIP_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VFRECIP_D(LoongArch64Reg vd, LoongArch64Reg vj);
void VFRSQRT_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VFRSQRT_D(LoongArch64Reg vd, LoongArch64Reg vj);
void VFRECIPE_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VFRECIPE_D(LoongArch64Reg vd, LoongArch64Reg vj);
void VFRSQRTE_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VFRSQRTE_D(LoongArch64Reg vd, LoongArch64Reg vj);
void VFRINT_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VFRINT_D(LoongArch64Reg vd, LoongArch64Reg vj);
void VFRINTRM_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VFRINTRM_D(LoongArch64Reg vd, LoongArch64Reg vj);
void VFRINTRP_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VFRINTRP_D(LoongArch64Reg vd, LoongArch64Reg vj);
void VFRINTRZ_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VFRINTRZ_D(LoongArch64Reg vd, LoongArch64Reg vj);
void VFRINTRNE_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VFRINTRNE_D(LoongArch64Reg vd, LoongArch64Reg vj);
void VFCVTL_S_H(LoongArch64Reg vd, LoongArch64Reg vj);
void VFCVTH_S_H(LoongArch64Reg vd, LoongArch64Reg vj);
void VFCVTL_D_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VFCVTH_D_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VFFINT_S_W(LoongArch64Reg vd, LoongArch64Reg vj);
void VFFINT_S_WU(LoongArch64Reg vd, LoongArch64Reg vj);
void VFFINT_D_L(LoongArch64Reg vd, LoongArch64Reg vj);
void VFFINT_D_LU(LoongArch64Reg vd, LoongArch64Reg vj);
void VFFINTL_D_W(LoongArch64Reg vd, LoongArch64Reg vj);
void VFFINTH_D_W(LoongArch64Reg vd, LoongArch64Reg vj);
void VFTINT_W_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VFTINT_L_D(LoongArch64Reg vd, LoongArch64Reg vj);
void VFTINTRM_W_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VFTINTRM_L_D(LoongArch64Reg vd, LoongArch64Reg vj);
void VFTINTRP_W_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VFTINTRP_L_D(LoongArch64Reg vd, LoongArch64Reg vj);
void VFTINTRZ_W_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VFTINTRZ_L_D(LoongArch64Reg vd, LoongArch64Reg vj);
void VFTINTRNE_W_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VFTINTRNE_L_D(LoongArch64Reg vd, LoongArch64Reg vj);
void VFTINT_WU_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VFTINT_LU_D(LoongArch64Reg vd, LoongArch64Reg vj);
void VFTINTRZ_WU_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VFTINTRZ_LU_D(LoongArch64Reg vd, LoongArch64Reg vj);
void VFTINTL_L_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VFTINTH_L_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VFTINTRML_L_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VFTINTRMH_L_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VFTINTRPL_L_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VFTINTRPH_L_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VFTINTRZL_L_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VFTINTRZH_L_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VFTINTRNEL_L_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VFTINTRNEH_L_S(LoongArch64Reg vd, LoongArch64Reg vj);
void VEXTH_H_B(LoongArch64Reg vd, LoongArch64Reg vj);
void VEXTH_W_H(LoongArch64Reg vd, LoongArch64Reg vj);
void VEXTH_D_W(LoongArch64Reg vd, LoongArch64Reg vj);
void VEXTH_Q_D(LoongArch64Reg vd, LoongArch64Reg vj);
void VEXTH_HU_BU(LoongArch64Reg vd, LoongArch64Reg vj);
void VEXTH_WU_HU(LoongArch64Reg vd, LoongArch64Reg vj);
void VEXTH_DU_WU(LoongArch64Reg vd, LoongArch64Reg vj);
void VEXTH_QU_DU(LoongArch64Reg vd, LoongArch64Reg vj);
void VREPLGR2VR_B(LoongArch64Reg vd, LoongArch64Reg rj);
void VREPLGR2VR_H(LoongArch64Reg vd, LoongArch64Reg rj);
void VREPLGR2VR_W(LoongArch64Reg vd, LoongArch64Reg rj);
void VREPLGR2VR_D(LoongArch64Reg vd, LoongArch64Reg rj);
void VROTRI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui3);
void VROTRI_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4);
void VROTRI_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VROTRI_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6);
void VSRLRI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui3);
void VSRLRI_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4);
void VSRLRI_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VSRLRI_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6);
void VSRARI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui3);
void VSRARI_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4);
void VSRARI_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VSRARI_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6);
void VINSGR2VR_B(LoongArch64Reg vd, LoongArch64Reg rj, u8 ui4);
void VINSGR2VR_H(LoongArch64Reg vd, LoongArch64Reg rj, u8 ui3);
void VINSGR2VR_W(LoongArch64Reg vd, LoongArch64Reg rj, u8 ui2);
void VINSGR2VR_D(LoongArch64Reg vd, LoongArch64Reg rj, u8 ui1);
void VPICKVE2GR_B(LoongArch64Reg rd, LoongArch64Reg vj, u8 ui4);
void VPICKVE2GR_H(LoongArch64Reg rd, LoongArch64Reg vj, u8 ui3);
void VPICKVE2GR_W(LoongArch64Reg rd, LoongArch64Reg vj, u8 ui2);
void VPICKVE2GR_D(LoongArch64Reg rd, LoongArch64Reg vj, u8 ui1);
void VPICKVE2GR_BU(LoongArch64Reg rd, LoongArch64Reg vj, u8 ui4);
void VPICKVE2GR_HU(LoongArch64Reg rd, LoongArch64Reg vj, u8 ui3);
void VPICKVE2GR_WU(LoongArch64Reg rd, LoongArch64Reg vj, u8 ui2);
void VPICKVE2GR_DU(LoongArch64Reg rd, LoongArch64Reg vj, u8 ui1);
void VREPLVEI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4);
void VREPLVEI_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui3);
void VREPLVEI_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui2);
void VREPLVEI_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui1);
void VSLLWIL_H_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui3);
void VSLLWIL_W_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4);
void VSLLWIL_D_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VEXTL_Q_D(LoongArch64Reg vd, LoongArch64Reg vj);
void VSLLWIL_HU_BU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui3);
void VSLLWIL_WU_HU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4);
void VSLLWIL_DU_WU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VEXTL_QU_DU(LoongArch64Reg vd, LoongArch64Reg vj);
void VBITCLRI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui3);
void VBITCLRI_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4);
void VBITCLRI_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VBITCLRI_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6);
void VBITSETI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui3);
void VBITSETI_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4);
void VBITSETI_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VBITSETI_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6);
void VBITREVI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui3);
void VBITREVI_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4);
void VBITREVI_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VBITREVI_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6);
void VSAT_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui3);
void VSAT_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4);
void VSAT_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VSAT_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6);
void VSAT_BU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui3);
void VSAT_HU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4);
void VSAT_WU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VSAT_DU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6);
void VSLLI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui3);
void VSLLI_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4);
void VSLLI_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VSLLI_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6);
void VSRLI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui3);
void VSRLI_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4);
void VSRLI_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VSRLI_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6);
void VSRAI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui3);
void VSRAI_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4);
void VSRAI_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VSRAI_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6);
void VSRLNI_B_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4);
void VSRLNI_H_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VSRLNI_W_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6);
void VSRLNI_D_Q(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui7);
void VSRLRNI_B_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4);
void VSRLRNI_H_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VSRLRNI_W_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6);
void VSRLRNI_D_Q(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui7);
void VSSRLNI_B_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4);
void VSSRLNI_H_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VSSRLNI_W_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6);
void VSSRLNI_D_Q(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui7);
void VSSRLNI_BU_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4);
void VSSRLNI_HU_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VSSRLNI_WU_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6);
void VSSRLNI_DU_Q(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui7);
void VSSRLRNI_B_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4);
void VSSRLRNI_H_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VSSRLRNI_W_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6);
void VSSRLRNI_D_Q(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui7);
void VSSRLRNI_BU_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4);
void VSSRLRNI_HU_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VSSRLRNI_WU_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6);
void VSSRLRNI_DU_Q(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui7);
void VSRANI_B_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4);
void VSRANI_H_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VSRANI_W_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6);
void VSRANI_D_Q(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui7);
void VSRARNI_B_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4);
void VSRARNI_H_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VSRARNI_W_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6);
void VSRARNI_D_Q(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui7);
void VSSRANI_B_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4);
void VSSRANI_H_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VSSRANI_W_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6);
void VSSRANI_D_Q(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui7);
void VSSRANI_BU_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4);
void VSSRANI_HU_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VSSRANI_WU_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6);
void VSSRANI_DU_Q(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui7);
void VSSRARNI_B_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4);
void VSSRARNI_H_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VSSRARNI_W_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6);
void VSSRARNI_D_Q(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui7);
void VSSRARNI_BU_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4);
void VSSRARNI_HU_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5);
void VSSRARNI_WU_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6);
void VSSRARNI_DU_Q(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui7);
void VEXTRINS_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui8);
void VEXTRINS_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui8);
void VEXTRINS_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui8);
void VEXTRINS_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui8);
void VSHUF4I_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui8);
void VSHUF4I_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui8);
void VSHUF4I_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui8);
void VSHUF4I_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui8);
void VBITSELI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui8);
void VANDI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui8);
void VORI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui8);
void VXORI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui8);
void VNORI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui8);
void VLDI(LoongArch64Reg vd, s16 i13);
void VPERMI_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui8);
private:
void SetJumpTarget(FixupBranch &branch, const void *dst);
bool BranchInRange(const void *src, const void *dst) const;
bool JumpInRange(const void *src, const void *dst) const;
bool BranchZeroInRange(const void *src, const void *dst) const;
void SetRegToImmediate(LoongArch64Reg rd, uint64_t value);
template <typename T, bool extend>
uint64_t AsImmediate(const T &v) {
static_assert(std::is_trivial<T>::value, "Immediate argument must be a simple type");
static_assert(sizeof(T) <= 8, "Immediate argument size should be 8, 16, 32, or 64 bits");
if (sizeof(T) == 8) {
uint64_t value;
memcpy(&value, &v, sizeof(value));
return value;
} else if (sizeof(T) == 4) {
uint32_t value;
memcpy(&value, &v, sizeof(value));
if (extend)
return (int64_t)(int32_t)value;
return value;
} else if (sizeof(T) == 2) {
uint16_t value;
memcpy(&value, &v, sizeof(value));
if (extend)
return (int64_t)(int16_t)value;
return value;
} else if (sizeof(T) == 1) {
uint8_t value;
memcpy(&value, &v, sizeof(value));
if (extend)
return (int64_t)(int8_t)value;
return value;
}
return (uint64_t)v;
}
inline void Write32(u32 value) {
*(u32 *)writable_ = value;
code_ += 4;
writable_ += 4;
}
protected:
const u8 *code_ = nullptr;
u8 *writable_ = nullptr;
const u8 *lastCacheFlushEnd_ = nullptr;
};
class LoongArch64CodeBlock : public CodeBlock<LoongArch64Emitter> {
private:
void PoisonMemory(int offset) override;
};
};