933 lines
34 KiB
C++
933 lines
34 KiB
C++
#include "RdnaDecoder/RdnaOpcode.hpp"
|
|
#include <stdexcept>
|
|
|
|
namespace ShaderRecompiler {
|
|
|
|
namespace {
|
|
|
|
void requireClassifiableOpcode(RdnaOpcode opcode) {
|
|
if (opcode == RdnaOpcode::Invalid || opcode == RdnaOpcode::Count) {
|
|
throw std::invalid_argument("RdnaOpcode sentinel value cannot be classified");
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
bool IsScalarAluOpcode(RdnaOpcode opcode) {
|
|
requireClassifiableOpcode(opcode);
|
|
switch (opcode) {
|
|
case RdnaOpcode::SMovB32:
|
|
case RdnaOpcode::SMovB64:
|
|
case RdnaOpcode::SMovkI32:
|
|
case RdnaOpcode::SCmovkI32:
|
|
case RdnaOpcode::SAddI32:
|
|
case RdnaOpcode::SAddU32:
|
|
case RdnaOpcode::SSubI32:
|
|
case RdnaOpcode::SSubU32:
|
|
case RdnaOpcode::SMulI32:
|
|
case RdnaOpcode::SAndB32:
|
|
case RdnaOpcode::SOrB32:
|
|
case RdnaOpcode::SXorB32:
|
|
case RdnaOpcode::SLshlB32:
|
|
case RdnaOpcode::SLshrB32:
|
|
case RdnaOpcode::SAshrI32:
|
|
case RdnaOpcode::SAshrI64:
|
|
case RdnaOpcode::SBfeU32:
|
|
case RdnaOpcode::SBfeI32:
|
|
case RdnaOpcode::SCmpEqI32:
|
|
case RdnaOpcode::SCmpLtI32:
|
|
case RdnaOpcode::SCmpGtI32:
|
|
case RdnaOpcode::SCmpEqU32:
|
|
case RdnaOpcode::SCmovB32:
|
|
case RdnaOpcode::SCmovB64:
|
|
case RdnaOpcode::SAbsI32:
|
|
case RdnaOpcode::SAbsdiffI32:
|
|
case RdnaOpcode::SBrevB32:
|
|
case RdnaOpcode::SBrevB64:
|
|
case RdnaOpcode::SSextI32I8:
|
|
case RdnaOpcode::SSextI32I16:
|
|
case RdnaOpcode::SBcnt0I32B32:
|
|
case RdnaOpcode::SBcnt0I32B64:
|
|
case RdnaOpcode::SBcnt1I32B32:
|
|
case RdnaOpcode::SBcnt1I32B64:
|
|
case RdnaOpcode::SFf0I32B32:
|
|
case RdnaOpcode::SFf0I32B64:
|
|
case RdnaOpcode::SFf1I32B32:
|
|
case RdnaOpcode::SFf1I32B64:
|
|
case RdnaOpcode::SFlbitI32B32:
|
|
case RdnaOpcode::SFlbitI32B64:
|
|
case RdnaOpcode::SFlbitI32:
|
|
case RdnaOpcode::SFlbitI32I64:
|
|
case RdnaOpcode::SBitreplicateB64B32:
|
|
case RdnaOpcode::SQuadmaskB32:
|
|
case RdnaOpcode::SMovrelsB32:
|
|
case RdnaOpcode::SMovrelsB64:
|
|
case RdnaOpcode::SMovreldB32:
|
|
case RdnaOpcode::SMovreldB64:
|
|
case RdnaOpcode::SMovrelsd2B32:
|
|
case RdnaOpcode::SQuadmaskB64:
|
|
case RdnaOpcode::SAndSaveexecB32:
|
|
case RdnaOpcode::SOrSaveexecB32:
|
|
case RdnaOpcode::SXorSaveexecB32:
|
|
case RdnaOpcode::SAndn2SaveexecB32:
|
|
case RdnaOpcode::SOrn2SaveexecB32:
|
|
case RdnaOpcode::SNandSaveexecB32:
|
|
case RdnaOpcode::SNorSaveexecB32:
|
|
case RdnaOpcode::SXnorSaveexecB32:
|
|
case RdnaOpcode::SAndn1SaveexecB32:
|
|
case RdnaOpcode::SOrn1SaveexecB32:
|
|
case RdnaOpcode::SAndn1WrexecB32:
|
|
case RdnaOpcode::SAndn2WrexecB32:
|
|
case RdnaOpcode::SAndSaveexecB64:
|
|
case RdnaOpcode::SOrSaveexecB64:
|
|
case RdnaOpcode::SXorSaveexecB64:
|
|
case RdnaOpcode::SAndn2SaveexecB64:
|
|
case RdnaOpcode::SOrn2SaveexecB64:
|
|
case RdnaOpcode::SNandSaveexecB64:
|
|
case RdnaOpcode::SNorSaveexecB64:
|
|
case RdnaOpcode::SXnorSaveexecB64:
|
|
case RdnaOpcode::SAndn1SaveexecB64:
|
|
case RdnaOpcode::SOrn1SaveexecB64:
|
|
case RdnaOpcode::SAndn1WrexecB64:
|
|
case RdnaOpcode::SAndn2WrexecB64:
|
|
case RdnaOpcode::SNotB32:
|
|
case RdnaOpcode::SNotB64:
|
|
case RdnaOpcode::SWqmB32:
|
|
case RdnaOpcode::SWqmB64:
|
|
case RdnaOpcode::SAddcU32:
|
|
case RdnaOpcode::SSubbU32:
|
|
case RdnaOpcode::SBitcmp0B32:
|
|
case RdnaOpcode::SBitcmp1B32:
|
|
case RdnaOpcode::SBitcmp0B64:
|
|
case RdnaOpcode::SBitcmp1B64:
|
|
case RdnaOpcode::SBitset0B32:
|
|
case RdnaOpcode::SBitset1B32:
|
|
case RdnaOpcode::SBitset0B64:
|
|
case RdnaOpcode::SBitset1B64:
|
|
case RdnaOpcode::SMinI32:
|
|
case RdnaOpcode::SMaxI32:
|
|
case RdnaOpcode::SMinU32:
|
|
case RdnaOpcode::SMaxU32:
|
|
case RdnaOpcode::SAndB64:
|
|
case RdnaOpcode::SAndn2B32:
|
|
case RdnaOpcode::SAndn2B64:
|
|
case RdnaOpcode::SOrB64:
|
|
case RdnaOpcode::SOrn2B32:
|
|
case RdnaOpcode::SOrn2B64:
|
|
case RdnaOpcode::SXorB64:
|
|
case RdnaOpcode::SNandB32:
|
|
case RdnaOpcode::SNandB64:
|
|
case RdnaOpcode::SNorB32:
|
|
case RdnaOpcode::SNorB64:
|
|
case RdnaOpcode::SXnorB32:
|
|
case RdnaOpcode::SXnorB64:
|
|
case RdnaOpcode::SLshlB64:
|
|
case RdnaOpcode::SLshl1AddU32:
|
|
case RdnaOpcode::SLshl2AddU32:
|
|
case RdnaOpcode::SLshl3AddU32:
|
|
case RdnaOpcode::SLshl4AddU32:
|
|
case RdnaOpcode::SLshrB64:
|
|
case RdnaOpcode::SMulHiU32:
|
|
case RdnaOpcode::SMulHiI32:
|
|
case RdnaOpcode::SMulkI32:
|
|
case RdnaOpcode::SBfeU64:
|
|
case RdnaOpcode::SBfeI64:
|
|
case RdnaOpcode::SBfmB32:
|
|
case RdnaOpcode::SBfmB64:
|
|
case RdnaOpcode::SCselectB32:
|
|
case RdnaOpcode::SCselectB64:
|
|
case RdnaOpcode::SPackLlB32B16:
|
|
case RdnaOpcode::SPackLhB32B16:
|
|
case RdnaOpcode::SPackHhB32B16:
|
|
case RdnaOpcode::SCmpLgI32:
|
|
case RdnaOpcode::SCmpGeI32:
|
|
case RdnaOpcode::SCmpLeI32:
|
|
case RdnaOpcode::SCmpLgU32:
|
|
case RdnaOpcode::SCmpGtU32:
|
|
case RdnaOpcode::SCmpGeU32:
|
|
case RdnaOpcode::SCmpLtU32:
|
|
case RdnaOpcode::SCmpLeU32:
|
|
case RdnaOpcode::SCmpEqU64:
|
|
case RdnaOpcode::SCmpLgU64:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
bool IsVectorAluOpcode(RdnaOpcode opcode) {
|
|
requireClassifiableOpcode(opcode);
|
|
switch (opcode) {
|
|
case RdnaOpcode::VMovB32:
|
|
case RdnaOpcode::VAddF32:
|
|
case RdnaOpcode::VSubF32:
|
|
case RdnaOpcode::VMulF32:
|
|
case RdnaOpcode::VMadF32:
|
|
case RdnaOpcode::VMadLegacyF32:
|
|
case RdnaOpcode::VMullitF32:
|
|
case RdnaOpcode::VFmaF32:
|
|
case RdnaOpcode::VAddI32:
|
|
case RdnaOpcode::VSubI32:
|
|
case RdnaOpcode::VMulLoU32:
|
|
case RdnaOpcode::VMulHiU32:
|
|
case RdnaOpcode::VMadU64U32:
|
|
case RdnaOpcode::VMadI64I32:
|
|
case RdnaOpcode::VSadU32:
|
|
case RdnaOpcode::VSadU8:
|
|
case RdnaOpcode::VSadHiU8:
|
|
case RdnaOpcode::VSadU16:
|
|
case RdnaOpcode::VMsadU8:
|
|
case RdnaOpcode::VQsadPkU16U8:
|
|
case RdnaOpcode::VMqsadPkU16U8:
|
|
case RdnaOpcode::VMqsadU32U8:
|
|
case RdnaOpcode::VAndB32:
|
|
case RdnaOpcode::VOrB32:
|
|
case RdnaOpcode::VXorB32:
|
|
case RdnaOpcode::VCmpEqF32:
|
|
case RdnaOpcode::VCmpLtF32:
|
|
case RdnaOpcode::VCmpGtF32:
|
|
case RdnaOpcode::VCndmaskB32:
|
|
case RdnaOpcode::VCvtF32I32:
|
|
case RdnaOpcode::VCvtI32F32:
|
|
case RdnaOpcode::VCvtF32U32:
|
|
case RdnaOpcode::VCvtU32F32:
|
|
case RdnaOpcode::VCvtF32F16:
|
|
case RdnaOpcode::VCvtF16F32:
|
|
case RdnaOpcode::VRcpF32:
|
|
case RdnaOpcode::VRsqF32:
|
|
case RdnaOpcode::VSqrtF32:
|
|
case RdnaOpcode::VExpF32:
|
|
case RdnaOpcode::VLogF32:
|
|
case RdnaOpcode::VSinF32:
|
|
case RdnaOpcode::VCosF32:
|
|
case RdnaOpcode::VFloorF32:
|
|
case RdnaOpcode::VCeilF32:
|
|
case RdnaOpcode::VFractF32:
|
|
case RdnaOpcode::VMinF32:
|
|
case RdnaOpcode::VMaxF32:
|
|
case RdnaOpcode::VMinI32:
|
|
case RdnaOpcode::VMaxI32:
|
|
case RdnaOpcode::VReadfirstlaneB32:
|
|
case RdnaOpcode::VReadlaneB32:
|
|
case RdnaOpcode::VWritelaneB32:
|
|
case RdnaOpcode::VMovreldB32:
|
|
case RdnaOpcode::VNop:
|
|
case RdnaOpcode::VPipeflush:
|
|
case RdnaOpcode::VClrexcp:
|
|
case RdnaOpcode::VMovrelsB32:
|
|
case RdnaOpcode::VMovrelsdB32:
|
|
case RdnaOpcode::VMovrelsd2B32:
|
|
case RdnaOpcode::VSwapB32:
|
|
case RdnaOpcode::VSwaprelB32:
|
|
case RdnaOpcode::VPermlane16B32:
|
|
case RdnaOpcode::VPermlanex16B32:
|
|
case RdnaOpcode::VCubeidF32:
|
|
case RdnaOpcode::VCubescF32:
|
|
case RdnaOpcode::VCubetcF32:
|
|
case RdnaOpcode::VCubemaF32:
|
|
case RdnaOpcode::VDot2cF32F16:
|
|
case RdnaOpcode::VDot2F32F16:
|
|
case RdnaOpcode::VDot4cI32I8:
|
|
case RdnaOpcode::VDot2I32I16:
|
|
case RdnaOpcode::VDot2U32U16:
|
|
case RdnaOpcode::VDot4I32I8:
|
|
case RdnaOpcode::VDot4U32U8:
|
|
case RdnaOpcode::VDot8I32I4:
|
|
case RdnaOpcode::VDot8U32U4:
|
|
case RdnaOpcode::VCvtF16U16:
|
|
case RdnaOpcode::VCvtU16F16:
|
|
case RdnaOpcode::VCvtF16I16:
|
|
case RdnaOpcode::VCvtI16F16:
|
|
case RdnaOpcode::VCvtRpiI32F32:
|
|
case RdnaOpcode::VCvtFlrI32F32:
|
|
case RdnaOpcode::VFrexpExpI32F32:
|
|
case RdnaOpcode::VFrexpMantF32:
|
|
case RdnaOpcode::VCvtOffF32I4:
|
|
case RdnaOpcode::VCvtF32Ubyte0:
|
|
case RdnaOpcode::VCvtF32Ubyte1:
|
|
case RdnaOpcode::VCvtF32Ubyte2:
|
|
case RdnaOpcode::VCvtF32Ubyte3:
|
|
case RdnaOpcode::VRcpIflagF32:
|
|
case RdnaOpcode::VTruncF32:
|
|
case RdnaOpcode::VRndneF32:
|
|
case RdnaOpcode::VRcpF16:
|
|
case RdnaOpcode::VSqrtF16:
|
|
case RdnaOpcode::VRsqF16:
|
|
case RdnaOpcode::VLogF16:
|
|
case RdnaOpcode::VExpF16:
|
|
case RdnaOpcode::VFloorF16:
|
|
case RdnaOpcode::VCeilF16:
|
|
case RdnaOpcode::VTruncF16:
|
|
case RdnaOpcode::VRndneF16:
|
|
case RdnaOpcode::VFractF16:
|
|
case RdnaOpcode::VSinF16:
|
|
case RdnaOpcode::VCosF16:
|
|
case RdnaOpcode::VNotB32:
|
|
case RdnaOpcode::VBfrevB32:
|
|
case RdnaOpcode::VFfbhU32:
|
|
case RdnaOpcode::VFfblB32:
|
|
case RdnaOpcode::VFfbhI32:
|
|
case RdnaOpcode::VSubrevF32:
|
|
case RdnaOpcode::VMacF32:
|
|
case RdnaOpcode::VMadmkF32:
|
|
case RdnaOpcode::VMadakF32:
|
|
case RdnaOpcode::VAddF16:
|
|
case RdnaOpcode::VSubF16:
|
|
case RdnaOpcode::VSubrevF16:
|
|
case RdnaOpcode::VMulF16:
|
|
case RdnaOpcode::VFmacF16:
|
|
case RdnaOpcode::VFmamkF16:
|
|
case RdnaOpcode::VFmaakF16:
|
|
case RdnaOpcode::VMulI32I24:
|
|
case RdnaOpcode::VMulU32U24:
|
|
case RdnaOpcode::VMulHiI32I24:
|
|
case RdnaOpcode::VMulHiU32U24:
|
|
case RdnaOpcode::VMulLoI32:
|
|
case RdnaOpcode::VMulHiI32:
|
|
case RdnaOpcode::VCvtPkrtzF16F32:
|
|
case RdnaOpcode::VCvtPkU8F32:
|
|
case RdnaOpcode::VMadI32I24:
|
|
case RdnaOpcode::VMadU32U24:
|
|
case RdnaOpcode::VFmaF16:
|
|
case RdnaOpcode::VPackB32F16:
|
|
case RdnaOpcode::VBfeU32:
|
|
case RdnaOpcode::VBfeI32:
|
|
case RdnaOpcode::VBfiB32:
|
|
case RdnaOpcode::VAlignbitB32:
|
|
case RdnaOpcode::VAlignbyteB32:
|
|
case RdnaOpcode::VMin3F32:
|
|
case RdnaOpcode::VMin3I32:
|
|
case RdnaOpcode::VMin3U32:
|
|
case RdnaOpcode::VMin3F16:
|
|
case RdnaOpcode::VMin3I16:
|
|
case RdnaOpcode::VMin3U16:
|
|
case RdnaOpcode::VMax3F32:
|
|
case RdnaOpcode::VMax3I32:
|
|
case RdnaOpcode::VMax3U32:
|
|
case RdnaOpcode::VMax3F16:
|
|
case RdnaOpcode::VMax3I16:
|
|
case RdnaOpcode::VMax3U16:
|
|
case RdnaOpcode::VMed3F32:
|
|
case RdnaOpcode::VMed3I32:
|
|
case RdnaOpcode::VMed3U32:
|
|
case RdnaOpcode::VMed3F16:
|
|
case RdnaOpcode::VMed3I16:
|
|
case RdnaOpcode::VMed3U16:
|
|
case RdnaOpcode::VDivFixupF16:
|
|
case RdnaOpcode::VAdd3U32:
|
|
case RdnaOpcode::VLshlAddU32:
|
|
case RdnaOpcode::VAddLshlU32:
|
|
case RdnaOpcode::VPermB32:
|
|
case RdnaOpcode::VLerpU8:
|
|
case RdnaOpcode::VXadU32:
|
|
case RdnaOpcode::VLshlOrB32:
|
|
case RdnaOpcode::VAndOrB32:
|
|
case RdnaOpcode::VOr3B32:
|
|
case RdnaOpcode::VXor3B32:
|
|
case RdnaOpcode::VSubrevI32:
|
|
case RdnaOpcode::VBfmB32:
|
|
case RdnaOpcode::VLdexpF32:
|
|
case RdnaOpcode::VLdexpF16:
|
|
case RdnaOpcode::VFrexpMantF16:
|
|
case RdnaOpcode::VFrexpExpI16F16:
|
|
case RdnaOpcode::VCvtNormI16F16:
|
|
case RdnaOpcode::VCvtNormU16F16:
|
|
case RdnaOpcode::VCvtPknormI16F16:
|
|
case RdnaOpcode::VCvtPknormU16F16:
|
|
case RdnaOpcode::VCmpClassF16:
|
|
case RdnaOpcode::VCmpxClassF16:
|
|
case RdnaOpcode::VSatPkU8I16:
|
|
case RdnaOpcode::VMulLegacyF32:
|
|
case RdnaOpcode::VMacLegacyF32:
|
|
case RdnaOpcode::VFmaF64:
|
|
case RdnaOpcode::VAddF64:
|
|
case RdnaOpcode::VMulF64:
|
|
case RdnaOpcode::VMinF64:
|
|
case RdnaOpcode::VMaxF64:
|
|
case RdnaOpcode::VLdexpF64:
|
|
case RdnaOpcode::VCvtI32F64:
|
|
case RdnaOpcode::VCvtF64I32:
|
|
case RdnaOpcode::VCvtF32F64:
|
|
case RdnaOpcode::VCvtF64F32:
|
|
case RdnaOpcode::VCvtU32F64:
|
|
case RdnaOpcode::VCvtF64U32:
|
|
case RdnaOpcode::VTruncF64:
|
|
case RdnaOpcode::VCeilF64:
|
|
case RdnaOpcode::VRndneF64:
|
|
case RdnaOpcode::VFloorF64:
|
|
case RdnaOpcode::VFrexpExpI32F64:
|
|
case RdnaOpcode::VFrexpMantF64:
|
|
case RdnaOpcode::VFractF64:
|
|
case RdnaOpcode::VDivScaleF32:
|
|
case RdnaOpcode::VDivFmasF32:
|
|
case RdnaOpcode::VDivFixupF32:
|
|
case RdnaOpcode::VRcpF64:
|
|
case RdnaOpcode::VRsqF64:
|
|
case RdnaOpcode::VSqrtF64:
|
|
case RdnaOpcode::VTrigPreopF64:
|
|
case RdnaOpcode::VDivScaleF64:
|
|
case RdnaOpcode::VDivFmasF64:
|
|
case RdnaOpcode::VDivFixupF64:
|
|
case RdnaOpcode::VCvtPknormI16F32:
|
|
case RdnaOpcode::VCvtPknormU16F32:
|
|
case RdnaOpcode::VCvtPkU16U32:
|
|
case RdnaOpcode::VCvtPkI16I32:
|
|
case RdnaOpcode::VPkMadI16:
|
|
case RdnaOpcode::VPkMulLoU16:
|
|
case RdnaOpcode::VPkAddI16:
|
|
case RdnaOpcode::VPkSubI16:
|
|
case RdnaOpcode::VPkLshlrevB16:
|
|
case RdnaOpcode::VPkLshrrevB16:
|
|
case RdnaOpcode::VPkAshrrevI16:
|
|
case RdnaOpcode::VPkMaxI16:
|
|
case RdnaOpcode::VPkMinI16:
|
|
case RdnaOpcode::VPkMadU16:
|
|
case RdnaOpcode::VPkAddF16:
|
|
case RdnaOpcode::VPkMulF16:
|
|
case RdnaOpcode::VPkMinF16:
|
|
case RdnaOpcode::VPkMaxF16:
|
|
case RdnaOpcode::VPkFmaF16:
|
|
case RdnaOpcode::VPkFmacF16:
|
|
case RdnaOpcode::VPkAddU16:
|
|
case RdnaOpcode::VPkSubU16:
|
|
case RdnaOpcode::VPkMaxU16:
|
|
case RdnaOpcode::VPkMinU16:
|
|
case RdnaOpcode::VMadMixloF16:
|
|
case RdnaOpcode::VMadMixhiF16:
|
|
case RdnaOpcode::VAddNcU32:
|
|
case RdnaOpcode::VAddcU32:
|
|
case RdnaOpcode::VSubCoCiU32:
|
|
case RdnaOpcode::VSubrevCoCiU32:
|
|
case RdnaOpcode::VSubNcU32:
|
|
case RdnaOpcode::VSubrevNcU32:
|
|
case RdnaOpcode::VAddNcU16:
|
|
case RdnaOpcode::VSubNcU16:
|
|
case RdnaOpcode::VMaxU16:
|
|
case RdnaOpcode::VMaxI16:
|
|
case RdnaOpcode::VMinU16:
|
|
case RdnaOpcode::VMinI16:
|
|
case RdnaOpcode::VAddNcI16:
|
|
case RdnaOpcode::VSubNcI16:
|
|
case RdnaOpcode::VXnorB32:
|
|
case RdnaOpcode::VLshlrevB32:
|
|
case RdnaOpcode::VLshrrevB32:
|
|
case RdnaOpcode::VAshrrevI32:
|
|
case RdnaOpcode::VLshlrevB64:
|
|
case RdnaOpcode::VLshrrevB64:
|
|
case RdnaOpcode::VAshrrevI64:
|
|
case RdnaOpcode::VAddNcI32:
|
|
case RdnaOpcode::VSubNcI32:
|
|
case RdnaOpcode::VMulLoU16:
|
|
case RdnaOpcode::VMadU16:
|
|
case RdnaOpcode::VMadI16:
|
|
case RdnaOpcode::VMadU32U16:
|
|
case RdnaOpcode::VMadI32I16:
|
|
case RdnaOpcode::VLshlrevB16:
|
|
case RdnaOpcode::VLshrrevB16:
|
|
case RdnaOpcode::VAshrrevI16:
|
|
case RdnaOpcode::VBcntU32B32:
|
|
case RdnaOpcode::VMbcntLoU32B32:
|
|
case RdnaOpcode::VMbcntHiU32B32:
|
|
case RdnaOpcode::VMinU32:
|
|
case RdnaOpcode::VMaxU32:
|
|
case RdnaOpcode::VMaxF16:
|
|
case RdnaOpcode::VMinF16:
|
|
case RdnaOpcode::VCmpFF32:
|
|
case RdnaOpcode::VCmpLeF32:
|
|
case RdnaOpcode::VCmpLgF32:
|
|
case RdnaOpcode::VCmpGeF32:
|
|
case RdnaOpcode::VCmpOF32:
|
|
case RdnaOpcode::VCmpUF32:
|
|
case RdnaOpcode::VCmpNgeF32:
|
|
case RdnaOpcode::VCmpNlgF32:
|
|
case RdnaOpcode::VCmpNgtF32:
|
|
case RdnaOpcode::VCmpNleF32:
|
|
case RdnaOpcode::VCmpNeqF32:
|
|
case RdnaOpcode::VCmpNltF32:
|
|
case RdnaOpcode::VCmpTruF32:
|
|
case RdnaOpcode::VCmpxLtF32:
|
|
case RdnaOpcode::VCmpxEqF32:
|
|
case RdnaOpcode::VCmpxLeF32:
|
|
case RdnaOpcode::VCmpxGtF32:
|
|
case RdnaOpcode::VCmpxLgF32:
|
|
case RdnaOpcode::VCmpxGeF32:
|
|
case RdnaOpcode::VCmpxNgeF32:
|
|
case RdnaOpcode::VCmpxNlgF32:
|
|
case RdnaOpcode::VCmpxNgtF32:
|
|
case RdnaOpcode::VCmpxNleF32:
|
|
case RdnaOpcode::VCmpxNeqF32:
|
|
case RdnaOpcode::VCmpxNltF32:
|
|
case RdnaOpcode::VCmpFI32:
|
|
case RdnaOpcode::VCmpLtI32:
|
|
case RdnaOpcode::VCmpEqI32:
|
|
case RdnaOpcode::VCmpLeI32:
|
|
case RdnaOpcode::VCmpGtI32:
|
|
case RdnaOpcode::VCmpNeI32:
|
|
case RdnaOpcode::VCmpGeI32:
|
|
case RdnaOpcode::VCmpTI32:
|
|
case RdnaOpcode::VCmpClassF32:
|
|
case RdnaOpcode::VCmpxClassF32:
|
|
case RdnaOpcode::VCmpLtI16:
|
|
case RdnaOpcode::VCmpEqI16:
|
|
case RdnaOpcode::VCmpLeI16:
|
|
case RdnaOpcode::VCmpGtI16:
|
|
case RdnaOpcode::VCmpNeI16:
|
|
case RdnaOpcode::VCmpGeI16:
|
|
case RdnaOpcode::VCmpxLtI16:
|
|
case RdnaOpcode::VCmpxEqI16:
|
|
case RdnaOpcode::VCmpxLeI16:
|
|
case RdnaOpcode::VCmpxGtI16:
|
|
case RdnaOpcode::VCmpxNeI16:
|
|
case RdnaOpcode::VCmpxGeI16:
|
|
case RdnaOpcode::VCmpLtF16:
|
|
case RdnaOpcode::VCmpEqF16:
|
|
case RdnaOpcode::VCmpLeF16:
|
|
case RdnaOpcode::VCmpGtF16:
|
|
case RdnaOpcode::VCmpLgF16:
|
|
case RdnaOpcode::VCmpGeF16:
|
|
case RdnaOpcode::VCmpNeqF16:
|
|
case RdnaOpcode::VCmpxLtF16:
|
|
case RdnaOpcode::VCmpxEqF16:
|
|
case RdnaOpcode::VCmpxLeF16:
|
|
case RdnaOpcode::VCmpxGtF16:
|
|
case RdnaOpcode::VCmpxGeF16:
|
|
case RdnaOpcode::VCmpxNgtF16:
|
|
case RdnaOpcode::VCmpxNeqF16:
|
|
case RdnaOpcode::VCmpxNltF16:
|
|
case RdnaOpcode::VCmpxLtI32:
|
|
case RdnaOpcode::VCmpxEqI32:
|
|
case RdnaOpcode::VCmpxLeI32:
|
|
case RdnaOpcode::VCmpxGtI32:
|
|
case RdnaOpcode::VCmpxNeI32:
|
|
case RdnaOpcode::VCmpxGeI32:
|
|
case RdnaOpcode::VCmpLtU16:
|
|
case RdnaOpcode::VCmpEqU16:
|
|
case RdnaOpcode::VCmpLeU16:
|
|
case RdnaOpcode::VCmpGtU16:
|
|
case RdnaOpcode::VCmpxLtU16:
|
|
case RdnaOpcode::VCmpxEqU16:
|
|
case RdnaOpcode::VCmpxLeU16:
|
|
case RdnaOpcode::VCmpxGtU16:
|
|
case RdnaOpcode::VCmpxNeU16:
|
|
case RdnaOpcode::VCmpxGeU16:
|
|
case RdnaOpcode::VCmpNeU16:
|
|
case RdnaOpcode::VCmpGeU16:
|
|
case RdnaOpcode::VCmpFU32:
|
|
case RdnaOpcode::VCmpLtU32:
|
|
case RdnaOpcode::VCmpEqU32:
|
|
case RdnaOpcode::VCmpLeU32:
|
|
case RdnaOpcode::VCmpGtU32:
|
|
case RdnaOpcode::VCmpNeU32:
|
|
case RdnaOpcode::VCmpGeU32:
|
|
case RdnaOpcode::VCmpTU32:
|
|
case RdnaOpcode::VCmpEqI64:
|
|
case RdnaOpcode::VCmpLtU64:
|
|
case RdnaOpcode::VCmpEqU64:
|
|
case RdnaOpcode::VCmpGtU64:
|
|
case RdnaOpcode::VCmpNeU64:
|
|
case RdnaOpcode::VCmpxNeI64:
|
|
case RdnaOpcode::VCmpxFF32:
|
|
case RdnaOpcode::VCmpxOF32:
|
|
case RdnaOpcode::VCmpxUF32:
|
|
case RdnaOpcode::VCmpxTruF32:
|
|
case RdnaOpcode::VCmpxFI32:
|
|
case RdnaOpcode::VCmpxTI32:
|
|
case RdnaOpcode::VCmpxFU32:
|
|
case RdnaOpcode::VCmpxTU32:
|
|
case RdnaOpcode::VCmpFI64:
|
|
case RdnaOpcode::VCmpLtI64:
|
|
case RdnaOpcode::VCmpLeI64:
|
|
case RdnaOpcode::VCmpGtI64:
|
|
case RdnaOpcode::VCmpNeI64:
|
|
case RdnaOpcode::VCmpGeI64:
|
|
case RdnaOpcode::VCmpTI64:
|
|
case RdnaOpcode::VCmpxFI64:
|
|
case RdnaOpcode::VCmpxLtI64:
|
|
case RdnaOpcode::VCmpxEqI64:
|
|
case RdnaOpcode::VCmpxLeI64:
|
|
case RdnaOpcode::VCmpxGtI64:
|
|
case RdnaOpcode::VCmpxGeI64:
|
|
case RdnaOpcode::VCmpxTI64:
|
|
case RdnaOpcode::VCmpFU64:
|
|
case RdnaOpcode::VCmpLeU64:
|
|
case RdnaOpcode::VCmpGeU64:
|
|
case RdnaOpcode::VCmpTU64:
|
|
case RdnaOpcode::VCmpxFU64:
|
|
case RdnaOpcode::VCmpxLtU64:
|
|
case RdnaOpcode::VCmpxEqU64:
|
|
case RdnaOpcode::VCmpxLeU64:
|
|
case RdnaOpcode::VCmpxGtU64:
|
|
case RdnaOpcode::VCmpxGeU64:
|
|
case RdnaOpcode::VCmpxTU64:
|
|
case RdnaOpcode::VCmpFF16:
|
|
case RdnaOpcode::VCmpOF16:
|
|
case RdnaOpcode::VCmpUF16:
|
|
case RdnaOpcode::VCmpNgeF16:
|
|
case RdnaOpcode::VCmpNlgF16:
|
|
case RdnaOpcode::VCmpNgtF16:
|
|
case RdnaOpcode::VCmpNleF16:
|
|
case RdnaOpcode::VCmpNltF16:
|
|
case RdnaOpcode::VCmpTruF16:
|
|
case RdnaOpcode::VCmpxFF16:
|
|
case RdnaOpcode::VCmpxLgF16:
|
|
case RdnaOpcode::VCmpxOF16:
|
|
case RdnaOpcode::VCmpxUF16:
|
|
case RdnaOpcode::VCmpxNgeF16:
|
|
case RdnaOpcode::VCmpxNlgF16:
|
|
case RdnaOpcode::VCmpxNleF16:
|
|
case RdnaOpcode::VCmpxTruF16:
|
|
case RdnaOpcode::VCmpFF64:
|
|
case RdnaOpcode::VCmpLtF64:
|
|
case RdnaOpcode::VCmpEqF64:
|
|
case RdnaOpcode::VCmpLeF64:
|
|
case RdnaOpcode::VCmpGtF64:
|
|
case RdnaOpcode::VCmpLgF64:
|
|
case RdnaOpcode::VCmpGeF64:
|
|
case RdnaOpcode::VCmpOF64:
|
|
case RdnaOpcode::VCmpUF64:
|
|
case RdnaOpcode::VCmpNgeF64:
|
|
case RdnaOpcode::VCmpNlgF64:
|
|
case RdnaOpcode::VCmpNgtF64:
|
|
case RdnaOpcode::VCmpNleF64:
|
|
case RdnaOpcode::VCmpNeqF64:
|
|
case RdnaOpcode::VCmpNltF64:
|
|
case RdnaOpcode::VCmpTruF64:
|
|
case RdnaOpcode::VCmpClassF64:
|
|
case RdnaOpcode::VCmpxFF64:
|
|
case RdnaOpcode::VCmpxLtF64:
|
|
case RdnaOpcode::VCmpxEqF64:
|
|
case RdnaOpcode::VCmpxLeF64:
|
|
case RdnaOpcode::VCmpxGtF64:
|
|
case RdnaOpcode::VCmpxLgF64:
|
|
case RdnaOpcode::VCmpxGeF64:
|
|
case RdnaOpcode::VCmpxOF64:
|
|
case RdnaOpcode::VCmpxUF64:
|
|
case RdnaOpcode::VCmpxNgeF64:
|
|
case RdnaOpcode::VCmpxNlgF64:
|
|
case RdnaOpcode::VCmpxNgtF64:
|
|
case RdnaOpcode::VCmpxNleF64:
|
|
case RdnaOpcode::VCmpxNeqF64:
|
|
case RdnaOpcode::VCmpxNltF64:
|
|
case RdnaOpcode::VCmpxTruF64:
|
|
case RdnaOpcode::VCmpxClassF64:
|
|
case RdnaOpcode::VCmpxNeU64:
|
|
case RdnaOpcode::VCmpxLtU32:
|
|
case RdnaOpcode::VCmpxEqU32:
|
|
case RdnaOpcode::VCmpxLeU32:
|
|
case RdnaOpcode::VCmpxGtU32:
|
|
case RdnaOpcode::VCmpxNeU32:
|
|
case RdnaOpcode::VCmpxGeU32:
|
|
case RdnaOpcode::VInterpP1F32:
|
|
case RdnaOpcode::VInterpP2F32:
|
|
case RdnaOpcode::VInterpMovF32:
|
|
case RdnaOpcode::VInterpP1llF16:
|
|
case RdnaOpcode::VInterpP1lvF16:
|
|
case RdnaOpcode::VInterpP2F16:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
bool IsBranchOpcode(RdnaOpcode opcode) {
|
|
requireClassifiableOpcode(opcode);
|
|
return IsDirectBranchOpcode(opcode);
|
|
}
|
|
|
|
bool IsScalarMemoryOpcode(RdnaOpcode opcode) {
|
|
requireClassifiableOpcode(opcode);
|
|
switch (opcode) {
|
|
case RdnaOpcode::SLoadDword:
|
|
case RdnaOpcode::SLoadDwordx2:
|
|
case RdnaOpcode::SLoadDwordx4:
|
|
case RdnaOpcode::SLoadDwordx8:
|
|
case RdnaOpcode::SLoadDwordx16:
|
|
case RdnaOpcode::SBufferLoadDword:
|
|
case RdnaOpcode::SBufferLoadDwordx2:
|
|
case RdnaOpcode::SBufferLoadDwordx4:
|
|
case RdnaOpcode::SBufferLoadDwordx8:
|
|
case RdnaOpcode::SBufferLoadDwordx16:
|
|
case RdnaOpcode::SScratchLoadDword:
|
|
case RdnaOpcode::SScratchLoadDwordx2:
|
|
case RdnaOpcode::SScratchLoadDwordx4:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
bool IsBufferMemoryOpcode(RdnaOpcode opcode) {
|
|
requireClassifiableOpcode(opcode);
|
|
switch (opcode) {
|
|
case RdnaOpcode::TBufferLoadFormatX:
|
|
case RdnaOpcode::TBufferLoadFormatXyzw:
|
|
throw std::logic_error("RdnaOpcode is an unused duplicate TBUFFER enum entry with no established classification");
|
|
case RdnaOpcode::BufferLoadFormatX:
|
|
case RdnaOpcode::BufferLoadFormatXy:
|
|
case RdnaOpcode::BufferLoadFormatXyz:
|
|
case RdnaOpcode::BufferLoadFormatXyzw:
|
|
case RdnaOpcode::BufferLoadDword:
|
|
case RdnaOpcode::BufferLoadDwordx2:
|
|
case RdnaOpcode::BufferLoadDwordx4:
|
|
case RdnaOpcode::BufferStoreFormatX:
|
|
case RdnaOpcode::BufferStoreDword:
|
|
case RdnaOpcode::BufferStoreDwordx4:
|
|
case RdnaOpcode::BufferStoreFormatXy:
|
|
case RdnaOpcode::BufferStoreFormatXyz:
|
|
case RdnaOpcode::BufferStoreFormatXyzw:
|
|
case RdnaOpcode::BufferLoadUbyte:
|
|
case RdnaOpcode::BufferLoadSbyte:
|
|
case RdnaOpcode::BufferLoadUshort:
|
|
case RdnaOpcode::BufferLoadSshort:
|
|
case RdnaOpcode::BufferLoadDwordx3:
|
|
case RdnaOpcode::BufferStoreByte:
|
|
case RdnaOpcode::BufferStoreShort:
|
|
case RdnaOpcode::BufferLoadUbyteD16:
|
|
case RdnaOpcode::BufferLoadUbyteD16Hi:
|
|
case RdnaOpcode::BufferLoadSbyteD16:
|
|
case RdnaOpcode::BufferLoadSbyteD16Hi:
|
|
case RdnaOpcode::BufferLoadShortD16:
|
|
case RdnaOpcode::BufferLoadShortD16Hi:
|
|
case RdnaOpcode::BufferStoreByteD16Hi:
|
|
case RdnaOpcode::BufferStoreShortD16Hi:
|
|
case RdnaOpcode::BufferStoreDwordx2:
|
|
case RdnaOpcode::BufferStoreDwordx3:
|
|
case RdnaOpcode::BufferAtomicSwap:
|
|
case RdnaOpcode::BufferAtomicCmpswap:
|
|
case RdnaOpcode::BufferAtomicSwapX2:
|
|
case RdnaOpcode::BufferAtomicAdd:
|
|
case RdnaOpcode::BufferAtomicSub:
|
|
case RdnaOpcode::BufferAtomicSmin:
|
|
case RdnaOpcode::BufferAtomicUmin:
|
|
case RdnaOpcode::BufferAtomicSmax:
|
|
case RdnaOpcode::BufferAtomicUmax:
|
|
case RdnaOpcode::BufferAtomicAnd:
|
|
case RdnaOpcode::BufferAtomicOr:
|
|
case RdnaOpcode::BufferAtomicOrX2:
|
|
case RdnaOpcode::BufferAtomicInc:
|
|
case RdnaOpcode::BufferAtomicDec:
|
|
case RdnaOpcode::BufferAtomicCmpswapX2:
|
|
case RdnaOpcode::BufferAtomicAddX2:
|
|
case RdnaOpcode::BufferAtomicSubX2:
|
|
case RdnaOpcode::BufferAtomicSminX2:
|
|
case RdnaOpcode::BufferAtomicUminX2:
|
|
case RdnaOpcode::BufferAtomicSmaxX2:
|
|
case RdnaOpcode::BufferAtomicUmaxX2:
|
|
case RdnaOpcode::BufferAtomicAndX2:
|
|
case RdnaOpcode::BufferAtomicXorX2:
|
|
case RdnaOpcode::BufferAtomicFcmpswap:
|
|
case RdnaOpcode::BufferAtomicFcmpswapX2:
|
|
case RdnaOpcode::BufferAtomicFminX2:
|
|
case RdnaOpcode::BufferAtomicFmaxX2:
|
|
case RdnaOpcode::BufferAtomicIncX2:
|
|
case RdnaOpcode::BufferAtomicDecX2:
|
|
case RdnaOpcode::BufferAtomicXor:
|
|
case RdnaOpcode::BufferAtomicFmin:
|
|
case RdnaOpcode::BufferAtomicFmax:
|
|
case RdnaOpcode::BufferAtomicCsub:
|
|
case RdnaOpcode::TbufferLoadFormatX:
|
|
case RdnaOpcode::TbufferLoadFormatXy:
|
|
case RdnaOpcode::TbufferLoadFormatXyz:
|
|
case RdnaOpcode::TbufferLoadFormatXyzw:
|
|
case RdnaOpcode::TbufferLoadFormatD16X:
|
|
case RdnaOpcode::TbufferLoadFormatD16Xy:
|
|
case RdnaOpcode::TbufferLoadFormatD16Xyz:
|
|
case RdnaOpcode::TbufferLoadFormatD16Xyzw:
|
|
case RdnaOpcode::BufferLoadFormatD16X:
|
|
case RdnaOpcode::BufferLoadFormatD16Xy:
|
|
case RdnaOpcode::BufferLoadFormatD16Xyz:
|
|
case RdnaOpcode::BufferLoadFormatD16Xyzw:
|
|
case RdnaOpcode::BufferLoadFormatD16HiX:
|
|
case RdnaOpcode::TbufferStoreFormatD16X:
|
|
case RdnaOpcode::TbufferStoreFormatD16Xy:
|
|
case RdnaOpcode::TbufferStoreFormatD16Xyz:
|
|
case RdnaOpcode::TbufferStoreFormatD16Xyzw:
|
|
case RdnaOpcode::BufferStoreFormatD16X:
|
|
case RdnaOpcode::BufferStoreFormatD16Xy:
|
|
case RdnaOpcode::BufferStoreFormatD16Xyz:
|
|
case RdnaOpcode::BufferStoreFormatD16Xyzw:
|
|
case RdnaOpcode::BufferStoreFormatD16HiX:
|
|
case RdnaOpcode::TbufferStoreFormatX:
|
|
case RdnaOpcode::TbufferStoreFormatXy:
|
|
case RdnaOpcode::TbufferStoreFormatXyz:
|
|
case RdnaOpcode::TbufferStoreFormatXyzw:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
bool IsImageOpcode(RdnaOpcode opcode) {
|
|
requireClassifiableOpcode(opcode);
|
|
switch (opcode) {
|
|
case RdnaOpcode::ImageSample:
|
|
case RdnaOpcode::ImageSampleBCl:
|
|
case RdnaOpcode::ImageSampleBClO:
|
|
case RdnaOpcode::ImageSampleBO:
|
|
case RdnaOpcode::ImageSampleC:
|
|
case RdnaOpcode::ImageSampleCB:
|
|
case RdnaOpcode::ImageSampleCBCl:
|
|
case RdnaOpcode::ImageSampleCBClO:
|
|
case RdnaOpcode::ImageSampleCBO:
|
|
case RdnaOpcode::ImageSampleCCl:
|
|
case RdnaOpcode::ImageSampleCClO:
|
|
case RdnaOpcode::ImageSampleCD:
|
|
case RdnaOpcode::ImageSampleCDCl:
|
|
case RdnaOpcode::ImageSampleCDClO:
|
|
case RdnaOpcode::ImageSampleCDO:
|
|
case RdnaOpcode::ImageSampleCL:
|
|
case RdnaOpcode::ImageSampleCLzO:
|
|
case RdnaOpcode::ImageSampleCLO:
|
|
case RdnaOpcode::ImageSampleCO:
|
|
case RdnaOpcode::ImageSampleCl:
|
|
case RdnaOpcode::ImageSampleClO:
|
|
case RdnaOpcode::ImageSampleD:
|
|
case RdnaOpcode::ImageSampleDCl:
|
|
case RdnaOpcode::ImageSampleDO:
|
|
case RdnaOpcode::ImageSampleLzO:
|
|
case RdnaOpcode::ImageSampleO:
|
|
case RdnaOpcode::ImageSampleCd:
|
|
case RdnaOpcode::ImageSampleCdCl:
|
|
case RdnaOpcode::ImageSampleCCd:
|
|
case RdnaOpcode::ImageSampleCCdCl:
|
|
case RdnaOpcode::ImageSampleCdO:
|
|
case RdnaOpcode::ImageSampleCdClO:
|
|
case RdnaOpcode::ImageSampleCCdO:
|
|
case RdnaOpcode::ImageSampleCCdClO:
|
|
case RdnaOpcode::ImageSampleDG16:
|
|
case RdnaOpcode::ImageSampleDClG16:
|
|
case RdnaOpcode::ImageSampleCDG16:
|
|
case RdnaOpcode::ImageSampleCDClG16:
|
|
case RdnaOpcode::ImageSampleDOG16:
|
|
case RdnaOpcode::ImageSampleDClOG16:
|
|
case RdnaOpcode::ImageSampleCDOG16:
|
|
case RdnaOpcode::ImageSampleCDClOG16:
|
|
case RdnaOpcode::ImageSampleCdG16:
|
|
case RdnaOpcode::ImageSampleCdClG16:
|
|
case RdnaOpcode::ImageSampleCCdG16:
|
|
case RdnaOpcode::ImageSampleCCdClG16:
|
|
case RdnaOpcode::ImageSampleCdOG16:
|
|
case RdnaOpcode::ImageSampleCdClOG16:
|
|
case RdnaOpcode::ImageSampleCCdOG16:
|
|
case RdnaOpcode::ImageSampleCCdClOG16:
|
|
case RdnaOpcode::ImageSampleLz:
|
|
case RdnaOpcode::ImageLoad:
|
|
case RdnaOpcode::ImageStore:
|
|
case RdnaOpcode::ImageGetResinfo:
|
|
case RdnaOpcode::ImageGetLod:
|
|
case RdnaOpcode::ImageLoadMip:
|
|
case RdnaOpcode::ImageLoadPck:
|
|
case RdnaOpcode::ImageLoadPckSgn:
|
|
case RdnaOpcode::ImageLoadMipPck:
|
|
case RdnaOpcode::ImageLoadMipPckSgn:
|
|
case RdnaOpcode::ImageStoreMip:
|
|
case RdnaOpcode::ImageStorePck:
|
|
case RdnaOpcode::ImageStoreMipPck:
|
|
case RdnaOpcode::ImageLoadBy2:
|
|
case RdnaOpcode::ImageLoadBy4:
|
|
case RdnaOpcode::ImageLoadMipBy2:
|
|
case RdnaOpcode::ImageLoadMipBy4:
|
|
case RdnaOpcode::ImageStoreBy2:
|
|
case RdnaOpcode::ImageStoreBy4:
|
|
case RdnaOpcode::ImageStoreMipBy2:
|
|
case RdnaOpcode::ImageStoreMipBy4:
|
|
case RdnaOpcode::ImageLoadPck2:
|
|
case RdnaOpcode::ImageLoadPck4:
|
|
case RdnaOpcode::ImageLoadMipPck2:
|
|
case RdnaOpcode::ImageLoadMipPck4:
|
|
case RdnaOpcode::ImageStorePck2:
|
|
case RdnaOpcode::ImageStorePck4:
|
|
case RdnaOpcode::ImageStoreMipPck2:
|
|
case RdnaOpcode::ImageStoreMipPck4:
|
|
case RdnaOpcode::ImageMsaaLoad:
|
|
case RdnaOpcode::ImageAtomicSwap:
|
|
case RdnaOpcode::ImageAtomicAdd:
|
|
case RdnaOpcode::ImageAtomicUmin:
|
|
case RdnaOpcode::ImageAtomicUmax:
|
|
case RdnaOpcode::ImageAtomicAnd:
|
|
case RdnaOpcode::ImageAtomicOr:
|
|
case RdnaOpcode::ImageAtomicXor:
|
|
case RdnaOpcode::ImageAtomicCmpswap:
|
|
case RdnaOpcode::ImageAtomicSub:
|
|
case RdnaOpcode::ImageAtomicSmin:
|
|
case RdnaOpcode::ImageAtomicSmax:
|
|
case RdnaOpcode::ImageAtomicInc:
|
|
case RdnaOpcode::ImageAtomicDec:
|
|
case RdnaOpcode::ImageAtomicFcmpswap:
|
|
case RdnaOpcode::ImageAtomicFmin:
|
|
case RdnaOpcode::ImageAtomicFmax:
|
|
case RdnaOpcode::ImageGather4Lz:
|
|
case RdnaOpcode::ImageGather4C:
|
|
case RdnaOpcode::ImageGather4CLz:
|
|
case RdnaOpcode::ImageGather4LzO:
|
|
case RdnaOpcode::ImageGather4CO:
|
|
case RdnaOpcode::ImageGather4CLzO:
|
|
case RdnaOpcode::ImageGather4h:
|
|
case RdnaOpcode::ImageGather4hPck:
|
|
case RdnaOpcode::ImageGather8hPck:
|
|
case RdnaOpcode::ImageGather4:
|
|
case RdnaOpcode::ImageGather4B:
|
|
case RdnaOpcode::ImageGather4BCl:
|
|
case RdnaOpcode::ImageGather4BClO:
|
|
case RdnaOpcode::ImageGather4BO:
|
|
case RdnaOpcode::ImageGather4Cl:
|
|
case RdnaOpcode::ImageGather4ClO:
|
|
case RdnaOpcode::ImageGather4CB:
|
|
case RdnaOpcode::ImageGather4CBCl:
|
|
case RdnaOpcode::ImageGather4CBClO:
|
|
case RdnaOpcode::ImageGather4CBO:
|
|
case RdnaOpcode::ImageGather4CCl:
|
|
case RdnaOpcode::ImageGather4CClO:
|
|
case RdnaOpcode::ImageGather4CL:
|
|
case RdnaOpcode::ImageGather4CLO:
|
|
case RdnaOpcode::ImageGather4L:
|
|
case RdnaOpcode::ImageGather4LO:
|
|
case RdnaOpcode::ImageGather4O:
|
|
case RdnaOpcode::ImageBvhIntersectRay:
|
|
case RdnaOpcode::ImageBvh64IntersectRay:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
bool IsExportOpcode(RdnaOpcode opcode) {
|
|
requireClassifiableOpcode(opcode);
|
|
switch (opcode) {
|
|
case RdnaOpcode::ExpMrt:
|
|
case RdnaOpcode::ExpPos:
|
|
case RdnaOpcode::ExpParam:
|
|
case RdnaOpcode::Exp:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
bool IsConditionalBranchOpcode(RdnaOpcode opcode) {
|
|
requireClassifiableOpcode(opcode);
|
|
switch (opcode) {
|
|
case RdnaOpcode::SCbranchScc0:
|
|
case RdnaOpcode::SCbranchScc1:
|
|
case RdnaOpcode::SCbranchVccz:
|
|
case RdnaOpcode::SCbranchVccnz:
|
|
case RdnaOpcode::SCbranchExecz:
|
|
case RdnaOpcode::SCbranchExecnz:
|
|
case RdnaOpcode::SSubvectorLoopBegin:
|
|
case RdnaOpcode::SSubvectorLoopEnd:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
bool IsDirectBranchOpcode(RdnaOpcode opcode) {
|
|
requireClassifiableOpcode(opcode);
|
|
if (opcode == RdnaOpcode::SBranch) {
|
|
return true;
|
|
}
|
|
return IsConditionalBranchOpcode(opcode);
|
|
}
|
|
|
|
}
|