diff options
Diffstat (limited to 'lib/Target/ARM/ARMInstrInfo.td')
-rw-r--r-- | lib/Target/ARM/ARMInstrInfo.td | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/lib/Target/ARM/ARMInstrInfo.td b/lib/Target/ARM/ARMInstrInfo.td index 201f65c..36d2e4a 100644 --- a/lib/Target/ARM/ARMInstrInfo.td +++ b/lib/Target/ARM/ARMInstrInfo.td @@ -370,6 +370,8 @@ class AI3<dag ops, string asm, list<dag> pattern> : I<ops, AddrMode3, Size4Bytes, IndexModeNone, asm, "", pattern>; class AI4<dag ops, string asm, list<dag> pattern> : I<ops, AddrMode4, Size4Bytes, IndexModeNone, asm, "", pattern>; +class AIx2<dag ops, string asm, list<dag> pattern> + : I<ops, AddrModeNone, Size8Bytes, IndexModeNone, asm, "", pattern>; class AI1x2<dag ops, string asm, list<dag> pattern> : I<ops, AddrMode1, Size8Bytes, IndexModeNone, asm, "", pattern>; @@ -546,9 +548,9 @@ let isCall = 1, noResults = 1, [(ARMcall GPR:$dst)]>, Requires<[IsARM, HasV5T]>; let Uses = [LR] in { // ARMv4T - def BX : AI<(ops GPR:$dst, variable_ops), - "bx $dst", - [(ARMcall_nolink GPR:$dst)]>; + def BX : AIx2<(ops GPR:$dst, variable_ops), + "mov lr, pc\n\tbx $dst", + [(ARMcall_nolink GPR:$dst)]>; } } |