Files
FEX-Emu--FEX/Source/Interface/IR/IR.json
T
Ryan Houdek 1ef4bf90a2 Adds new IR Ops
18 new IR ops for handling things
2020-03-06 07:56:02 +02:00

788 lines
13 KiB
JSON

{
"Defines": [
"constexpr static uint8_t COND_EQ = 0",
"constexpr static uint8_t COND_NEQ = 1",
"constexpr static uint8_t COND_CS = 2",
"constexpr static uint8_t COND_CC = 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_HI = 8",
"constexpr static uint8_t COND_LS = 9",
"constexpr static uint8_t COND_GE = 10",
"constexpr static uint8_t COND_LT = 11",
"constexpr static uint8_t COND_GT = 12",
"constexpr static uint8_t COND_LE = 13"
],
"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"
]
},
"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"
]
},
"StoreContext": {
"SSAArgs": "1",
"Args": [
"uint8_t", "Size",
"uint32_t", "Offset"
]
},
"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"
]
},
"StoreMem": {
"SSAArgs": "2",
"Args": [
"uint8_t", "Size",
"uint8_t", "Align"
]
},
"Add": {
"HasDest": true,
"SSAArgs": "2"
},
"Sub": {
"HasDest": true,
"SSAArgs": "2"
},
"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"
]
},
"Neg": {
"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"
},
"VExtractToGPR": {
"HasDest": true,
"SSAArgs": "1",
"DestSize": "ElementSize",
"Args": [
"uint8_t", "RegisterSize",
"uint8_t", "ElementSize",
"uint8_t", "Idx"
]
},
"FCVTZU": {
"HasDest": true,
"SSAArgs": "1",
"Args": [
"uint8_t", "ElementSize"
]
},
"FCVTZS": {
"HasDest": true,
"SSAArgs": "1",
"Args": [
"uint8_t", "ElementSize"
]
},
"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"
},
"ExtractElement": {
"HasDest": true,
"DestSize": "GetOpSize(ssa0)",
"SSAArgs": "1",
"Args": [
"uint8_t", "Idx"
]
},
"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"
]
},
"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"
]
},
"VFMin": {
"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"
]
},
"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"
]
},
"VUShl": {
"HasDest": true,
"SSAArgs": "2",
"Args": [
"uint8_t", "RegisterSize",
"uint8_t", "ElementSize"
]
},
"VUShlS": {
"HasDest": true,
"SSAArgs": "2",
"Args": [
"uint8_t", "RegisterSize",
"uint8_t", "ElementSize"
]
},
"VUShr": {
"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"
]
},
"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"
]
},
"VBitcast": {
"HasDest": true,
"SSAArgs": "1"
},
"VCastFromGPR": {
"HasDest": true,
"SSAArgs": "1",
"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"
]
},
"FCVTF": {
"HasDest": true,
"SSAArgs": "1",
"Args": [
"uint8_t", "DstElementSize",
"uint8_t", "SrcElementSize"
]
},
"Last": {
"Last": true,
"Args": []
}
}
}