Add a Thumb2 instruction flag to that indicates whether the instruction can be transformed to 16-bit variant.

llvm-svn: 74988
This commit is contained in:
Evan Cheng 2009-07-08 01:46:35 +00:00
parent 9f211fb4fa
commit 14965760a7
3 changed files with 26 additions and 14 deletions

View File

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

View File

@ -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;
}

View File

@ -65,18 +65,11 @@ namespace ARMII {
IndexModePre = 1,
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,
@ -126,6 +119,17 @@ namespace ARMII {
NEONSetLnFrm = 26 << 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
// machine instructions.