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",
|
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];
|
||||||
}
|
}
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
@ -54,10 +54,17 @@ 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.
|
||||||
|
// UnaryDP - Indicates this is a unary data processing instruction, i.e.
|
||||||
|
// it doesn't have a Rn operand.
|
||||||
class UnaryDP { bit isUnaryDataProc = 1; }
|
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;
|
||||||
}
|
}
|
||||||
|
@ -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.
|
||||||
|
Loading…
Reference in New Issue
Block a user