{ "Defines": [ "constexpr static uint8_t COND_EQ = 0", "constexpr static uint8_t COND_NEQ = 1", "constexpr static uint8_t COND_UGE = 2", "constexpr static uint8_t COND_ULT = 3", "constexpr static uint8_t COND_MI = 4", "constexpr static uint8_t COND_PL = 5", "constexpr static uint8_t COND_VS = 6", "constexpr static uint8_t COND_VC = 7", "constexpr static uint8_t COND_UGT = 8", "constexpr static uint8_t COND_ULE = 9", "constexpr static uint8_t COND_SGE = 10", "constexpr static uint8_t COND_SLT = 11", "constexpr static uint8_t COND_SGT = 12", "constexpr static uint8_t COND_SLE = 13", "static constexpr FEXCore::IR::RegisterClassType GPRClass {0}", "static constexpr FEXCore::IR::RegisterClassType FPRClass {1}" ], "Ops": { "Dummy": { }, "IRHeader": { "SSAArgs": "1", "SSANames": [ "Blocks" ], "Args": [ "uint64_t", "Entry", "uint32_t", "BlockCount" ] }, "CodeBlock": { "SSAArgs": "3", "RAOverride": "0", "SSANames": [ "Begin", "Last", "Next" ] }, "BeginBlock": {}, "EndBlock": { "Args": [ "uint64_t", "RIPIncrement" ] }, "GuestCallDirect": { "Args": [ "uint64_t", "RIP", "uint64_t", "NextRIP" ] }, "GuestCallIndirect": { "SSAArgs": "1", "SSANames": [ "RIP" ], "Args": [ "uint64_t", "NextRIP" ] }, "GuestReturn": { }, "Constant": { "HasDest": true, "FixedDestSize": "8", "Args": [ "uint64_t", "Constant" ] }, "Break": { "Args": [ "uint8_t", "Reason", "uint8_t", "Literal" ] }, "ExitFunction": {}, "Jump": { "SSAArgs": "1", "RAOverride": "0" }, "CondJump": { "SSAArgs": "3", "RAOverride": "1", "SSANames": [ "Cond", "TrueBlock", "FalseBlock" ] }, "Phi": { "HasDest": true, "DestSize": "~0", "ArgPrinter": false, "SSAArgs": "2", "RAOverride": 0, "SSANames": [ "PhiBegin", "PhiEnd" ], "Args": [ "uint8_t", "Class" ] }, "PhiValue": { "SSAArgs": "3", "RAOverride": 0, "DestSize": "GetOpSize(ssa0)", "SSANames": [ "Value", "Block", "Next" ] }, "Mov": { "HasDest": true, "DestSize": "GetOpSize(ssa0)", "SSAArgs": "1" }, "CycleCounter": { "HasDest": true, "FixedDestSize": "8" }, "LoadContext": { "HasDest": true, "DestSize": "Size", "Args": [ "uint8_t", "Size", "uint32_t", "Offset", "RegisterClassType", "Class" ] }, "StoreContext": { "SSAArgs": "1", "Args": [ "uint8_t", "Size", "uint32_t", "Offset", "RegisterClassType", "Class" ] }, "LoadContextIndexed": { "SSAArgs": "1", "HasDest": true, "DestSize": "Size", "Args": [ "uint8_t", "Size", "uint32_t", "BaseOffset", "uint32_t", "Stride", "RegisterClassType", "Class" ] }, "StoreContextIndexed": { "SSAArgs": "2", "Args": [ "uint8_t", "Size", "uint32_t", "BaseOffset", "uint32_t", "Stride", "RegisterClassType", "Class" ] }, "SpillRegister": { "SSAArgs": "1", "Args": [ "uint32_t", "Slot", "RegisterClassType", "Class" ] }, "FillRegister": { "HasDest": true, "Args": [ "uint32_t", "Slot", "RegisterClassType", "Class" ] }, "LoadFlag": { "HasDest": true, "DestSize": "1", "Args": [ "uint32_t", "Flag" ] }, "StoreFlag": { "SSAArgs": "1", "Args": [ "uint32_t", "Flag" ] }, "Syscall": { "HasDest": true, "FixedDestSize": "8", "SSAArgs": "7" }, "LoadMem": { "HasDest": true, "DestSize": "Size", "SSAArgs": "1", "Args": [ "uint8_t", "Size", "uint8_t", "Align", "RegisterClassType", "Class" ] }, "StoreMem": { "SSAArgs": "2", "Args": [ "uint8_t", "Size", "uint8_t", "Align", "RegisterClassType", "Class" ] }, "Add": { "HasDest": true, "SSAArgs": "2" }, "Sub": { "HasDest": true, "SSAArgs": "2" }, "Neg": { "HasDest": true, "SSAArgs": "1" }, "Mul": { "HasDest": true, "SSAArgs": "2" }, "UMul": { "HasDest": true, "SSAArgs": "2" }, "Div": { "HasDest": true, "SSAArgs": "2" }, "UDiv": { "HasDest": true, "SSAArgs": "2" }, "Rem": { "HasDest": true, "SSAArgs": "2" }, "URem": { "HasDest": true, "SSAArgs": "2" }, "MulH": { "HasDest": true, "SSAArgs": "2" }, "UMulH": { "HasDest": true, "SSAArgs": "2" }, "Or": { "HasDest": true, "SSAArgs": "2" }, "And": { "HasDest": true, "SSAArgs": "2" }, "Xor": { "HasDest": true, "SSAArgs": "2" }, "Lshl": { "HasDest": true, "SSAArgs": "2" }, "Lshr": { "HasDest": true, "SSAArgs": "2" }, "Ashr": { "HasDest": true, "SSAArgs": "2" }, "Rol": { "HasDest": true, "SSAArgs": "2" }, "Ror": { "HasDest": true, "SSAArgs": "2" }, "LDiv": { "HasDest": true, "SSAArgs": "3" }, "LUDiv": { "HasDest": true, "SSAArgs": "3" }, "LRem": { "HasDest": true, "SSAArgs": "3" }, "LURem": { "HasDest": true, "SSAArgs": "3" }, "Zext": { "HasDest": true, "DestSize": "SrcSize / 4", "SSAArgs": "1", "Args": [ "uint8_t", "SrcSize" ] }, "Sext": { "HasDest": true, "DestSize": "SrcSize / 4", "SSAArgs": "1", "Args": [ "uint8_t", "SrcSize" ] }, "Not": { "HasDest": true, "SSAArgs": "1" }, "Popcount": { "HasDest": true, "SSAArgs": "1" }, "FindLSB": { "HasDest": true, "SSAArgs": "1" }, "FindMSB": { "HasDest": true, "SSAArgs": "1" }, "FindTrailingZeros": { "HasDest": true, "SSAArgs": "1" }, "Rev": { "HasDest": true, "SSAArgs": "1" }, "CPUID": { "HasDest": true, "FixedDestSize": "4", "NumElements": "4", "SSAArgs": "1" }, "Bfi": { "HasDest": true, "DestSize": "GetOpSize(ssa0)", "SSAArgs": "2", "Args": [ "uint8_t", "Width", "uint8_t", "lsb" ] }, "Bfe": { "HasDest": true, "DestSize": "GetOpSize(ssa0)", "SSAArgs": "1", "Args": [ "uint8_t", "Width", "uint8_t", "lsb" ] }, "Sbfe": { "HasDest": true, "SSAArgs": "1", "Args": [ "uint8_t", "Width", "uint8_t", "lsb" ] }, "Select": { "HasDest": true, "SSAArgs": "4", "Args": [ "CondClassType", "Cond" ] }, "CAS": { "HasDest": true, "DestSize": "GetOpSize(ssa0)", "SSAArgs": "3" }, "AtomicAdd": { "SSAArgs": "2", "Args": [ "uint8_t", "Size" ] }, "AtomicSub": { "SSAArgs": "2", "Args": [ "uint8_t", "Size" ] }, "AtomicAnd": { "SSAArgs": "2", "Args": [ "uint8_t", "Size" ] }, "AtomicOr": { "SSAArgs": "2", "Args": [ "uint8_t", "Size" ] }, "AtomicXor": { "SSAArgs": "2", "Args": [ "uint8_t", "Size" ] }, "AtomicSwap": { "HasDest": true, "DestSize": "Size", "SSAArgs": "2", "Args": [ "uint8_t", "Size" ] }, "AtomicFetchAdd": { "HasDest": true, "DestSize": "Size", "SSAArgs": "2", "Args": [ "uint8_t", "Size" ] }, "AtomicFetchSub": { "HasDest": true, "DestSize": "Size", "SSAArgs": "2", "Args": [ "uint8_t", "Size" ] }, "AtomicFetchAnd": { "HasDest": true, "DestSize": "Size", "SSAArgs": "2", "Args": [ "uint8_t", "Size" ] }, "AtomicFetchOr": { "HasDest": true, "DestSize": "Size", "SSAArgs": "2", "Args": [ "uint8_t", "Size" ] }, "AtomicFetchXor": { "HasDest": true, "DestSize": "Size", "SSAArgs": "2", "Args": [ "uint8_t", "Size" ] }, "VExtractToGPR": { "HasDest": true, "SSAArgs": "1", "DestSize": "ElementSize", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize", "uint8_t", "Idx" ] }, "FCVTZU": { "HasDest": true, "DestSize": "ElementSize", "SSAArgs": "1", "Args": [ "uint8_t", "ElementSize" ] }, "FCVTZS": { "HasDest": true, "DestSize": "ElementSize", "SSAArgs": "1", "Args": [ "uint8_t", "ElementSize" ] }, "ExtractElement": { "HasDest": true, "DestSize": "GetOpSize(ssa0)", "SSAArgs": "1", "Args": [ "uint8_t", "Idx" ] }, "Print": { "SSAArgs": "1" }, "CreateVector2": { "HasDest": true, "DestSize": "GetOpSize(ssa0) * 2", "SSAArgs": "2" }, "CreateVector3": { "HasDest": true, "DestSize": "GetOpSize(ssa0) * 3", "SSAArgs": "3" }, "CreateVector4": { "HasDest": true, "DestSize": "GetOpSize(ssa0) * 4", "SSAArgs": "4" }, "SplatVector2": { "HasDest": true, "NumElements": "2", "DestSize": "GetOpSize(ssa0) * 2", "SSAArgs": "1" }, "SplatVector3": { "HasDest": true, "NumElements": "3", "DestSize": "GetOpSize(ssa0) * 3", "SSAArgs": "1" }, "SplatVector4": { "HasDest": true, "NumElements": "4", "DestSize": "GetOpSize(ssa0) * 4", "SSAArgs": "1" }, "VAnd": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VOr": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VXor": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VAdd": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VSub": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VUQAdd": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VUQSub": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VSQAdd": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VSQSub": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VFAdd": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VFSub": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VFMul": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VFDiv": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VFMin": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VFMax": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VFRecp": { "HasDest": true, "SSAArgs": "1", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VFSqrt": { "HasDest": true, "SSAArgs": "1", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VFRSqrt": { "HasDest": true, "SSAArgs": "1", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VNeg": { "HasDest": true, "SSAArgs": "1", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VNot": { "HasDest": true, "SSAArgs": "1", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VUMin": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VSMin": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VUMax": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VSMax": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VZip": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VZip2": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VCMPEQ": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VCMPGT": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VFCMPEQ": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VFCMPNEQ": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VFCMPLT": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VFCMPGT": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VFCMPLE": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VUShl": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VUShr": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VSShr": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VUShlS": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VUShrS": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VSShrS": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VInsElement": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize", "uint8_t", "DestIdx", "uint8_t", "SrcIdx" ] }, "VExtr": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize", "uint8_t", "Index" ] }, "VInsGPR": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize", "uint8_t", "Index" ] }, "VSLI": { "HasDest": true, "SSAArgs": "1", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize", "uint8_t", "ByteShift" ] }, "VSRI": { "HasDest": true, "SSAArgs": "1", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize", "uint8_t", "ByteShift" ] }, "VUShrI": { "HasDest": true, "SSAArgs": "1", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize", "uint8_t", "BitShift" ] }, "VSShrI": { "HasDest": true, "SSAArgs": "1", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize", "uint8_t", "BitShift" ] }, "VShlI": { "HasDest": true, "SSAArgs": "1", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize", "uint8_t", "BitShift" ] }, "VBitcast": { "HasDest": true, "SSAArgs": "1" }, "VSXTL": { "HasDest": true, "SSAArgs": "1", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VUXTL": { "HasDest": true, "SSAArgs": "1", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VCastFromGPR": { "HasDest": true, "SSAArgs": "1", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VSQXTN": { "HasDest": true, "SSAArgs": "1", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VSQXTN2": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VSQXTUN": { "HasDest": true, "SSAArgs": "1", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VSQXTUN2": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "UCVTF": { "HasDest": true, "SSAArgs": "1", "Args": [ "uint8_t", "ElementSize" ] }, "SCVTF": { "HasDest": true, "SSAArgs": "1", "Args": [ "uint8_t", "ElementSize" ] }, "VUCVTF": { "HasDest": true, "SSAArgs": "1", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VSCVTF": { "HasDest": true, "SSAArgs": "1", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VFCVTL": { "HasDest": true, "SSAArgs": "1", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VFCVTN": { "HasDest": true, "SSAArgs": "1", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "FCVTF": { "HasDest": true, "SSAArgs": "1", "Args": [ "uint8_t", "DstElementSize", "uint8_t", "SrcElementSize" ] }, "VUMul": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VSMul": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VUMull": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "VSMull": { "HasDest": true, "SSAArgs": "2", "Args": [ "uint8_t", "RegisterSize", "uint8_t", "ElementSize" ] }, "Last": { "Last": true, "Args": [] } } }