diff options
author | Anton Korobeynikov <asl@math.spbu.ru> | 2007-05-02 19:53:33 +0000 |
---|---|---|
committer | Anton Korobeynikov <asl@math.spbu.ru> | 2007-05-02 19:53:33 +0000 |
commit | ce3b46552a03f502e56fb3c4db82f3f92c09eff9 (patch) | |
tree | 6241e4df88b94c9e7cc5671f29ac0abcfc34b7c4 /lib/Target/X86/X86ISelLowering.cpp | |
parent | 038082d96652601c70a98d4edffc834c835fc0bf (diff) | |
download | external_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.cpp | 13 |
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); |