| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,57 @@ | ||
| //===-- AMDGPUDisassembler.hpp - Disassembler for AMDGPU ISA ---*- C++ -*--===// | ||
| // | ||
| // The LLVM Compiler Infrastructure | ||
| // | ||
| // This file is distributed under the University of Illinois Open Source | ||
| // License. See LICENSE.TXT for details. | ||
| // | ||
| //===----------------------------------------------------------------------===// | ||
| // | ||
| /// \file | ||
| /// | ||
| /// This file contains declaration for AMDGPU ISA disassembler | ||
| // | ||
| //===----------------------------------------------------------------------===// | ||
|
|
||
| #ifndef LLVM_LIB_TARGET_AMDGPU_DISASSEMBLER_AMDGPUDISASSEMBLER_H | ||
| #define LLVM_LIB_TARGET_AMDGPU_DISASSEMBLER_AMDGPUDISASSEMBLER_H | ||
|
|
||
| #include "llvm/MC/MCDisassembler/MCDisassembler.h" | ||
|
|
||
| namespace llvm { | ||
|
|
||
| class MCContext; | ||
| class MCInst; | ||
| class MCSubtargetInfo; | ||
|
|
||
| class AMDGPUDisassembler : public MCDisassembler { | ||
| public: | ||
| AMDGPUDisassembler(const MCSubtargetInfo &STI, MCContext &Ctx) : | ||
| MCDisassembler(STI, Ctx) {} | ||
|
|
||
| ~AMDGPUDisassembler() {} | ||
|
|
||
| DecodeStatus getInstruction(MCInst &MI, uint64_t &Size, | ||
| ArrayRef<uint8_t> Bytes, uint64_t Address, | ||
| raw_ostream &WS, raw_ostream &CS) const override; | ||
|
|
||
| /// Decode inline float value in VSrc field | ||
| DecodeStatus DecodeLitFloat(unsigned Imm, uint32_t& F) const; | ||
| /// Decode inline integer value in VSrc field | ||
| DecodeStatus DecodeLitInteger(unsigned Imm, int64_t& I) const; | ||
| /// Decode VGPR register | ||
| DecodeStatus DecodeVgprRegister(unsigned Val, unsigned& RegID) const; | ||
| /// Decode SGPR register | ||
| DecodeStatus DecodeSgprRegister(unsigned Val, unsigned& RegID) const; | ||
| /// Decode register in VSrc field | ||
| DecodeStatus DecodeSrcRegister(unsigned Val, unsigned& RegID) const; | ||
|
|
||
| DecodeStatus DecodeVS_32RegisterClass(MCInst &Inst, unsigned Imm, | ||
| uint64_t Addr) const; | ||
|
|
||
| DecodeStatus DecodeVGPR_32RegisterClass(MCInst &Inst, unsigned Imm, | ||
| uint64_t Addr) const; | ||
| }; | ||
| } // namespace llvm | ||
|
|
||
| #endif //LLVM_LIB_TARGET_AMDGPU_DISASSEMBLER_AMDGPUDISASSEMBLER_H |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,7 @@ | ||
| include_directories( ${CMAKE_CURRENT_BINARY_DIR}/.. ${CMAKE_CURRENT_SOURCE_DIR}/.. ) | ||
|
|
||
| add_llvm_library(LLVMAMDGPUDisassembler | ||
| AMDGPUDisassembler.cpp | ||
| ) | ||
|
|
||
| add_dependencies(LLVMAMDGPUDisassembler AMDGPUCommonTableGen) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,23 @@ | ||
| ;===- ./lib/Target/AMDGPU/Disassembler/LLVMBuild.txt ------------*- Conf -*--===; | ||
| ; | ||
| ; The LLVM Compiler Infrastructure | ||
| ; | ||
| ; This file is distributed under the University of Illinois Open Source | ||
| ; License. See LICENSE.TXT for details. | ||
| ; | ||
| ;===------------------------------------------------------------------------===; | ||
| ; | ||
| ; This is an LLVMBuild description file for the components in this subdirectory. | ||
| ; | ||
| ; For more information on the LLVMBuild system, please see: | ||
| ; | ||
| ; http://llvm.org/docs/LLVMBuild.html | ||
| ; | ||
| ;===------------------------------------------------------------------------===; | ||
|
|
||
| [component_0] | ||
| type = Library | ||
| name = AMDGPUDisassembler | ||
| parent = AMDGPU | ||
| required_libraries = AMDGPUDesc AMDGPUInfo AMDGPUUtils MC MCDisassembler Support | ||
| add_to_library_groups = AMDGPU |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,2 @@ | ||
| if not 'AMDGPU' in config.root.targets: | ||
| config.unsupported = True |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,31 @@ | ||
| # RUN: llvm-mc -arch=amdgcn -mcpu=tonga -disassemble -show-encoding < %s | FileCheck %s | ||
|
|
||
| # CHECK: v_mov_b32_e32 v2, v1 ; encoding: [0x01,0x03,0x04,0x7e] | ||
| 0x01 0x03 0x04 0x7e | ||
|
|
||
| # CHECK: v_mov_b32_e32 v1, 0.5 ; encoding: [0xf0,0x02,0x02,0x7e] | ||
| 0xf0 0x02 0x02 0x7e | ||
|
|
||
| # CHECK: v_mov_b32_e32 v15, s100 ; encoding: [0x64,0x02,0x1e,0x7e] | ||
| 0x64 0x02 0x1e 0x7e | ||
|
|
||
| # CHECK: v_mov_b32_e32 v90, flat_scratch_lo ; encoding: [0x66,0x02,0xb4,0x7e] | ||
| 0x66 0x02 0xb4 0x7e | ||
|
|
||
| # CHECK: v_mov_b32_e32 v150, vcc_lo ; encoding: [0x6a,0x02,0x2c,0x7f] | ||
| 0x6a 0x02 0x2c 0x7f | ||
|
|
||
| # CHECK: v_mov_b32_e32 v199, exec_lo ; encoding: [0x7e,0x02,0x8e,0x7f] | ||
| 0x7e 0x02 0x8e 0x7f | ||
|
|
||
| # CHECK: v_mov_b32_e32 v222, m0 ; encoding: [0x7c,0x02,0xbc,0x7f] | ||
| 0x7c 0x02 0xbc 0x7f | ||
|
|
||
| # CHECK: v_mov_b32_e32 v255, -13 ; encoding: [0xcd,0x02,0xfe,0x7f] | ||
| 0xcd 0x02 0xfe 0x7f | ||
|
|
||
| # CHECK: v_cvt_f32_i32_e32 v153, s98 ; encoding: [0x62,0x0a,0x32,0x7f] | ||
| 0x62 0x0a 0x32 0x7f | ||
|
|
||
| # CHECK: v_cvt_f32_u32_e32 v33, -4.0 ; encoding: [0xf7,0x0c,0x42,0x7e] | ||
| 0xf7 0x0c 0x42 0x7e |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| # RUN: llvm-mc -arch=amdgcn -mcpu=tonga -disassemble -show-encoding < %s | FileCheck %s | ||
|
|
||
| # CHECK: v_nop ; encoding: [0x00,0x00,0x00,0x7e] | ||
| 0x00 0x00 0x00 0x7e |