mirror of
https://github.com/pound-emu/pound.git
synced 2025-12-11 16:36:59 +00:00
Compare commits
No commits in common. "523d1e6656d11607126f24cd5afe415b7f49fe6c" and "304aeed9f61f1ec4a1bfdf64730632fc597b8fb4" have entirely different histories.
523d1e6656
...
304aeed9f6
6 changed files with 13 additions and 870 deletions
|
|
@ -4,7 +4,6 @@ target_sources(jit PRIVATE
|
|||
${CMAKE_CURRENT_SOURCE_DIR}/decoder/arm32.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/ir/type.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/ir/value.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/ir/opcode.cpp
|
||||
)
|
||||
|
||||
target_link_libraries(jit PRIVATE common host)
|
||||
|
|
|
|||
|
|
@ -1,29 +0,0 @@
|
|||
#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
|
||||
|
|
@ -1,58 +0,0 @@
|
|||
/**
|
||||
* @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);
|
||||
}
|
||||
|
|
@ -1,775 +0,0 @@
|
|||
// 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
|
||||
|
|
@ -26,17 +26,15 @@ typedef enum
|
|||
IR_TYPE_U64 = 1 << 4,
|
||||
IR_TYPE_U128 = 1 << 5,
|
||||
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
|
||||
IR_TYPE_A32_EXT_REG = 1 << 7, // ARM32 Extended Registers (e.g., for
|
||||
// VFP/NEON, or just R15 if treated specially)
|
||||
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
|
||||
#endif
|
||||
IR_TYPE_OPAQUE
|
||||
= 1 << 11, // Represents a value defined by another IR instruction
|
||||
IR_TYPE_NZCV = 1 << 12,
|
||||
} type_t;
|
||||
|
||||
/*!
|
||||
|
|
|
|||
14
src/main.cpp
14
src/main.cpp
|
|
@ -1,12 +1,21 @@
|
|||
// Copyright 2025 Pound Emulator Project. All rights reserved.
|
||||
|
||||
#include <chrono>
|
||||
#include <memory>
|
||||
#include <thread>
|
||||
|
||||
#define LOG_MODULE "main"
|
||||
#include "common/logging.h"
|
||||
#include "common/passert.h"
|
||||
#include "frontend/gui.h"
|
||||
#include "host/memory/arena.h"
|
||||
#include "jit/decoder/arm32.h"
|
||||
#include "jit/ir/opcode.h"
|
||||
#include "jit/a32_types.h"
|
||||
|
||||
#include <SDL3/SDL_opengl.h>
|
||||
#include "frontend/color.h"
|
||||
#include "frontend/panels.h"
|
||||
#include "imgui_impl_opengl3.h"
|
||||
#include "imgui_impl_sdl3.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
|
|
@ -17,7 +26,6 @@ int main()
|
|||
pound::jit::decoder::arm32_decode(&decoder, 0xE2800001);
|
||||
/* Sub r0, r0, #1 */
|
||||
pound::jit::decoder::arm32_decode(&decoder, 0xE2400001);
|
||||
pound::jit::ir::opcode_init();
|
||||
|
||||
#if 0
|
||||
gui::window_t window = {.data = nullptr, .gl_context = nullptr};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue