diff options
author | Evan Cheng <evan.cheng@apple.com> | 2009-07-08 01:46:35 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2009-07-08 01:46:35 +0000 |
commit | 34a0fa362dde63cf9adf5917ab2ee2c2b7dd2179 (patch) | |
tree | 0cef88b9b147558a8cc81a05d3dfc0886db97a51 | |
parent | 3d29df3e8a203b167d8071ea6f805b21db18a5af (diff) | |
download | external_llvm-34a0fa362dde63cf9adf5917ab2ee2c2b7dd2179.zip external_llvm-34a0fa362dde63cf9adf5917ab2ee2c2b7dd2179.tar.gz external_llvm-34a0fa362dde63cf9adf5917ab2ee2c2b7dd2179.tar.bz2 |
Add a Thumb2 instruction flag to that indicates whether the instruction can be transformed to 16-bit variant.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74988 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/ARM/ARM.td | 6 | ||||
-rw-r--r-- | lib/Target/ARM/ARMInstrFormats.td | 12 | ||||
-rw-r--r-- | lib/Target/ARM/ARMInstrInfo.h | 22 |
3 files changed, 26 insertions, 14 deletions
diff --git a/lib/Target/ARM/ARM.td b/lib/Target/ARM/ARM.td index 9001e50..2ed6b9c 100644 --- a/lib/Target/ARM/ARM.td +++ b/lib/Target/ARM/ARM.td @@ -131,13 +131,13 @@ def ARMInstrInfo : InstrInfo { let TSFlagsFields = ["AddrModeBits", "SizeFlag", "IndexModeBits", - "isUnaryDataProc", - "Form"]; + "Form", + "isUnaryDataProc"]; let TSFlagsShifts = [0, 4, 7, 9, - 10]; + 15]; } //===----------------------------------------------------------------------===// diff --git a/lib/Target/ARM/ARMInstrFormats.td b/lib/Target/ARM/ARMInstrFormats.td index 301a6c1..b9868cc 100644 --- a/lib/Target/ARM/ARMInstrFormats.td +++ b/lib/Target/ARM/ARMInstrFormats.td @@ -54,9 +54,16 @@ def NEONGetLnFrm : Format<25>; def NEONSetLnFrm : Format<26>; def NEONDupFrm : Format<27>; -// Misc flag for data processing instructions that indicates whether +// Misc flags. + // the instruction has a Rn register operand. -class UnaryDP { bit isUnaryDataProc = 1; } +// UnaryDP - Indicates this is a unary data processing instruction, i.e. +// it doesn't have a Rn operand. +class UnaryDP { bit isUnaryDataProc = 1; } + +// Xform16Bit - Indicates this Thumb2 instruction may be transformed into +// a 16-bit Thumb instruction if certain conditions are met. +class Xform16Bit { bit canXformTo16Bit = 1; } //===----------------------------------------------------------------------===// // ARM Instruction flags. These need to match ARMInstrInfo.h. @@ -130,6 +137,7 @@ class InstARM<AddrMode am, SizeFlagVal sz, IndexMode im, // Attributes specific to ARM instructions... // bit isUnaryDataProc = 0; + bit canXformTo16Bit = 0; let Constraints = cstr; } diff --git a/lib/Target/ARM/ARMInstrInfo.h b/lib/Target/ARM/ARMInstrInfo.h index 8c8f788..ea8947d 100644 --- a/lib/Target/ARM/ARMInstrInfo.h +++ b/lib/Target/ARM/ARMInstrInfo.h @@ -66,17 +66,10 @@ namespace ARMII { IndexModePost = 2, //===------------------------------------------------------------------===// - // Misc flags. - - // UnaryDP - Indicates this is a unary data processing instruction, i.e. - // it doesn't have a Rn operand. - UnaryDP = 1 << 9, - - //===------------------------------------------------------------------===// // Instruction encoding formats. // - FormShift = 10, - FormMask = 0x1f << FormShift, + FormShift = 9, + FormMask = 0x3f << FormShift, // Pseudo instructions Pseudo = 0 << FormShift, @@ -127,6 +120,17 @@ namespace ARMII { NEONDupFrm = 27 << FormShift, //===------------------------------------------------------------------===// + // Misc flags. + + // UnaryDP - Indicates this is a unary data processing instruction, i.e. + // it doesn't have a Rn operand. + UnaryDP = 1 << 15, + + // Xform16Bit - Indicates this Thumb2 instruction may be transformed into + // a 16-bit Thumb instruction if certain conditions are met. + Xform16Bit = 1 << 16, + + //===------------------------------------------------------------------===// // Field shifts - such shifts are used to set field while generating // machine instructions. M_BitShift = 5, |