summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2011-08-08 23:25:22 +0000
committerOwen Anderson <resistor@mac.com>2011-08-08 23:25:22 +0000
commit03ac20fc66a5beb31c25d3bde1a7ebd05e62ca9e (patch)
treeaf22ae03a4047b73d9b77374cd7b8b07c1d5fee4 /llvm/lib
parentd12cec8093086ec788cadb55808da5715153b7cf (diff)
downloadbcm5719-llvm-03ac20fc66a5beb31c25d3bde1a7ebd05e62ca9e.tar.gz
bcm5719-llvm-03ac20fc66a5beb31c25d3bde1a7ebd05e62ca9e.zip
Thumb1 BL instructions encoding 22 bits of displacement, not 21.
llvm-svn: 137073
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/ARM/ARMInstrThumb.td5
1 files changed, 4 insertions, 1 deletions
diff --git a/llvm/lib/Target/ARM/ARMInstrThumb.td b/llvm/lib/Target/ARM/ARMInstrThumb.td
index b71391d5c1a..8442e06503b 100644
--- a/llvm/lib/Target/ARM/ARMInstrThumb.td
+++ b/llvm/lib/Target/ARM/ARMInstrThumb.td
@@ -94,6 +94,7 @@ def t_cbtarget : Operand<i32> {
def t_bltarget : Operand<i32> {
let EncoderMethod = "getThumbBLTargetOpValue";
+ let DecoderMethod = "DecodeThumbBLTargetOperand";
}
def t_blxtarget : Operand<i32> {
@@ -168,6 +169,7 @@ def t_addrmode_is1 : Operand<i32>,
def t_addrmode_sp : Operand<i32>,
ComplexPattern<i32, 2, "SelectThumbAddrModeSP", []> {
let EncoderMethod = "getAddrModeThumbSPOpValue";
+ let DecoderMethod = "DecodeThumbAddrModeSP";
let PrintMethod = "printThumbAddrModeSPOperand";
let MIOperandInfo = (ops GPR:$base, i32imm:$offsimm);
}
@@ -374,7 +376,8 @@ let isCall = 1,
"bl${p}\t$func",
[(ARMtcall tglobaladdr:$func)]>,
Requires<[IsThumb, IsNotDarwin]> {
- bits<21> func;
+ bits<22> func;
+ let Inst{26} = func{21};
let Inst{25-16} = func{20-11};
let Inst{13} = 1;
let Inst{11} = 1;
OpenPOWER on IntegriCloud