diff --git a/lib/Target/ARM/ARMInstrFormats.td b/lib/Target/ARM/ARMInstrFormats.td index b1a7715db98..9ea6157ebb3 100644 --- a/lib/Target/ARM/ARMInstrFormats.td +++ b/lib/Target/ARM/ARMInstrFormats.td @@ -226,3 +226,58 @@ class ARMV5TEPat : Pat { class ARMV6Pat : Pat { list Predicates = [IsARM, HasV6]; } + +//===----------------------------------------------------------------------===// +// +// Thumb Instruction Format Definitions. +// + + +// TI - Thumb instruction. + +class ThumbI pattern> + // FIXME: Set all opcodes to 0 for now. + : InstARM<0, am, sz, IndexModeNone, ThumbFrm, cstr> { + let OutOperandList = outs; + let InOperandList = ins; + let AsmString = asm; + let Pattern = pattern; + list Predicates = [IsThumb]; +} + +class TI pattern> + : ThumbI; +class TI1 pattern> + : ThumbI; +class TI2 pattern> + : ThumbI; +class TI4 pattern> + : ThumbI; +class TIs pattern> + : ThumbI; + +// Two-address instructions +class TIt pattern> + : ThumbI; + +// BL, BLX(1) are translated by assembler into two instructions +class TIx2 pattern> + : ThumbI; + +// BR_JT instructions +class TJTI pattern> + : ThumbI; + + +//===----------------------------------------------------------------------===// + + +// ThumbPat - Same as Pat<>, but requires that the compiler be in Thumb mode. +class ThumbPat : Pat { + list Predicates = [IsThumb]; +} + +class ThumbV5Pat : Pat { + list Predicates = [IsThumb, HasV5T]; +} diff --git a/lib/Target/ARM/ARMInstrThumb.td b/lib/Target/ARM/ARMInstrThumb.td index 7880c235fcc..72dae87a1e3 100644 --- a/lib/Target/ARM/ARMInstrThumb.td +++ b/lib/Target/ARM/ARMInstrThumb.td @@ -18,51 +18,6 @@ def ARMtcall : SDNode<"ARMISD::tCALL", SDT_ARMcall, [SDNPHasChain, SDNPOptInFlag, SDNPOutFlag]>; -// TI - Thumb instruction. - -// ThumbPat - Same as Pat<>, but requires that the compiler be in Thumb mode. -class ThumbPat : Pat { - list Predicates = [IsThumb]; -} - -class ThumbV5Pat : Pat { - list Predicates = [IsThumb, HasV5T]; -} - -class ThumbI pattern> - // FIXME: Set all opcodes to 0 for now. - : InstARM<0, am, sz, IndexModeNone, ThumbFrm, cstr> { - let OutOperandList = outs; - let InOperandList = ins; - let AsmString = asm; - let Pattern = pattern; - list Predicates = [IsThumb]; -} - -class TI pattern> - : ThumbI; -class TI1 pattern> - : ThumbI; -class TI2 pattern> - : ThumbI; -class TI4 pattern> - : ThumbI; -class TIs pattern> - : ThumbI; - -// Two-address instructions -class TIt pattern> - : ThumbI; - -// BL, BLX(1) are translated by assembler into two instructions -class TIx2 pattern> - : ThumbI; - -// BR_JT instructions -class TJTI pattern> - : ThumbI; - def imm_neg_XFORM : SDNodeXFormgetTargetConstant(-(int)N->getValue(), MVT::i32); }]>;