summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp
diff options
context:
space:
mode:
authorSaleem Abdulrasool <compnerd@compnerd.org>2016-07-08 00:48:22 +0000
committerSaleem Abdulrasool <compnerd@compnerd.org>2016-07-08 00:48:22 +0000
commiteb059b0e0a8337844ad5eb39d74cf2bcbef6ddcf (patch)
tree3256567fef780ecb170187645983d7dc540bcc27 /llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp
parentc61723f73e48475fdd31db3f0eca07985580e346 (diff)
downloadbcm5719-llvm-eb059b0e0a8337844ad5eb39d74cf2bcbef6ddcf.tar.gz
bcm5719-llvm-eb059b0e0a8337844ad5eb39d74cf2bcbef6ddcf.zip
ARM: support high registers in __builtin_longjmp on WoA
Windows on ARM uses a pure thumb-2 environment. This means that it can select a high register when doing a __builtin_longjmp. We would use a tLDRi which would truncate the register to a low register. Use a t2LDRi12 to get the full register file access. Tweak the code to just load into PC, as that is an interworking branch on all supported cores anyways. llvm-svn: 274815
Diffstat (limited to 'llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp')
-rw-r--r--llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp b/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp
index a1b16525975..3dafb8f633e 100644
--- a/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp
+++ b/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp
@@ -648,8 +648,9 @@ unsigned ARMBaseInstrInfo::GetInstSizeInBytes(const MachineInstr &MI) const {
case ARM::Int_eh_sjlj_longjmp:
return 16;
case ARM::tInt_eh_sjlj_longjmp:
- case ARM::tInt_WIN_eh_sjlj_longjmp:
return 10;
+ case ARM::tInt_WIN_eh_sjlj_longjmp:
+ return 12;
case ARM::Int_eh_sjlj_setjmp:
case ARM::Int_eh_sjlj_setjmp_nofp:
return 20;
OpenPOWER on IntegriCloud