diff options
author | Artem Tamazov <artem.tamazov@amd.com> | 2016-04-25 14:13:51 +0000 |
---|---|---|
committer | Artem Tamazov <artem.tamazov@amd.com> | 2016-04-25 14:13:51 +0000 |
commit | d6468666b540364feec63b5abed9aa428832fe8d (patch) | |
tree | 8efdccb79942350a8a772d349eda9fc43cef6c54 /llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.cpp | |
parent | 926bff8c3e3f3fd12395968423380b84caf087f1 (diff) | |
download | bcm5719-llvm-d6468666b540364feec63b5abed9aa428832fe8d.tar.gz bcm5719-llvm-d6468666b540364feec63b5abed9aa428832fe8d.zip |
[AMDGPU][llvm-mc] s_getreg/setreg* - Add hwreg(...) syntax.
Added hwreg(reg[,offset,width]) syntax.
Default offset = 0, default width = 32.
Possibility to specify 16-bit immediate kept.
Added out-of-range checks.
Disassembling is always to hwreg(...) format.
Tests updated/added.
Differential Revision: http://reviews.llvm.org/D19329
llvm-svn: 267410
Diffstat (limited to 'llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.cpp')
-rw-r--r-- | llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.cpp b/llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.cpp index 0bdff1af82c..e02bc90e89c 100644 --- a/llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.cpp +++ b/llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.cpp @@ -760,4 +760,18 @@ void AMDGPUInstPrinter::printWaitFlag(const MCInst *MI, unsigned OpNo, } } +void AMDGPUInstPrinter::printHwreg(const MCInst *MI, unsigned OpNo, + raw_ostream &O) { + unsigned SImm16 = MI->getOperand(OpNo).getImm(); + const unsigned HwRegCode = SImm16 & 0x3F; + const unsigned Offset = (SImm16 >> 6) & 0x1f; + const unsigned Width = ((SImm16 >> 11) & 0x1F) + 1; + + if (Width == 32 && Offset == 0) { + O << "hwreg(" << HwRegCode << ')'; + } else { + O << "hwreg(" << HwRegCode << ", " << Offset << ", " << Width << ')'; + } +} + #include "AMDGPUGenAsmWriter.inc" |