diff options
Diffstat (limited to 'contrib/llvm-project/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp')
| -rw-r--r-- | contrib/llvm-project/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp | 57 |
1 files changed, 41 insertions, 16 deletions
diff --git a/contrib/llvm-project/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp b/contrib/llvm-project/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp index 7939d0036568..67be7b0fd642 100644 --- a/contrib/llvm-project/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp +++ b/contrib/llvm-project/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp @@ -1284,9 +1284,8 @@ MCOperand AMDGPUDisassembler::createSRegOperand(unsigned SRegClassID, MCOperand AMDGPUDisassembler::createVGPR16Operand(unsigned RegIdx, bool IsHi) const { - unsigned RCID = - IsHi ? AMDGPU::VGPR_HI16RegClassID : AMDGPU::VGPR_LO16RegClassID; - return createRegOperand(RCID, RegIdx); + unsigned RegIdxInVGPR16 = RegIdx * 2 + (IsHi ? 1 : 0); + return createRegOperand(AMDGPU::VGPR_16RegClassID, RegIdxInVGPR16); } // Decode Literals for insts which always have a literal in the encoding @@ -2000,34 +1999,60 @@ MCDisassembler::DecodeStatus AMDGPUDisassembler::decodeCOMPUTE_PGM_RSRC3( if (FourByteBuffer & COMPUTE_PGM_RSRC3_GFX90A_RESERVED1) return MCDisassembler::Fail; } else if (isGFX10Plus()) { - if (!EnableWavefrontSize32 || !*EnableWavefrontSize32) { - PRINT_DIRECTIVE(".amdhsa_shared_vgpr_count", - COMPUTE_PGM_RSRC3_GFX10_PLUS_SHARED_VGPR_COUNT); + // Bits [0-3]. + if (!isGFX12Plus()) { + if (!EnableWavefrontSize32 || !*EnableWavefrontSize32) { + PRINT_DIRECTIVE(".amdhsa_shared_vgpr_count", + COMPUTE_PGM_RSRC3_GFX10_GFX11_SHARED_VGPR_COUNT); + } else { + PRINT_PSEUDO_DIRECTIVE_COMMENT( + "SHARED_VGPR_COUNT", + COMPUTE_PGM_RSRC3_GFX10_GFX11_SHARED_VGPR_COUNT); + } } else { - PRINT_PSEUDO_DIRECTIVE_COMMENT( - "SHARED_VGPR_COUNT", COMPUTE_PGM_RSRC3_GFX10_PLUS_SHARED_VGPR_COUNT); + if (FourByteBuffer & COMPUTE_PGM_RSRC3_GFX12_PLUS_RESERVED0) + return MCDisassembler::Fail; } - if (isGFX11Plus()) { + // Bits [4-11]. + if (isGFX11()) { PRINT_PSEUDO_DIRECTIVE_COMMENT("INST_PREF_SIZE", - COMPUTE_PGM_RSRC3_GFX11_PLUS_INST_PREF_SIZE); + COMPUTE_PGM_RSRC3_GFX11_INST_PREF_SIZE); PRINT_PSEUDO_DIRECTIVE_COMMENT("TRAP_ON_START", - COMPUTE_PGM_RSRC3_GFX11_PLUS_TRAP_ON_START); + COMPUTE_PGM_RSRC3_GFX11_TRAP_ON_START); PRINT_PSEUDO_DIRECTIVE_COMMENT("TRAP_ON_END", - COMPUTE_PGM_RSRC3_GFX11_PLUS_TRAP_ON_END); + COMPUTE_PGM_RSRC3_GFX11_TRAP_ON_END); + } else if (isGFX12Plus()) { + PRINT_PSEUDO_DIRECTIVE_COMMENT( + "INST_PREF_SIZE", COMPUTE_PGM_RSRC3_GFX12_PLUS_INST_PREF_SIZE); + } else { + if (FourByteBuffer & COMPUTE_PGM_RSRC3_GFX10_RESERVED1) + return MCDisassembler::Fail; + } + + // Bits [12]. + if (FourByteBuffer & COMPUTE_PGM_RSRC3_GFX10_PLUS_RESERVED2) + return MCDisassembler::Fail; + + // Bits [13]. + if (isGFX12Plus()) { + PRINT_PSEUDO_DIRECTIVE_COMMENT("GLG_EN", + COMPUTE_PGM_RSRC3_GFX12_PLUS_GLG_EN); } else { - if (FourByteBuffer & COMPUTE_PGM_RSRC3_GFX10_RESERVED0) + if (FourByteBuffer & COMPUTE_PGM_RSRC3_GFX10_GFX11_RESERVED3) return MCDisassembler::Fail; } - if (FourByteBuffer & COMPUTE_PGM_RSRC3_GFX10_PLUS_RESERVED1) + // Bits [14-30]. + if (FourByteBuffer & COMPUTE_PGM_RSRC3_GFX10_PLUS_RESERVED4) return MCDisassembler::Fail; + // Bits [31]. if (isGFX11Plus()) { PRINT_PSEUDO_DIRECTIVE_COMMENT("IMAGE_OP", - COMPUTE_PGM_RSRC3_GFX11_PLUS_TRAP_ON_START); + COMPUTE_PGM_RSRC3_GFX11_PLUS_IMAGE_OP); } else { - if (FourByteBuffer & COMPUTE_PGM_RSRC3_GFX10_RESERVED2) + if (FourByteBuffer & COMPUTE_PGM_RSRC3_GFX10_RESERVED5) return MCDisassembler::Fail; } } else if (FourByteBuffer) { |
