Compare commits

..

2 commits

Author SHA1 Message Date
Ronald Caesar
523d1e6656
jit/ir: Add opcode interface
Signed-off-by: Ronald Caesar <github43132@proton.me>
2025-11-09 13:01:23 -04:00
Ronald Caesar
fa1f91dc94
jit/ir: Include A32 opcodes
Signed-off-by: Ronald Caesar <github43132@proton.me>
2025-11-09 09:11:02 -04:00
6 changed files with 870 additions and 13 deletions

View file

@ -4,6 +4,7 @@ target_sources(jit PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/decoder/arm32.cpp ${CMAKE_CURRENT_SOURCE_DIR}/decoder/arm32.cpp
${CMAKE_CURRENT_SOURCE_DIR}/ir/type.cpp ${CMAKE_CURRENT_SOURCE_DIR}/ir/type.cpp
${CMAKE_CURRENT_SOURCE_DIR}/ir/value.cpp ${CMAKE_CURRENT_SOURCE_DIR}/ir/value.cpp
${CMAKE_CURRENT_SOURCE_DIR}/ir/opcode.cpp
) )
target_link_libraries(jit PRIVATE common host) target_link_libraries(jit PRIVATE common host)

29
src/jit/ir/opcode.cpp Normal file
View file

@ -0,0 +1,29 @@
#include "opcode.h"
#include <stddef.h>
#define LOG_MODULE "jit"
#include "common/logging.h"
namespace pound::jit::ir {
decoded_opcode_t g_opcodes[NUM_OPCODE] = {
#define OPCODE(name, type, ...) \
decoded_opcode_t { #name, type, { __VA_ARGS__ } },
#define A32OPC(name, type, ...) \
decoded_opcode_t { #name, type, { __VA_ARGS__ } },
// #define A64OPC(name, type, ...) decoded_opcode_t{#name, type, {__VA_ARGS__}},
#include "./opcode.inc"
#undef OPCODE
// #undef A32OPC
// #undef A64OPC
};
void
opcode_init (void)
{
for (size_t i = 0; i < NUM_OPCODE; ++i)
{
LOG_TRACE("Opcode Registered: %s", g_opcodes[i].name);
}
}
} // namespace pound::jit::ir

58
src/jit/ir/opcode.h Normal file
View file

@ -0,0 +1,58 @@
/**
* @file opcode.h
*
* @brief Defines JIT IR opcodes and their metadata.
*
* The actual definitions of opcodes and their metadata are generated
* by including "opcode.inc", which is processed using X-macros.
*/
#include "type.h"
namespace pound::jit::ir {
// The maximum number of argument types an IR opcode can have.
#define OPCODE_ARGS_TYPES_SIZE 4
/*!
* @brief Enumeration of all microinstructions (opcodes) in the JIT IR.
*
* Each enum value corresponds to a specific operation that can be
* performed by the JIT, such as arithmetic operations, memory accesses,
* or system register manipulations.
*
* The enum values are generated by including "opcode.inc" and using
* the OPCODE and A32OPC macros. A64OPC is currently disabled.
*/
typedef enum
{
#define OPCODE(name, type, ...) OPCODE_##name,
#define A32OPC(name, type, ...) OPCODE_A32##name,
// #define A64OPC(name, type, ...) OPCODE_A64##name,
#include "./opcode.inc"
#undef OPCODE
#undef A32OPC
#undef A64OPC
NUM_OPCODE
} opcode_t;
/*!
* @brief Structure holding static metadata for an IR opcode.
*/
typedef struct
{
const char *name;
type_t type;
type_t arg_types[OPCODE_ARGS_TYPES_SIZE];
} decoded_opcode_t;
/*!
* @brief Global array of `decoded_opcode_t` structures for all opcodes.
*
* This array is indexed by the `opcode_t` enum values, providing a direct
* lookup for opcode metadata. For example, `g_opcodes[OPCODE_Add32].name`
* would yield "Add32".
*/
extern decoded_opcode_t g_opcodes[NUM_OPCODE];
void opcode_init(void);
}

775
src/jit/ir/opcode.inc Normal file
View file

@ -0,0 +1,775 @@
// clang-format off
// opcode name, return type, arg1 type, arg2 type, arg3 type, arg4 type, ...
OPCODE(Void, IR_TYPE_VOID, )
OPCODE(Identity, IR_TYPE_OPAQUE, IR_TYPE_OPAQUE )
OPCODE(Breakpoint, IR_TYPE_VOID, )
OPCODE(CallHostFunction, IR_TYPE_VOID, IR_TYPE_U64, IR_TYPE_OPAQUE, IR_TYPE_OPAQUE, IR_TYPE_OPAQUE )
// A32 Context getters/setters
A32OPC(SetCheckBit, IR_TYPE_VOID, IR_TYPE_U1 )
A32OPC(GetRegister, IR_TYPE_U32, IR_TYPE_A32_REGISTER )
A32OPC(GetExtendedRegister32, IR_TYPE_U32, IR_TYPE_A32_EXTENDED_REGISTER )
A32OPC(GetExtendedRegister64, IR_TYPE_U64, IR_TYPE_A32_EXTENDED_REGISTER )
A32OPC(GetVector, IR_TYPE_U128, IR_TYPE_A32_EXTENDED_REGISTER )
A32OPC(SetRegister, IR_TYPE_VOID, IR_TYPE_A32_REGISTER, IR_TYPE_U32 )
A32OPC(SetExtendedRegister32, IR_TYPE_VOID, IR_TYPE_A32_EXTENDED_REGISTER, IR_TYPE_U32 )
A32OPC(SetExtendedRegister64, IR_TYPE_VOID, IR_TYPE_A32_EXTENDED_REGISTER, IR_TYPE_U64 )
A32OPC(SetVector, IR_TYPE_VOID, IR_TYPE_A32_EXTENDED_REGISTER, IR_TYPE_U128 )
A32OPC(GetCpsr, IR_TYPE_U32, )
A32OPC(SetCpsr, IR_TYPE_VOID, IR_TYPE_U32 )
A32OPC(SetCpsrNZCV, IR_TYPE_VOID, IR_TYPE_NZCV )
A32OPC(SetCpsrNZCVRaw, IR_TYPE_VOID, IR_TYPE_U32 )
A32OPC(SetCpsrNZCVQ, IR_TYPE_VOID, IR_TYPE_U32 )
A32OPC(SetCpsrNZ, IR_TYPE_VOID, IR_TYPE_NZCV )
A32OPC(SetCpsrNZC, IR_TYPE_VOID, IR_TYPE_NZCV, IR_TYPE_U1 )
A32OPC(GetCFlag, IR_TYPE_U1, )
A32OPC(OrQFlag, IR_TYPE_VOID, IR_TYPE_U1 )
A32OPC(GetGEFlags, IR_TYPE_U32, )
A32OPC(SetGEFlags, IR_TYPE_VOID, IR_TYPE_U32 )
A32OPC(SetGEFlagsCompressed, IR_TYPE_VOID, IR_TYPE_U32 )
A32OPC(BXWritePC, IR_TYPE_VOID, IR_TYPE_U32 )
A32OPC(UpdateUpperLocationDescriptor, IR_TYPE_VOID, )
A32OPC(CallSupervisor, IR_TYPE_VOID, IR_TYPE_U32 )
A32OPC(ExceptionRaised, IR_TYPE_VOID, IR_TYPE_U32, IR_TYPE_U64 )
A32OPC(DataSynchronizationBarrier, IR_TYPE_VOID, )
A32OPC(DataMemoryBarrier, IR_TYPE_VOID, )
A32OPC(InstructionSynchronizationBarrier, IR_TYPE_VOID, )
A32OPC(GetFpscr, IR_TYPE_U32, )
A32OPC(SetFpscr, IR_TYPE_VOID, IR_TYPE_U32, )
A32OPC(GetFpscrNZCV, IR_TYPE_U32, )
A32OPC(SetFpscrNZCV, IR_TYPE_VOID, IR_TYPE_NZCV )
#if 0
// A64 Context getters/setters
A64OPC(SetCheckBit, IR_TYPE_VOID, IR_TYPE_U1 )
A64OPC(GetCFlag, IR_TYPE_U1, )
A64OPC(GetNZCVRaw, IR_TYPE_U32, )
A64OPC(SetNZCVRaw, IR_TYPE_VOID, IR_TYPE_U32 )
A64OPC(SetNZCV, IR_TYPE_VOID, IR_TYPE_NZCV )
A64OPC(GetW, IR_TYPE_U32, A64Reg )
A64OPC(GetX, IR_TYPE_U64, A64Reg )
A64OPC(GetS, IR_TYPE_U128, A64Vec )
A64OPC(GetD, IR_TYPE_U128, A64Vec )
A64OPC(GetQ, IR_TYPE_U128, A64Vec )
A64OPC(GetSP, IR_TYPE_U64, )
A64OPC(GetFPCR, IR_TYPE_U32, )
A64OPC(GetFPSR, IR_TYPE_U32, )
A64OPC(SetW, IR_TYPE_VOID, A64Reg, IR_TYPE_U32 )
A64OPC(SetX, IR_TYPE_VOID, A64Reg, IR_TYPE_U64 )
A64OPC(SetS, IR_TYPE_VOID, A64Vec, IR_TYPE_U128 )
A64OPC(SetD, IR_TYPE_VOID, A64Vec, IR_TYPE_U128 )
A64OPC(SetQ, IR_TYPE_VOID, A64Vec, IR_TYPE_U128 )
A64OPC(SetSP, IR_TYPE_VOID, IR_TYPE_U64 )
A64OPC(SetFPCR, IR_TYPE_VOID, IR_TYPE_U32 )
A64OPC(SetFPSR, IR_TYPE_VOID, IR_TYPE_U32 )
A64OPC(SetPC, IR_TYPE_VOID, IR_TYPE_U64 )
A64OPC(CallSupervisor, IR_TYPE_VOID, IR_TYPE_U32 )
A64OPC(ExceptionRaised, IR_TYPE_VOID, IR_TYPE_U64, IR_TYPE_U64 )
A64OPC(DataCacheOperationRaised, IR_TYPE_VOID, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
A64OPC(InstructionCacheOperationRaised, IR_TYPE_VOID, IR_TYPE_U64, IR_TYPE_U64 )
A64OPC(DataSynchronizationBarrier, IR_TYPE_VOID, )
A64OPC(DataMemoryBarrier, IR_TYPE_VOID, )
A64OPC(InstructionSynchronizationBarrier, IR_TYPE_VOID, )
A64OPC(GetCNTFRQ, IR_TYPE_U32, )
A64OPC(GetCNTPCT, IR_TYPE_U64, )
A64OPC(GetCTR, IR_TYPE_U32, )
A64OPC(GetDCZID, IR_TYPE_U32, )
A64OPC(GetTPIDR, IR_TYPE_U64, )
A64OPC(GetTPIDRRO, IR_TYPE_U64, )
A64OPC(SetTPIDR, IR_TYPE_VOID, IR_TYPE_U64 )
#endif
// Hints
OPCODE(PushRSB, IR_TYPE_VOID, IR_TYPE_U64 )
// Pseudo-operation, handled specially at final emit
OPCODE(GetCarryFromOp, IR_TYPE_U1, IR_TYPE_OPAQUE )
OPCODE(GetOverflowFromOp, IR_TYPE_U1, IR_TYPE_OPAQUE )
OPCODE(GetGEFromOp, IR_TYPE_U32, IR_TYPE_OPAQUE )
OPCODE(GetNZCVFromOp, IR_TYPE_NZCV, IR_TYPE_OPAQUE )
OPCODE(GetNZFromOp, IR_TYPE_NZCV, IR_TYPE_OPAQUE )
OPCODE(GetUpperFromOp, IR_TYPE_U128, IR_TYPE_OPAQUE )
OPCODE(GetLowerFromOp, IR_TYPE_U128, IR_TYPE_OPAQUE )
OPCODE(GetCFlagFromNZCV, IR_TYPE_U1, IR_TYPE_NZCV )
OPCODE(NZCVFromPackedFlags, IR_TYPE_NZCV, IR_TYPE_U32 )
// Calculations
OPCODE(Pack2x32To1x64, IR_TYPE_U64, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(Pack2x64To1x128, IR_TYPE_U128, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(LeastSignificantWord, IR_TYPE_U32, IR_TYPE_U64 )
OPCODE(LeastSignificantHalf, IR_TYPE_U16, IR_TYPE_U32 )
OPCODE(LeastSignificantByte, IR_TYPE_U8, IR_TYPE_U32 )
OPCODE(MostSignificantWord, IR_TYPE_U32, IR_TYPE_U64 )
OPCODE(MostSignificantBit, IR_TYPE_U1, IR_TYPE_U32 )
OPCODE(IsZero32, IR_TYPE_U1, IR_TYPE_U32 )
OPCODE(IsZero64, IR_TYPE_U1, IR_TYPE_U64 )
OPCODE(TestBit, IR_TYPE_U1, IR_TYPE_U64, IR_TYPE_U8 )
OPCODE(ConsitionalSelect32, IR_TYPE_U32, IR_TYPE_CONDITION, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(ConditionalSelect64, IR_TYPE_U64, IR_TYPE_CONDITION, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(ConditionalSelectNZCV, IR_TYPE_NZCV, IR_TYPE_CONDITION, IR_TYPE_NZCV,IR_TYPE_NZCV )
OPCODE(LogicalShiftLeft32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U8, IR_TYPE_U1 )
OPCODE(LogicalShiftLeft64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U8 )
OPCODE(LogicalShiftRight32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U8, IR_TYPE_U1 )
OPCODE(LogicalShiftRight64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U8 )
OPCODE(ArithmeticShiftRight32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U8, IR_TYPE_U1 )
OPCODE(ArithmeticShiftRight64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U8 )
OPCODE(RotateRight32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U8, IR_TYPE_U1 )
OPCODE(RotateRight64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U8 )
OPCODE(RotateRightExtended, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U1 )
OPCODE(LogicalShiftLeftMasked32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(LogicalShiftLeftMasked64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(LogicalShiftRightMasked32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(LogicalShiftRightMasked64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(ArithmeticShiftRightMasked32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(ArithmeticShiftRightMasked64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(RotateRightMasked32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(RotateRightMasked64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(Add32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U1 )
OPCODE(Add64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U1 )
OPCODE(Sub32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U1 )
OPCODE(Sub64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U1 )
OPCODE(Mul32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(Mul64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(SignedMultiplyHigh64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(UnsignedMultiplyHigh64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(UnsignedDiv32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(UnsignedDiv64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(SignedDiv32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(SignedDiv64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(And32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(And64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(AndNot32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(AndNot64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(Eor32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(Eor64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(Or32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(Or64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(Not32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(Not64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(SignExtendByteToWord, IR_TYPE_U32, IR_TYPE_U8 )
OPCODE(SignExtendHalfToWord, IR_TYPE_U32, IR_TYPE_U16 )
OPCODE(SignExtendByteToLong, IR_TYPE_U64, IR_TYPE_U8 )
OPCODE(SignExtendHalfToLong, IR_TYPE_U64, IR_TYPE_U16 )
OPCODE(SignExtendWordToLong, IR_TYPE_U64, IR_TYPE_U32 )
OPCODE(ZeroExtendByteToWord, IR_TYPE_U32, IR_TYPE_U8 )
OPCODE(ZeroExtendHalfToWord, IR_TYPE_U32, IR_TYPE_U16 )
OPCODE(ZeroExtendByteToLong, IR_TYPE_U64, IR_TYPE_U8 )
OPCODE(ZeroExtendHalfToLong, IR_TYPE_U64, IR_TYPE_U16 )
OPCODE(ZeroExtendWordToLong, IR_TYPE_U64, IR_TYPE_U32 )
OPCODE(ZeroExtendLongToQuad, IR_TYPE_U128, IR_TYPE_U64 )
OPCODE(ByteReverseWord, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(ByteReverseHalf, IR_TYPE_U16, IR_TYPE_U16 )
OPCODE(ByteReverseDual, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(CountLeadingZeros32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(CountLeadingZeros64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(ExtractRegister32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U8 )
OPCODE(ExtractRegister64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U8 )
OPCODE(ReplicateBit32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U8 )
OPCODE(ReplicateBit64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U8 )
OPCODE(MaxSigned32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(MaxSigned64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(MaxUnsigned32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(MaxUnsigned64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(MinSigned32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(MinSigned64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(MinUnsigned32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(MinUnsigned64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
// Saturated instructions
OPCODE(SignedSaturatedAddWithFlag32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(SignedSaturatedSubWithFlag32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(SignedSaturation, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U8 )
OPCODE(UnsignedSaturation, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U8 )
OPCODE(SignedSaturatedAdd8, IR_TYPE_U8, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(SignedSaturatedAdd16, IR_TYPE_U16, IR_TYPE_U16, IR_TYPE_U16 )
OPCODE(SignedSaturatedAdd32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(SignedSaturatedAdd64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(SignedSaturatedDoublingMultiplyReturnHigh16, IR_TYPE_U16, IR_TYPE_U16, IR_TYPE_U16 )
OPCODE(SignedSaturatedDoublingMultiplyReturnHigh32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(SignedSaturatedSub8, IR_TYPE_U8, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(SignedSaturatedSub16, IR_TYPE_U16, IR_TYPE_U16, IR_TYPE_U16 )
OPCODE(SignedSaturatedSub32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(SignedSaturatedSub64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(UnsignedSaturatedAdd8, IR_TYPE_U8, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(UnsignedSaturatedAdd16, IR_TYPE_U16, IR_TYPE_U16, IR_TYPE_U16 )
OPCODE(UnsignedSaturatedAdd32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(UnsignedSaturatedAdd64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(UnsignedSaturatedSub8, IR_TYPE_U8, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(UnsignedSaturatedSub16, IR_TYPE_U16, IR_TYPE_U16, IR_TYPE_U16 )
OPCODE(UnsignedSaturatedSub32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(UnsignedSaturatedSub64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
// Vector saturated instructions
OPCODE(VectorSignedSaturatedAdd8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedAdd16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedAdd32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedAdd64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedSub8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedSub16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedSub32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedSub64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorUnsignedSaturatedAdd8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorUnsignedSaturatedAdd16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorUnsignedSaturatedAdd32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorUnsignedSaturatedAdd64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorUnsignedSaturatedSub8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorUnsignedSaturatedSub16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorUnsignedSaturatedSub32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorUnsignedSaturatedSub64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
// Packed instructions
OPCODE(PackedAddIR_TYPE_U8, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedAddS8, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedSubIR_TYPE_U8, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedSubS8, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedAddIR_TYPE_U16, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedAddS16, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedSubIR_TYPE_U16, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedSubS16, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedAddSubIR_TYPE_U16, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedAddSubS16, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedSubAddIR_TYPE_U16, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedSubAddS16, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedHalvingAddIR_TYPE_U8, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedHalvingAddS8, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedHalvingSubIR_TYPE_U8, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedHalvingSubS8, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedHalvingAddIR_TYPE_U16, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedHalvingAddS16, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedHalvingSubIR_TYPE_U16, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedHalvingSubS16, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedHalvingAddSubIR_TYPE_U16, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedHalvingAddSubS16, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedHalvingSubAddIR_TYPE_U16, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedHalvingSubAddS16, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedSaturatedAddIR_TYPE_U8, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedSaturatedAddS8, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedSaturatedSubIR_TYPE_U8, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedSaturatedSubS8, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedSaturatedAddIR_TYPE_U16, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedSaturatedAddS16, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedSaturatedSubIR_TYPE_U16, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedSaturatedSubS16, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedAbsDiffSumIR_TYPE_U8, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(PackedSelect, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
// CRC instructions
OPCODE(CRC32Castagnoli8, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(CRC32Castagnoli16, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(CRC32Castagnoli32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(CRC32Castagnoli64, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U64 )
OPCODE(CRC32ISO8, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(CRC32ISO16, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(CRC32ISO32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(CRC32ISO64, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U64 )
// AES instructions
OPCODE(AESDecryptSingleRound, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(AESEncryptSingleRound, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(AESInverseMixColumns, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(AESMixColumns, IR_TYPE_U128, IR_TYPE_U128 )
// SM4 instructions
OPCODE(SM4AccessSubstitutionBox, IR_TYPE_U8, IR_TYPE_U8 )
// SHA instructions
OPCODE(SHA256Hash, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(SHA256MessageSchedule0, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(SHA256MessageSchedule1, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
#if 0
// Vector instructions
OPCODE(VectorGetElement8, IR_TYPE_U8, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorGetElement16, IR_TYPE_U16, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorGetElement32, IR_TYPE_U32, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorGetElement64, IR_TYPE_U64, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorSetElement8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(VectorSetElement16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8, IR_TYPE_U16 )
OPCODE(VectorSetElement32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8, IR_TYPE_U32 )
OPCODE(VectorSetElement64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8, IR_TYPE_U64 )
OPCODE(VectorAbs8, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorAbs16, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorAbs32, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorAbs64, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorAdd8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorAdd16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorAdd32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorAdd64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorAnd, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorAndNot, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorArithmeticShiftRight8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorArithmeticShiftRight16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorArithmeticShiftRight32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorArithmeticShiftRight64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorArithmeticVShift8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorArithmeticVShift16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorArithmeticVShift32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorArithmeticVShift64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorBroadcastLower8, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorBroadcastLower16, IR_TYPE_U128, IR_TYPE_U16 )
OPCODE(VectorBroadcastLower32, IR_TYPE_U128, IR_TYPE_U32 )
OPCODE(VectorBroadcast8, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorBroadcast16, IR_TYPE_U128, IR_TYPE_U16 )
OPCODE(VectorBroadcast32, IR_TYPE_U128, IR_TYPE_U32 )
OPCODE(VectorBroadcast64, IR_TYPE_U128, IR_TYPE_U64 )
OPCODE(VectorBroadcastElementLower8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorBroadcastElementLower16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorBroadcastElementLower32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorBroadcastElement8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorBroadcastElement16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorBroadcastElement32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorBroadcastElement64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorCountLeadingZeros8, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorCountLeadingZeros16, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorCountLeadingZeros32, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorDeinterleaveEven8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorDeinterleaveEven16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorDeinterleaveEven32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorDeinterleaveEven64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorDeinterleaveEvenLower8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorDeinterleaveEvenLower16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorDeinterleaveEvenLower32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorDeinterleaveOdd8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorDeinterleaveOdd16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorDeinterleaveOdd32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorDeinterleaveOdd64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorDeinterleaveOddLower8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorDeinterleaveOddLower16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorDeinterleaveOddLower32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorEor, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorEqual8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorEqual16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorEqual32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorEqual64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorEqual128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorExtract, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorExtractLower, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorGreaterS8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorGreaterS16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorGreaterS32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorGreaterS64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorHalvingAddS8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorHalvingAddS16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorHalvingAddS32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorHalvingAddIR_TYPE_U8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorHalvingAddIR_TYPE_U16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorHalvingAddIR_TYPE_U32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorHalvingSubS8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorHalvingSubS16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorHalvingSubS32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorHalvingSubIR_TYPE_U8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorHalvingSubIR_TYPE_U16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorHalvingSubIR_TYPE_U32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorInterleaveLower8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorInterleaveLower16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorInterleaveLower32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorInterleaveLower64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorInterleaveUpper8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorInterleaveUpper16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorInterleaveUpper32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorInterleaveUpper64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorLogicalShiftLeft8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorLogicalShiftLeft16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorLogicalShiftLeft32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorLogicalShiftLeft64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorLogicalShiftRight8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorLogicalShiftRight16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorLogicalShiftRight32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorLogicalShiftRight64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorLogicalVShift8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorLogicalVShift16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorLogicalVShift32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorLogicalVShift64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorMaxS8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorMaxS16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorMaxS32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorMaxS64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorMaxIR_TYPE_U8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorMaxIR_TYPE_U16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorMaxIR_TYPE_U32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorMaxIR_TYPE_U64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorMinS8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorMinS16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorMinS32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorMinS64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorMinIR_TYPE_U8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorMinIR_TYPE_U16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorMinIR_TYPE_U32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorMinIR_TYPE_U64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorMultiply8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorMultiply16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorMultiply32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorMultiply64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorMultiplySignedWiden8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorMultiplySignedWiden16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorMultiplySignedWiden32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorMultiplyUnsignedWiden8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorMultiplyUnsignedWiden16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorMultiplyUnsignedWiden32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorNarrow16, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorNarrow32, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorNarrow64, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorNot, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorOr, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedAddLower8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedAddLower16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedAddLower32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedAddSignedWiden8, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedAddSignedWiden16, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedAddSignedWiden32, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedAddUnsignedWiden8, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedAddUnsignedWiden16, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedAddUnsignedWiden32, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedAdd8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedAdd16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedAdd32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedAdd64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedMaxS8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedMaxS16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedMaxS32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedMaxIR_TYPE_U8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedMaxIR_TYPE_U16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedMaxIR_TYPE_U32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedMinS8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedMinS16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedMinS32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedMinIR_TYPE_U8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedMinIR_TYPE_U16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedMinIR_TYPE_U32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedMaxLowerS8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedMaxLowerS16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedMaxLowerS32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedMaxLowerIR_TYPE_U8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedMaxLowerIR_TYPE_U16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedMaxLowerIR_TYPE_U32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedMinLowerS8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedMinLowerS16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedMinLowerS32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedMinLowerIR_TYPE_U8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedMinLowerIR_TYPE_U16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPairedMinLowerIR_TYPE_U32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPolynomialMultiply8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPolynomialMultiplyLong8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPolynomialMultiplyLong64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorPopulationCount, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorReverseBits, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorReverseElementsInHalfGroups8, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorReverseElementsInWordGroups8, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorReverseElementsInWordGroups16, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorReverseElementsInLongGroups8, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorReverseElementsInLongGroups16, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorReverseElementsInLongGroups32, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorReduceAdd8, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorReduceAdd16, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorReduceAdd32, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorReduceAdd64, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorRotateWholeVectorRight, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorRoundingHalvingAddS8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorRoundingHalvingAddS16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorRoundingHalvingAddS32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorRoundingHalvingAddIR_TYPE_U8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorRoundingHalvingAddIR_TYPE_U16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorRoundingHalvingAddIR_TYPE_U32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorRoundingShiftLeftS8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorRoundingShiftLeftS16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorRoundingShiftLeftS32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorRoundingShiftLeftS64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorRoundingShiftLeftIR_TYPE_U8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorRoundingShiftLeftIR_TYPE_U16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorRoundingShiftLeftIR_TYPE_U32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorRoundingShiftLeftIR_TYPE_U64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignExtend8, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignExtend16, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignExtend32, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignExtend64, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedAbsoluteDifference8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedAbsoluteDifference16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedAbsoluteDifference32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedMultiply16, IR_TYPE_VOID, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedMultiply32, IR_TYPE_VOID, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedAbs8, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedAbs16, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedAbs32, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedAbs64, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedAccumulateUnsigned8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedAccumulateUnsigned16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedAccumulateUnsigned32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedAccumulateUnsigned64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedDoublingMultiplyHigh16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedDoublingMultiplyHigh32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedDoublingMultiplyHighRounding16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedDoublingMultiplyHighRounding32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedDoublingMultiplyLong16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedDoublingMultiplyLong32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedNarrowToSigned16, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedNarrowToSigned32, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedNarrowToSigned64, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedNarrowToUnsigned16, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedNarrowToUnsigned32, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedNarrowToUnsigned64, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedNeg8, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedNeg16, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedNeg32, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedNeg64, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedShiftLeft8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedShiftLeft16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedShiftLeft32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedShiftLeft64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSignedSaturatedShiftLeftUnsigned8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorSignedSaturatedShiftLeftUnsigned16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorSignedSaturatedShiftLeftUnsigned32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorSignedSaturatedShiftLeftUnsigned64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8 )
OPCODE(VectorSub8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSub16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSub32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorSub64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorTable, Table, IR_TYPE_OPAQUE, IR_TYPE_OPAQUE, IR_TYPE_OPAQUE, IR_TYPE_OPAQUE )
OPCODE(VectorTableLookup64, IR_TYPE_U64, IR_TYPE_U64, Table, IR_TYPE_U64 )
OPCODE(VectorTableLookup128, IR_TYPE_U128, IR_TYPE_U128, Table, IR_TYPE_U128 )
OPCODE(VectorTranspose8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(VectorTranspose16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(VectorTranspose32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(VectorTranspose64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(VectorUnsignedAbsoluteDifference8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorUnsignedAbsoluteDifference16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorUnsignedAbsoluteDifference32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorUnsignedMultiply16, IR_TYPE_VOID, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorUnsignedMultiply32, IR_TYPE_VOID, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorUnsignedRecipEstimate, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorUnsignedRecipSqrtEstimate, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorUnsignedSaturatedAccumulateSigned8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorUnsignedSaturatedAccumulateSigned16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorUnsignedSaturatedAccumulateSigned32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorUnsignedSaturatedAccumulateSigned64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorUnsignedSaturatedNarrow16, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorUnsignedSaturatedNarrow32, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorUnsignedSaturatedNarrow64, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorUnsignedSaturatedShiftLeft8, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorUnsignedSaturatedShiftLeft16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorUnsignedSaturatedShiftLeft32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorUnsignedSaturatedShiftLeft64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorZeroExtend8, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorZeroExtend16, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorZeroExtend32, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorZeroExtend64, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(VectorZeroUpper, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(ZeroVector, IR_TYPE_U128, )
#endif
// Floating-point operations
OPCODE(FPAbs16, IR_TYPE_U16, IR_TYPE_U16 )
OPCODE(FPAbs32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(FPAbs64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(FPAdd32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(FPAdd64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(FPCompare32, IR_TYPE_NZCV, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U1 )
OPCODE(FPCompare64, IR_TYPE_NZCV, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U1 )
OPCODE(FPDiv32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(FPDiv64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(FPMax32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(FPMax64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(FPMaxNumeric32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(FPMaxNumeric64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(FPMin32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(FPMin64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(FPMinNumeric32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(FPMinNumeric64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(FPMul32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(FPMul64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(FPMulAdd16, IR_TYPE_U16, IR_TYPE_U16, IR_TYPE_U16, IR_TYPE_U16 )
OPCODE(FPMulAdd32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(FPMulAdd64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(FPMulSub16, IR_TYPE_U16, IR_TYPE_U16, IR_TYPE_U16, IR_TYPE_U16 )
OPCODE(FPMulSub32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(FPMulSub64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(FPMulX32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(FPMulX64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(FPNeg16, IR_TYPE_U16, IR_TYPE_U16 )
OPCODE(FPNeg32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(FPNeg64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(FPRecipEstimate16, IR_TYPE_U16, IR_TYPE_U16 )
OPCODE(FPRecipEstimate32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(FPRecipEstimate64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(FPRecipExponent16, IR_TYPE_U16, IR_TYPE_U16 )
OPCODE(FPRecipExponent32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(FPRecipExponent64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(FPRecipStepFused16, IR_TYPE_U16, IR_TYPE_U16, IR_TYPE_U16 )
OPCODE(FPRecipStepFused32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(FPRecipStepFused64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(FPRoundInt16, IR_TYPE_U16, IR_TYPE_U16, IR_TYPE_U8, IR_TYPE_U1 )
OPCODE(FPRoundInt32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U8, IR_TYPE_U1 )
OPCODE(FPRoundInt64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U8, IR_TYPE_U1 )
OPCODE(FPRSqrtEstimate16, IR_TYPE_U16, IR_TYPE_U16 )
OPCODE(FPRSqrtEstimate32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(FPRSqrtEstimate64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(FPRSqrtStepFused16, IR_TYPE_U16, IR_TYPE_U16, IR_TYPE_U16 )
OPCODE(FPRSqrtStepFused32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(FPRSqrtStepFused64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(FPSqrt32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(FPSqrt64, IR_TYPE_U64, IR_TYPE_U64 )
OPCODE(FPSub32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32 )
OPCODE(FPSub64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64 )
// Floating-point conversions
OPCODE(FPHalfToDouble, IR_TYPE_U64, IR_TYPE_U16, IR_TYPE_U8 )
OPCODE(FPHalfToSingle, IR_TYPE_U32, IR_TYPE_U16, IR_TYPE_U8 )
OPCODE(FPSingleToDouble, IR_TYPE_U64, IR_TYPE_U32, IR_TYPE_U8 )
OPCODE(FPSingleToHalf, IR_TYPE_U16, IR_TYPE_U32, IR_TYPE_U8 )
OPCODE(FPDoubleToHalf, IR_TYPE_U16, IR_TYPE_U64, IR_TYPE_U8 )
OPCODE(FPDoubleToSingle, IR_TYPE_U32, IR_TYPE_U64, IR_TYPE_U8 )
OPCODE(FPDoubleToFixedS16, IR_TYPE_U16, IR_TYPE_U64, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(FPDoubleToFixedS32, IR_TYPE_U32, IR_TYPE_U64, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(FPDoubleToFixedS64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(FPDoubleToFixedIR_TYPE_U16, IR_TYPE_U16, IR_TYPE_U64, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(FPDoubleToFixedIR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U64, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(FPDoubleToFixedIR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(FPHalfToFixedS16, IR_TYPE_U16, IR_TYPE_U16, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(FPHalfToFixedS32, IR_TYPE_U32, IR_TYPE_U16, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(FPHalfToFixedS64, IR_TYPE_U64, IR_TYPE_U16, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(FPHalfToFixedIR_TYPE_U16, IR_TYPE_U16, IR_TYPE_U16, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(FPHalfToFixedIR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U16, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(FPHalfToFixedIR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U16, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(FPSingleToFixedS16, IR_TYPE_U16, IR_TYPE_U32, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(FPSingleToFixedS32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(FPSingleToFixedS64, IR_TYPE_U64, IR_TYPE_U32, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(FPSingleToFixedIR_TYPE_U16, IR_TYPE_U16, IR_TYPE_U32, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(FPSingleToFixedIR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(FPSingleToFixedIR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U32, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(FPFixedIR_TYPE_U16ToSingle, IR_TYPE_U32, IR_TYPE_U16, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(FPFixedS16ToSingle, IR_TYPE_U32, IR_TYPE_U16, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(FPFixedIR_TYPE_U16ToDouble, IR_TYPE_U64, IR_TYPE_U16, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(FPFixedS16ToDouble, IR_TYPE_U64, IR_TYPE_U16, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(FPFixedIR_TYPE_U32ToSingle, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(FPFixedS32ToSingle, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(FPFixedIR_TYPE_U32ToDouble, IR_TYPE_U64, IR_TYPE_U32, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(FPFixedS32ToDouble, IR_TYPE_U64, IR_TYPE_U32, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(FPFixedIR_TYPE_U64ToDouble, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(FPFixedIR_TYPE_U64ToSingle, IR_TYPE_U32, IR_TYPE_U64, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(FPFixedS64ToDouble, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U8, IR_TYPE_U8 )
OPCODE(FPFixedS64ToSingle, IR_TYPE_U32, IR_TYPE_U64, IR_TYPE_U8, IR_TYPE_U8 )
// Floating-point vector instructions
OPCODE(FPVectorAbs16, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(FPVectorAbs32, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(FPVectorAbs64, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(FPVectorAdd32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorAdd64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorDiv32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorDiv64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorEqual16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorEqual32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorEqual64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorFromHalf32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8, IR_TYPE_U1 )
OPCODE(FPVectorFromSignedFixed32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8, IR_TYPE_U8, IR_TYPE_U1 )
OPCODE(FPVectorFromSignedFixed64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8, IR_TYPE_U8, IR_TYPE_U1 )
OPCODE(FPVectorFromUnsignedFixed32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8, IR_TYPE_U8, IR_TYPE_U1 )
OPCODE(FPVectorFromUnsignedFixed64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8, IR_TYPE_U8, IR_TYPE_U1 )
OPCODE(FPVectorGreater32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorGreater64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorGreaterEqual32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorGreaterEqual64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorMax32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorMax64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorMaxNumeric32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorMaxNumeric64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorMin32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorMin64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorMinNumeric32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorMinNumeric64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorMul32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorMul64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorMulAdd16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorMulAdd32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorMulAdd64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorMulX32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorMulX64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorNeg16, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(FPVectorNeg32, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(FPVectorNeg64, IR_TYPE_U128, IR_TYPE_U128 )
OPCODE(FPVectorPairedAdd32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorPairedAdd64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorPairedAddLower32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorPairedAddLower64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorRecipEstimate16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorRecipEstimate32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorRecipEstimate64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorRecipStepFused16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorRecipStepFused32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorRecipStepFused64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorRoundInt16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8, IR_TYPE_U1, IR_TYPE_U1 )
OPCODE(FPVectorRoundInt32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8, IR_TYPE_U1, IR_TYPE_U1 )
OPCODE(FPVectorRoundInt64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8, IR_TYPE_U1, IR_TYPE_U1 )
OPCODE(FPVectorRSqrtEstimate16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorRSqrtEstimate32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorRSqrtEstimate64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorRSqrtStepFused16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorRSqrtStepFused32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorRSqrtStepFused64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorSqrt32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorSqrt64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorSub32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorSub64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U1 )
OPCODE(FPVectorToHalf32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8, IR_TYPE_U1 )
OPCODE(FPVectorToSignedFixed16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8, IR_TYPE_U8, IR_TYPE_U1 )
OPCODE(FPVectorToSignedFixed32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8, IR_TYPE_U8, IR_TYPE_U1 )
OPCODE(FPVectorToSignedFixed64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8, IR_TYPE_U8, IR_TYPE_U1 )
OPCODE(FPVectorToUnsignedFixed16, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8, IR_TYPE_U8, IR_TYPE_U1 )
OPCODE(FPVectorToUnsignedFixed32, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8, IR_TYPE_U8, IR_TYPE_U1 )
OPCODE(FPVectorToUnsignedFixed64, IR_TYPE_U128, IR_TYPE_U128, IR_TYPE_U8, IR_TYPE_U8, IR_TYPE_U1 )
// A32 Memory access
A32OPC(ClearExclusive, IR_TYPE_VOID, )
A32OPC(ReadMemory8, IR_TYPE_U8, IR_TYPE_U64, IR_TYPE_U32, IR_TYPE_MEMORY_ACCESS )
A32OPC(ReadMemory16, IR_TYPE_U16, IR_TYPE_U64, IR_TYPE_U32, IR_TYPE_MEMORY_ACCESS )
A32OPC(ReadMemory32, IR_TYPE_U32, IR_TYPE_U64, IR_TYPE_U32, IR_TYPE_MEMORY_ACCESS )
A32OPC(ReadMemory64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U32, IR_TYPE_MEMORY_ACCESS )
A32OPC(ExclusiveReadMemory8, IR_TYPE_U8, IR_TYPE_U64, IR_TYPE_U32, IR_TYPE_MEMORY_ACCESS )
A32OPC(ExclusiveReadMemory16, IR_TYPE_U16, IR_TYPE_U64, IR_TYPE_U32, IR_TYPE_MEMORY_ACCESS )
A32OPC(ExclusiveReadMemory32, IR_TYPE_U32, IR_TYPE_U64, IR_TYPE_U32, IR_TYPE_MEMORY_ACCESS )
A32OPC(ExclusiveReadMemory64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U32, IR_TYPE_MEMORY_ACCESS )
A32OPC(WriteMemory8, IR_TYPE_VOID, IR_TYPE_U64, IR_TYPE_U32, IR_TYPE_U8, IR_TYPE_MEMORY_ACCESS )
A32OPC(WriteMemory16, IR_TYPE_VOID, IR_TYPE_U64, IR_TYPE_U32, IR_TYPE_U16, IR_TYPE_MEMORY_ACCESS )
A32OPC(WriteMemory32, IR_TYPE_VOID, IR_TYPE_U64, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_MEMORY_ACCESS )
A32OPC(WriteMemory64, IR_TYPE_VOID, IR_TYPE_U64, IR_TYPE_U32, IR_TYPE_U64, IR_TYPE_MEMORY_ACCESS )
A32OPC(ExclusiveWriteMemory8, IR_TYPE_U32, IR_TYPE_U64, IR_TYPE_U32, IR_TYPE_U8, IR_TYPE_MEMORY_ACCESS )
A32OPC(ExclusiveWriteMemory16, IR_TYPE_U32, IR_TYPE_U64, IR_TYPE_U32, IR_TYPE_U16, IR_TYPE_MEMORY_ACCESS )
A32OPC(ExclusiveWriteMemory32, IR_TYPE_U32, IR_TYPE_U64, IR_TYPE_U32, IR_TYPE_U32, IR_TYPE_MEMORY_ACCESS )
A32OPC(ExclusiveWriteMemory64, IR_TYPE_U32, IR_TYPE_U64, IR_TYPE_U32, IR_TYPE_U64, IR_TYPE_MEMORY_ACCESS )
#if 0
// A64 Memory access
A64OPC(ClearExclusive, IR_TYPE_VOID, )
A64OPC(ReadMemory8, IR_TYPE_U8, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_MEMORY_ACCESS )
A64OPC(ReadMemory16, IR_TYPE_U16, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_MEMORY_ACCESS )
A64OPC(ReadMemory32, IR_TYPE_U32, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_MEMORY_ACCESS )
A64OPC(ReadMemory64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_MEMORY_ACCESS )
A64OPC(ReadMemory128, IR_TYPE_U128, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_MEMORY_ACCESS )
A64OPC(ExclusiveReadMemory8, IR_TYPE_U8, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_MEMORY_ACCESS )
A64OPC(ExclusiveReadMemory16, IR_TYPE_U16, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_MEMORY_ACCESS )
A64OPC(ExclusiveReadMemory32, IR_TYPE_U32, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_MEMORY_ACCESS )
A64OPC(ExclusiveReadMemory64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_MEMORY_ACCESS )
A64OPC(ExclusiveReadMemory128, IR_TYPE_U128, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_MEMORY_ACCESS )
A64OPC(WriteMemory8, IR_TYPE_VOID, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U8, IR_TYPE_MEMORY_ACCESS )
A64OPC(WriteMemory16, IR_TYPE_VOID, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U16, IR_TYPE_MEMORY_ACCESS )
A64OPC(WriteMemory32, IR_TYPE_VOID, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U32, IR_TYPE_MEMORY_ACCESS )
A64OPC(WriteMemory64, IR_TYPE_VOID, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_MEMORY_ACCESS )
A64OPC(WriteMemory128, IR_TYPE_VOID, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U128, IR_TYPE_MEMORY_ACCESS )
A64OPC(ExclusiveWriteMemory8, IR_TYPE_U32, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U8, IR_TYPE_MEMORY_ACCESS )
A64OPC(ExclusiveWriteMemory16, IR_TYPE_U32, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U16, IR_TYPE_MEMORY_ACCESS )
A64OPC(ExclusiveWriteMemory32, IR_TYPE_U32, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U32, IR_TYPE_MEMORY_ACCESS )
A64OPC(ExclusiveWriteMemory64, IR_TYPE_U32, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_MEMORY_ACCESS )
A64OPC(ExclusiveWriteMemory128, IR_TYPE_U32, IR_TYPE_U64, IR_TYPE_U64, IR_TYPE_U128, IR_TYPE_MEMORY_ACCESS )
// Coprocessor
A32OPC(CoprocInternalOperation, IR_TYPE_VOID, CoprocInfo )
A32OPC(CoprocSendOneWord, IR_TYPE_VOID, CoprocInfo, IR_TYPE_U32 )
A32OPC(CoprocSendTwoWords, IR_TYPE_VOID, CoprocInfo, IR_TYPE_U32, IR_TYPE_U32 )
A32OPC(CoprocGetOneWord, IR_TYPE_U32, CoprocInfo )
A32OPC(CoprocGetTwoWords, IR_TYPE_U64, CoprocInfo )
A32OPC(CoprocLoadWords, IR_TYPE_VOID, CoprocInfo, IR_TYPE_U32 )
A32OPC(CoprocStoreWords, IR_TYPE_VOID, CoprocInfo, IR_TYPE_U32 )
#endif
// clang-format on

View file

@ -26,15 +26,17 @@ typedef enum
IR_TYPE_U64 = 1 << 4, IR_TYPE_U64 = 1 << 4,
IR_TYPE_U128 = 1 << 5, IR_TYPE_U128 = 1 << 5,
IR_TYPE_A32_REGISTER = 1 << 6, // ARM32 GPR R0-R14 IR_TYPE_A32_REGISTER = 1 << 6, // ARM32 GPR R0-R14
IR_TYPE_A32_EXTENDED_REGISTER = 1 << 7, // ARM32 Extended Registers (e.g., for
IR_TYPE_CONDITION = 1 << 9, // Condition codes
IR_TYPE_MEMORY_ACCESS = 1 << 10, // Memory access type
#if 0 #if 0
IR_TYPE_A32_EXT_REG = 1 << 7, // ARM32 Extended Registers (e.g., for
// VFP/NEON, or just R15 if treated specially) // VFP/NEON, or just R15 if treated specially)
IR_TYPE_A32_CPSR = 1 << 8, // ARM32 CPSR/SPSR IR_TYPE_A32_CPSR = 1 << 8, // ARM32 CPSR/SPSR
IR_TYPE_COND = 1 << 9, // Condition codes
IR_TYPE_ACC_TYPE = 1 << 10, // Memory access type IR_TYPE_ACC_TYPE = 1 << 10, // Memory access type
#endif #endif
IR_TYPE_OPAQUE IR_TYPE_OPAQUE
= 1 << 11, // Represents a value defined by another IR instruction = 1 << 11, // Represents a value defined by another IR instruction
IR_TYPE_NZCV = 1 << 12,
} type_t; } type_t;
/*! /*!

View file

@ -1,21 +1,12 @@
// Copyright 2025 Pound Emulator Project. All rights reserved. // Copyright 2025 Pound Emulator Project. All rights reserved.
#include <chrono>
#include <memory>
#include <thread>
#define LOG_MODULE "main" #define LOG_MODULE "main"
#include "common/logging.h" #include "common/logging.h"
#include "common/passert.h" #include "common/passert.h"
#include "frontend/gui.h"
#include "host/memory/arena.h" #include "host/memory/arena.h"
#include "jit/decoder/arm32.h" #include "jit/decoder/arm32.h"
#include "jit/ir/opcode.h"
#include <SDL3/SDL_opengl.h> #include "jit/a32_types.h"
#include "frontend/color.h"
#include "frontend/panels.h"
#include "imgui_impl_opengl3.h"
#include "imgui_impl_sdl3.h"
int main() int main()
{ {
@ -26,6 +17,7 @@ int main()
pound::jit::decoder::arm32_decode(&decoder, 0xE2800001); pound::jit::decoder::arm32_decode(&decoder, 0xE2800001);
/* Sub r0, r0, #1 */ /* Sub r0, r0, #1 */
pound::jit::decoder::arm32_decode(&decoder, 0xE2400001); pound::jit::decoder::arm32_decode(&decoder, 0xE2400001);
pound::jit::ir::opcode_init();
#if 0 #if 0
gui::window_t window = {.data = nullptr, .gl_context = nullptr}; gui::window_t window = {.data = nullptr, .gl_context = nullptr};