mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
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:
parent
3d29df3e8a
commit
34a0fa362d
@ -131,13 +131,13 @@ def ARMInstrInfo : InstrInfo {
|
||||
let TSFlagsFields = ["AddrModeBits",
|
||||
"SizeFlag",
|
||||
"IndexModeBits",
|
||||
"isUnaryDataProc",
|
||||
"Form"];
|
||||
"Form",
|
||||
"isUnaryDataProc"];
|
||||
let TSFlagsShifts = [0,
|
||||
4,
|
||||
7,
|
||||
9,
|
||||
10];
|
||||
15];
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user