diff options
author | Chris Lattner <sabre@nondot.org> | 2003-05-17 22:26:33 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2003-05-17 22:26:33 +0000 |
commit | c436b37262fd1552fd591f50e14a7ff0067465e2 (patch) | |
tree | c9269f027b23d129cc50c7037d6e1e837498825e /lib/Target | |
parent | 9b11f4871162d911f372cef1586fdd17910ed58f (diff) | |
download | external_llvm-c436b37262fd1552fd591f50e14a7ff0067465e2.zip external_llvm-c436b37262fd1552fd591f50e14a7ff0067465e2.tar.gz external_llvm-c436b37262fd1552fd591f50e14a7ff0067465e2.tar.bz2 |
Add support for setjmp/longjmp primitives
Patch checked in for Bill Wendling :)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6241 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target')
-rw-r--r-- | lib/Target/CBackend/CBackend.cpp | 15 | ||||
-rw-r--r-- | lib/Target/CBackend/Writer.cpp | 15 |
2 files changed, 28 insertions, 2 deletions
diff --git a/lib/Target/CBackend/CBackend.cpp b/lib/Target/CBackend/CBackend.cpp index 577054e..bfd6bc9 100644 --- a/lib/Target/CBackend/CBackend.cpp +++ b/lib/Target/CBackend/CBackend.cpp @@ -543,6 +543,7 @@ void CWriter::printModule(Module *M) { Out << "/* Provide Declarations */\n"; generateAllocaDecl(Out); Out << "#include <stdarg.h>\n"; + Out << "#include <setjmp.h>\n"; // Provide a definition for null if one does not already exist, // and for `bool' if not compiling with a C++ compiler. @@ -1022,7 +1023,6 @@ void CWriter::visitCallInst(CallInst &I) { writeOperand(&I.getParent()->getParent()->aback()); Out << ")"; return; - case LLVMIntrinsic::va_end: Out << "va_end((va_list)*"; writeOperand(I.getOperand(1)); @@ -1035,6 +1035,19 @@ void CWriter::visitCallInst(CallInst &I) { writeOperand(I.getOperand(2)); Out << ")"; return; + + case LLVMIntrinsic::setjmp: + Out << "setjmp((jmp_buf)"; + writeOperand(I.getOperand(1)); + Out << ")"; + return; + case LLVMIntrinsic::longjmp: + Out << "longjmp((jmp_buf)"; + writeOperand(I.getOperand(1)); + Out << ", "; + writeOperand(I.getOperand(2)); + Out << ")"; + return; } } diff --git a/lib/Target/CBackend/Writer.cpp b/lib/Target/CBackend/Writer.cpp index 577054e..bfd6bc9 100644 --- a/lib/Target/CBackend/Writer.cpp +++ b/lib/Target/CBackend/Writer.cpp @@ -543,6 +543,7 @@ void CWriter::printModule(Module *M) { Out << "/* Provide Declarations */\n"; generateAllocaDecl(Out); Out << "#include <stdarg.h>\n"; + Out << "#include <setjmp.h>\n"; // Provide a definition for null if one does not already exist, // and for `bool' if not compiling with a C++ compiler. @@ -1022,7 +1023,6 @@ void CWriter::visitCallInst(CallInst &I) { writeOperand(&I.getParent()->getParent()->aback()); Out << ")"; return; - case LLVMIntrinsic::va_end: Out << "va_end((va_list)*"; writeOperand(I.getOperand(1)); @@ -1035,6 +1035,19 @@ void CWriter::visitCallInst(CallInst &I) { writeOperand(I.getOperand(2)); Out << ")"; return; + + case LLVMIntrinsic::setjmp: + Out << "setjmp((jmp_buf)"; + writeOperand(I.getOperand(1)); + Out << ")"; + return; + case LLVMIntrinsic::longjmp: + Out << "longjmp((jmp_buf)"; + writeOperand(I.getOperand(1)); + Out << ", "; + writeOperand(I.getOperand(2)); + Out << ")"; + return; } } |