// Copyright (c) 2025- PPSSPP Project. // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, version 2.0 or later versions. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License 2.0 for more details. // A copy of the GPL 2.0 should have been included with the program. // If not, see http://www.gnu.org/licenses/ // Official git repository and contact information can be found at // https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/. #pragma once #include #include #include #include "Common/CodeBlock.h" #include "Common/Common.h" namespace LoongArch64Gen { enum LoongArch64Reg { // General-purpose Registers (64-bit) // https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.html#_general_purpose_registers 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, // Floating-point Registers (64-bit) // https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.html#floating-point-registers 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, // FP register f0 and LSX register v0 and LASX register x0 share the lowest 64 bits // LSX register v0 and LASX register x0 share the lowest 128 bits // https://jia.je/unofficial-loongarch-intrinsics-guide/ // LSX Registers (128-bit) 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, // LASX Registers 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 { // Condition Flag Register // The length of CFR is 1 bit. FCC0 = 0, FCC1, FCC2, FCC3, FCC4, FCC5, FCC6, FCC7, }; enum LoongArch64FCSR { // Floating-point Control and Status Register // The length of FCSR0 is 29 bits. // FCSR1-FCSR3 are aliases of some fields in fcsr0. FCSR0 = 0, FCSR1, FCSR2, FCSR3, }; enum class FixupBranchType { B, J, BZ, }; enum class LoongArch64Fcond { // Conditions used in FCMP instruction 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 ((int)cfr < 8); } static inline bool IsFCSR(LoongArch64FCSR fcsr) { return ((int)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; // Pointer to executable code address. 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 void QuickCallFunction(T *func, LoongArch64Reg scratchreg = R_RA) { static_assert(std::is_function::value, "QuickCallFunction without function"); QuickCallFunction((const u8 *)func, scratchreg); } // https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.html // https://github.com/loongson-community/loongarch-opcodes/ // Basic Integer Instructions // Arithmetic Operation Instructions void ADD_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void ADD_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void SUB_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void SUB_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void ADDI_W(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12); // DJSk12 void ADDI_D(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12); // DJSk12 void ADDU16I_D(LoongArch64Reg rd, LoongArch64Reg rj, s16 si16); // DJSk16 void ALSL_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk, u8 sa2); // DJKUa2pp1 void ALSL_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk, u8 sa2); // DJKUa2pp1 void ALSL_WU(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk, u8 sa2); // DJKUa2pp1 void LU12I_W(LoongArch64Reg rd, s32 si20); // DSj20 void LU32I_D(LoongArch64Reg rd, s32 si20); // DSj20 void LU52I_D(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12); // DJSk12 void SLT(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void SLTU(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void SLTI(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12); // DJSk12 void SLTUI(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12); // DJSk12 void PCADDI(LoongArch64Reg rd, s32 si20); // DSj20 void PCADDU12I(LoongArch64Reg rd, s32 si20); // DSj20 void PCADDU18I(LoongArch64Reg rd, s32 si20); // DSj20 void PCALAU12I(LoongArch64Reg rd, s32 si20); // DSj20 void AND(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void OR(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void NOR(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void XOR(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void ANDN(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void ORN(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void ANDI(LoongArch64Reg rd, LoongArch64Reg rj, u16 ui12); // DJUk12 void ORI(LoongArch64Reg rd, LoongArch64Reg rj, u16 ui12); // DJUk12 void XORI(LoongArch64Reg rd, LoongArch64Reg rj, u16 ui12); // DJUk12 void NOP() { ANDI(R_ZERO, R_ZERO, 0); } void MOVE(LoongArch64Reg rd, LoongArch64Reg rj) { OR(rd, rj, R_ZERO); } template 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::value>(v); SetRegToImmediate(rd, value); } void MUL_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void MULH_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void MULH_WU(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void MUL_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void MULH_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void MULH_DU(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void MULW_D_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void MULW_D_WU(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void DIV_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void MOD_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void DIV_WU(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void MOD_WU(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void DIV_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void MOD_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void DIV_DU(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void MOD_DU(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK // Bit-shift Instructions void SLL_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void SRL_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void SRA_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void ROTR_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void SLLI_W(LoongArch64Reg rd, LoongArch64Reg rj, u8 ui5); // DJUk5 void SRLI_W(LoongArch64Reg rd, LoongArch64Reg rj, u8 ui5); // DJUk5 void SRAI_W(LoongArch64Reg rd, LoongArch64Reg rj, u8 ui5); // DJUk5 void ROTRI_W(LoongArch64Reg rd, LoongArch64Reg rj, u8 ui5); // DJUk5 void SLL_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void SRL_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void SRA_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void ROTR_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void SLLI_D(LoongArch64Reg rd, LoongArch64Reg rj, u8 ui6); // DJUk6 void SRLI_D(LoongArch64Reg rd, LoongArch64Reg rj, u8 ui6); // DJUk6 void SRAI_D(LoongArch64Reg rd, LoongArch64Reg rj, u8 ui6); // DJUk6 void ROTRI_D(LoongArch64Reg rd, LoongArch64Reg rj, u8 ui6); // DJUk6 // Bit-manipulation Instructions void EXT_W_B(LoongArch64Reg rd, LoongArch64Reg rj); // DJ void EXT_W_H(LoongArch64Reg rd, LoongArch64Reg rj); // DJ void CLO_W(LoongArch64Reg rd, LoongArch64Reg rj); // DJ void CLO_D(LoongArch64Reg rd, LoongArch64Reg rj); // DJ void CLZ_W(LoongArch64Reg rd, LoongArch64Reg rj); // DJ void CLZ_D(LoongArch64Reg rd, LoongArch64Reg rj); // DJ void CTO_W(LoongArch64Reg rd, LoongArch64Reg rj); // DJ void CTO_D(LoongArch64Reg rd, LoongArch64Reg rj); // DJ void CTZ_W(LoongArch64Reg rd, LoongArch64Reg rj); // DJ void CTZ_D(LoongArch64Reg rd, LoongArch64Reg rj); // DJ void BYTEPICK_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk, u8 sa2); // DJKUa2 void BYTEPICK_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk, u8 sa3); // DJKUa3 void REVB_2H(LoongArch64Reg rd, LoongArch64Reg rj); // DJ void REVB_4H(LoongArch64Reg rd, LoongArch64Reg rj); // DJ void REVB_2W(LoongArch64Reg rd, LoongArch64Reg rj); // DJ void REVB_D(LoongArch64Reg rd, LoongArch64Reg rj); // DJ void BITREV_4B(LoongArch64Reg rd, LoongArch64Reg rj); // DJ void BITREV_8B(LoongArch64Reg rd, LoongArch64Reg rj); // DJ void BITREV_W(LoongArch64Reg rd, LoongArch64Reg rj); //DJ void BITREV_D(LoongArch64Reg rd, LoongArch64Reg rj); // DJ void BSTRINS_W(LoongArch64Reg rd, LoongArch64Reg rj, u8 msbw, u8 lsbw); // DJUk5Um5 void BSTRINS_D(LoongArch64Reg RD, LoongArch64Reg RJ, u8 msbd, u8 lsbd); // DJUk6Um6 void BSTRPICK_W(LoongArch64Reg RD, LoongArch64Reg RJ, u8 msbd, u8 lsbd); // DJUk5Um5 void BSTRPICK_D(LoongArch64Reg RD, LoongArch64Reg RJ, u8 msbd, u8 lsbd); // DJUk6Um6 void MASKEQZ(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void MASKNEZ(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK // Branch Instructions void BEQ(LoongArch64Reg rj, LoongArch64Reg rd, const void *dst); // JDSk16ps2 void BNE(LoongArch64Reg rj, LoongArch64Reg rd, const void *dst); // JDSk16ps2 void BLT(LoongArch64Reg rj, LoongArch64Reg rd, const void *dst); // JDSk16ps2 void BGE(LoongArch64Reg rj, LoongArch64Reg rd, const void *dst); // JDSk16ps2 void BLTU(LoongArch64Reg rj, LoongArch64Reg rd, const void *dst); // JDSk16ps2 void BGEU(LoongArch64Reg rj, LoongArch64Reg rd, const void *dst); // JDSk16ps2 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); // JSd5k16ps2 void BNEZ(LoongArch64Reg rj, const void *dst); // JSd5k16ps2 FixupBranch BEQZ(LoongArch64Reg rj); FixupBranch BNEZ(LoongArch64Reg rj); void B(const void *dst); // Sd10k16ps2 void BL(const void *dst); // Sd10k16ps2 FixupBranch B(); FixupBranch BL(); void JIRL(LoongArch64Reg rd, LoongArch64Reg rj, s32 offs16); // DJSk16ps2 void JR(LoongArch64Reg rj) { JIRL(R_ZERO, rj, 0); } void RET() { JIRL(R_ZERO, R_RA, 0); } // Common Memory Access Instructions void LD_B(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12); // DJSk12 void LD_H(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12); // DJSk12 void LD_W(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12); // DJSk12 void LD_D(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12); // DJSk12 void LD_BU(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12); // DJSk12 void LD_HU(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12); // DJSk12 void LD_WU(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12); // DJSk12 void ST_B(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12); // DJSk12 void ST_H(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12); // DJSk12 void ST_W(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12); // DJSk12 void ST_D(LoongArch64Reg rd, LoongArch64Reg rj, s16 si12); // DJSk12 void LDX_B(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void LDX_H(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void LDX_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void LDX_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void LDX_BU(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void LDX_HU(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void LDX_WU(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void STX_B(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void STX_H(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void STX_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void STX_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void LDPTR_W(LoongArch64Reg rd, LoongArch64Reg rj, s16 si14); // DJSk14ps2 void LDPTR_D(LoongArch64Reg rd, LoongArch64Reg rj, s16 si14); // DJSk14ps2 void STPTR_W(LoongArch64Reg rd, LoongArch64Reg rj, s16 si14); // DJSk14ps2 void STPTR_D(LoongArch64Reg rd, LoongArch64Reg rj, s16 si14); // DJSk14ps2 void PRELD(u32 hint, LoongArch64Reg rj, s16 si12); // Ud5JSk12 void PRELDX(u32 hint, LoongArch64Reg rj, LoongArch64Reg rk); // Ud5JK // Bound Check Memory Access Instructions void LDGT_B(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void LDGT_H(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void LDGT_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void LDGT_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void LDLE_B(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void LDLE_H(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void LDLE_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void LDLE_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void STGT_B(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void STGT_H(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void STGT_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void STGT_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void STLE_B(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void STLE_H(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void STLE_W(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK void STLE_D(LoongArch64Reg rd, LoongArch64Reg rj, LoongArch64Reg rk); // DJK // Atomic Memory Access Instructions void AMSWAP_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMSWAP_DB_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMSWAP_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMSWAP_DB_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMADD_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMADD_DB_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMADD_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMADD_DB_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMAND_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMAND_DB_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMAND_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMAND_DB_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMOR_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMOR_DB_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMOR_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMOR_DB_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMXOR_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMXOR_DB_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMXOR_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMXOR_DB_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMMAX_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMMAX_DB_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMMAX_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMMAX_DB_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMMIN_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMMIN_DB_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMMIN_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMMIN_DB_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMMAX_WU(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMMAX_DB_WU(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMMAX_DU(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMMAX_DB_DU(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMMIN_WU(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMMIN_DB_WU(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMMIN_DU(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMMIN_DB_DU(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMSWAP_B(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMSWAP_DB_B(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMSWAP_H(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMSWAP_DB_H(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMADD_B(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMADD_DB_B(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMADD_H(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMADD_DB_H(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMCAS_B(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMCAS_DB_B(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMCAS_H(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMCAS_DB_H(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMCAS_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMCAS_DB_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMCAS_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void AMCAS_DB_D(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ // CRC Check Instructions void CRC_W_B_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void CRC_W_H_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void CRC_W_W_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void CRC_W_D_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void CRCC_W_B_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void CRCC_W_H_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void CRCC_W_W_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ void CRCC_W_D_W(LoongArch64Reg rd, LoongArch64Reg rk, LoongArch64Reg rj); // DKJ // Other Miscellaneous Instructions void SYSCALL(u16 code); // Ud15 void BREAK(u16 code); // Ud15 void ASRTLE_D(LoongArch64Reg rj, LoongArch64Reg rk); // JK void ASRTGT_D(LoongArch64Reg rj, LoongArch64Reg rk); // JK void RDTIMEL_W(LoongArch64Reg rd, LoongArch64Reg rj); // DJ void RDTIMEH_W(LoongArch64Reg rd, LoongArch64Reg rj); // DJ void RDTIME_D(LoongArch64Reg rd, LoongArch64Reg rj); // DJ void CPUCFG(LoongArch64Reg rd, LoongArch64Reg rj); // DJ // Basic Floating-Point Instructions // Floating-Point Arithmetic Operation Instructions void FADD_S(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk); // FdFjFk void FADD_D(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk); // FdFjFk void FSUB_S(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk); // FdFjFk void FSUB_D(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk); // FdFjFk void FMUL_S(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk); // FdFjFk void FMUL_D(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk); // FdFjFk void FDIV_S(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk); // FdFjFk void FDIV_D(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk); // FdFjFk void FMADD_S(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk, LoongArch64Reg fa); // FdFjFkFa void FMADD_D(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk, LoongArch64Reg fa); // FdFjFkFa void FMSUB_S(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk, LoongArch64Reg fa); // FdFjFkFa void FMSUB_D(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk, LoongArch64Reg fa); // FdFjFkFa void FNMADD_S(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk, LoongArch64Reg fa); // FdFjFkFa void FNMADD_D(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk, LoongArch64Reg fa); // FdFjFkFa void FNMSUB_S(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk, LoongArch64Reg fa); // FdFjFkFa void FNMSUB_D(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk, LoongArch64Reg fa); // FdFjFkFa void FMAX_S(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk); // FdFjFk void FMAX_D(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk); // FdFjFk void FMIN_S(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk); // FdFjFk void FMIN_D(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk); // FdFjFk void FMAXA_S(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk); // FdFjFk void FMAXA_D(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk); // FdFjFk void FMINA_S(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk); // FdFjFk void FMINA_D(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk); // FdFjFk void FABS_S(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FABS_D(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FNEG_S(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FNEG_D(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FSQRT_S(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FSQRT_D(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FRECIP_S(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FRECIP_D(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FRSQRT_S(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FRSQRT_D(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FSCALEB_S(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk); // FdFjFk void FSCALEB_D(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk); // FdFjFk void FLOGB_S(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FLOGB_D(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FCOPYSIGN_S(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk); // FdFjFk void FCOPYSIGN_D(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk); // FdFjFk void FCLASS_S(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FCLASS_D(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FRECIPE_S(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FRECIPE_D(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FRSQRTE_S(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FRSQRTE_D(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FCMP_COND_S(LoongArch64CFR cd, LoongArch64Reg fj, LoongArch64Reg fk, LoongArch64Fcond cond); // CdFjFkFcond void FCMP_COND_D(LoongArch64CFR cd, LoongArch64Reg fj, LoongArch64Reg fk, LoongArch64Fcond cond); // CdFjFkFcond // Floating-Point Conversion Instructions void FCVT_S_D(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FCVT_D_S(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FFINT_S_W(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FFINT_S_L(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FFINT_D_W(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FFINT_D_L(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FTINT_W_S(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FTINT_W_D(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FTINT_L_S(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FTINT_L_D(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FTINTRM_W_S(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FTINTRM_W_D(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FTINTRM_L_S(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FTINTRM_L_D(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FTINTRP_W_S(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FTINTRP_W_D(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FTINTRP_L_S(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FTINTRP_L_D(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FTINTRZ_W_S(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FTINTRZ_W_D(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FTINTRZ_L_S(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FTINTRZ_L_D(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FTINTRNE_W_S(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FTINTRNE_W_D(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FTINTRNE_L_S(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FTINTRNE_L_D(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FRINT_S(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FRINT_D(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj // Floating-Point Move Instructions void FMOV_S(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FMOV_D(LoongArch64Reg fd, LoongArch64Reg fj); // FdFj void FSEL(LoongArch64Reg fd, LoongArch64Reg fj, LoongArch64Reg fk, LoongArch64CFR ca); // FdFjFkCa void MOVGR2FR_W(LoongArch64Reg fd, LoongArch64Reg rj); // FdJ void MOVGR2FR_D(LoongArch64Reg fd, LoongArch64Reg rj); // FdJ void MOVGR2FRH_W(LoongArch64Reg fd, LoongArch64Reg rj); // FdJ void MOVFR2GR_S(LoongArch64Reg fd, LoongArch64Reg rj); // DFj void MOVFR2GR_D(LoongArch64Reg fd, LoongArch64Reg rj); // DFj void MOVFRH2GR_S(LoongArch64Reg fd, LoongArch64Reg rj); // DFj void MOVGR2FCSR(LoongArch64FCSR fcsr, LoongArch64Reg rj); // JUd5 void MOVFCSR2GR(LoongArch64Reg rd, LoongArch64FCSR fcsr); // DUj5 void MOVFR2CF(LoongArch64CFR cd, LoongArch64Reg fj); // CdFj void MOVCF2FR(LoongArch64Reg fd, LoongArch64CFR cj); // FdCj void MOVGR2CF(LoongArch64CFR cd, LoongArch64Reg rj); // CdJ void MOVCF2GR(LoongArch64Reg rd, LoongArch64CFR cj); // DCj // Floating-Point Branch Instructions void BCEQZ(LoongArch64CFR cj, s32 offs21); // CjSd5k16ps2 void BCNEZ(LoongArch64CFR cj, s32 offs21); // CjSd5k16ps2 // Floating-Point Common Memory Access Instructions void FLD_S(LoongArch64Reg fd, LoongArch64Reg rj, s16 si12); // FdJSk12 void FLD_D(LoongArch64Reg fd, LoongArch64Reg rj, s16 si12); // FdJSk12 void FST_S(LoongArch64Reg fd, LoongArch64Reg rj, s16 si12); // FdJSk12 void FST_D(LoongArch64Reg fd, LoongArch64Reg rj, s16 si12); // FdJSk12 void FLDX_S(LoongArch64Reg fd, LoongArch64Reg rj, LoongArch64Reg rk); // FdJK void FLDX_D(LoongArch64Reg fd, LoongArch64Reg rj, LoongArch64Reg rk); // FdJK void FSTX_S(LoongArch64Reg fd, LoongArch64Reg rj, LoongArch64Reg rk); // FdJK void FSTX_D(LoongArch64Reg fd, LoongArch64Reg rj, LoongArch64Reg rk); // FdJK // Floating-Point Bound Check Memory Access Instructions void FLDGT_S(LoongArch64Reg fd, LoongArch64Reg rj, LoongArch64Reg rk); // FdJK void FLDGT_D(LoongArch64Reg fd, LoongArch64Reg rj, LoongArch64Reg rk); // FdJK void FLDLE_S(LoongArch64Reg fd, LoongArch64Reg rj, LoongArch64Reg rk); // FdJK void FLDLE_D(LoongArch64Reg fd, LoongArch64Reg rj, LoongArch64Reg rk); // FdJK void FSTGT_S(LoongArch64Reg fd, LoongArch64Reg rj, LoongArch64Reg rk); // FdJK void FSTGT_D(LoongArch64Reg fd, LoongArch64Reg rj, LoongArch64Reg rk); // FdJK void FSTLE_S(LoongArch64Reg fd, LoongArch64Reg rj, LoongArch64Reg rk); // FdJK void FSTLE_D(LoongArch64Reg fd, LoongArch64Reg rj, LoongArch64Reg rk); // FdJK 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); // LoongArch SX 128-bit SIMD instructions void VFMADD_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk, LoongArch64Reg va); // VdVjVkVa void VFMADD_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk, LoongArch64Reg va); // VdVjVkVa void VFMSUB_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk, LoongArch64Reg va); // VdVjVkVa void VFMSUB_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk, LoongArch64Reg va); // VdVjVkVa void VFNMADD_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk, LoongArch64Reg va); // VdVjVkVa void VFNMADD_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk, LoongArch64Reg va); // VdVjVkVa void VFNMSUB_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk, LoongArch64Reg va); // VdVjVkVa void VFNMSUB_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk, LoongArch64Reg va); // VdVjVkVa void VFCMP_CAF_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_SAF_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_CLT_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_SLT_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_CEQ_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_SEQ_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_CLE_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_SLE_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_CUN_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_SUN_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_CULT_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_SULT_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_CUEQ_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_SUEQ_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_CULE_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_SULE_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_CNE_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_SNE_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_COR_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_SOR_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_CUNE_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_SUNE_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_CAF_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_SAF_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_CLT_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_SLT_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_CEQ_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_SEQ_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_CLE_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_SLE_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_CUN_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_SUN_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_CULT_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_SULT_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_CUEQ_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_SUEQ_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_CULE_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_SULE_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_CNE_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_SNE_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_COR_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_SOR_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_CUNE_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCMP_SUNE_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VBITSEL_V(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk, LoongArch64Reg va); // VdVjVkVa void VSHUF_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk, LoongArch64Reg va); // VdVjVkVa void VLD(LoongArch64Reg vd, LoongArch64Reg rj, s16 si12); // VdJSk12 void VST(LoongArch64Reg vd, LoongArch64Reg rj, s16 si12); // VdJSk12 void VLDREPL_D(LoongArch64Reg vd, LoongArch64Reg rj, s16 si9); // VdJSk9 void VLDREPL_W(LoongArch64Reg vd, LoongArch64Reg rj, s16 si10); // VdJSk10 void VLDREPL_H(LoongArch64Reg vd, LoongArch64Reg rj, s16 si11); // VdJSk11 void VLDREPL_B(LoongArch64Reg vd, LoongArch64Reg rj, s16 si12); // VdJSk12 void VSTELM_D(LoongArch64Reg vd, LoongArch64Reg rj, s16 si8, u8 idx1); // VdJSk8Un1 void VSTELM_W(LoongArch64Reg vd, LoongArch64Reg rj, s16 si8, u8 idx2); // VdJSk8Un2 void VSTELM_H(LoongArch64Reg vd, LoongArch64Reg rj, s16 si8, u8 idx3); // VdJSk8Un3 void VSTELM_B(LoongArch64Reg vd, LoongArch64Reg rj, s16 si8, u8 idx4); // VdJSk8Un4 void VLDX(LoongArch64Reg vd, LoongArch64Reg rj, LoongArch64Reg rk); // VdJK void VSTX(LoongArch64Reg vd, LoongArch64Reg rj, LoongArch64Reg rk); // VdJK void VSEQ_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSEQ_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSEQ_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSEQ_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSLE_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSLE_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSLE_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSLE_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSLE_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSLE_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSLE_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSLE_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSLT_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSLT_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSLT_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSLT_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSLT_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSLT_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSLT_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSLT_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADD_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADD_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADD_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADD_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSUB_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSUB_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSUB_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSUB_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADDWEV_H_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADDWEV_W_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADDWEV_D_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADDWEV_Q_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSUBWEV_H_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSUBWEV_W_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSUBWEV_D_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSUBWEV_Q_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADDWOD_H_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADDWOD_W_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADDWOD_D_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADDWOD_Q_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSUBWOD_H_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSUBWOD_W_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSUBWOD_D_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSUBWOD_Q_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADDWEV_H_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADDWEV_W_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADDWEV_D_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADDWEV_Q_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSUBWEV_H_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSUBWEV_W_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSUBWEV_D_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSUBWEV_Q_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADDWOD_H_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADDWOD_W_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADDWOD_D_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADDWOD_Q_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSUBWOD_H_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSUBWOD_W_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSUBWOD_D_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSUBWOD_Q_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADDWEV_H_BU_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADDWEV_W_HU_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADDWEV_D_WU_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADDWEV_Q_DU_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADDWOD_H_BU_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADDWOD_W_HU_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADDWOD_D_WU_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADDWOD_Q_DU_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSADD_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSADD_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSADD_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSADD_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSUB_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSUB_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSUB_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSUB_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSADD_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSADD_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSADD_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSADD_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSUB_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSUB_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSUB_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSUB_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VHADDW_H_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VHADDW_W_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VHADDW_D_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VHADDW_Q_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VHSUBW_H_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VHSUBW_W_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VHSUBW_D_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VHSUBW_Q_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VHADDW_HU_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VHADDW_WU_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VHADDW_DU_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VHADDW_QU_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VHSUBW_HU_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VHSUBW_WU_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VHSUBW_DU_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VHSUBW_QU_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADDA_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADDA_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADDA_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADDA_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VABSD_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VABSD_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VABSD_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VABSD_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VABSD_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VABSD_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VABSD_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VABSD_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VAVG_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VAVG_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VAVG_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VAVG_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VAVG_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VAVG_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VAVG_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VAVG_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VAVGR_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VAVGR_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VAVGR_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VAVGR_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VAVGR_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VAVGR_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VAVGR_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VAVGR_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMAX_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMAX_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMAX_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMAX_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMIN_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMIN_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMIN_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMIN_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMAX_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMAX_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMAX_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMAX_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMIN_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMIN_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMIN_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMIN_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMUL_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMUL_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMUL_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMUL_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMUH_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMUH_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMUH_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMUH_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMUH_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMUH_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMUH_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMUH_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMULWEV_H_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMULWEV_W_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMULWEV_D_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMULWEV_Q_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMULWOD_H_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMULWOD_W_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMULWOD_D_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMULWOD_Q_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMULWEV_H_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMULWEV_W_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMULWEV_D_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMULWEV_Q_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMULWOD_H_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMULWOD_W_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMULWOD_D_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMULWOD_Q_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMULWEV_H_BU_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMULWEV_W_HU_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMULWEV_D_WU_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMULWEV_Q_DU_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMULWOD_H_BU_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMULWOD_W_HU_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMULWOD_D_WU_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMULWOD_Q_DU_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMADD_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMADD_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMADD_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMADD_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMSUB_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMSUB_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMSUB_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMSUB_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMADDWEV_H_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMADDWEV_W_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMADDWEV_D_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMADDWEV_Q_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMADDWOD_H_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMADDWOD_W_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMADDWOD_D_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMADDWOD_Q_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMADDWEV_H_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMADDWEV_W_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMADDWEV_D_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMADDWEV_Q_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMADDWOD_H_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMADDWOD_W_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMADDWOD_D_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMADDWOD_Q_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMADDWEV_H_BU_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMADDWEV_W_HU_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMADDWEV_D_WU_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMADDWEV_Q_DU_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMADDWOD_H_BU_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMADDWOD_W_HU_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMADDWOD_D_WU_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMADDWOD_Q_DU_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VDIV_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VDIV_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VDIV_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VDIV_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMOD_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMOD_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMOD_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMOD_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VDIV_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VDIV_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VDIV_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VDIV_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMOD_BU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMOD_HU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMOD_WU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VMOD_DU(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSLL_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSLL_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSLL_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSLL_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSRL_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSRL_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSRL_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSRL_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSRA_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSRA_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSRA_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSRA_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VROTR_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VROTR_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VROTR_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VROTR_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSRLR_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSRLR_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSRLR_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSRLR_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSRAR_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSRAR_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSRAR_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSRAR_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSRLN_B_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSRLN_H_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSRLN_W_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSRAN_B_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSRAN_H_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSRAN_W_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSRLRN_B_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSRLRN_H_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSRLRN_W_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSRARN_B_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSRARN_H_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSRARN_W_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSRLN_B_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSRLN_H_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSRLN_W_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSRAN_B_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSRAN_H_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSRAN_W_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSRLRN_B_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSRLRN_H_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSRLRN_W_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSRARN_B_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSRARN_H_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSRARN_W_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSRLN_BU_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSRLN_HU_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSRLN_WU_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSRAN_BU_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSRAN_HU_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSRAN_WU_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSRLRN_BU_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSRLRN_HU_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSRLRN_WU_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSRARN_BU_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSRARN_HU_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSSRARN_WU_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VBITCLR_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VBITCLR_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VBITCLR_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VBITCLR_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VBITSET_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VBITSET_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VBITSET_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VBITSET_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VBITREV_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VBITREV_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VBITREV_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VBITREV_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VPACKEV_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VPACKEV_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VPACKEV_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VPACKEV_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VPACKOD_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VPACKOD_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VPACKOD_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VPACKOD_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VILVL_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VILVL_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VILVL_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VILVL_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VILVH_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VILVH_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VILVH_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VILVH_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VPICKEV_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VPICKEV_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VPICKEV_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VPICKEV_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VPICKOD_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VPICKOD_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VPICKOD_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VPICKOD_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VREPLVE_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg rk); // VdVjK void VREPLVE_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg rk); // VdVjK void VREPLVE_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg rk); // VdVjK void VREPLVE_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg rk); // VdVjK void VAND_V(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VOR_V(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VXOR_V(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VNOR_V(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VANDN_V(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VORN_V(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFRSTP_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFRSTP_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VADD_Q(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSUB_Q(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSIGNCOV_B(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSIGNCOV_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSIGNCOV_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSIGNCOV_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFADD_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFADD_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFSUB_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFSUB_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFMUL_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFMUL_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFDIV_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFDIV_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFMAX_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFMAX_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFMIN_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFMIN_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFMAXA_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFMAXA_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFMINA_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFMINA_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCVT_H_S(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFCVT_S_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFFINT_S_L(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFTINT_W_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFTINTRM_W_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFTINTRP_W_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFTINTRZ_W_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VFTINTRNE_W_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSHUF_H(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSHUF_W(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSHUF_D(LoongArch64Reg vd, LoongArch64Reg vj, LoongArch64Reg vk); // VdVjVk void VSEQI_B(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5); // VdVjSk5 void VSEQI_H(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5); // VdVjSk5 void VSEQI_W(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5); // VdVjSk5 void VSEQI_D(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5); // VdVjSk5 void VSLEI_B(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5); // VdVjSk5 void VSLEI_H(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5); // VdVjSk5 void VSLEI_W(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5); // VdVjSk5 void VSLEI_D(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5); // VdVjSk5 void VSLEI_BU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VSLEI_HU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VSLEI_WU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VSLEI_DU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VSLTI_B(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5); // VdVjSk5 void VSLTI_H(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5); // VdVjSk5 void VSLTI_W(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5); // VdVjSk5 void VSLTI_D(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5); // VdVjSk5 void VSLTI_BU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VSLTI_HU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VSLTI_WU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VSLTI_DU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VADDI_BU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VADDI_HU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VADDI_WU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VADDI_DU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VSUBI_BU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VSUBI_HU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VSUBI_WU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VSUBI_DU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VBSLL_V(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VBSRL_V(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VMAXI_B(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5); // VdVjSk5 void VMAXI_H(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5); // VdVjSk5 void VMAXI_W(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5); // VdVjSk5 void VMAXI_D(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5); // VdVjSk5 void VMINI_B(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5); // VdVjSk5 void VMINI_H(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5); // VdVjSk5 void VMINI_W(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5); // VdVjSk5 void VMINI_D(LoongArch64Reg vd, LoongArch64Reg vj, s8 si5); // VdVjSk5 void VMAXI_BU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VMAXI_HU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VMAXI_WU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VMAXI_DU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VMINI_BU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VMINI_HU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VMINI_WU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VMINI_DU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VFRSTPI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VFRSTPI_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VCLO_B(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VCLO_H(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VCLO_W(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VCLO_D(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VCLZ_B(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VCLZ_H(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VCLZ_W(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VCLZ_D(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VPCNT_B(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VPCNT_H(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VPCNT_W(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VPCNT_D(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VNEG_B(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VNEG_H(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VNEG_W(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VNEG_D(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VMSKLTZ_B(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VMSKLTZ_H(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VMSKLTZ_W(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VMSKLTZ_D(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VMSKGEZ_B(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VMSKNZ_B(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VSETEQZ_V(LoongArch64CFR cd, LoongArch64Reg vj); // CdVj void VSETNEZ_V(LoongArch64CFR cd, LoongArch64Reg vj); // CdVj void VSETANYEQZ_B(LoongArch64CFR cd, LoongArch64Reg vj); // CdVj void VSETANYEQZ_H(LoongArch64CFR cd, LoongArch64Reg vj); // CdVj void VSETANYEQZ_W(LoongArch64CFR cd, LoongArch64Reg vj); // CdVj void VSETANYEQZ_D(LoongArch64CFR cd, LoongArch64Reg vj); // CdVj void VSETALLNEZ_B(LoongArch64CFR cd, LoongArch64Reg vj); // CdVj void VSETALLNEZ_H(LoongArch64CFR cd, LoongArch64Reg vj); // CdVj void VSETALLNEZ_W(LoongArch64CFR cd, LoongArch64Reg vj); // CdVj void VSETALLNEZ_D(LoongArch64CFR cd, LoongArch64Reg vj); // CdVj void VFLOGB_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFLOGB_D(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFCLASS_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFCLASS_D(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFSQRT_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFSQRT_D(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFRECIP_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFRECIP_D(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFRSQRT_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFRSQRT_D(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFRECIPE_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFRECIPE_D(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFRSQRTE_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFRSQRTE_D(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFRINT_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFRINT_D(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFRINTRM_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFRINTRM_D(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFRINTRP_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFRINTRP_D(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFRINTRZ_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFRINTRZ_D(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFRINTRNE_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFRINTRNE_D(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFCVTL_S_H(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFCVTH_S_H(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFCVTL_D_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFCVTH_D_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFFINT_S_W(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFFINT_S_WU(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFFINT_D_L(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFFINT_D_LU(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFFINTL_D_W(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFFINTH_D_W(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFTINT_W_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFTINT_L_D(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFTINTRM_W_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFTINTRM_L_D(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFTINTRP_W_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFTINTRP_L_D(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFTINTRZ_W_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFTINTRZ_L_D(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFTINTRNE_W_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFTINTRNE_L_D(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFTINT_WU_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFTINT_LU_D(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFTINTRZ_WU_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFTINTRZ_LU_D(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFTINTL_L_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFTINTH_L_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFTINTRML_L_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFTINTRMH_L_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFTINTRPL_L_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFTINTRPH_L_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFTINTRZL_L_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFTINTRZH_L_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFTINTRNEL_L_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VFTINTRNEH_L_S(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VEXTH_H_B(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VEXTH_W_H(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VEXTH_D_W(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VEXTH_Q_D(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VEXTH_HU_BU(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VEXTH_WU_HU(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VEXTH_DU_WU(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VEXTH_QU_DU(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VREPLGR2VR_B(LoongArch64Reg vd, LoongArch64Reg rj); // VdJ void VREPLGR2VR_H(LoongArch64Reg vd, LoongArch64Reg rj); // VdJ void VREPLGR2VR_W(LoongArch64Reg vd, LoongArch64Reg rj); // VdJ void VREPLGR2VR_D(LoongArch64Reg vd, LoongArch64Reg rj); // VdJ void VROTRI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui3); // VdVjUk3 void VROTRI_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4); // VdVjUk4 void VROTRI_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VROTRI_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6); // VdVjUk6 void VSRLRI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui3); // VdVjUk3 void VSRLRI_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4); // VdVjUk4 void VSRLRI_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VSRLRI_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6); // VdVjUk6 void VSRARI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui3); // VdVjUk3 void VSRARI_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4); // VdVjUk4 void VSRARI_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VSRARI_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6); // VdVjUk6 void VINSGR2VR_B(LoongArch64Reg vd, LoongArch64Reg rj, u8 ui4); // VdJUk4 void VINSGR2VR_H(LoongArch64Reg vd, LoongArch64Reg rj, u8 ui3); // VdJUk3 void VINSGR2VR_W(LoongArch64Reg vd, LoongArch64Reg rj, u8 ui2); // VdJUk2 void VINSGR2VR_D(LoongArch64Reg vd, LoongArch64Reg rj, u8 ui1); // VdJUk1 void VPICKVE2GR_B(LoongArch64Reg rd, LoongArch64Reg vj, u8 ui4); // DVjUk4 void VPICKVE2GR_H(LoongArch64Reg rd, LoongArch64Reg vj, u8 ui3); // DVjUk3 void VPICKVE2GR_W(LoongArch64Reg rd, LoongArch64Reg vj, u8 ui2); // DVjUk2 void VPICKVE2GR_D(LoongArch64Reg rd, LoongArch64Reg vj, u8 ui1); // DVjUk1 void VPICKVE2GR_BU(LoongArch64Reg rd, LoongArch64Reg vj, u8 ui4); // DVjUk4 void VPICKVE2GR_HU(LoongArch64Reg rd, LoongArch64Reg vj, u8 ui3); // DVjUk3 void VPICKVE2GR_WU(LoongArch64Reg rd, LoongArch64Reg vj, u8 ui2); // DVjUk2 void VPICKVE2GR_DU(LoongArch64Reg rd, LoongArch64Reg vj, u8 ui1); // DVjUk1 void VREPLVEI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4); // VdVjUk4 void VREPLVEI_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui3); // VdVjUk3 void VREPLVEI_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui2); // VdVjUk2 void VREPLVEI_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui1); // VdVjUk1 void VSLLWIL_H_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui3); // VdVjUk3 void VSLLWIL_W_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4); // VdVjUk4 void VSLLWIL_D_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VEXTL_Q_D(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VSLLWIL_HU_BU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui3); // VdVjUk3 void VSLLWIL_WU_HU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4); // VdVjUk4 void VSLLWIL_DU_WU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VEXTL_QU_DU(LoongArch64Reg vd, LoongArch64Reg vj); // VdVj void VBITCLRI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui3); // VdVjUk3 void VBITCLRI_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4); // VdVjUk4 void VBITCLRI_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VBITCLRI_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6); // VdVjUk6 void VBITSETI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui3); // VdVjUk3 void VBITSETI_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4); // VdVjUk4 void VBITSETI_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VBITSETI_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6); // VdVjUk6 void VBITREVI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui3); // VdVjUk3 void VBITREVI_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4); // VdVjUk4 void VBITREVI_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VBITREVI_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6); // VdVjUk6 void VSAT_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui3); // VdVjUk3 void VSAT_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4); // VdVjUk4 void VSAT_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VSAT_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6); // VdVjUk6 void VSAT_BU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui3); // VdVjUk3 void VSAT_HU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4); // VdVjUk4 void VSAT_WU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VSAT_DU(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6); // VdVjUk6 void VSLLI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui3); // VdVjUk3 void VSLLI_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4); // VdVjUk4 void VSLLI_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VSLLI_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6); // VdVjUk6 void VSRLI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui3); // VdVjUk3 void VSRLI_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4); // VdVjUk4 void VSRLI_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VSRLI_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6); // VdVjUk6 void VSRAI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui3); // VdVjUk3 void VSRAI_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4); // VdVjUk4 void VSRAI_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VSRAI_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6); // VdVjUk6 void VSRLNI_B_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4); // VdVjUk4 void VSRLNI_H_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VSRLNI_W_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6); // VdVjUk6 void VSRLNI_D_Q(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui7); // VdVjUk7 void VSRLRNI_B_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4); // VdVjUk4 void VSRLRNI_H_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VSRLRNI_W_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6); // VdVjUk6 void VSRLRNI_D_Q(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui7); // VdVjUk7 void VSSRLNI_B_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4); // VdVjUk4 void VSSRLNI_H_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VSSRLNI_W_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6); // VdVjUk6 void VSSRLNI_D_Q(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui7); // VdVjUk7 void VSSRLNI_BU_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4); // VdVjUk4 void VSSRLNI_HU_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VSSRLNI_WU_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6); // VdVjUk6 void VSSRLNI_DU_Q(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui7); // VdVjUk7 void VSSRLRNI_B_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4); // VdVjUk4 void VSSRLRNI_H_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VSSRLRNI_W_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6); // VdVjUk6 void VSSRLRNI_D_Q(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui7); // VdVjUk7 void VSSRLRNI_BU_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4); // VdVjUk4 void VSSRLRNI_HU_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VSSRLRNI_WU_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6); // VdVjUk6 void VSSRLRNI_DU_Q(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui7); // VdVjUk7 void VSRANI_B_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4); // VdVjUk4 void VSRANI_H_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VSRANI_W_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6); // VdVjUk6 void VSRANI_D_Q(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui7); // VdVjUk7 void VSRARNI_B_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4); // VdVjUk4 void VSRARNI_H_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VSRARNI_W_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6); // VdVjUk6 void VSRARNI_D_Q(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui7); // VdVjUk7 void VSSRANI_B_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4); // VdVjUk4 void VSSRANI_H_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VSSRANI_W_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6); // VdVjUk6 void VSSRANI_D_Q(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui7); // VdVjUk7 void VSSRANI_BU_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4); // VdVjUk4 void VSSRANI_HU_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VSSRANI_WU_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6); // VdVjUk6 void VSSRANI_DU_Q(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui7); // VdVjUk7 void VSSRARNI_B_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4); // VdVjUk4 void VSSRARNI_H_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VSSRARNI_W_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6); // VdVjUk6 void VSSRARNI_D_Q(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui7); // VdVjUk7 void VSSRARNI_BU_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui4); // VdVjUk4 void VSSRARNI_HU_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui5); // VdVjUk5 void VSSRARNI_WU_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui6); // VdVjUk6 void VSSRARNI_DU_Q(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui7); // VdVjUk7 void VEXTRINS_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui8); // VdVjUk8 void VEXTRINS_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui8); // VdVjUk8 void VEXTRINS_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui8); // VdVjUk8 void VEXTRINS_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui8); // VdVjUk8 void VSHUF4I_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui8); // VdVjUk8 void VSHUF4I_H(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui8); // VdVjUk8 void VSHUF4I_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui8); // VdVjUk8 void VSHUF4I_D(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui8); // VdVjUk8 void VBITSELI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui8); // VdVjUk8 void VANDI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui8); // VdVjUk8 void VORI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui8); // VdVjUk8 void VXORI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui8); // VdVjUk8 void VNORI_B(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui8); // VdVjUk8 void VLDI(LoongArch64Reg vd, s16 i13); // VdSj13 void VPERMI_W(LoongArch64Reg vd, LoongArch64Reg vj, u8 ui8); // VdVjUk8 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 uint64_t AsImmediate(const T &v) { static_assert(std::is_trivial::value, "Immediate argument must be a simple type"); static_assert(sizeof(T) <= 8, "Immediate argument size should be 8, 16, 32, or 64 bits"); // Copy the type to allow floats and avoid endian issues. 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 { private: void PoisonMemory(int offset) override; }; };