aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Target/X86/X86ISelLowering.cpp
diff options
context:
space:
mode:
authorAnton Korobeynikov <asl@math.spbu.ru>2007-05-02 19:53:33 +0000
committerAnton Korobeynikov <asl@math.spbu.ru>2007-05-02 19:53:33 +0000
commitce3b46552a03f502e56fb3c4db82f3f92c09eff9 (patch)
tree6241e4df88b94c9e7cc5671f29ac0abcfc34b7c4 /lib/Target/X86/X86ISelLowering.cpp
parent038082d96652601c70a98d4edffc834c835fc0bf (diff)
downloadexternal_llvm-ce3b46552a03f502e56fb3c4db82f3f92c09eff9.tar.gz
external_llvm-ce3b46552a03f502e56fb3c4db82f3f92c09eff9.tar.bz2
external_llvm-ce3b46552a03f502e56fb3c4db82f3f92c09eff9.zip
Emit correct register move information in eh frames for X86. This allows Shootout-C++/except to pass on x86/linux
with non-llvm-compiled (e.g. "native") unwind runtime. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36647 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86/X86ISelLowering.cpp')
-rw-r--r--lib/Target/X86/X86ISelLowering.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp
index 996ffe94ec..9366f9a6e3 100644
--- a/lib/Target/X86/X86ISelLowering.cpp
+++ b/lib/Target/X86/X86ISelLowering.cpp
@@ -226,6 +226,19 @@ X86TargetLowering::X86TargetLowering(TargetMachine &TM)
!Subtarget->isTargetCygMing())
setOperationAction(ISD::LABEL, MVT::Other, Expand);
+ setOperationAction(ISD::EXCEPTIONADDR, MVT::i64, Expand);
+ setOperationAction(ISD::EHSELECTION, MVT::i64, Expand);
+ setOperationAction(ISD::EXCEPTIONADDR, MVT::i32, Expand);
+ setOperationAction(ISD::EHSELECTION, MVT::i32, Expand);
+ if (Subtarget->is64Bit()) {
+ // FIXME: Verify
+ setExceptionPointerRegister(X86::RAX);
+ setExceptionSelectorRegister(X86::RDX);
+ } else {
+ setExceptionPointerRegister(X86::EAX);
+ setExceptionSelectorRegister(X86::EDX);
+ }
+
// VASTART needs to be custom lowered to use the VarArgsFrameIndex
setOperationAction(ISD::VASTART , MVT::Other, Custom);
setOperationAction(ISD::VAARG , MVT::Other, Expand);