diff options
author | Evan Cheng <evan.cheng@apple.com> | 2009-07-14 01:49:27 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2009-07-14 01:49:27 +0000 |
commit | fb1d14783bcb0c6ffb62bf32e2316d98e8e98641 (patch) | |
tree | 86a9520389079c29533bf9b53ca320516516c7af | |
parent | c05b35881e127ec5cfc384a39d3b9db00aeda12c (diff) | |
download | external_llvm-fb1d14783bcb0c6ffb62bf32e2316d98e8e98641.zip external_llvm-fb1d14783bcb0c6ffb62bf32e2316d98e8e98641.tar.gz external_llvm-fb1d14783bcb0c6ffb62bf32e2316d98e8e98641.tar.bz2 |
1. In Thumb mode, select tBx instead of ARM variants.
2. BX does not "use" the link register, it defines it.
3. Fix a couple more places in thumb td file that still uses pre-UAL syntax.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75585 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/ARM/ARMInstrInfo.td | 32 | ||||
-rw-r--r-- | lib/Target/ARM/ARMInstrThumb.td | 4 |
2 files changed, 16 insertions, 20 deletions
diff --git a/lib/Target/ARM/ARMInstrInfo.td b/lib/Target/ARM/ARMInstrInfo.td index 17e7365..e53abef 100644 --- a/lib/Target/ARM/ARMInstrInfo.td +++ b/lib/Target/ARM/ARMInstrInfo.td @@ -617,15 +617,13 @@ let isCall = 1, Itinerary = IIC_Br, let Inst{27-20} = 0b00010010; } - let Uses = [LR] in { - // ARMv4T - def BX : ABXIx2<(outs), (ins GPR:$func, variable_ops), - "mov lr, pc\n\tbx $func", - [(ARMcall_nolink GPR:$func)]>, Requires<[IsNotDarwin]> { - let Inst{7-4} = 0b0001; - let Inst{19-8} = 0b111111111111; - let Inst{27-20} = 0b00010010; - } + // ARMv4T + def BX : ABXIx2<(outs), (ins GPR:$func, variable_ops), + "mov lr, pc\n\tbx $func", + [(ARMcall_nolink GPR:$func)]>, Requires<[IsNotDarwin]> { + let Inst{7-4} = 0b0001; + let Inst{19-8} = 0b111111111111; + let Inst{27-20} = 0b00010010; } } @@ -650,15 +648,13 @@ let isCall = 1, Itinerary = IIC_Br, let Inst{27-20} = 0b00010010; } - let Uses = [LR] in { - // ARMv4T - def BXr9 : ABXIx2<(outs), (ins GPR:$func, variable_ops), - "mov lr, pc\n\tbx $func", - [(ARMcall_nolink GPR:$func)]>, Requires<[IsDarwin]> { - let Inst{7-4} = 0b0001; - let Inst{19-8} = 0b111111111111; - let Inst{27-20} = 0b00010010; - } + // ARMv4T + def BXr9 : ABXIx2<(outs), (ins GPR:$func, variable_ops), + "mov lr, pc\n\tbx $func", + [(ARMcall_nolink GPR:$func)]>, Requires<[IsARM, IsDarwin]> { + let Inst{7-4} = 0b0001; + let Inst{19-8} = 0b111111111111; + let Inst{27-20} = 0b00010010; } } diff --git a/lib/Target/ARM/ARMInstrThumb.td b/lib/Target/ARM/ARMInstrThumb.td index f2c5a46..b1b97ad 100644 --- a/lib/Target/ARM/ARMInstrThumb.td +++ b/lib/Target/ARM/ARMInstrThumb.td @@ -180,7 +180,7 @@ let isCall = 1, [(ARMtcall tGPR:$func)]>, Requires<[HasV5T]>; // ARMv4T def tBX : T1Ix2<(outs), (ins tGPR:$func, variable_ops), - "cpy lr, pc\n\tbx $func", + "mov lr, pc\n\tbx $func", [(ARMcall_nolink tGPR:$func)]>; } @@ -196,7 +196,7 @@ let isBranch = 1, isTerminator = 1 in { def tBR_JTr : T1JTI<(outs), (ins tGPR:$target, jtblock_operand:$jt, i32imm:$id), - "cpy pc, $target \n\t.align\t2\n$jt", + "mov pc, $target \n\t.align\t2\n$jt", [(ARMbrjt tGPR:$target, tjumptable:$jt, imm:$id)]>; } } |