// operation, result, arguments... VALUE_OPCODE(Phi, Opaque) VALUE_OPCODE(Identity, Opaque, Opaque) VALUE_OPCODE(Void, Void) VALUE_OPCODE(Reference, Void, U1) VALUE_OPCODE(ReferenceU32, Void, U32) VALUE_OPCODE(ConditionRef, U1, U1) // Translation and register-state pseudo operations. VALUE_OPCODE(GetUserData, U32, ScalarReg) VALUE_OPCODE(GetShaderBase, U64) VALUE_OPCODE(MeshDrawParameter, U32, U32) VALUE_OPCODE(MeshAllocate, Void, U32) VALUE_OPCODE(TessellationBase, U32, U32) VALUE_OPCODE(GetTessellationAttribute, U32, U32, U32, U1) VALUE_OPCODE(SetTessellationAttribute, Void, U32, U32, U32, U1) VALUE_OPCODE(GetBuiltin, U32, U32, U32) VALUE_OPCODE(GetThreadBitScalarRegister, U1, ScalarReg) VALUE_OPCODE(SetThreadBitScalarRegister, Void, ScalarReg, U1) VALUE_OPCODE(GetScalarMaskTag, U1, ScalarReg) VALUE_OPCODE(SetScalarMaskTag, Void, ScalarReg, U1) VALUE_OPCODE(GetScalarRegister, U32, ScalarReg) VALUE_OPCODE(SetScalarRegister, Void, ScalarReg, U32) VALUE_OPCODE(GetVectorRegister, U32, VectorReg) VALUE_OPCODE(SetVectorRegister, Void, VectorReg, U32) VALUE_OPCODE(GetGotoVariable, U1, U32) VALUE_OPCODE(SetGotoVariable, Void, U32, U1) VALUE_OPCODE(GetScc, U1) VALUE_OPCODE(SetScc, Void, U1) VALUE_OPCODE(GetExec, U1) VALUE_OPCODE(SetExec, Void, U1) VALUE_OPCODE(GetExecLo, U32) VALUE_OPCODE(SetExecLo, Void, U32) VALUE_OPCODE(GetExecHi, U32) VALUE_OPCODE(SetExecHi, Void, U32) VALUE_OPCODE(GetVcc, U1) VALUE_OPCODE(SetVcc, Void, U1) VALUE_OPCODE(GetVccLo, U32) VALUE_OPCODE(SetVccLo, Void, U32) VALUE_OPCODE(GetVccHi, U32) VALUE_OPCODE(SetVccHi, Void, U32) VALUE_OPCODE(GetM0, U32) VALUE_OPCODE(SetM0, Void, U32) VALUE_OPCODE(UndefU1, U1) VALUE_OPCODE(UndefU8, U8) VALUE_OPCODE(UndefU16, U16) VALUE_OPCODE(UndefU32, U32) VALUE_OPCODE(UndefU64, U64) // Value construction and bit-preserving conversion. VALUE_OPCODE(BitCastU16F16, U16, F16) VALUE_OPCODE(BitCastF16U16, F16, U16) VALUE_OPCODE(BitCastU32F32, U32, F32) VALUE_OPCODE(BitCastF32U32, F32, U32) VALUE_OPCODE(BitCastU64F64, U64, F64) VALUE_OPCODE(BitCastF64U64, F64, U64) VALUE_OPCODE(ConvertU16U32, U16, U32) VALUE_OPCODE(ConvertU32U16, U32, U16) VALUE_OPCODE(ConvertU8U32, U8, U32) VALUE_OPCODE(ConvertU32U8, U32, U8) VALUE_OPCODE(ConvertF32F16, F32, F16) VALUE_OPCODE(ConvertF16F32, F16, F32) VALUE_OPCODE(ConvertS32F32, U32, F32) VALUE_OPCODE(ConvertU32F32, U32, F32) VALUE_OPCODE(ConvertF32S32, F32, U32) VALUE_OPCODE(ConvertF64S32, F64, U32) VALUE_OPCODE(ConvertF32F64, F32, F64) VALUE_OPCODE(ConvertF64F32, F64, F32) VALUE_OPCODE(ConvertF32U32, F32, U32) VALUE_OPCODE(ConvertF64U32, F64, U32) VALUE_OPCODE(CompositeConstructU64, U64, U32, U32) VALUE_OPCODE(CompositeConstructU32x2, U32x2, U32, U32) VALUE_OPCODE(CompositeConstructU32x3, U32x3, U32, U32, U32) VALUE_OPCODE(CompositeConstructF32x2, F32x2, F32, F32) VALUE_OPCODE(CompositeConstructU32x4, U32x4, U32, U32, U32, U32) VALUE_OPCODE(CompositeExtractU64, U32, U64, U32) VALUE_OPCODE(CompositeExtractU32x2, U32, U32x2, U32) VALUE_OPCODE(CompositeExtractU32x3, U32, U32x3, U32) VALUE_OPCODE(CompositeExtractU32x4, U32, U32x4, U32) VALUE_OPCODE(PackHalf2x16, U32, F32x2) VALUE_OPCODE(PackSnorm2x16, U32, F32x2) VALUE_OPCODE(PackUnorm2x16, U32, F32x2) VALUE_OPCODE(PackFloat2x16Rtz, U32, F32, F32) // Source/destination modifiers made explicit by translation. VALUE_OPCODE(FPAbs32, F32, F32) VALUE_OPCODE(FPNeg32, F32, F32) VALUE_OPCODE(FPSaturate32, F32, F32) VALUE_OPCODE(BitFieldInsert, U32, U32, U32, U32, U32) VALUE_OPCODE(BitFieldUExtract, U32, U32, U32, U32) VALUE_OPCODE(BitFieldSExtract, U32, U32, U32, U32) VALUE_OPCODE(DppMoveU32, U32, U32, U1) VALUE_OPCODE(DppUpdateU32, U32, U32, U32, U1) VALUE_OPCODE(WqmU64, U64, U64) // Core value operations used to expand architectural side effects. VALUE_OPCODE(SelectU1, U1, U1, U1, U1) VALUE_OPCODE(SelectF32, F32, U1, F32, F32) VALUE_OPCODE(IAdd32, U32, U32, U32) VALUE_OPCODE(IAdd64, U64, U64, U64) VALUE_OPCODE(IAddCarry32, U32x2, U32, U32) VALUE_OPCODE(ISub32, U32, U32, U32) VALUE_OPCODE(ISub64, U64, U64, U64) VALUE_OPCODE(IMul32, U32, U32, U32) VALUE_OPCODE(IMul64, U64, U64, U64) VALUE_OPCODE(UDiv32, U32, U32, U32) VALUE_OPCODE(SMulHi, U32, U32, U32) VALUE_OPCODE(UMulHi, U32, U32, U32) VALUE_OPCODE(IAbs32, U32, U32) VALUE_OPCODE(ShiftLeftLogical32, U32, U32, U32) VALUE_OPCODE(ShiftLeftLogical64, U64, U64, U32) VALUE_OPCODE(ShiftRightLogical32, U32, U32, U32) VALUE_OPCODE(ShiftRightLogical64, U64, U64, U32) VALUE_OPCODE(ShiftRightArithmetic32, U32, U32, U32) VALUE_OPCODE(ShiftRightArithmetic64, U64, U64, U32) VALUE_OPCODE(BitwiseAnd32, U32, U32, U32) VALUE_OPCODE(BitwiseAnd64, U64, U64, U64) VALUE_OPCODE(BitwiseOr32, U32, U32, U32) VALUE_OPCODE(BitwiseXor32, U32, U32, U32) VALUE_OPCODE(BitwiseNot32, U32, U32) VALUE_OPCODE(BitReverse32, U32, U32) VALUE_OPCODE(BitCount32, U32, U32) VALUE_OPCODE(BitCount64, U32, U64) VALUE_OPCODE(FindUMsb32, U32, U32) VALUE_OPCODE(FindUMsb64, U32, U64) VALUE_OPCODE(FindILsb32, U32, U32) VALUE_OPCODE(SMin32, U32, U32, U32) VALUE_OPCODE(UMin32, U32, U32, U32) VALUE_OPCODE(SMax32, U32, U32, U32) VALUE_OPCODE(UMax32, U32, U32, U32) VALUE_OPCODE(SMinTri32, U32, U32, U32, U32) VALUE_OPCODE(UMinTri32, U32, U32, U32, U32) VALUE_OPCODE(SMaxTri32, U32, U32, U32, U32) VALUE_OPCODE(UMaxTri32, U32, U32, U32, U32) VALUE_OPCODE(SMedTri32, U32, U32, U32, U32) VALUE_OPCODE(UMedTri32, U32, U32, U32, U32) VALUE_OPCODE(SLessThan32, U1, U32, U32) VALUE_OPCODE(SLessThan64, U1, U64, U64) VALUE_OPCODE(SLessThanEqual64, U1, U64, U64) VALUE_OPCODE(ULessThanEqual64, U1, U64, U64) VALUE_OPCODE(UGreaterThanEqual64, U1, U64, U64) VALUE_OPCODE(ULessThan32, U1, U32, U32) VALUE_OPCODE(ULessThan64, U1, U64, U64) VALUE_OPCODE(IEqual32, U1, U32, U32) VALUE_OPCODE(IEqual64, U1, U64, U64) VALUE_OPCODE(SLessThanEqual32, U1, U32, U32) VALUE_OPCODE(ULessThanEqual32, U1, U32, U32) VALUE_OPCODE(SGreaterThan32, U1, U32, U32) VALUE_OPCODE(UGreaterThan32, U1, U32, U32) VALUE_OPCODE(UGreaterThan64, U1, U64, U64) VALUE_OPCODE(INotEqual32, U1, U32, U32) VALUE_OPCODE(INotEqual64, U1, U64, U64) VALUE_OPCODE(SGreaterThanEqual32, U1, U32, U32) VALUE_OPCODE(UGreaterThanEqual32, U1, U32, U32) VALUE_OPCODE(LogicalOr, U1, U1, U1) VALUE_OPCODE(LogicalAnd, U1, U1, U1) VALUE_OPCODE(LogicalXor, U1, U1, U1) VALUE_OPCODE(LogicalNot, U1, U1) VALUE_OPCODE(FPOrdEqual32, U1, F32, F32) VALUE_OPCODE(FPOrdEqual64, U1, F64, F64) VALUE_OPCODE(FPOrdLessThanEqual64, U1, F64, F64) VALUE_OPCODE(FPOrdGreaterThanEqual64, U1, F64, F64) VALUE_OPCODE(FPUnordEqual32, U1, F32, F32) VALUE_OPCODE(FPOrdNotEqual32, U1, F32, F32) VALUE_OPCODE(FPUnordNotEqual32, U1, F32, F32) VALUE_OPCODE(FPOrdLessThan32, U1, F32, F32) VALUE_OPCODE(FPUnordLessThan32, U1, F32, F32) VALUE_OPCODE(FPOrdGreaterThan32, U1, F32, F32) VALUE_OPCODE(FPUnordGreaterThan32, U1, F32, F32) VALUE_OPCODE(FPOrdLessThanEqual32, U1, F32, F32) VALUE_OPCODE(FPUnordLessThanEqual32, U1, F32, F32) VALUE_OPCODE(FPOrdGreaterThanEqual32, U1, F32, F32) VALUE_OPCODE(FPUnordGreaterThanEqual32, U1, F32, F32) VALUE_OPCODE(FPIsNan32, U1, F32) VALUE_OPCODE(FPCmpClass32, U1, F32, U32) VALUE_OPCODE(FPAdd32, F32, F32, F32) VALUE_OPCODE(FPSub32, F32, F32, F32) VALUE_OPCODE(FPFma32, F32, F32, F32, F32) VALUE_OPCODE(FPMul32, F32, F32, F32) VALUE_OPCODE(FPAdd64, F64, F64, F64) VALUE_OPCODE(FPMul64, F64, F64, F64) VALUE_OPCODE(FPFma64, F64, F64, F64, F64) VALUE_OPCODE(FPRecip64, F64, F64) VALUE_OPCODE(FPMin32, F32, F32, F32) VALUE_OPCODE(FPMax32, F32, F32, F32) VALUE_OPCODE(FPMinTri32, F32, F32, F32, F32) VALUE_OPCODE(FPMaxTri32, F32, F32, F32, F32) VALUE_OPCODE(FPMedTri32, F32, F32, F32, F32) VALUE_OPCODE(FPRecip32, F32, F32) VALUE_OPCODE(FPRecipIFlag32, F32, F32) VALUE_OPCODE(FPRecipSqrt32, F32, F32) VALUE_OPCODE(FPSqrt, F32, F32) VALUE_OPCODE(FPSin, F32, F32) VALUE_OPCODE(FPCos, F32, F32) VALUE_OPCODE(FPExp2, F32, F32) VALUE_OPCODE(FPLog2, F32, F32) VALUE_OPCODE(FPLdexp, F32, F32, U32) VALUE_OPCODE(FPRoundEven32, F32, F32) VALUE_OPCODE(FPFloor32, F32, F32) VALUE_OPCODE(FPCeil32, F32, F32) VALUE_OPCODE(FPTrunc32, F32, F32) VALUE_OPCODE(FPFract32, F32, F32) VALUE_OPCODE(LaneId, U32) VALUE_OPCODE(Ballot, U32x4, U1) VALUE_OPCODE(ReadFirstLane, U32, U32, U1) VALUE_OPCODE(ReadLane, U32, U32, U32) VALUE_OPCODE(WriteLane, U32, U32, U32, U32) VALUE_OPCODE(Permlane16U32, U32, U32, U32, U32, U1) VALUE_OPCODE(BpermuteU32, U32, U32, U32, U1) // Typed shader resources and memory operations. Descriptor state is represented by SSA values; // dense bindings are assigned by resource tracking. VALUE_OPCODE(GetSrtResource, SrtResource) VALUE_OPCODE(GetBufferResource, BufferResource, U32, U32, U32, U32) VALUE_OPCODE(GetAddressResource, AddressResource, U32, U32) VALUE_OPCODE(GetScratchResource, AddressResource) VALUE_OPCODE(GetImageResource, ImageResource, U32, U32, U32, U32, U32, U32, U32, U32) VALUE_OPCODE(GetSamplerResource, SamplerResource, U32, U32, U32, U32) VALUE_OPCODE(MakeImageAddress, ImageAddress, U32, U32, U32, U32, U32, U32, U32, U32, U32, U32, U32, U32, U32) VALUE_OPCODE(ReadConst, U32, SrtResource, U32) VALUE_OPCODE(ReadConstBuffer, U32, BufferResource, U32) VALUE_OPCODE(LoadAddressU8, U8, AddressResource, U32, U32, U1) VALUE_OPCODE(LoadAddressU16, U16, AddressResource, U32, U32, U1) VALUE_OPCODE(LoadAddressU32, U32, AddressResource, U32, U32, U1) VALUE_OPCODE(StoreAddressU8, Void, AddressResource, U32, U32, U8, U1) VALUE_OPCODE(StoreAddressU16, Void, AddressResource, U32, U32, U16, U1) VALUE_OPCODE(StoreAddressU32, Void, AddressResource, U32, U32, U32, U1) VALUE_OPCODE(LoadBufferU8, U8, BufferResource, U32, U32, U32, U1) VALUE_OPCODE(LoadBufferU16, U16, BufferResource, U32, U32, U32, U1) VALUE_OPCODE(LoadBufferU32, U32, BufferResource, U32, U32, U32, U1) VALUE_OPCODE(LoadBufferU32x2, U32x2, BufferResource, U32, U32, U32, U1) VALUE_OPCODE(LoadBufferU32x3, U32x3, BufferResource, U32, U32, U32, U1) VALUE_OPCODE(LoadBufferU32x4, U32x4, BufferResource, U32, U32, U32, U1) VALUE_OPCODE(StoreBufferU8, Void, BufferResource, U32, U32, U32, U8, U1) VALUE_OPCODE(StoreBufferU16, Void, BufferResource, U32, U32, U32, U16, U1) VALUE_OPCODE(StoreBufferU32, Void, BufferResource, U32, U32, U32, U32, U1) VALUE_OPCODE(StoreBufferU32x2, Void, BufferResource, U32, U32, U32, U32x2, U1) VALUE_OPCODE(StoreBufferU32x3, Void, BufferResource, U32, U32, U32, U32x3, U1) VALUE_OPCODE(StoreBufferU32x4, Void, BufferResource, U32, U32, U32, U32x4, U1) VALUE_OPCODE(BufferAtomicSwap32, U32, BufferResource, U32, U32, U32, U32, U1) VALUE_OPCODE(BufferAtomicCmpSwap32, U32, BufferResource, U32, U32, U32, U32, U32, U1) VALUE_OPCODE(BufferAtomicSwap64, U64, BufferResource, U32, U32, U32, U64, U1) VALUE_OPCODE(BufferAtomicIAdd32, U32, BufferResource, U32, U32, U32, U32, U1) VALUE_OPCODE(BufferAtomicISub32, U32, BufferResource, U32, U32, U32, U32, U1) VALUE_OPCODE(BufferAtomicSMin32, U32, BufferResource, U32, U32, U32, U32, U1) VALUE_OPCODE(BufferAtomicUMin32, U32, BufferResource, U32, U32, U32, U32, U1) VALUE_OPCODE(BufferAtomicSMax32, U32, BufferResource, U32, U32, U32, U32, U1) VALUE_OPCODE(BufferAtomicUMax32, U32, BufferResource, U32, U32, U32, U32, U1) VALUE_OPCODE(BufferAtomicAnd32, U32, BufferResource, U32, U32, U32, U32, U1) VALUE_OPCODE(BufferAtomicAnd64, U64, BufferResource, U32, U32, U32, U64, U1) VALUE_OPCODE(BufferAtomicOr32, U32, BufferResource, U32, U32, U32, U32, U1) VALUE_OPCODE(BufferAtomicOr64, U64, BufferResource, U32, U32, U32, U64, U1) VALUE_OPCODE(BufferAtomicXor32, U32, BufferResource, U32, U32, U32, U32, U1) VALUE_OPCODE(BufferAtomicFMin32, U32, BufferResource, U32, U32, U32, U32, U1) VALUE_OPCODE(BufferAtomicFMax32, U32, BufferResource, U32, U32, U32, U32, U1) VALUE_OPCODE(LoadSharedU8, U8, U32, U1) VALUE_OPCODE(LoadSharedU16, U16, U32, U1) VALUE_OPCODE(LoadSharedU32, U32, U32, U1) VALUE_OPCODE(LoadSharedU32x2, U32x2, U32, U1) VALUE_OPCODE(LoadSharedU32x3, U32x3, U32, U1) VALUE_OPCODE(LoadSharedU32x4, U32x4, U32, U1) VALUE_OPCODE(WriteSharedU8, Void, U32, U8, U1) VALUE_OPCODE(WriteSharedU16, Void, U32, U16, U1) VALUE_OPCODE(WriteSharedU32, Void, U32, U32, U1) VALUE_OPCODE(WriteSharedU32x2, Void, U32, U32, U32, U1) VALUE_OPCODE(WriteSharedU32x3, Void, U32, U32, U32, U32, U1) VALUE_OPCODE(WriteSharedU32x4, Void, U32, U32, U32, U32, U32, U1) VALUE_OPCODE(SharedAtomicFMin32, Void, U32, U32, U32, U1) VALUE_OPCODE(SharedAtomicFMax32, Void, U32, U32, U32, U1) VALUE_OPCODE(SharedAtomicSwap32, U32, U32, U32, U1) VALUE_OPCODE(SharedAtomicIAdd32, U32, U32, U32, U1) VALUE_OPCODE(SharedAtomicIAdd64, Void, U32, U64, U1) VALUE_OPCODE(SharedAtomicISub32, U32, U32, U32, U1) VALUE_OPCODE(SharedAtomicInc32, U32, U32, U32, U1) VALUE_OPCODE(SharedAtomicDec32, U32, U32, U32, U1) VALUE_OPCODE(SharedAtomicSMin32, U32, U32, U32, U1) VALUE_OPCODE(SharedAtomicUMin32, U32, U32, U32, U1) VALUE_OPCODE(SharedAtomicSMax32, U32, U32, U32, U1) VALUE_OPCODE(SharedAtomicUMax32, U32, U32, U32, U1) VALUE_OPCODE(SharedAtomicAnd32, U32, U32, U32, U1) VALUE_OPCODE(SharedAtomicOr32, U32, U32, U32, U1) VALUE_OPCODE(SharedAtomicOr64, Void, U32, U64, U1) VALUE_OPCODE(SharedAtomicXor32, U32, U32, U32, U1) VALUE_OPCODE(DataAppend, U32, U32, U1) VALUE_OPCODE(DataConsume, U32, U32, U1) VALUE_OPCODE(SwizzleU32, U32, U32, U32, U1) VALUE_OPCODE(ImageQueryDimensions, U32x4, ImageResource, ImageAddress) VALUE_OPCODE(BvhIntersect, U32x4, U32x4, ImageAddress, U1) VALUE_OPCODE(ImageQueryLod, U32x4, ImageResource, SamplerResource, ImageAddress) VALUE_OPCODE(ImageRead, U32x4, ImageResource, ImageAddress, U1) VALUE_OPCODE(ImageWrite, Void, ImageResource, ImageAddress, U32x4, U1) VALUE_OPCODE(ImageSampleRaw, U32x4, ImageResource, SamplerResource, ImageAddress) VALUE_OPCODE(ImageGatherRaw, U32x4, ImageResource, SamplerResource, ImageAddress) VALUE_OPCODE(ImageAtomicSwap32, U32, ImageResource, ImageAddress, U32, U1) VALUE_OPCODE(ImageAtomicIAdd32, U32, ImageResource, ImageAddress, U32, U1) VALUE_OPCODE(ImageAtomicSMin32, U32, ImageResource, ImageAddress, U32, U1) VALUE_OPCODE(ImageAtomicUMin32, U32, ImageResource, ImageAddress, U32, U1) VALUE_OPCODE(ImageAtomicSMax32, U32, ImageResource, ImageAddress, U32, U1) VALUE_OPCODE(ImageAtomicUMax32, U32, ImageResource, ImageAddress, U32, U1) VALUE_OPCODE(ImageAtomicAnd32, U32, ImageResource, ImageAddress, U32, U1) VALUE_OPCODE(ImageAtomicOr32, U32, ImageResource, ImageAddress, U32, U1) VALUE_OPCODE(ImageAtomicXor32, U32, ImageResource, ImageAddress, U32, U1) VALUE_OPCODE(ImageAtomicFMin32, U32, ImageResource, ImageAddress, U32, U1) VALUE_OPCODE(ImageAtomicFMax32, U32, ImageResource, ImageAddress, U32, U1) VALUE_OPCODE(GetAttribute, U32, U32, U32) VALUE_OPCODE(GetInterpolationParameter, U32, U32, U32, U32) VALUE_OPCODE(SetAttribute, Void, U32x4, U1) VALUE_OPCODE(ControlNop, Void) VALUE_OPCODE(Waitcnt, Void) VALUE_OPCODE(Barrier, Void) VALUE_OPCODE(Sendmsg, Void) VALUE_OPCODE(TtraceData, Void) VALUE_OPCODE(InstPrefetch, Void) VALUE_OPCODE(SelectU32, U32, U1, U32, U32)