summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.cpp
diff options
context:
space:
mode:
authorArtem Tamazov <artem.tamazov@amd.com>2016-04-25 14:13:51 +0000
committerArtem Tamazov <artem.tamazov@amd.com>2016-04-25 14:13:51 +0000
commitd6468666b540364feec63b5abed9aa428832fe8d (patch)
tree8efdccb79942350a8a772d349eda9fc43cef6c54 /llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.cpp
parent926bff8c3e3f3fd12395968423380b84caf087f1 (diff)
downloadbcm5719-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.cpp14
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"
OpenPOWER on IntegriCloud