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
This commit is contained in:
Evan Cheng 2009-07-08 01:46:35 +00:00
parent 3d29df3e8a
commit 34a0fa362d
3 changed files with 26 additions and 14 deletions

View File

@ -131,13 +131,13 @@ def ARMInstrInfo : InstrInfo {
let TSFlagsFields = ["AddrModeBits", let TSFlagsFields = ["AddrModeBits",
"SizeFlag", "SizeFlag",
"IndexModeBits", "IndexModeBits",
"isUnaryDataProc", "Form",
"Form"]; "isUnaryDataProc"];
let TSFlagsShifts = [0, let TSFlagsShifts = [0,
4, 4,
7, 7,
9, 9,
10]; 15];
} }
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//

View File

@ -54,9 +54,16 @@ def NEONGetLnFrm : Format<25>;
def NEONSetLnFrm : Format<26>; def NEONSetLnFrm : Format<26>;
def NEONDupFrm : Format<27>; def NEONDupFrm : Format<27>;
// Misc flag for data processing instructions that indicates whether // Misc flags.
// the instruction has a Rn register operand. // 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. // 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... // Attributes specific to ARM instructions...
// //
bit isUnaryDataProc = 0; bit isUnaryDataProc = 0;
bit canXformTo16Bit = 0;
let Constraints = cstr; let Constraints = cstr;
} }

View File

@ -65,18 +65,11 @@ namespace ARMII {
IndexModePre = 1, IndexModePre = 1,
IndexModePost = 2, 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. // Instruction encoding formats.
// //
FormShift = 10, FormShift = 9,
FormMask = 0x1f << FormShift, FormMask = 0x3f << FormShift,
// Pseudo instructions // Pseudo instructions
Pseudo = 0 << FormShift, Pseudo = 0 << FormShift,
@ -126,6 +119,17 @@ namespace ARMII {
NEONSetLnFrm = 26 << FormShift, NEONSetLnFrm = 26 << FormShift,
NEONDupFrm = 27 << FormShift, 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 // Field shifts - such shifts are used to set field while generating
// machine instructions. // machine instructions.