Increase the number of bits used internally by the ARM target to represent the

addressing mode from four to five.

llvm-svn: 115645
This commit is contained in:
Jim Grosbach 2010-10-05 18:14:55 +00:00
parent fc8315f56a
commit e929899a3f
2 changed files with 16 additions and 16 deletions

View File

@ -33,7 +33,7 @@ namespace ARMII {
//===------------------------------------------------------------------===// //===------------------------------------------------------------------===//
// This four-bit field describes the addressing mode used. // This four-bit field describes the addressing mode used.
AddrModeMask = 0xf, AddrModeMask = 0x1f,
AddrModeNone = 0, AddrModeNone = 0,
AddrMode1 = 1, AddrMode1 = 1,
AddrMode2 = 2, AddrMode2 = 2,
@ -52,7 +52,7 @@ namespace ARMII {
AddrModeT2_i8s4 = 15, // i8 * 4 AddrModeT2_i8s4 = 15, // i8 * 4
// Size* - Flags to keep track of the size of an instruction. // Size* - Flags to keep track of the size of an instruction.
SizeShift = 4, SizeShift = 5,
SizeMask = 7 << SizeShift, SizeMask = 7 << SizeShift,
SizeSpecial = 1, // 0 byte pseudo or special case. SizeSpecial = 1, // 0 byte pseudo or special case.
Size8Bytes = 2, Size8Bytes = 2,
@ -61,7 +61,7 @@ namespace ARMII {
// IndexMode - Unindex, pre-indexed, or post-indexed are valid for load // IndexMode - Unindex, pre-indexed, or post-indexed are valid for load
// and store ops only. Generic "updating" flag is used for ld/st multiple. // and store ops only. Generic "updating" flag is used for ld/st multiple.
IndexModeShift = 7, IndexModeShift = 8,
IndexModeMask = 3 << IndexModeShift, IndexModeMask = 3 << IndexModeShift,
IndexModePre = 1, IndexModePre = 1,
IndexModePost = 2, IndexModePost = 2,
@ -70,7 +70,7 @@ namespace ARMII {
//===------------------------------------------------------------------===// //===------------------------------------------------------------------===//
// Instruction encoding formats. // Instruction encoding formats.
// //
FormShift = 9, FormShift = 10,
FormMask = 0x3f << FormShift, FormMask = 0x3f << FormShift,
// Pseudo instructions // Pseudo instructions
@ -143,15 +143,15 @@ namespace ARMII {
// UnaryDP - Indicates this is a unary data processing instruction, i.e. // UnaryDP - Indicates this is a unary data processing instruction, i.e.
// it doesn't have a Rn operand. // it doesn't have a Rn operand.
UnaryDP = 1 << 15, UnaryDP = 1 << 16,
// Xform16Bit - Indicates this Thumb2 instruction may be transformed into // Xform16Bit - Indicates this Thumb2 instruction may be transformed into
// a 16-bit Thumb instruction if certain conditions are met. // a 16-bit Thumb instruction if certain conditions are met.
Xform16Bit = 1 << 16, Xform16Bit = 1 << 17,
//===------------------------------------------------------------------===// //===------------------------------------------------------------------===//
// Code domain. // Code domain.
DomainShift = 17, DomainShift = 18,
DomainMask = 3 << DomainShift, DomainMask = 3 << DomainShift,
DomainGeneral = 0 << DomainShift, DomainGeneral = 0 << DomainShift,
DomainVFP = 1 << DomainShift, DomainVFP = 1 << DomainShift,

View File

@ -85,8 +85,8 @@ class Xform16Bit { bit canXformTo16Bit = 1; }
// //
// Addressing mode. // Addressing mode.
class AddrMode<bits<4> val> { class AddrMode<bits<5> val> {
bits<4> Value = val; bits<5> Value = val;
} }
def AddrModeNone : AddrMode<0>; def AddrModeNone : AddrMode<0>;
def AddrMode1 : AddrMode<1>; def AddrMode1 : AddrMode<1>;
@ -199,13 +199,13 @@ class InstTemplate<AddrMode am, SizeFlagVal sz, IndexMode im,
bit canXformTo16Bit = 0; bit canXformTo16Bit = 0;
// The layout of TSFlags should be kept in sync with ARMBaseInstrInfo.h. // The layout of TSFlags should be kept in sync with ARMBaseInstrInfo.h.
let TSFlags{3-0} = AM.Value; let TSFlags{4-0} = AM.Value;
let TSFlags{6-4} = SZ.Value; let TSFlags{7-5} = SZ.Value;
let TSFlags{8-7} = IndexModeBits; let TSFlags{9-8} = IndexModeBits;
let TSFlags{14-9} = Form; let TSFlags{15-10} = Form;
let TSFlags{15} = isUnaryDataProc; let TSFlags{16} = isUnaryDataProc;
let TSFlags{16} = canXformTo16Bit; let TSFlags{17} = canXformTo16Bit;
let TSFlags{18-17} = D.Value; let TSFlags{19-18} = D.Value;
let Constraints = cstr; let Constraints = cstr;
let Itinerary = itin; let Itinerary = itin;