2024-05-22 00:35:12 +02:00
|
|
|
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
|
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
|
|
|
|
#include "common/assert.h"
|
|
|
|
#include "shader_recompiler/frontend/decode.h"
|
|
|
|
|
|
|
|
namespace Shader::Gcn {
|
|
|
|
|
|
|
|
constexpr std::array<InstFormat, 45> InstructionFormatSOP2 = {{
|
|
|
|
// 0 = S_ADD_U32
|
|
|
|
{InstClass::ScalarArith, InstCategory::ScalarALU, 2, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 1 = S_SUB_U32
|
|
|
|
{InstClass::ScalarArith, InstCategory::ScalarALU, 2, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 2 = S_ADD_I32
|
|
|
|
{InstClass::ScalarArith, InstCategory::ScalarALU, 2, 1, ScalarType::Sint32, ScalarType::Sint32},
|
|
|
|
// 3 = S_SUB_I32
|
|
|
|
{InstClass::ScalarArith, InstCategory::ScalarALU, 2, 1, ScalarType::Sint32, ScalarType::Sint32},
|
|
|
|
// 4 = S_ADDC_U32
|
|
|
|
{InstClass::ScalarArith, InstCategory::ScalarALU, 2, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 5 = S_SUBB_U32
|
|
|
|
{InstClass::ScalarArith, InstCategory::ScalarALU, 2, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 6 = S_MIN_I32
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 2, 1, ScalarType::Sint32, ScalarType::Sint32},
|
|
|
|
// 7 = S_MIN_U32
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 2, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 8 = S_MAX_I32
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 2, 1, ScalarType::Sint32, ScalarType::Sint32},
|
|
|
|
// 9 = S_MAX_U32
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 2, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 10 = S_CSELECT_B32
|
|
|
|
{InstClass::ScalarSelect, InstCategory::ScalarALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 11 = S_CSELECT_B64
|
|
|
|
{InstClass::ScalarSelect, InstCategory::ScalarALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 14 = S_AND_B32
|
|
|
|
{InstClass::ScalarBitLogic, InstCategory::ScalarALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 15 = S_AND_B64
|
|
|
|
{InstClass::ScalarBitLogic, InstCategory::ScalarALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 16 = S_OR_B32
|
|
|
|
{InstClass::ScalarBitLogic, InstCategory::ScalarALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 17 = S_OR_B64
|
|
|
|
{InstClass::ScalarBitLogic, InstCategory::ScalarALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 18 = S_XOR_B32
|
|
|
|
{InstClass::ScalarBitLogic, InstCategory::ScalarALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 19 = S_XOR_B64
|
|
|
|
{InstClass::ScalarBitLogic, InstCategory::ScalarALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 20 = S_ANDN2_B32
|
|
|
|
{InstClass::ScalarBitLogic, InstCategory::ScalarALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 21 = S_ANDN2_B64
|
|
|
|
{InstClass::ScalarBitLogic, InstCategory::ScalarALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 22 = S_ORN2_B32
|
|
|
|
{InstClass::ScalarBitLogic, InstCategory::ScalarALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 23 = S_ORN2_B64
|
|
|
|
{InstClass::ScalarBitLogic, InstCategory::ScalarALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 24 = S_NAND_B32
|
|
|
|
{InstClass::ScalarBitLogic, InstCategory::ScalarALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 25 = S_NAND_B64
|
|
|
|
{InstClass::ScalarBitLogic, InstCategory::ScalarALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 26 = S_NOR_B32
|
|
|
|
{InstClass::ScalarBitLogic, InstCategory::ScalarALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 27 = S_NOR_B64
|
|
|
|
{InstClass::ScalarBitLogic, InstCategory::ScalarALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 28 = S_XNOR_B32
|
|
|
|
{InstClass::ScalarBitLogic, InstCategory::ScalarALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 29 = S_XNOR_B64
|
|
|
|
{InstClass::ScalarBitLogic, InstCategory::ScalarALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 30 = S_LSHL_B32
|
|
|
|
{InstClass::ScalarBitManip, InstCategory::ScalarALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 31 = S_LSHL_B64
|
|
|
|
{InstClass::ScalarBitManip, InstCategory::ScalarALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 32 = S_LSHR_B32
|
|
|
|
{InstClass::ScalarBitManip, InstCategory::ScalarALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 33 = S_LSHR_B64
|
|
|
|
{InstClass::ScalarBitManip, InstCategory::ScalarALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 34 = S_ASHR_I32
|
|
|
|
{InstClass::ScalarBitManip, InstCategory::ScalarALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 35 = S_ASHR_I64
|
|
|
|
{InstClass::ScalarBitManip, InstCategory::ScalarALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 36 = S_BFM_B32
|
|
|
|
{InstClass::ScalarBitField, InstCategory::ScalarALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 37 = S_BFM_B64
|
|
|
|
{InstClass::ScalarBitField, InstCategory::ScalarALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 38 = S_MUL_I32
|
|
|
|
{InstClass::ScalarArith, InstCategory::ScalarALU, 2, 1, ScalarType::Sint32, ScalarType::Sint32},
|
|
|
|
// 39 = S_BFE_U32
|
|
|
|
{InstClass::ScalarBitField, InstCategory::ScalarALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 40 = S_BFE_I32
|
|
|
|
{InstClass::ScalarBitField, InstCategory::ScalarALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 41 = S_BFE_U64
|
|
|
|
{InstClass::ScalarBitField, InstCategory::ScalarALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 42 = S_BFE_I64
|
|
|
|
{InstClass::ScalarBitField, InstCategory::ScalarALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 43 = S_CBRANCH_G_FORK
|
|
|
|
{InstClass::ScalarProgFlow, InstCategory::FlowControl, 2, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 44 = S_ABSDIFF_I32
|
|
|
|
{InstClass::ScalarAbs, InstCategory::ScalarALU, 2, 1, ScalarType::Sint32, ScalarType::Sint32},
|
|
|
|
}};
|
|
|
|
|
|
|
|
constexpr std::array<InstFormat, 22> InstructionFormatSOPK = {{
|
|
|
|
// 0 = S_MOVK_I32
|
|
|
|
{InstClass::ScalarMov, InstCategory::ScalarALU, 0, 1, ScalarType::Sint32, ScalarType::Sint32},
|
|
|
|
{},
|
|
|
|
// 2 = S_CMOVK_I32
|
|
|
|
{InstClass::ScalarMov, InstCategory::ScalarALU, 0, 1, ScalarType::Sint32, ScalarType::Sint32},
|
|
|
|
// 3 = S_CMPK_EQ_I32
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 0, 1, ScalarType::Sint32, ScalarType::Sint32},
|
|
|
|
// 4 = S_CMPK_LI32
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 0, 1, ScalarType::Sint32, ScalarType::Sint32},
|
|
|
|
// 5 = S_CMPK_GT_I32
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 0, 1, ScalarType::Sint32, ScalarType::Sint32},
|
|
|
|
// 6 = S_CMPK_GE_I32
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 0, 1, ScalarType::Sint32, ScalarType::Sint32},
|
|
|
|
// 7 = S_CMPK_LT_I32
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 0, 1, ScalarType::Sint32, ScalarType::Sint32},
|
|
|
|
// 8 = S_CMPK_LE_I32
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 0, 1, ScalarType::Sint32, ScalarType::Sint32},
|
|
|
|
// 9 = S_CMPK_EQ_U32
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 0, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 10 = S_CMPK_LG_U32
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 0, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 11 = S_CMPK_GT_U32
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 0, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 12 = S_CMPK_GE_U32
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 0, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 13 = S_CMPK_LT_U32
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 0, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 14 = S_CMPK_LE_U32
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 0, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 15 = S_ADDK_I32
|
|
|
|
{InstClass::ScalarArith, InstCategory::ScalarALU, 0, 1, ScalarType::Sint32, ScalarType::Sint32},
|
|
|
|
// 16 = S_MULK_I32
|
|
|
|
{InstClass::ScalarArith, InstCategory::ScalarALU, 0, 1, ScalarType::Sint32, ScalarType::Sint32},
|
|
|
|
// 17 = S_CBRANCH_I_FORK
|
|
|
|
{InstClass::ScalarProgFlow, InstCategory::FlowControl, 0, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 18 = S_GETREG_B32
|
|
|
|
{InstClass::ScalarProgFlow, InstCategory::FlowControl, 0, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 19 = S_SETREG_B32
|
|
|
|
{InstClass::ScalarRegAccess, InstCategory::FlowControl, 0, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
{},
|
|
|
|
// 21 = S_SETREIMM32_B32
|
|
|
|
{InstClass::ScalarRegAccess, InstCategory::FlowControl, 0, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
}};
|
|
|
|
|
|
|
|
constexpr std::array<InstFormat, 54> InstructionFormatSOP1 = {{
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 3 = S_MOV_B32
|
|
|
|
{InstClass::ScalarMov, InstCategory::ScalarALU, 1, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 4 = S_MOV_B64
|
|
|
|
{InstClass::ScalarMov, InstCategory::ScalarALU, 1, 1, ScalarType::Uint64, ScalarType::Uint64},
|
|
|
|
// 5 = S_CMOV_B32
|
|
|
|
{InstClass::ScalarMov, InstCategory::ScalarALU, 1, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 6 = S_CMOV_B64
|
|
|
|
{InstClass::ScalarMov, InstCategory::ScalarALU, 1, 1, ScalarType::Uint64, ScalarType::Uint64},
|
|
|
|
// 7 = S_NOT_B32
|
|
|
|
{InstClass::ScalarBitLogic, InstCategory::ScalarALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 8 = S_NOT_B64
|
|
|
|
{InstClass::ScalarBitLogic, InstCategory::ScalarALU, 1, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 9 = S_WQM_B32
|
|
|
|
{InstClass::ScalarQuadMask, InstCategory::ScalarALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 10 = S_WQM_B64
|
|
|
|
{InstClass::ScalarQuadMask, InstCategory::ScalarALU, 1, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 11 = S_BREV_B32
|
|
|
|
{InstClass::ScalarBitManip, InstCategory::ScalarALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 12 = S_BREV_B64
|
|
|
|
{InstClass::ScalarBitManip, InstCategory::ScalarALU, 1, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 13 = S_BCNT0_I32_B32
|
|
|
|
{InstClass::ScalarBitManip, InstCategory::ScalarALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 14 = S_BCNT0_I32_B64
|
|
|
|
{InstClass::ScalarBitManip, InstCategory::ScalarALU, 1, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 15 = S_BCNT1_I32_B32
|
|
|
|
{InstClass::ScalarBitManip, InstCategory::ScalarALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 16 = S_BCNT1_I32_B64
|
|
|
|
{InstClass::ScalarBitManip, InstCategory::ScalarALU, 1, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 17 = S_FF0_I32_B32
|
|
|
|
{InstClass::ScalarBitManip, InstCategory::ScalarALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 18 = S_FF0_I32_B64
|
|
|
|
{InstClass::ScalarBitManip, InstCategory::ScalarALU, 1, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 19 = S_FF1_I32_B32
|
|
|
|
{InstClass::ScalarBitManip, InstCategory::ScalarALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 20 = S_FF1_I32_B64
|
|
|
|
{InstClass::ScalarBitManip, InstCategory::ScalarALU, 1, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 21 = S_FLBIT_I32_B32
|
|
|
|
{InstClass::ScalarBitManip, InstCategory::ScalarALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 22 = S_FLBIT_I32_B64
|
|
|
|
{InstClass::ScalarBitManip, InstCategory::ScalarALU, 1, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 23 = S_FLBIT_I32
|
|
|
|
{InstClass::ScalarBitManip, InstCategory::ScalarALU, 1, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 24 = S_FLBIT_I32_I64
|
|
|
|
{InstClass::ScalarBitManip, InstCategory::ScalarALU, 1, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 25 = S_SEXT_I32_I8
|
|
|
|
{InstClass::ScalarConv, InstCategory::ScalarALU, 1, 1, ScalarType::Sint32, ScalarType::Sint32},
|
|
|
|
// 26 = S_SEXT_I32_I16
|
|
|
|
{InstClass::ScalarConv, InstCategory::ScalarALU, 1, 1, ScalarType::Sint32, ScalarType::Sint32},
|
|
|
|
// 27 = S_BITSET0_B32
|
|
|
|
{InstClass::ScalarBitManip, InstCategory::ScalarALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 28 = S_BITSET0_B64
|
|
|
|
{InstClass::ScalarBitManip, InstCategory::ScalarALU, 1, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 29 = S_BITSET1_B32
|
|
|
|
{InstClass::ScalarBitManip, InstCategory::ScalarALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 30 = S_BITSET1_B64
|
|
|
|
{InstClass::ScalarBitManip, InstCategory::ScalarALU, 1, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 31 = S_GETPC_B64
|
|
|
|
{InstClass::ScalarProgFlow, InstCategory::FlowControl, 0, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 32 = S_SETPC_B64
|
|
|
|
{InstClass::ScalarProgFlow, InstCategory::FlowControl, 1, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 33 = S_SWAPPC_B64
|
|
|
|
{InstClass::ScalarProgFlow, InstCategory::FlowControl, 1, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 34 = S_RFE_B64
|
|
|
|
{InstClass::Undefined, InstCategory::Undefined, 1, 1, ScalarType::Uint64, ScalarType::Uint64},
|
|
|
|
{},
|
|
|
|
// 36 = S_AND_SAVEEXEC_B64
|
|
|
|
{InstClass::ScalarExecMask, InstCategory::ScalarALU, 1, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 37 = S_OR_SAVEEXEC_B64
|
|
|
|
{InstClass::ScalarExecMask, InstCategory::ScalarALU, 1, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 38 = S_XOR_SAVEEXEC_B64
|
|
|
|
{InstClass::ScalarExecMask, InstCategory::ScalarALU, 1, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 39 = S_ANDN2_SAVEEXEC_B64
|
|
|
|
{InstClass::ScalarExecMask, InstCategory::ScalarALU, 1, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 40 = S_ORN2_SAVEEXEC_B64
|
|
|
|
{InstClass::ScalarExecMask, InstCategory::ScalarALU, 1, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 41 = S_NAND_SAVEEXEC_B64
|
|
|
|
{InstClass::ScalarExecMask, InstCategory::ScalarALU, 1, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 42 = S_NOR_SAVEEXEC_B64
|
|
|
|
{InstClass::ScalarExecMask, InstCategory::ScalarALU, 1, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 43 = S_XNOR_SAVEEXEC_B64
|
|
|
|
{InstClass::ScalarExecMask, InstCategory::ScalarALU, 1, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 44 = S_QUADMASK_B32
|
|
|
|
{InstClass::ScalarQuadMask, InstCategory::ScalarALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 45 = S_QUADMASK_B64
|
|
|
|
{InstClass::ScalarQuadMask, InstCategory::ScalarALU, 1, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 46 = S_MOVRELS_B32
|
|
|
|
{InstClass::ScalarMovRel, InstCategory::ScalarALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 47 = S_MOVRELS_B64
|
|
|
|
{InstClass::ScalarMovRel, InstCategory::ScalarALU, 1, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 48 = S_MOVRELD_B32
|
|
|
|
{InstClass::ScalarMovRel, InstCategory::ScalarALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 49 = S_MOVRELD_B64
|
|
|
|
{InstClass::ScalarMovRel, InstCategory::ScalarALU, 1, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 50 = S_CBRANCH_JOIN
|
|
|
|
{InstClass::ScalarProgFlow, InstCategory::FlowControl, 1, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
{},
|
|
|
|
// 52 = S_ABS_I32
|
|
|
|
{InstClass::ScalarAbs, InstCategory::ScalarALU, 1, 1, ScalarType::Sint32, ScalarType::Sint32},
|
|
|
|
// 53 = S_MOV_FED_B32
|
|
|
|
{InstClass::Undefined, InstCategory::Undefined, 1, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
}};
|
|
|
|
|
|
|
|
constexpr std::array<InstFormat, 17> InstructionFormatSOPC = {{
|
|
|
|
// 0 = S_CMP_EQ_I32
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 2, 1, ScalarType::Sint32, ScalarType::Sint32},
|
|
|
|
// 1 = S_CMP_LI32
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 2, 1, ScalarType::Sint32, ScalarType::Sint32},
|
|
|
|
// 2 = S_CMP_GT_I32
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 2, 1, ScalarType::Sint32, ScalarType::Sint32},
|
|
|
|
// 3 = S_CMP_GE_I32
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 2, 1, ScalarType::Sint32, ScalarType::Sint32},
|
|
|
|
// 4 = S_CMP_LT_I32
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 2, 1, ScalarType::Sint32, ScalarType::Sint32},
|
|
|
|
// 5 = S_CMP_LE_I32
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 2, 1, ScalarType::Sint32, ScalarType::Sint32},
|
|
|
|
// 6 = S_CMP_EQ_U32
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 2, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 7 = S_CMP_LG_U32
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 2, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 8 = S_CMP_GT_U32
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 2, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 9 = S_CMP_GE_U32
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 2, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 10 = S_CMP_LT_U32
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 2, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 11 = S_CMP_LE_U32
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 2, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 12 = S_BITCMP0_B32
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 2, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 13 = S_BITCMP1_B32
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 2, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 14 = S_BITCMP0_B64
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 2, 1, ScalarType::Uint64, ScalarType::Uint64},
|
|
|
|
// 15 = S_BITCMP1_B64
|
|
|
|
{InstClass::ScalarCmp, InstCategory::ScalarALU, 2, 1, ScalarType::Uint64, ScalarType::Uint64},
|
|
|
|
// 16 = S_SETVSKIP
|
|
|
|
{InstClass::ScalarProgFlow, InstCategory::FlowControl, 2, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
}};
|
|
|
|
|
|
|
|
constexpr std::array<InstFormat, 27> InstructionFormatSOPP = {{
|
|
|
|
// 0 = S_NOP
|
|
|
|
{InstClass::ScalarWait, InstCategory::FlowControl, 0, 1, ScalarType::Any, ScalarType::Any},
|
|
|
|
// 1 = S_ENDPGM
|
|
|
|
{InstClass::ScalarProgFlow, InstCategory::FlowControl, 0, 1, ScalarType::Any, ScalarType::Any},
|
|
|
|
// 2 = S_BRANCH
|
|
|
|
{InstClass::ScalarProgFlow, InstCategory::FlowControl, 0, 1, ScalarType::Any, ScalarType::Any},
|
|
|
|
{},
|
|
|
|
// 4 = S_CBRANCH_SCC0
|
|
|
|
{InstClass::ScalarProgFlow, InstCategory::FlowControl, 0, 1, ScalarType::Any, ScalarType::Any},
|
|
|
|
// 5 = S_CBRANCH_SCC1
|
|
|
|
{InstClass::ScalarProgFlow, InstCategory::FlowControl, 0, 1, ScalarType::Any, ScalarType::Any},
|
|
|
|
// 6 = S_CBRANCH_VCCZ
|
|
|
|
{InstClass::ScalarProgFlow, InstCategory::FlowControl, 0, 1, ScalarType::Any, ScalarType::Any},
|
|
|
|
// 7 = S_CBRANCH_VCCNZ
|
|
|
|
{InstClass::ScalarProgFlow, InstCategory::FlowControl, 0, 1, ScalarType::Any, ScalarType::Any},
|
|
|
|
// 8 = S_CBRANCH_EXECZ
|
|
|
|
{InstClass::ScalarProgFlow, InstCategory::FlowControl, 0, 1, ScalarType::Any, ScalarType::Any},
|
|
|
|
// 9 = S_CBRANCH_EXECNZ
|
|
|
|
{InstClass::ScalarProgFlow, InstCategory::FlowControl, 0, 1, ScalarType::Any, ScalarType::Any},
|
|
|
|
// 10 = S_BARRIER
|
|
|
|
{InstClass::ScalarSync, InstCategory::FlowControl, 0, 1, ScalarType::Any, ScalarType::Any},
|
|
|
|
{},
|
|
|
|
// 12 = S_WAITCNT
|
|
|
|
{InstClass::ScalarSync, InstCategory::FlowControl, 0, 1, ScalarType::Any, ScalarType::Any},
|
|
|
|
// 13 = S_SETHALT
|
|
|
|
{InstClass::Undefined, InstCategory::Undefined, 0, 1, ScalarType::Any, ScalarType::Any},
|
|
|
|
// 14 = S_SLEEP
|
|
|
|
{InstClass::ScalarSync, InstCategory::FlowControl, 0, 1, ScalarType::Any, ScalarType::Any},
|
|
|
|
// 15 = S_SETPRIO
|
|
|
|
{InstClass::ScalarSync, InstCategory::FlowControl, 0, 1, ScalarType::Any, ScalarType::Any},
|
|
|
|
// 16 = S_SENDMSG
|
|
|
|
{InstClass::ScalarProgFlow, InstCategory::FlowControl, 0, 1, ScalarType::Any, ScalarType::Any},
|
|
|
|
// 17 = S_SENDMSGHALT
|
|
|
|
{InstClass::ScalarProgFlow, InstCategory::FlowControl, 0, 1, ScalarType::Any, ScalarType::Any},
|
|
|
|
// 18 = S_TRAP
|
|
|
|
{InstClass::Undefined, InstCategory::Undefined, 0, 1, ScalarType::Any, ScalarType::Any},
|
|
|
|
// 19 = S_ICACHE_INV
|
|
|
|
{InstClass::ScalarCache, InstCategory::FlowControl, 0, 1, ScalarType::Any, ScalarType::Any},
|
|
|
|
// 20 = S_INCPERFLEVEL
|
|
|
|
{InstClass::DbgProf, InstCategory::DebugProfile, 0, 1, ScalarType::Any, ScalarType::Any},
|
|
|
|
// 21 = S_DECPERFLEVEL
|
|
|
|
{InstClass::DbgProf, InstCategory::DebugProfile, 0, 1, ScalarType::Any, ScalarType::Any},
|
|
|
|
// 22 = S_TTRACEDATA
|
|
|
|
{InstClass::DbgProf, InstCategory::DebugProfile, 0, 1, ScalarType::Any, ScalarType::Any},
|
|
|
|
// 23 = S_CBRANCH_CDBGSYS
|
|
|
|
{InstClass::Undefined, InstCategory::Undefined, 0, 1, ScalarType::Any, ScalarType::Any},
|
|
|
|
// 24 = S_CBRANCH_CDBGUSER
|
|
|
|
{InstClass::Undefined, InstCategory::Undefined, 0, 1, ScalarType::Any, ScalarType::Any},
|
|
|
|
// 25 = S_CBRANCH_CDBGSYS_OR_USER
|
|
|
|
{InstClass::Undefined, InstCategory::Undefined, 0, 1, ScalarType::Any, ScalarType::Any},
|
|
|
|
// 26 = S_CBRANCH_CDBGSYS_AND_USER
|
|
|
|
{InstClass::Undefined, InstCategory::Undefined, 0, 1, ScalarType::Any, ScalarType::Any},
|
|
|
|
}};
|
|
|
|
|
|
|
|
constexpr std::array<InstFormat, 32> InstructionFormatSMRD = {{
|
|
|
|
// 0 = S_LOAD_DWORD
|
|
|
|
{InstClass::ScalarMemRd, InstCategory::ScalarMemory, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 1 = S_LOAD_DWORDX2
|
|
|
|
{InstClass::ScalarMemRd, InstCategory::ScalarMemory, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 2 = S_LOAD_DWORDX4
|
|
|
|
{InstClass::ScalarMemRd, InstCategory::ScalarMemory, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 3 = S_LOAD_DWORDX8
|
|
|
|
{InstClass::ScalarMemRd, InstCategory::ScalarMemory, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 4 = S_LOAD_DWORDX16
|
|
|
|
{InstClass::ScalarMemRd, InstCategory::ScalarMemory, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 8 = S_BUFFER_LOAD_DWORD
|
|
|
|
{InstClass::ScalarMemRd, InstCategory::ScalarMemory, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 9 = S_BUFFER_LOAD_DWORDX2
|
|
|
|
{InstClass::ScalarMemRd, InstCategory::ScalarMemory, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 10 = S_BUFFER_LOAD_DWORDX4
|
|
|
|
{InstClass::ScalarMemRd, InstCategory::ScalarMemory, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 11 = S_BUFFER_LOAD_DWORDX8
|
|
|
|
{InstClass::ScalarMemRd, InstCategory::ScalarMemory, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 12 = S_BUFFER_LOAD_DWORDX16
|
|
|
|
{InstClass::ScalarMemRd, InstCategory::ScalarMemory, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 29 = S_DCACHE_INV_VOL
|
|
|
|
{InstClass::ScalarMemUt, InstCategory::ScalarMemory, 1, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 30 = S_MEMTIME
|
|
|
|
{InstClass::ScalarMemUt, InstCategory::ScalarMemory, 1, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 31 = S_DCACHE_INV
|
|
|
|
{InstClass::ScalarMemUt, InstCategory::ScalarMemory, 1, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
}};
|
|
|
|
|
|
|
|
constexpr std::array<InstFormat, 50> InstructionFormatVOP2 = {{
|
|
|
|
// 0 = V_CNDMASK_B32
|
|
|
|
{InstClass::VectorThreadMask, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 1 = V_READLANE_B32
|
|
|
|
{InstClass::VectorLane, InstCategory::VectorALU, 2, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 2 = V_WRITELANE_B32
|
|
|
|
{InstClass::VectorLane, InstCategory::VectorALU, 2, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 3 = V_ADD_F32
|
|
|
|
{InstClass::VectorFpArith32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 4 = V_SUB_F32
|
|
|
|
{InstClass::VectorFpArith32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 5 = V_SUBREV_F32
|
|
|
|
{InstClass::VectorFpArith32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 6 = V_MAC_LEGACY_F32
|
|
|
|
{InstClass::VectorFpArith32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 7 = V_MUL_LEGACY_F32
|
|
|
|
{InstClass::VectorFpArith32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 8 = V_MUL_F32
|
|
|
|
{InstClass::VectorFpArith32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 9 = V_MUL_I32_I24
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 10 = V_MUL_HI_I32_I24
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 11 = V_MUL_U32_U24
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 12 = V_MUL_HI_U32_U24
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 13 = V_MIN_LEGACY_F32
|
|
|
|
{InstClass::VectorFpArith32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 14 = V_MAX_LEGACY_F32
|
|
|
|
{InstClass::VectorFpArith32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 15 = V_MIN_F32
|
|
|
|
{InstClass::VectorFpArith32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 16 = V_MAX_F32
|
|
|
|
{InstClass::VectorFpArith32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 17 = V_MIN_I32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 18 = V_MAX_I32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 19 = V_MIN_U32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 20 = V_MAX_U32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 21 = V_LSHR_B32
|
|
|
|
{InstClass::VectorBitField32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 22 = V_LSHRREV_B32
|
|
|
|
{InstClass::VectorBitField32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 23 = V_ASHR_I32
|
|
|
|
{InstClass::VectorBitField32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 24 = V_ASHRREV_I32
|
|
|
|
{InstClass::VectorBitField32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 25 = V_LSHL_B32
|
|
|
|
{InstClass::VectorBitField32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 26 = V_LSHLREV_B32
|
|
|
|
{InstClass::VectorBitField32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 27 = V_AND_B32
|
|
|
|
{InstClass::VectorBitLogic, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 28 = V_OR_B32
|
|
|
|
{InstClass::VectorBitLogic, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 29 = V_XOR_B32
|
|
|
|
{InstClass::VectorBitLogic, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 30 = V_BFM_B32
|
|
|
|
{InstClass::VectorBitField32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 31 = V_MAC_F32
|
|
|
|
{InstClass::VectorFpArith32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 32 = V_MADMK_F32
|
|
|
|
{InstClass::VectorFpArith32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 33 = V_MADAK_F32
|
|
|
|
{InstClass::VectorFpArith32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 34 = V_BCNT_U32_B32
|
|
|
|
{InstClass::VectorThreadMask, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 35 = V_MBCNT_LO_U32_B32
|
|
|
|
{InstClass::VectorThreadMask, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 36 = V_MBCNT_HI_U32_B32
|
|
|
|
{InstClass::VectorThreadMask, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 37 = V_ADD_I32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 38 = V_SUB_I32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 39 = V_SUBREV_I32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 40 = V_ADDC_U32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 41 = V_SUBB_U32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 42 = V_SUBBREV_U32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 43 = V_LDEXP_F32
|
|
|
|
{InstClass::VectorFpField32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 44 = V_CVT_PKACCUM_U8_F32
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 2, 1, ScalarType::Float32, ScalarType::Uint32},
|
|
|
|
// 45 = V_CVT_PKNORM_I16_F32
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 2, 1, ScalarType::Float32, ScalarType::Sint32},
|
|
|
|
// 46 = V_CVT_PKNORM_U16_F32
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 2, 1, ScalarType::Float32, ScalarType::Uint32},
|
|
|
|
// 47 = V_CVT_PKRTZ_F16_F32
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 2, 1, ScalarType::Float32, ScalarType::Uint32},
|
|
|
|
// 48 = V_CVT_PK_U16_U32
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 2, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 49 = V_CVT_PK_I16_I32
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 2, 1, ScalarType::Sint32, ScalarType::Sint32},
|
|
|
|
}};
|
|
|
|
|
|
|
|
constexpr std::array<InstFormat, 455> InstructionFormatVOP3 = {{
|
|
|
|
// 0 = V_CMP_F_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 1 = V_CMP_LT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 2 = V_CMP_EQ_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 3 = V_CMP_LE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 4 = V_CMP_GT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 5 = V_CMP_LG_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 6 = V_CMP_GE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 7 = V_CMP_O_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 8 = V_CMP_U_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 9 = V_CMP_NGE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 10 = V_CMP_NLG_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 11 = V_CMP_NGT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 12 = V_CMP_NLE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 13 = V_CMP_NEQ_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 14 = V_CMP_NLT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 15 = V_CMP_TRU_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 16 = V_CMPX_F_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 17 = V_CMPX_LT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 18 = V_CMPX_EQ_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 19 = V_CMPX_LE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 20 = V_CMPX_GT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 21 = V_CMPX_LG_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 22 = V_CMPX_GE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 23 = V_CMPX_O_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 24 = V_CMPX_U_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 25 = V_CMPX_NGE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 26 = V_CMPX_NLG_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 27 = V_CMPX_NGT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 28 = V_CMPX_NLE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 29 = V_CMPX_NEQ_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 30 = V_CMPX_NLT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 31 = V_CMPX_TRU_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 32 = V_CMP_F_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 33 = V_CMP_LT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 34 = V_CMP_EQ_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 35 = V_CMP_LE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 36 = V_CMP_GT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 37 = V_CMP_LG_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 38 = V_CMP_GE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 39 = V_CMP_O_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 40 = V_CMP_U_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 41 = V_CMP_NGE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 42 = V_CMP_NLG_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 43 = V_CMP_NGT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 44 = V_CMP_NLE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 45 = V_CMP_NEQ_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 46 = V_CMP_NLT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 47 = V_CMP_TRU_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 48 = V_CMPX_F_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 49 = V_CMPX_LT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 50 = V_CMPX_EQ_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 51 = V_CMPX_LE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 52 = V_CMPX_GT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 53 = V_CMPX_LG_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 54 = V_CMPX_GE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 55 = V_CMPX_O_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 56 = V_CMPX_U_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 57 = V_CMPX_NGE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 58 = V_CMPX_NLG_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 59 = V_CMPX_NGT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 60 = V_CMPX_NLE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 61 = V_CMPX_NEQ_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 62 = V_CMPX_NLT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 63 = V_CMPX_TRU_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 64 = V_CMPS_F_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 65 = V_CMPS_LT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 66 = V_CMPS_EQ_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 67 = V_CMPS_LE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 68 = V_CMPS_GT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 69 = V_CMPS_LG_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 70 = V_CMPS_GE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 71 = V_CMPS_O_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 72 = V_CMPS_U_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 73 = V_CMPS_NGE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 74 = V_CMPS_NLG_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 75 = V_CMPS_NGT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 76 = V_CMPS_NLE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 77 = V_CMPS_NEQ_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 78 = V_CMPS_NLT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 79 = V_CMPS_TRU_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 80 = V_CMPSX_F_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 81 = V_CMPSX_LT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 82 = V_CMPSX_EQ_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 83 = V_CMPSX_LE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 84 = V_CMPSX_GT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 85 = V_CMPSX_LG_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 86 = V_CMPSX_GE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 87 = V_CMPSX_O_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 88 = V_CMPSX_U_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 89 = V_CMPSX_NGE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 90 = V_CMPSX_NLG_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 91 = V_CMPSX_NGT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 92 = V_CMPSX_NLE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 93 = V_CMPSX_NEQ_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 94 = V_CMPSX_NLT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 95 = V_CMPSX_TRU_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 96 = V_CMPS_F_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 97 = V_CMPS_LT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 98 = V_CMPS_EQ_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 99 = V_CMPS_LE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 100 = V_CMPS_GT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 101 = V_CMPS_LG_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 102 = V_CMPS_GE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 103 = V_CMPS_O_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 104 = V_CMPS_U_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 105 = V_CMPS_NGE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 106 = V_CMPS_NLG_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 107 = V_CMPS_NGT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 108 = V_CMPS_NLE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 109 = V_CMPS_NEQ_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 110 = V_CMPS_NLT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 111 = V_CMPS_TRU_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 112 = V_CMPSX_F_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 113 = V_CMPSX_LT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 114 = V_CMPSX_EQ_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 115 = V_CMPSX_LE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 116 = V_CMPSX_GT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 117 = V_CMPSX_LG_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 118 = V_CMPSX_GE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 119 = V_CMPSX_O_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 120 = V_CMPSX_U_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 121 = V_CMPSX_NGE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 122 = V_CMPSX_NLG_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 123 = V_CMPSX_NGT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 124 = V_CMPSX_NLE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 125 = V_CMPSX_NEQ_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 126 = V_CMPSX_NLT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 127 = V_CMPSX_TRU_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 128 = V_CMP_F_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 129 = V_CMP_LT_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 130 = V_CMP_EQ_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 131 = V_CMP_LE_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 132 = V_CMP_GT_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 133 = V_CMP_NE_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 134 = V_CMP_GE_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 135 = V_CMP_T_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 136 = V_CMP_CLASS_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 144 = V_CMPX_F_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 145 = V_CMPX_LT_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 146 = V_CMPX_EQ_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 147 = V_CMPX_LE_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 148 = V_CMPX_GT_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 149 = V_CMPX_NE_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 150 = V_CMPX_GE_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 151 = V_CMPX_T_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 152 = V_CMPX_CLASS_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 160 = V_CMP_F_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 161 = V_CMP_LT_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 162 = V_CMP_EQ_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 163 = V_CMP_LE_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 164 = V_CMP_GT_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 165 = V_CMP_NE_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 166 = V_CMP_GE_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 167 = V_CMP_T_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 168 = V_CMP_CLASS_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 176 = V_CMPX_F_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 177 = V_CMPX_LT_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 178 = V_CMPX_EQ_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 179 = V_CMPX_LE_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 180 = V_CMPX_GT_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 181 = V_CMPX_NE_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 182 = V_CMPX_GE_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 183 = V_CMPX_T_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 184 = V_CMPX_CLASS_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 192 = V_CMP_F_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 193 = V_CMP_LT_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 194 = V_CMP_EQ_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 195 = V_CMP_LE_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 196 = V_CMP_GT_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 197 = V_CMP_NE_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 198 = V_CMP_GE_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 199 = V_CMP_T_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 208 = V_CMPX_F_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 209 = V_CMPX_LT_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 210 = V_CMPX_EQ_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 211 = V_CMPX_LE_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 212 = V_CMPX_GT_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 213 = V_CMPX_NE_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 214 = V_CMPX_GE_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 215 = V_CMPX_T_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 224 = V_CMP_F_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 225 = V_CMP_LT_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 226 = V_CMP_EQ_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 227 = V_CMP_LE_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 228 = V_CMP_GT_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 229 = V_CMP_NE_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 230 = V_CMP_GE_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 231 = V_CMP_T_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 240 = V_CMPX_F_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 241 = V_CMPX_LT_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 242 = V_CMPX_EQ_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 243 = V_CMPX_LE_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 244 = V_CMPX_GT_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 245 = V_CMPX_NE_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 246 = V_CMPX_GE_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 247 = V_CMPX_T_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 256 = V_CNDMASK_B32
|
|
|
|
{InstClass::VectorThreadMask, InstCategory::VectorALU, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 257 = V_READLANE_B32
|
|
|
|
{InstClass::VectorLane, InstCategory::VectorALU, 2, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 258 = V_WRITELANE_B32
|
|
|
|
{InstClass::VectorLane, InstCategory::VectorALU, 2, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 259 = V_ADD_F32
|
|
|
|
{InstClass::VectorFpArith32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 260 = V_SUB_F32
|
|
|
|
{InstClass::VectorFpArith32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 261 = V_SUBREV_F32
|
|
|
|
{InstClass::VectorFpArith32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 262 = V_MAC_LEGACY_F32
|
|
|
|
{InstClass::VectorFpArith32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 263 = V_MUL_LEGACY_F32
|
|
|
|
{InstClass::VectorFpArith32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 264 = V_MUL_F32
|
|
|
|
{InstClass::VectorFpArith32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 265 = V_MUL_I32_I24
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 266 = V_MUL_HI_I32_I24
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 267 = V_MUL_U32_U24
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 268 = V_MUL_HI_U32_U24
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 269 = V_MIN_LEGACY_F32
|
|
|
|
{InstClass::VectorFpArith32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 270 = V_MAX_LEGACY_F32
|
|
|
|
{InstClass::VectorFpArith32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 271 = V_MIN_F32
|
|
|
|
{InstClass::VectorFpArith32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 272 = V_MAX_F32
|
|
|
|
{InstClass::VectorFpArith32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 273 = V_MIN_I32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 274 = V_MAX_I32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 275 = V_MIN_U32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 276 = V_MAX_U32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 277 = V_LSHR_B32
|
|
|
|
{InstClass::VectorBitField32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 278 = V_LSHRREV_B32
|
|
|
|
{InstClass::VectorBitField32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 279 = V_ASHR_I32
|
|
|
|
{InstClass::VectorBitField32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 280 = V_ASHRREV_I32
|
|
|
|
{InstClass::VectorBitField32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 281 = V_LSHL_B32
|
|
|
|
{InstClass::VectorBitField32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 282 = V_LSHLREV_B32
|
|
|
|
{InstClass::VectorBitField32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 283 = V_AND_B32
|
|
|
|
{InstClass::VectorBitLogic, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 284 = V_OR_B32
|
|
|
|
{InstClass::VectorBitLogic, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 285 = V_XOR_B32
|
|
|
|
{InstClass::VectorBitLogic, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 286 = V_BFM_B32
|
|
|
|
{InstClass::VectorBitField32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 287 = V_MAC_F32
|
|
|
|
{InstClass::VectorFpArith32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 288 = V_MADMK_F32
|
|
|
|
{InstClass::VectorFpArith32, InstCategory::VectorALU, 3, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 289 = V_MADAK_F32
|
|
|
|
{InstClass::VectorFpArith32, InstCategory::VectorALU, 3, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 290 = V_BCNT_U32_B32
|
|
|
|
{InstClass::VectorThreadMask, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 291 = V_MBCNT_LO_U32_B32
|
|
|
|
{InstClass::VectorThreadMask, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 292 = V_MBCNT_HI_U32_B32
|
|
|
|
{InstClass::VectorThreadMask, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 293 = V_ADD_I32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 3, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 294 = V_SUB_I32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 3, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 295 = V_SUBREV_I32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 3, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 296 = V_ADDC_U32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 297 = V_SUBB_U32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 298 = V_SUBBREV_U32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 299 = V_LDEXP_F32
|
|
|
|
{InstClass::VectorFpField32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 300 = V_CVT_PKACCUM_U8_F32
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 2, 1, ScalarType::Float32, ScalarType::Uint32},
|
|
|
|
// 301 = V_CVT_PKNORM_I16_F32
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 2, 1, ScalarType::Float32, ScalarType::Sint32},
|
|
|
|
// 302 = V_CVT_PKNORM_U16_F32
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 2, 1, ScalarType::Float32, ScalarType::Uint32},
|
|
|
|
// 303 = V_CVT_PKRTZ_F16_F32
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 2, 1, ScalarType::Float32, ScalarType::Uint32},
|
|
|
|
// 304 = V_CVT_PK_U16_U32
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 2, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 305 = V_CVT_PK_I16_I32
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 2, 1, ScalarType::Sint32, ScalarType::Sint32},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 320 = V_MAD_LEGACY_F32
|
|
|
|
{InstClass::VectorFpArith32, InstCategory::VectorALU, 3, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 321 = V_MAD_F32
|
|
|
|
{InstClass::VectorFpArith32, InstCategory::VectorALU, 3, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 322 = V_MAD_I32_I24
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 3, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 323 = V_MAD_U32_U24
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 324 = V_CUBEID_F32
|
|
|
|
{InstClass::VectorFpGraph32, InstCategory::VectorALU, 3, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 325 = V_CUBESC_F32
|
|
|
|
{InstClass::VectorFpGraph32, InstCategory::VectorALU, 3, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 326 = V_CUBETC_F32
|
|
|
|
{InstClass::VectorFpGraph32, InstCategory::VectorALU, 3, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 327 = V_CUBEMA_F32
|
|
|
|
{InstClass::VectorFpGraph32, InstCategory::VectorALU, 3, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 328 = V_BFE_U32
|
|
|
|
{InstClass::VectorBitField32, InstCategory::VectorALU, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 329 = V_BFE_I32
|
|
|
|
{InstClass::VectorBitField32, InstCategory::VectorALU, 3, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 330 = V_BFI_B32
|
|
|
|
{InstClass::VectorBitLogic, InstCategory::VectorALU, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 331 = V_FMA_F32
|
|
|
|
{InstClass::VectorFpArith32, InstCategory::VectorALU, 3, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 332 = V_FMA_F64
|
|
|
|
{InstClass::VectorFpArith64, InstCategory::VectorALU, 3, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 333 = V_LERP_U8
|
|
|
|
{InstClass::VectorIntGraph, InstCategory::VectorALU, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 334 = V_ALIGNBIT_B32
|
|
|
|
{InstClass::VectorBitField32, InstCategory::VectorALU, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 335 = V_ALIGNBYTE_B32
|
|
|
|
{InstClass::VectorBitField32, InstCategory::VectorALU, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 336 = V_MULLIT_F32
|
|
|
|
{InstClass::VectorFpGraph32, InstCategory::VectorALU, 3, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 337 = V_MIN3_F32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 3, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 338 = V_MIN3_I32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 3, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 339 = V_MIN3_U32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 340 = V_MAX3_F32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 3, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 341 = V_MAX3_I32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 3, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 342 = V_MAX3_U32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 343 = V_MED3_F32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 3, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 344 = V_MED3_I32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 3, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 345 = V_MED3_U32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 346 = V_SAD_U8
|
|
|
|
{InstClass::VectorIntGraph, InstCategory::VectorALU, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 347 = V_SAD_HI_U8
|
|
|
|
{InstClass::VectorIntGraph, InstCategory::VectorALU, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 348 = V_SAD_U16
|
|
|
|
{InstClass::VectorIntGraph, InstCategory::VectorALU, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 349 = V_SAD_U32
|
|
|
|
{InstClass::VectorIntGraph, InstCategory::VectorALU, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 350 = V_CVT_PK_U8_F32
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 3, 1, ScalarType::Float32, ScalarType::Uint32},
|
|
|
|
// 351 = V_DIV_FIXUP_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 3, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 352 = V_DIV_FIXUP_F64
|
|
|
|
{InstClass::VectorFpTran64, InstCategory::VectorALU, 3, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 353 = V_LSHL_B64
|
|
|
|
{InstClass::VectorBitField64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 354 = V_LSHR_B64
|
|
|
|
{InstClass::VectorBitField64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 355 = V_ASHR_I64
|
|
|
|
{InstClass::VectorBitField64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 356 = V_ADD_F64
|
|
|
|
{InstClass::VectorFpArith64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 357 = V_MUL_F64
|
|
|
|
{InstClass::VectorFpArith64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 358 = V_MIN_F64
|
|
|
|
{InstClass::VectorFpArith64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 359 = V_MAX_F64
|
|
|
|
{InstClass::VectorFpArith64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 360 = V_LDEXP_F64
|
|
|
|
{InstClass::VectorFpField64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 361 = V_MUL_LO_U32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 362 = V_MUL_HI_U32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 363 = V_MUL_LO_I32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 364 = V_MUL_HI_I32
|
|
|
|
{InstClass::VectorIntArith32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 365 = V_DIV_SCALE_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 3, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 366 = V_DIV_SCALE_F64
|
|
|
|
{InstClass::VectorFpTran64, InstCategory::VectorALU, 3, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 367 = V_DIV_FMAS_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 3, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 368 = V_DIV_FMAS_F64
|
|
|
|
{InstClass::VectorFpTran64, InstCategory::VectorALU, 3, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 369 = V_MSAD_U8
|
|
|
|
{InstClass::VectorIntGraph, InstCategory::VectorALU, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 370 = V_QSAD_U8
|
|
|
|
{InstClass::Undefined, InstCategory::Undefined, 3, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 371 = V_MQSAD_U8
|
|
|
|
{InstClass::Undefined, InstCategory::Undefined, 3, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 372 = V_TRIG_PREOP_F64
|
|
|
|
{InstClass::VectorFpTran64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 373 = V_MQSAD_U32_U8
|
|
|
|
{InstClass::VectorIntGraph, InstCategory::VectorALU, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 374 = V_MAD_U64_U32
|
|
|
|
{InstClass::VectorIntArith64, InstCategory::VectorALU, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 375 = V_MAD_I64_I32
|
|
|
|
{InstClass::VectorIntArith64, InstCategory::VectorALU, 3, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 384 = V_NOP
|
|
|
|
{InstClass::VectorMisc, InstCategory::VectorALU, 0, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 385 = V_MOV_B32
|
|
|
|
{InstClass::VectorRegMov, InstCategory::VectorALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 386 = V_READFIRSTLANE_B32
|
|
|
|
{InstClass::VectorLane, InstCategory::VectorALU, 1, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 387 = V_CVT_I32_F64
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Float64, ScalarType::Sint32},
|
|
|
|
// 388 = V_CVT_F64_I32
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Sint32, ScalarType::Float64},
|
|
|
|
// 389 = V_CVT_F32_I32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 1, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 390 = V_CVT_F32_U32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 391 = V_CVT_U32_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 392 = V_CVT_I32_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 393 = V_MOV_FED_B32
|
|
|
|
{InstClass::Undefined, InstCategory::Undefined, 1, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 394 = V_CVT_F16_F32
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float16},
|
|
|
|
// 395 = V_CVT_F32_F16
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Float16,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 396 = V_CVT_RPI_I32_F32
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Float32, ScalarType::Sint32},
|
|
|
|
// 397 = V_CVT_FLR_I32_F32
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Float32, ScalarType::Sint32},
|
|
|
|
// 398 = V_CVT_OFF_F32_I4
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Sint32, ScalarType::Float32},
|
|
|
|
// 399 = V_CVT_F32_F64
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 400 = V_CVT_F64_F32
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 401 = V_CVT_F32_UBYTE0
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 402 = V_CVT_F32_UBYTE1
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 403 = V_CVT_F32_UBYTE2
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 404 = V_CVT_F32_UBYTE3
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 405 = V_CVT_U32_F64
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Float64, ScalarType::Uint32},
|
|
|
|
// 406 = V_CVT_F64_U32
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Uint32, ScalarType::Float64},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 416 = V_FRACT_F32
|
|
|
|
{InstClass::VectorFpRound32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 417 = V_TRUNC_F32
|
|
|
|
{InstClass::VectorFpRound32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 418 = V_CEIL_F32
|
|
|
|
{InstClass::VectorFpRound32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 419 = V_RNDNE_F32
|
|
|
|
{InstClass::VectorFpRound32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 420 = V_FLOOR_F32
|
|
|
|
{InstClass::VectorFpRound32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 421 = V_EXP_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 422 = V_LOG_CLAMP_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 423 = V_LOG_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 424 = V_RCP_CLAMP_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 425 = V_RCP_LEGACY_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 426 = V_RCP_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 427 = V_RCP_IFLAG_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 428 = V_RSQ_CLAMP_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 429 = V_RSQ_LEGACY_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 430 = V_RSQ_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 431 = V_RCP_F64
|
|
|
|
{InstClass::VectorFpTran64, InstCategory::VectorALU, 1, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 432 = V_RCP_CLAMP_F64
|
|
|
|
{InstClass::VectorFpTran64, InstCategory::VectorALU, 1, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 433 = V_RSQ_F64
|
|
|
|
{InstClass::VectorFpTran64, InstCategory::VectorALU, 1, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 434 = V_RSQ_CLAMP_F64
|
|
|
|
{InstClass::VectorFpTran64, InstCategory::VectorALU, 1, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 435 = V_SQRT_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 436 = V_SQRT_F64
|
|
|
|
{InstClass::VectorFpTran64, InstCategory::VectorALU, 1, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 437 = V_SIN_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 438 = V_COS_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 439 = V_NOT_B32
|
|
|
|
{InstClass::VectorBitLogic, InstCategory::VectorALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 440 = V_BFREV_B32
|
|
|
|
{InstClass::VectorBitField32, InstCategory::VectorALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 441 = V_FFBH_U32
|
|
|
|
{InstClass::VectorBitField32, InstCategory::VectorALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 442 = V_FFBL_B32
|
|
|
|
{InstClass::VectorBitField32, InstCategory::VectorALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 443 = V_FFBH_I32
|
|
|
|
{InstClass::VectorBitField32, InstCategory::VectorALU, 1, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 444 = V_FREXP_EXP_I32_F64
|
|
|
|
{InstClass::VectorFpField64, InstCategory::VectorALU, 1, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 445 = V_FREXP_MANT_F64
|
|
|
|
{InstClass::VectorFpField64, InstCategory::VectorALU, 1, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 446 = V_FRACT_F64
|
|
|
|
{InstClass::VectorFpRound64, InstCategory::VectorALU, 1, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 447 = V_FREXP_EXP_I32_F32
|
|
|
|
{InstClass::VectorFpField32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 448 = V_FREXP_MANT_F32
|
|
|
|
{InstClass::VectorFpField32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 449 = V_CLREXCP
|
|
|
|
{InstClass::Undefined, InstCategory::Undefined, 0, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 450 = V_MOVRELD_B32
|
|
|
|
{InstClass::VectorMovRel, InstCategory::VectorALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 451 = V_MOVRELS_B32
|
|
|
|
{InstClass::VectorMovRel, InstCategory::VectorALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 452 = V_MOVRELSD_B32
|
|
|
|
{InstClass::VectorMovRel, InstCategory::VectorALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
}};
|
|
|
|
|
|
|
|
constexpr std::array<InstFormat, 71> InstructionFormatVOP1 = {{
|
|
|
|
// 0 = V_NOP
|
|
|
|
{InstClass::VectorMisc, InstCategory::VectorALU, 0, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 1 = V_MOV_B32
|
|
|
|
{InstClass::VectorRegMov, InstCategory::VectorALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 2 = V_READFIRSTLANE_B32
|
|
|
|
{InstClass::VectorLane, InstCategory::VectorALU, 1, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 3 = V_CVT_I32_F64
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Float64, ScalarType::Sint32},
|
|
|
|
// 4 = V_CVT_F64_I32
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Sint32, ScalarType::Float64},
|
|
|
|
// 5 = V_CVT_F32_I32
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Sint32, ScalarType::Float32},
|
|
|
|
// 6 = V_CVT_F32_U32
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Uint32, ScalarType::Float32},
|
|
|
|
// 7 = V_CVT_U32_F32
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Float32, ScalarType::Uint32},
|
|
|
|
// 8 = V_CVT_I32_F32
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Float32, ScalarType::Sint32},
|
|
|
|
// 9 = V_MOV_FED_B32
|
|
|
|
{InstClass::Undefined, InstCategory::Undefined, 1, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 10 = V_CVT_F16_F32
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float16},
|
|
|
|
// 11 = V_CVT_F32_F16
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Float16,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 12 = V_CVT_RPI_I32_F32
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Float32, ScalarType::Sint32},
|
|
|
|
// 13 = V_CVT_FLR_I32_F32
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Float32, ScalarType::Sint32},
|
|
|
|
// 14 = V_CVT_OFF_F32_I4
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Sint32, ScalarType::Float32},
|
|
|
|
// 15 = V_CVT_F32_F64
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 16 = V_CVT_F64_F32
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 17 = V_CVT_F32_UBYTE0
|
2024-07-01 21:42:45 +02:00
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
2024-05-22 00:35:12 +02:00
|
|
|
// 18 = V_CVT_F32_UBYTE1
|
2024-07-01 21:42:45 +02:00
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
2024-05-22 00:35:12 +02:00
|
|
|
// 19 = V_CVT_F32_UBYTE2
|
2024-07-01 21:42:45 +02:00
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
2024-05-22 00:35:12 +02:00
|
|
|
// 20 = V_CVT_F32_UBYTE3
|
2024-07-01 21:42:45 +02:00
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
2024-05-22 00:35:12 +02:00
|
|
|
// 21 = V_CVT_U32_F64
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Float64, ScalarType::Uint32},
|
|
|
|
// 22 = V_CVT_F64_U32
|
|
|
|
{InstClass::VectorConv, InstCategory::VectorALU, 1, 1, ScalarType::Uint32, ScalarType::Float64},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 32 = V_FRACT_F32
|
|
|
|
{InstClass::VectorFpRound32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 33 = V_TRUNC_F32
|
|
|
|
{InstClass::VectorFpRound32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 34 = V_CEIL_F32
|
|
|
|
{InstClass::VectorFpRound32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 35 = V_RNDNE_F32
|
|
|
|
{InstClass::VectorFpRound32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 36 = V_FLOOR_F32
|
|
|
|
{InstClass::VectorFpRound32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 37 = V_EXP_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 38 = V_LOG_CLAMP_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 39 = V_LOG_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 40 = V_RCP_CLAMP_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 41 = V_RCP_LEGACY_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 42 = V_RCP_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 43 = V_RCP_IFLAG_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 44 = V_RSQ_CLAMP_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 45 = V_RSQ_LEGACY_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 46 = V_RSQ_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 47 = V_RCP_F64
|
|
|
|
{InstClass::VectorFpTran64, InstCategory::VectorALU, 1, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 48 = V_RCP_CLAMP_F64
|
|
|
|
{InstClass::VectorFpTran64, InstCategory::VectorALU, 1, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 49 = V_RSQ_F64
|
|
|
|
{InstClass::VectorFpTran64, InstCategory::VectorALU, 1, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 50 = V_RSQ_CLAMP_F64
|
|
|
|
{InstClass::VectorFpTran64, InstCategory::VectorALU, 1, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 51 = V_SQRT_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 52 = V_SQRT_F64
|
|
|
|
{InstClass::VectorFpTran64, InstCategory::VectorALU, 1, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 53 = V_SIN_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 54 = V_COS_F32
|
|
|
|
{InstClass::VectorFpTran32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 55 = V_NOT_B32
|
|
|
|
{InstClass::VectorBitLogic, InstCategory::VectorALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 56 = V_BFREV_B32
|
|
|
|
{InstClass::VectorBitField32, InstCategory::VectorALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 57 = V_FFBH_U32
|
|
|
|
{InstClass::VectorBitField32, InstCategory::VectorALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 58 = V_FFBL_B32
|
|
|
|
{InstClass::VectorBitField32, InstCategory::VectorALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 59 = V_FFBH_I32
|
|
|
|
{InstClass::VectorBitField32, InstCategory::VectorALU, 1, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 60 = V_FREXP_EXP_I32_F64
|
|
|
|
{InstClass::VectorFpField64, InstCategory::VectorALU, 1, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 61 = V_FREXP_MANT_F64
|
|
|
|
{InstClass::VectorFpField64, InstCategory::VectorALU, 1, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 62 = V_FRACT_F64
|
|
|
|
{InstClass::VectorFpRound64, InstCategory::VectorALU, 1, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 63 = V_FREXP_EXP_I32_F32
|
|
|
|
{InstClass::VectorFpField32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 64 = V_FREXP_MANT_F32
|
|
|
|
{InstClass::VectorFpField32, InstCategory::VectorALU, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 65 = V_CLREXCP
|
|
|
|
{InstClass::Undefined, InstCategory::Undefined, 0, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 66 = V_MOVRELD_B32
|
|
|
|
{InstClass::VectorMovRel, InstCategory::VectorALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 67 = V_MOVRELS_B32
|
|
|
|
{InstClass::VectorMovRel, InstCategory::VectorALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 68 = V_MOVRELSD_B32
|
|
|
|
{InstClass::VectorMovRel, InstCategory::VectorALU, 1, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
}};
|
|
|
|
|
|
|
|
constexpr std::array<InstFormat, 248> InstructionFormatVOPC = {{
|
|
|
|
// 0 = V_CMP_F_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 1 = V_CMP_LT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 2 = V_CMP_EQ_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 3 = V_CMP_LE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 4 = V_CMP_GT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 5 = V_CMP_LG_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 6 = V_CMP_GE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 7 = V_CMP_O_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 8 = V_CMP_U_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 9 = V_CMP_NGE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 10 = V_CMP_NLG_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 11 = V_CMP_NGT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 12 = V_CMP_NLE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 13 = V_CMP_NEQ_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 14 = V_CMP_NLT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 15 = V_CMP_TRU_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 16 = V_CMPX_F_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 17 = V_CMPX_LT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 18 = V_CMPX_EQ_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 19 = V_CMPX_LE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 20 = V_CMPX_GT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 21 = V_CMPX_LG_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 22 = V_CMPX_GE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 23 = V_CMPX_O_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 24 = V_CMPX_U_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 25 = V_CMPX_NGE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 26 = V_CMPX_NLG_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 27 = V_CMPX_NGT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 28 = V_CMPX_NLE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 29 = V_CMPX_NEQ_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 30 = V_CMPX_NLT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 31 = V_CMPX_TRU_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 32 = V_CMP_F_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 33 = V_CMP_LT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 34 = V_CMP_EQ_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 35 = V_CMP_LE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 36 = V_CMP_GT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 37 = V_CMP_LG_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 38 = V_CMP_GE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 39 = V_CMP_O_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 40 = V_CMP_U_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 41 = V_CMP_NGE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 42 = V_CMP_NLG_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 43 = V_CMP_NGT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 44 = V_CMP_NLE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 45 = V_CMP_NEQ_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 46 = V_CMP_NLT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 47 = V_CMP_TRU_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 48 = V_CMPX_F_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 49 = V_CMPX_LT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 50 = V_CMPX_EQ_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 51 = V_CMPX_LE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 52 = V_CMPX_GT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 53 = V_CMPX_LG_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 54 = V_CMPX_GE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 55 = V_CMPX_O_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 56 = V_CMPX_U_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 57 = V_CMPX_NGE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 58 = V_CMPX_NLG_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 59 = V_CMPX_NGT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 60 = V_CMPX_NLE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 61 = V_CMPX_NEQ_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 62 = V_CMPX_NLT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 63 = V_CMPX_TRU_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 64 = V_CMPS_F_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 65 = V_CMPS_LT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 66 = V_CMPS_EQ_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 67 = V_CMPS_LE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 68 = V_CMPS_GT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 69 = V_CMPS_LG_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 70 = V_CMPS_GE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 71 = V_CMPS_O_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 72 = V_CMPS_U_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 73 = V_CMPS_NGE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 74 = V_CMPS_NLG_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 75 = V_CMPS_NGT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 76 = V_CMPS_NLE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 77 = V_CMPS_NEQ_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 78 = V_CMPS_NLT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 79 = V_CMPS_TRU_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 80 = V_CMPSX_F_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 81 = V_CMPSX_LT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 82 = V_CMPSX_EQ_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 83 = V_CMPSX_LE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 84 = V_CMPSX_GT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 85 = V_CMPSX_LG_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 86 = V_CMPSX_GE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 87 = V_CMPSX_O_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 88 = V_CMPSX_U_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 89 = V_CMPSX_NGE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 90 = V_CMPSX_NLG_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 91 = V_CMPSX_NGT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 92 = V_CMPSX_NLE_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 93 = V_CMPSX_NEQ_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 94 = V_CMPSX_NLT_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 95 = V_CMPSX_TRU_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 96 = V_CMPS_F_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 97 = V_CMPS_LT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 98 = V_CMPS_EQ_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 99 = V_CMPS_LE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 100 = V_CMPS_GT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 101 = V_CMPS_LG_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 102 = V_CMPS_GE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 103 = V_CMPS_O_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 104 = V_CMPS_U_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 105 = V_CMPS_NGE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 106 = V_CMPS_NLG_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 107 = V_CMPS_NGT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 108 = V_CMPS_NLE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 109 = V_CMPS_NEQ_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 110 = V_CMPS_NLT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 111 = V_CMPS_TRU_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 112 = V_CMPSX_F_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 113 = V_CMPSX_LT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 114 = V_CMPSX_EQ_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 115 = V_CMPSX_LE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 116 = V_CMPSX_GT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 117 = V_CMPSX_LG_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 118 = V_CMPSX_GE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 119 = V_CMPSX_O_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 120 = V_CMPSX_U_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 121 = V_CMPSX_NGE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 122 = V_CMPSX_NLG_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 123 = V_CMPSX_NGT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 124 = V_CMPSX_NLE_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 125 = V_CMPSX_NEQ_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 126 = V_CMPSX_NLT_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 127 = V_CMPSX_TRU_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 128 = V_CMP_F_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 129 = V_CMP_LT_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 130 = V_CMP_EQ_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 131 = V_CMP_LE_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 132 = V_CMP_GT_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 133 = V_CMP_NE_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 134 = V_CMP_GE_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 135 = V_CMP_T_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 136 = V_CMP_CLASS_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 144 = V_CMPX_F_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 145 = V_CMPX_LT_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 146 = V_CMPX_EQ_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 147 = V_CMPX_LE_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 148 = V_CMPX_GT_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 149 = V_CMPX_NE_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 150 = V_CMPX_GE_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 151 = V_CMPX_T_I32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 152 = V_CMPX_CLASS_F32
|
|
|
|
{InstClass::VectorFpCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 160 = V_CMP_F_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 161 = V_CMP_LT_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 162 = V_CMP_EQ_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 163 = V_CMP_LE_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 164 = V_CMP_GT_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 165 = V_CMP_NE_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 166 = V_CMP_GE_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 167 = V_CMP_T_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 168 = V_CMP_CLASS_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 176 = V_CMPX_F_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 177 = V_CMPX_LT_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 178 = V_CMPX_EQ_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 179 = V_CMPX_LE_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 180 = V_CMPX_GT_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 181 = V_CMPX_NE_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 182 = V_CMPX_GE_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 183 = V_CMPX_T_I64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 184 = V_CMPX_CLASS_F64
|
|
|
|
{InstClass::VectorFpCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 192 = V_CMP_F_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 193 = V_CMP_LT_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 194 = V_CMP_EQ_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 195 = V_CMP_LE_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 196 = V_CMP_GT_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 197 = V_CMP_NE_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 198 = V_CMP_GE_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 199 = V_CMP_T_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 208 = V_CMPX_F_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 209 = V_CMPX_LT_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 210 = V_CMPX_EQ_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 211 = V_CMPX_LE_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 212 = V_CMPX_GT_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 213 = V_CMPX_NE_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 214 = V_CMPX_GE_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 215 = V_CMPX_T_U32
|
|
|
|
{InstClass::VectorIntCmp32, InstCategory::VectorALU, 2, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 224 = V_CMP_F_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 225 = V_CMP_LT_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 226 = V_CMP_EQ_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 227 = V_CMP_LE_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 228 = V_CMP_GT_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 229 = V_CMP_NE_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 230 = V_CMP_GE_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 231 = V_CMP_T_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 240 = V_CMPX_F_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 241 = V_CMPX_LT_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 242 = V_CMPX_EQ_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 243 = V_CMPX_LE_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 244 = V_CMPX_GT_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 245 = V_CMPX_NE_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 246 = V_CMPX_GE_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 247 = V_CMPX_T_U64
|
|
|
|
{InstClass::VectorIntCmp64, InstCategory::VectorALU, 2, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
}};
|
|
|
|
|
|
|
|
constexpr std::array<InstFormat, 3> InstructionFormatVINTRP = {{
|
|
|
|
// 0 = V_INTERP_P1_F32
|
|
|
|
{InstClass::VectorInterpFpCache, InstCategory::VectorInterpolation, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 1 = V_INTERP_P2_F32
|
|
|
|
{InstClass::VectorInterpFpCache, InstCategory::VectorInterpolation, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 2 = V_INTERP_MOV_F32
|
|
|
|
{InstClass::VectorInterpFpCache, InstCategory::VectorInterpolation, 1, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
}};
|
|
|
|
|
|
|
|
constexpr std::array<InstFormat, 256> InstructionFormatDS = {{
|
|
|
|
// 0 = DS_ADD_U32
|
|
|
|
{InstClass::DsAtomicArith32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 1 = DS_SUB_U32
|
|
|
|
{InstClass::DsAtomicArith32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 2 = DS_RSUB_U32
|
|
|
|
{InstClass::DsAtomicArith32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 3 = DS_INC_U32
|
|
|
|
{InstClass::DsAtomicArith32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 4 = DS_DEC_U32
|
|
|
|
{InstClass::DsAtomicArith32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 5 = DS_MIN_I32
|
|
|
|
{InstClass::DsAtomicMinMax32, InstCategory::DataShare, 3, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 6 = DS_MAX_I32
|
|
|
|
{InstClass::DsAtomicMinMax32, InstCategory::DataShare, 3, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 7 = DS_MIN_U32
|
|
|
|
{InstClass::DsAtomicMinMax32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 8 = DS_MAX_U32
|
|
|
|
{InstClass::DsAtomicMinMax32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 9 = DS_AND_B32
|
|
|
|
{InstClass::DsAtomicLogic32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 10 = DS_OR_B32
|
|
|
|
{InstClass::DsAtomicLogic32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 11 = DS_XOR_B32
|
|
|
|
{InstClass::DsAtomicLogic32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 12 = DS_MSKOR_B32
|
|
|
|
{InstClass::DsAtomicLogic32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 13 = DS_WRITE_B32
|
|
|
|
{InstClass::DsIdxWr, InstCategory::DataShare, 3, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 14 = DS_WRITE2_B32
|
|
|
|
{InstClass::DsIdxWr, InstCategory::DataShare, 3, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 15 = DS_WRITE2ST64_B32
|
|
|
|
{InstClass::DsIdxWr, InstCategory::DataShare, 3, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 16 = DS_CMPST_B32
|
|
|
|
{InstClass::DsAtomicCmpSt32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 17 = DS_CMPST_F32
|
|
|
|
{InstClass::DsAtomicCmpSt32, InstCategory::DataShare, 3, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 18 = DS_MIN_F32
|
|
|
|
{InstClass::DsAtomicMinMax32, InstCategory::DataShare, 3, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 19 = DS_MAX_F32
|
|
|
|
{InstClass::DsAtomicMinMax32, InstCategory::DataShare, 3, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 20 = DS_NOP
|
|
|
|
{InstClass::DsDataShareMisc, InstCategory::DataShare, 3, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 24 = DS_GWS_SEMA_RELEASE_ALL
|
|
|
|
{InstClass::GdsSync, InstCategory::DataShare, 3, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 25 = DS_GWS_INIT
|
|
|
|
{InstClass::GdsSync, InstCategory::DataShare, 3, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 26 = DS_GWS_SEMA_V
|
|
|
|
{InstClass::GdsSync, InstCategory::DataShare, 3, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 27 = DS_GWS_SEMA_BR
|
|
|
|
{InstClass::GdsSync, InstCategory::DataShare, 3, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 28 = DS_GWS_SEMA_P
|
|
|
|
{InstClass::GdsSync, InstCategory::DataShare, 3, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 29 = DS_GWS_BARRIER
|
|
|
|
{InstClass::ScalarSync, InstCategory::FlowControl, 3, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 30 = DS_WRITE_B8
|
|
|
|
{InstClass::DsIdxWr, InstCategory::DataShare, 3, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 31 = DS_WRITE_B16
|
|
|
|
{InstClass::DsIdxWr, InstCategory::DataShare, 3, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 32 = DS_ADD_RTN_U32
|
|
|
|
{InstClass::DsAtomicArith32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 33 = DS_SUB_RTN_U32
|
|
|
|
{InstClass::DsAtomicArith32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 34 = DS_RSUB_RTN_U32
|
|
|
|
{InstClass::DsAtomicArith32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 35 = DS_INC_RTN_U32
|
|
|
|
{InstClass::DsAtomicArith32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 36 = DS_DEC_RTN_U32
|
|
|
|
{InstClass::DsAtomicArith32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 37 = DS_MIN_RTN_I32
|
|
|
|
{InstClass::DsAtomicMinMax32, InstCategory::DataShare, 3, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 38 = DS_MAX_RTN_I32
|
|
|
|
{InstClass::DsAtomicMinMax32, InstCategory::DataShare, 3, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 39 = DS_MIN_RTN_U32
|
|
|
|
{InstClass::DsAtomicMinMax32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 40 = DS_MAX_RTN_U32
|
|
|
|
{InstClass::DsAtomicMinMax32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 41 = DS_AND_RTN_B32
|
|
|
|
{InstClass::DsAtomicLogic32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 42 = DS_OR_RTN_B32
|
|
|
|
{InstClass::DsAtomicLogic32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 43 = DS_XOR_RTN_B32
|
|
|
|
{InstClass::DsAtomicLogic32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 44 = DS_MSKOR_RTN_B32
|
|
|
|
{InstClass::DsAtomicLogic32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 45 = DS_WRXCHG_RTN_B32
|
|
|
|
{InstClass::DsIdxWrXchg, InstCategory::DataShare, 3, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 46 = DS_WRXCHG2_RTN_B32
|
|
|
|
{InstClass::DsIdxWrXchg, InstCategory::DataShare, 3, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 47 = DS_WRXCHG2ST64_RTN_B32
|
|
|
|
{InstClass::DsIdxWrXchg, InstCategory::DataShare, 3, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 48 = DS_CMPST_RTN_B32
|
|
|
|
{InstClass::DsAtomicCmpSt32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 49 = DS_CMPST_RTN_F32
|
|
|
|
{InstClass::DsAtomicCmpSt32, InstCategory::DataShare, 3, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 50 = DS_MIN_RTN_F32
|
|
|
|
{InstClass::DsAtomicMinMax32, InstCategory::DataShare, 3, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 51 = DS_MAX_RTN_F32
|
|
|
|
{InstClass::DsAtomicMinMax32, InstCategory::DataShare, 3, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 52 = DS_WRAP_RTN_B32
|
|
|
|
{InstClass::DsIdxWrap, InstCategory::DataShare, 3, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 53 = DS_SWIZZLE_B32
|
|
|
|
{InstClass::DsDataShareUt, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 54 = DS_READ_B32
|
|
|
|
{InstClass::DsIdxRd, InstCategory::DataShare, 3, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 55 = DS_READ2_B32
|
|
|
|
{InstClass::DsIdxRd, InstCategory::DataShare, 3, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 56 = DS_READ2ST64_B32
|
|
|
|
{InstClass::DsIdxRd, InstCategory::DataShare, 3, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 57 = DS_READ_I8
|
|
|
|
{InstClass::DsIdxRd, InstCategory::DataShare, 3, 1, ScalarType::Sint32, ScalarType::Sint32},
|
|
|
|
// 58 = DS_READ_U8
|
|
|
|
{InstClass::DsIdxRd, InstCategory::DataShare, 3, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 59 = DS_READ_I16
|
|
|
|
{InstClass::DsIdxRd, InstCategory::DataShare, 3, 1, ScalarType::Sint32, ScalarType::Sint32},
|
|
|
|
// 60 = DS_READ_U16
|
|
|
|
{InstClass::DsIdxRd, InstCategory::DataShare, 3, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
// 61 = DS_CONSUME
|
|
|
|
{InstClass::DsAppendCon, InstCategory::DataShare, 3, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 62 = DS_APPEND
|
|
|
|
{InstClass::DsAppendCon, InstCategory::DataShare, 3, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 63 = DS_ORDERED_COUNT
|
|
|
|
{InstClass::GdsOrdCnt, InstCategory::DataShare, 3, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 64 = DS_ADD_U64
|
|
|
|
{InstClass::DsAtomicArith64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 65 = DS_SUB_U64
|
|
|
|
{InstClass::DsAtomicArith64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 66 = DS_RSUB_U64
|
|
|
|
{InstClass::DsAtomicArith64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 67 = DS_INC_U64
|
|
|
|
{InstClass::DsAtomicArith64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 68 = DS_DEC_U64
|
|
|
|
{InstClass::DsAtomicArith64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 69 = DS_MIN_I64
|
|
|
|
{InstClass::DsAtomicMinMax64, InstCategory::DataShare, 3, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 70 = DS_MAX_I64
|
|
|
|
{InstClass::DsAtomicMinMax64, InstCategory::DataShare, 3, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 71 = DS_MIN_U64
|
|
|
|
{InstClass::DsAtomicMinMax64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 72 = DS_MAX_U64
|
|
|
|
{InstClass::DsAtomicMinMax64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 73 = DS_AND_B64
|
|
|
|
{InstClass::DsAtomicLogic64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 74 = DS_OR_B64
|
|
|
|
{InstClass::DsAtomicLogic64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 75 = DS_XOR_B64
|
|
|
|
{InstClass::DsAtomicLogic64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 76 = DS_MSKOR_B64
|
|
|
|
{InstClass::DsAtomicLogic64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 77 = DS_WRITE_B64
|
|
|
|
{InstClass::DsIdxWr, InstCategory::DataShare, 3, 1, ScalarType::Uint64, ScalarType::Uint64},
|
|
|
|
// 78 = DS_WRITE2_B64
|
|
|
|
{InstClass::DsIdxWr, InstCategory::DataShare, 3, 1, ScalarType::Uint64, ScalarType::Uint64},
|
|
|
|
// 79 = DS_WRITE2ST64_B64
|
|
|
|
{InstClass::DsIdxWr, InstCategory::DataShare, 3, 1, ScalarType::Uint64, ScalarType::Uint64},
|
|
|
|
// 80 = DS_CMPST_B64
|
|
|
|
{InstClass::DsAtomicCmpSt64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 81 = DS_CMPST_F64
|
|
|
|
{InstClass::DsAtomicCmpSt64, InstCategory::DataShare, 3, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 82 = DS_MIN_F64
|
|
|
|
{InstClass::DsAtomicMinMax64, InstCategory::DataShare, 3, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 83 = DS_MAX_F64
|
|
|
|
{InstClass::DsAtomicMinMax64, InstCategory::DataShare, 3, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 96 = DS_ADD_RTN_U64
|
|
|
|
{InstClass::DsAtomicArith64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 97 = DS_SUB_RTN_U64
|
|
|
|
{InstClass::DsAtomicArith64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 98 = DS_RSUB_RTN_U64
|
|
|
|
{InstClass::DsAtomicArith64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 99 = DS_INC_RTN_U64
|
|
|
|
{InstClass::DsAtomicArith64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 100 = DS_DEC_RTN_U64
|
|
|
|
{InstClass::DsAtomicArith64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 101 = DS_MIN_RTN_I64
|
|
|
|
{InstClass::DsAtomicMinMax64, InstCategory::DataShare, 3, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 102 = DS_MAX_RTN_I64
|
|
|
|
{InstClass::DsAtomicMinMax64, InstCategory::DataShare, 3, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 103 = DS_MIN_RTN_U64
|
|
|
|
{InstClass::DsAtomicMinMax64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 104 = DS_MAX_RTN_U64
|
|
|
|
{InstClass::DsAtomicMinMax64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 105 = DS_AND_RTN_B64
|
|
|
|
{InstClass::DsAtomicLogic64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 106 = DS_OR_RTN_B64
|
|
|
|
{InstClass::DsAtomicLogic64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 107 = DS_XOR_RTN_B64
|
|
|
|
{InstClass::DsAtomicLogic64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 108 = DS_MSKOR_RTN_B64
|
|
|
|
{InstClass::DsAtomicLogic64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 109 = DS_WRXCHG_RTN_B64
|
|
|
|
{InstClass::DsIdxWrXchg, InstCategory::DataShare, 3, 1, ScalarType::Uint64, ScalarType::Uint64},
|
|
|
|
// 110 = DS_WRXCHG2_RTN_B64
|
|
|
|
{InstClass::DsIdxWrXchg, InstCategory::DataShare, 3, 1, ScalarType::Uint64, ScalarType::Uint64},
|
|
|
|
// 111 = DS_WRXCHG2ST64_RTN_B64
|
|
|
|
{InstClass::DsIdxWrXchg, InstCategory::DataShare, 3, 1, ScalarType::Uint64, ScalarType::Uint64},
|
|
|
|
// 112 = DS_CMPST_RTN_B64
|
|
|
|
{InstClass::DsAtomicCmpSt64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 113 = DS_CMPST_RTN_F64
|
|
|
|
{InstClass::DsAtomicCmpSt64, InstCategory::DataShare, 3, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 114 = DS_MIN_RTN_F64
|
|
|
|
{InstClass::DsAtomicMinMax64, InstCategory::DataShare, 3, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 115 = DS_MAX_RTN_F64
|
|
|
|
{InstClass::DsAtomicMinMax64, InstCategory::DataShare, 3, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 118 = DS_READ_B64
|
|
|
|
{InstClass::DsIdxRd, InstCategory::DataShare, 3, 1, ScalarType::Uint64, ScalarType::Uint64},
|
|
|
|
// 119 = DS_READ2_B64
|
|
|
|
{InstClass::DsIdxRd, InstCategory::DataShare, 3, 1, ScalarType::Uint64, ScalarType::Uint64},
|
|
|
|
// 120 = DS_READ2ST64_B64
|
|
|
|
{InstClass::DsIdxRd, InstCategory::DataShare, 3, 1, ScalarType::Uint64, ScalarType::Uint64},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 126 = DS_CONDXCHG32_RTN_B64
|
|
|
|
{InstClass::DsIdxCondXchg, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
{},
|
|
|
|
// 128 = DS_ADD_SRC2_U32
|
|
|
|
{InstClass::DsAtomicArith32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 129 = DS_SUB_SRC2_U32
|
|
|
|
{InstClass::DsAtomicArith32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 130 = DS_RSUB_SRC2_U32
|
|
|
|
{InstClass::DsAtomicArith32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 131 = DS_INC_SRC2_U32
|
|
|
|
{InstClass::DsAtomicArith32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 132 = DS_DEC_SRC2_U32
|
|
|
|
{InstClass::DsAtomicArith32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 133 = DS_MIN_SRC2_I32
|
|
|
|
{InstClass::DsAtomicMinMax32, InstCategory::DataShare, 3, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 134 = DS_MAX_SRC2_I32
|
|
|
|
{InstClass::DsAtomicMinMax32, InstCategory::DataShare, 3, 1, ScalarType::Sint32,
|
|
|
|
ScalarType::Sint32},
|
|
|
|
// 135 = DS_MIN_SRC2_U32
|
|
|
|
{InstClass::DsAtomicMinMax32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 136 = DS_MAX_SRC2_U32
|
|
|
|
{InstClass::DsAtomicMinMax32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 137 = DS_AND_SRC2_B32
|
|
|
|
{InstClass::DsAtomicLogic32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 138 = DS_OR_SRC2_B32
|
|
|
|
{InstClass::DsAtomicLogic32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 139 = DS_XOR_SRC2_B32
|
|
|
|
{InstClass::DsAtomicLogic32, InstCategory::DataShare, 3, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
{},
|
|
|
|
// 141 = DS_WRITE_SRC2_B32
|
|
|
|
{InstClass::DsIdxWr, InstCategory::DataShare, 3, 1, ScalarType::Uint32, ScalarType::Uint32},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 146 = DS_MIN_SRC2_F32
|
|
|
|
{InstClass::DsAtomicMinMax32, InstCategory::DataShare, 3, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 147 = DS_MAX_SRC2_F32
|
|
|
|
{InstClass::DsAtomicMinMax32, InstCategory::DataShare, 3, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 192 = DS_ADD_SRC2_U64
|
|
|
|
{InstClass::DsAtomicArith64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 193 = DS_SUB_SRC2_U64
|
|
|
|
{InstClass::DsAtomicArith64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 194 = DS_RSUB_SRC2_U64
|
|
|
|
{InstClass::DsAtomicArith64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 195 = DS_INC_SRC2_U64
|
|
|
|
{InstClass::DsAtomicArith64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 196 = DS_DEC_SRC2_U64
|
|
|
|
{InstClass::DsAtomicArith64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 197 = DS_MIN_SRC2_I64
|
|
|
|
{InstClass::DsAtomicMinMax64, InstCategory::DataShare, 3, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 198 = DS_MAX_SRC2_I64
|
|
|
|
{InstClass::DsAtomicMinMax64, InstCategory::DataShare, 3, 1, ScalarType::Sint64,
|
|
|
|
ScalarType::Sint64},
|
|
|
|
// 199 = DS_MIN_SRC2_U64
|
|
|
|
{InstClass::DsAtomicMinMax64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 200 = DS_MAX_SRC2_U64
|
|
|
|
{InstClass::DsAtomicMinMax64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 201 = DS_AND_SRC2_B64
|
|
|
|
{InstClass::DsAtomicLogic64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 202 = DS_OR_SRC2_B64
|
|
|
|
{InstClass::DsAtomicLogic64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
// 203 = DS_XOR_SRC2_B64
|
|
|
|
{InstClass::DsAtomicLogic64, InstCategory::DataShare, 3, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint64},
|
|
|
|
{},
|
|
|
|
// 205 = DS_WRITE_SRC2_B64
|
|
|
|
{InstClass::DsIdxWr, InstCategory::DataShare, 3, 1, ScalarType::Uint64, ScalarType::Uint64},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 210 = DS_MIN_SRC2_F64
|
|
|
|
{InstClass::DsAtomicMinMax64, InstCategory::DataShare, 3, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 211 = DS_MAX_SRC2_F64
|
|
|
|
{InstClass::DsAtomicMinMax64, InstCategory::DataShare, 3, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 222 = DS_WRITE_B96
|
|
|
|
{InstClass::Undefined, InstCategory::Undefined, 3, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 223 = DS_WRITE_B128
|
|
|
|
{InstClass::Undefined, InstCategory::Undefined, 3, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 253 = DS_CONDXCHG32_RTN_B128
|
|
|
|
{InstClass::Undefined, InstCategory::Undefined, 3, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 254 = DS_READ_B96
|
|
|
|
{InstClass::Undefined, InstCategory::Undefined, 3, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 255 = DS_READ_B128
|
|
|
|
{InstClass::Undefined, InstCategory::Undefined, 3, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
}};
|
|
|
|
|
|
|
|
constexpr std::array<InstFormat, 114> InstructionFormatMUBUF = {{
|
|
|
|
// 0 = BUFFER_LOAD_FORMAT_X
|
|
|
|
{InstClass::VectorMemBufFmt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 1 = BUFFER_LOAD_FORMAT_XY
|
|
|
|
{InstClass::VectorMemBufFmt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 2 = BUFFER_LOAD_FORMAT_XYZ
|
|
|
|
{InstClass::VectorMemBufFmt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 3 = BUFFER_LOAD_FORMAT_XYZW
|
|
|
|
{InstClass::VectorMemBufFmt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 4 = BUFFER_STORE_FORMAT_X
|
|
|
|
{InstClass::VectorMemBufFmt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 5 = BUFFER_STORE_FORMAT_XY
|
|
|
|
{InstClass::VectorMemBufFmt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 6 = BUFFER_STORE_FORMAT_XYZ
|
|
|
|
{InstClass::VectorMemBufFmt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 7 = BUFFER_STORE_FORMAT_XYZW
|
|
|
|
{InstClass::VectorMemBufFmt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 8 = BUFFER_LOAD_UBYTE
|
|
|
|
{InstClass::VectorMemBufNoFmt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 9 = BUFFER_LOAD_SBYTE
|
|
|
|
{InstClass::VectorMemBufNoFmt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 10 = BUFFER_LOAD_USHORT
|
|
|
|
{InstClass::VectorMemBufNoFmt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 11 = BUFFER_LOAD_SSHORT
|
|
|
|
{InstClass::VectorMemBufNoFmt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 12 = BUFFER_LOAD_DWORD
|
|
|
|
{InstClass::VectorMemBufNoFmt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 13 = BUFFER_LOAD_DWORDX2
|
|
|
|
{InstClass::VectorMemBufNoFmt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 14 = BUFFER_LOAD_DWORDX4
|
|
|
|
{InstClass::VectorMemBufNoFmt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 15 = BUFFER_LOAD_DWORDX3
|
|
|
|
{InstClass::VectorMemBufNoFmt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 24 = BUFFER_STORE_BYTE
|
|
|
|
{InstClass::VectorMemBufNoFmt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
{},
|
|
|
|
// 26 = BUFFER_STORE_SHORT
|
|
|
|
{InstClass::VectorMemBufNoFmt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
{},
|
|
|
|
// 28 = BUFFER_STORE_DWORD
|
|
|
|
{InstClass::VectorMemBufNoFmt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 29 = BUFFER_STORE_DWORDX2
|
|
|
|
{InstClass::VectorMemBufNoFmt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 30 = BUFFER_STORE_DWORDX4
|
|
|
|
{InstClass::VectorMemBufNoFmt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 31 = BUFFER_STORE_DWORDX3
|
|
|
|
{InstClass::VectorMemBufNoFmt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 48 = BUFFER_ATOMIC_SWAP
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 49 = BUFFER_ATOMIC_CMPSWAP
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 50 = BUFFER_ATOMIC_ADD
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 51 = BUFFER_ATOMIC_SUB
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
{},
|
|
|
|
// 53 = BUFFER_ATOMIC_SMIN
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 54 = BUFFER_ATOMIC_UMIN
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 55 = BUFFER_ATOMIC_SMAX
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 56 = BUFFER_ATOMIC_UMAX
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 57 = BUFFER_ATOMIC_AND
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 58 = BUFFER_ATOMIC_OR
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 59 = BUFFER_ATOMIC_XOR
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 60 = BUFFER_ATOMIC_INC
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 61 = BUFFER_ATOMIC_DEC
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 62 = BUFFER_ATOMIC_FCMPSWAP
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 63 = BUFFER_ATOMIC_FMIN
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 64 = BUFFER_ATOMIC_FMAX
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 80 = BUFFER_ATOMIC_SWAP_X2
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 81 = BUFFER_ATOMIC_CMPSWAP_X2
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 82 = BUFFER_ATOMIC_ADD_X2
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 83 = BUFFER_ATOMIC_SUB_X2
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
{},
|
|
|
|
// 85 = BUFFER_ATOMIC_SMIN_X2
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 86 = BUFFER_ATOMIC_UMIN_X2
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 87 = BUFFER_ATOMIC_SMAX_X2
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 88 = BUFFER_ATOMIC_UMAX_X2
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 89 = BUFFER_ATOMIC_AND_X2
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 90 = BUFFER_ATOMIC_OR_X2
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 91 = BUFFER_ATOMIC_XOR_X2
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 92 = BUFFER_ATOMIC_INC_X2
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 93 = BUFFER_ATOMIC_DEC_X2
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Uint64,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 94 = BUFFER_ATOMIC_FCMPSWAP_X2
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 95 = BUFFER_ATOMIC_FMIN_X2
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
// 96 = BUFFER_ATOMIC_FMAX_X2
|
|
|
|
{InstClass::VectorMemBufAtomic, InstCategory::VectorMemory, 4, 1, ScalarType::Float64,
|
|
|
|
ScalarType::Float64},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 112 = BUFFER_WBINVL1_SC
|
|
|
|
{InstClass::VectorMemL1Cache, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 113 = BUFFER_WBINVL1
|
|
|
|
{InstClass::VectorMemL1Cache, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
}};
|
|
|
|
|
|
|
|
constexpr std::array<InstFormat, 8> InstructionFormatMTBUF = {{
|
|
|
|
// 0 = TBUFFER_LOAD_FORMAT_X
|
|
|
|
{InstClass::VectorMemBufFmt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 1 = TBUFFER_LOAD_FORMAT_XY
|
|
|
|
{InstClass::VectorMemBufFmt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 2 = TBUFFER_LOAD_FORMAT_XYZ
|
|
|
|
{InstClass::VectorMemBufFmt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 3 = TBUFFER_LOAD_FORMAT_XYZW
|
|
|
|
{InstClass::VectorMemBufFmt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 4 = TBUFFER_STORE_FORMAT_X
|
|
|
|
{InstClass::VectorMemBufFmt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 5 = TBUFFER_STORE_FORMAT_XY
|
|
|
|
{InstClass::VectorMemBufFmt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 6 = TBUFFER_STORE_FORMAT_XYZ
|
|
|
|
{InstClass::VectorMemBufFmt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 7 = TBUFFER_STORE_FORMAT_XYZW
|
|
|
|
{InstClass::VectorMemBufFmt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
}};
|
|
|
|
|
|
|
|
constexpr std::array<InstFormat, 112> InstructionFormatMIMG = {{
|
|
|
|
// 0 = IMAGE_LOAD
|
|
|
|
{InstClass::VectorMemImgNoSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 1 = IMAGE_LOAD_MIP
|
|
|
|
{InstClass::VectorMemImgNoSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 2 = IMAGE_LOAD_PCK
|
|
|
|
{InstClass::VectorMemImgNoSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 3 = IMAGE_LOAD_PCK_SGN
|
|
|
|
{InstClass::VectorMemImgNoSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 4 = IMAGE_LOAD_MIP_PCK
|
|
|
|
{InstClass::VectorMemImgNoSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 5 = IMAGE_LOAD_MIP_PCK_SGN
|
|
|
|
{InstClass::VectorMemImgNoSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 8 = IMAGE_STORE
|
|
|
|
{InstClass::VectorMemImgNoSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 9 = IMAGE_STORE_MIP
|
|
|
|
{InstClass::VectorMemImgNoSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 10 = IMAGE_STORE_PCK
|
|
|
|
{InstClass::VectorMemImgNoSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 11 = IMAGE_STORE_MIP_PCK
|
|
|
|
{InstClass::VectorMemImgNoSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 14 = IMAGE_GET_RESINFO
|
|
|
|
{InstClass::VectorMemImgUt, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Uint32},
|
|
|
|
// 15 = IMAGE_ATOMIC_SWAP
|
|
|
|
{InstClass::VectorMemImgNoSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 16 = IMAGE_ATOMIC_CMPSWAP
|
|
|
|
{InstClass::VectorMemImgNoSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 17 = IMAGE_ATOMIC_ADD
|
|
|
|
{InstClass::VectorMemImgNoSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 18 = IMAGE_ATOMIC_SUB
|
|
|
|
{InstClass::VectorMemImgNoSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
{},
|
|
|
|
// 20 = IMAGE_ATOMIC_SMIN
|
|
|
|
{InstClass::VectorMemImgNoSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 21 = IMAGE_ATOMIC_UMIN
|
|
|
|
{InstClass::VectorMemImgNoSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 22 = IMAGE_ATOMIC_SMAX
|
|
|
|
{InstClass::VectorMemImgNoSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 23 = IMAGE_ATOMIC_UMAX
|
|
|
|
{InstClass::VectorMemImgNoSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 24 = IMAGE_ATOMIC_AND
|
|
|
|
{InstClass::VectorMemImgNoSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 25 = IMAGE_ATOMIC_OR
|
|
|
|
{InstClass::VectorMemImgNoSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 26 = IMAGE_ATOMIC_XOR
|
|
|
|
{InstClass::VectorMemImgNoSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 27 = IMAGE_ATOMIC_INC
|
|
|
|
{InstClass::VectorMemImgNoSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 28 = IMAGE_ATOMIC_DEC
|
|
|
|
{InstClass::VectorMemImgNoSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 29 = IMAGE_ATOMIC_FCMPSWAP
|
|
|
|
{InstClass::VectorMemImgNoSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 30 = IMAGE_ATOMIC_FMIN
|
|
|
|
{InstClass::VectorMemImgNoSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 31 = IMAGE_ATOMIC_FMAX
|
|
|
|
{InstClass::VectorMemImgNoSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 32 = IMAGE_SAMPLE
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 33 = IMAGE_SAMPLE_CL
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 34 = IMAGE_SAMPLE_D
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 35 = IMAGE_SAMPLE_D_CL
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 36 = IMAGE_SAMPLE_L
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 37 = IMAGE_SAMPLE_B
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 38 = IMAGE_SAMPLE_B_CL
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 39 = IMAGE_SAMPLE_LZ
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 40 = IMAGE_SAMPLE_C
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 41 = IMAGE_SAMPLE_C_CL
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 42 = IMAGE_SAMPLE_C_D
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 43 = IMAGE_SAMPLE_C_D_CL
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 44 = IMAGE_SAMPLE_C_L
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 45 = IMAGE_SAMPLE_C_B
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 46 = IMAGE_SAMPLE_C_B_CL
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 47 = IMAGE_SAMPLE_C_LZ
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 48 = IMAGE_SAMPLE_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 49 = IMAGE_SAMPLE_CL_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 50 = IMAGE_SAMPLE_D_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 51 = IMAGE_SAMPLE_D_CL_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 52 = IMAGE_SAMPLE_L_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 53 = IMAGE_SAMPLE_B_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 54 = IMAGE_SAMPLE_B_CL_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 55 = IMAGE_SAMPLE_LZ_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 56 = IMAGE_SAMPLE_C_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 57 = IMAGE_SAMPLE_C_CL_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 58 = IMAGE_SAMPLE_C_D_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 59 = IMAGE_SAMPLE_C_D_CL_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 60 = IMAGE_SAMPLE_C_L_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 61 = IMAGE_SAMPLE_C_B_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 62 = IMAGE_SAMPLE_C_B_CL_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 63 = IMAGE_SAMPLE_C_LZ_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 64 = IMAGE_GATHER4
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 65 = IMAGE_GATHER4_CL
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 68 = IMAGE_GATHER4_L
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 69 = IMAGE_GATHER4_B
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 70 = IMAGE_GATHER4_B_CL
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 71 = IMAGE_GATHER4_LZ
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 72 = IMAGE_GATHER4_C
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 73 = IMAGE_GATHER4_C_CL
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 76 = IMAGE_GATHER4_C_L
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 77 = IMAGE_GATHER4_C_B
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 78 = IMAGE_GATHER4_C_B_CL
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 79 = IMAGE_GATHER4_C_LZ
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 80 = IMAGE_GATHER4_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 81 = IMAGE_GATHER4_CL_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 84 = IMAGE_GATHER4_L_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 85 = IMAGE_GATHER4_B_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 86 = IMAGE_GATHER4_B_CL_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 87 = IMAGE_GATHER4_LZ_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
// 88 = IMAGE_GATHER4_C_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 89 = IMAGE_GATHER4_C_CL_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 92 = IMAGE_GATHER4_C_L_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 93 = IMAGE_GATHER4_C_B_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 94 = IMAGE_GATHER4_C_B_CL_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 95 = IMAGE_GATHER4_C_LZ_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 96 = IMAGE_GET_LOD
|
|
|
|
{InstClass::VectorMemImgUt, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
|
|
|
ScalarType::Float32},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
{},
|
|
|
|
// 104 = IMAGE_SAMPLE_CD
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 105 = IMAGE_SAMPLE_CD_CL
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 106 = IMAGE_SAMPLE_C_CD
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 107 = IMAGE_SAMPLE_C_CD_CL
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 108 = IMAGE_SAMPLE_CD_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 109 = IMAGE_SAMPLE_CD_CL_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 110 = IMAGE_SAMPLE_C_CD_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
// 111 = IMAGE_SAMPLE_C_CD_CL_O
|
|
|
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
|
|
|
ScalarType::Undefined},
|
|
|
|
}};
|
|
|
|
|
|
|
|
constexpr std::array<InstFormat, 1> InstructionFormatEXP = {{
|
|
|
|
{InstClass::Exp, InstCategory::Export, 4, 1, ScalarType::Float32, ScalarType::Any},
|
|
|
|
}};
|
|
|
|
|
|
|
|
InstFormat InstructionFormat(InstEncoding encoding, uint32_t opcode) {
|
|
|
|
switch (encoding) {
|
|
|
|
case InstEncoding::SOP1:
|
|
|
|
return InstructionFormatSOP1[opcode];
|
|
|
|
case InstEncoding::SOPP:
|
|
|
|
return InstructionFormatSOPP[opcode];
|
|
|
|
case InstEncoding::SOPC:
|
|
|
|
return InstructionFormatSOPC[opcode];
|
|
|
|
case InstEncoding::VOP1:
|
|
|
|
return InstructionFormatVOP1[opcode];
|
|
|
|
case InstEncoding::VOPC:
|
|
|
|
return InstructionFormatVOPC[opcode];
|
|
|
|
case InstEncoding::VOP3:
|
|
|
|
return InstructionFormatVOP3[opcode];
|
|
|
|
case InstEncoding::EXP:
|
|
|
|
return InstructionFormatEXP[opcode];
|
|
|
|
case InstEncoding::VINTRP:
|
|
|
|
return InstructionFormatVINTRP[opcode];
|
|
|
|
case InstEncoding::DS:
|
|
|
|
return InstructionFormatDS[opcode];
|
|
|
|
case InstEncoding::MUBUF:
|
|
|
|
return InstructionFormatMUBUF[opcode];
|
|
|
|
case InstEncoding::MTBUF:
|
|
|
|
return InstructionFormatMTBUF[opcode];
|
|
|
|
case InstEncoding::MIMG:
|
|
|
|
return InstructionFormatMIMG[opcode];
|
|
|
|
case InstEncoding::SMRD:
|
|
|
|
return InstructionFormatSMRD[opcode];
|
|
|
|
case InstEncoding::SOPK:
|
|
|
|
return InstructionFormatSOPK[opcode];
|
|
|
|
case InstEncoding::SOP2:
|
|
|
|
return InstructionFormatSOP2[opcode];
|
|
|
|
case InstEncoding::VOP2:
|
|
|
|
return InstructionFormatVOP2[opcode];
|
|
|
|
}
|
|
|
|
UNREACHABLE();
|
|
|
|
return {};
|
|
|
|
}
|
|
|
|
|
|
|
|
} // namespace Shader::Gcn
|