mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-26 13:10:34 +00:00
Add support for the sig(set|long)jmp intrinsics
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7951 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
95881ec1bb
commit
72af6b8e5d
@ -1139,6 +1139,7 @@ void CWriter::visitCallInst(CallInst &I) {
|
||||
return;
|
||||
|
||||
case LLVMIntrinsic::setjmp:
|
||||
case LLVMIntrinsic::sigsetjmp:
|
||||
// This instrinsic should never exist in the program, but until we get
|
||||
// setjmp/longjmp transformations going on, we should codegen it to
|
||||
// something reasonable. This will allow code that never calls longjmp
|
||||
@ -1146,7 +1147,9 @@ void CWriter::visitCallInst(CallInst &I) {
|
||||
Out << "0";
|
||||
return;
|
||||
case LLVMIntrinsic::longjmp:
|
||||
// Treat longjmp the same as setjmp
|
||||
case LLVMIntrinsic::siglongjmp:
|
||||
// Longjmp is not implemented, and never will be. It would cause an
|
||||
// exception throw.
|
||||
Out << "abort()";
|
||||
return;
|
||||
}
|
||||
|
@ -1139,6 +1139,7 @@ void CWriter::visitCallInst(CallInst &I) {
|
||||
return;
|
||||
|
||||
case LLVMIntrinsic::setjmp:
|
||||
case LLVMIntrinsic::sigsetjmp:
|
||||
// This instrinsic should never exist in the program, but until we get
|
||||
// setjmp/longjmp transformations going on, we should codegen it to
|
||||
// something reasonable. This will allow code that never calls longjmp
|
||||
@ -1146,7 +1147,9 @@ void CWriter::visitCallInst(CallInst &I) {
|
||||
Out << "0";
|
||||
return;
|
||||
case LLVMIntrinsic::longjmp:
|
||||
// Treat longjmp the same as setjmp
|
||||
case LLVMIntrinsic::siglongjmp:
|
||||
// Longjmp is not implemented, and never will be. It would cause an
|
||||
// exception throw.
|
||||
Out << "abort()";
|
||||
return;
|
||||
}
|
||||
|
@ -1433,6 +1433,7 @@ bool CodeGenIntrinsic(LLVMIntrinsic::ID iid, CallInst &callInstr,
|
||||
addReg(callInstr.getOperand(1)));
|
||||
return true;
|
||||
|
||||
case LLVMIntrinsic::sigsetjmp:
|
||||
case LLVMIntrinsic::setjmp: {
|
||||
// act as if we return 0
|
||||
unsigned g0 = target.getRegInfo().getZeroRegNum();
|
||||
@ -1441,6 +1442,7 @@ bool CodeGenIntrinsic(LLVMIntrinsic::ID iid, CallInst &callInstr,
|
||||
return true;
|
||||
}
|
||||
|
||||
case LLVMIntrinsic::siglongjmp:
|
||||
case LLVMIntrinsic::longjmp: {
|
||||
// call abort()
|
||||
Module* M = callInstr.getParent()->getParent()->getParent();
|
||||
|
@ -978,10 +978,12 @@ void ISel::visitIntrinsicCall(LLVMIntrinsic::ID ID, CallInst &CI) {
|
||||
return;
|
||||
|
||||
case LLVMIntrinsic::longjmp:
|
||||
case LLVMIntrinsic::siglongjmp:
|
||||
BuildMI(X86::CALLpcrel32, 1).addExternalSymbol("abort", true);
|
||||
return;
|
||||
|
||||
case LLVMIntrinsic::setjmp:
|
||||
case LLVMIntrinsic::sigsetjmp:
|
||||
// Setjmp always returns zero...
|
||||
BuildMI(BB, X86::MOVir32, 1, getReg(CI)).addZImm(0);
|
||||
return;
|
||||
|
@ -978,10 +978,12 @@ void ISel::visitIntrinsicCall(LLVMIntrinsic::ID ID, CallInst &CI) {
|
||||
return;
|
||||
|
||||
case LLVMIntrinsic::longjmp:
|
||||
case LLVMIntrinsic::siglongjmp:
|
||||
BuildMI(X86::CALLpcrel32, 1).addExternalSymbol("abort", true);
|
||||
return;
|
||||
|
||||
case LLVMIntrinsic::setjmp:
|
||||
case LLVMIntrinsic::sigsetjmp:
|
||||
// Setjmp always returns zero...
|
||||
BuildMI(BB, X86::MOVir32, 1, getReg(CI)).addZImm(0);
|
||||
return;
|
||||
|
Loading…
Reference in New Issue
Block a user