aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Target/ARM/ARMInstrFormats.td
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2011-03-01 01:00:59 +0000
committerBill Wendling <isanbard@gmail.com>2011-03-01 01:00:59 +0000
commita656b63ee4d5b0e3f4d26a55dd4cc69795746684 (patch)
tree207aa0386e59701c56483a84bcc30708bb82795d /lib/Target/ARM/ARMInstrFormats.td
parentf291ab2fbaa5ed1cfa20ca47e8dece1040a5065b (diff)
downloadexternal_llvm-a656b63ee4d5b0e3f4d26a55dd4cc69795746684.zip
external_llvm-a656b63ee4d5b0e3f4d26a55dd4cc69795746684.tar.gz
external_llvm-a656b63ee4d5b0e3f4d26a55dd4cc69795746684.tar.bz2
Narrow right shifts need to encode their immediates differently from a normal
shift. 16-bit: imm6<5:3> = '001', 8 - <imm> is encded in imm6<2:0> 32-bit: imm6<5:4> = '01',16 - <imm> is encded in imm6<3:0> 64-bit: imm6<5> = '1', 32 - <imm> is encded in imm6<4:0> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126723 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/ARM/ARMInstrFormats.td')
-rw-r--r--lib/Target/ARM/ARMInstrFormats.td16
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/Target/ARM/ARMInstrFormats.td b/lib/Target/ARM/ARMInstrFormats.td
index 359ac45..cf8c472 100644
--- a/lib/Target/ARM/ARMInstrFormats.td
+++ b/lib/Target/ARM/ARMInstrFormats.td
@@ -221,6 +221,22 @@ def neg_zero : Operand<i32> {
let PrintMethod = "printNegZeroOperand";
}
+// Narrow Shift Right Immediate - A narrow shift right immediate is encoded
+// differently from other shift immediates. The imm6 field is encoded like so:
+//
+// 16-bit: imm6<5:3> = '001', 8 - <imm> is encded in imm6<2:0>
+// 32-bit: imm6<5:4> = '01',16 - <imm> is encded in imm6<3:0>
+// 64-bit: imm6<5> = '1', 32 - <imm> is encded in imm6<4:0>
+def nsr16_imm : Operand<i32> {
+ let EncoderMethod = "getNarrowShiftRight16Imm";
+}
+def nsr32_imm : Operand<i32> {
+ let EncoderMethod = "getNarrowShiftRight32Imm";
+}
+def nsr64_imm : Operand<i32> {
+ let EncoderMethod = "getNarrowShiftRight64Imm";
+}
+
//===----------------------------------------------------------------------===//
// ARM Instruction templates.
//