1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-21 03:53:04 +02:00

Implement LLVM intrinsics llvm.setjmp' and llvm.longjmp' as follows:

* setjmp() simply returns 0
* longjmp() simply calls abort()

llvm-svn: 7676
This commit is contained in:
Misha Brukman 2003-08-07 15:43:46 +00:00
parent bc05294ada
commit 80ba72fe5c

View File

@ -16,10 +16,8 @@
#include "llvm/CodeGen/MachineFunctionInfo.h"
#include "llvm/CodeGen/MachineCodeForInstruction.h"
#include "llvm/DerivedTypes.h"
#include "llvm/iTerminators.h"
#include "llvm/iMemory.h"
#include "llvm/iOther.h"
#include "llvm/Function.h"
#include "llvm/Instructions.h"
#include "llvm/Module.h"
#include "llvm/Constants.h"
#include "llvm/ConstantHandling.h"
#include "llvm/Intrinsics.h"
@ -1435,6 +1433,22 @@ bool CodeGenIntrinsic(LLVMIntrinsic::ID iid, CallInst &callInstr,
addReg(callInstr.getOperand(1)));
return true;
case LLVMIntrinsic::setjmp: {
// act as if we return 0
unsigned g0 = target.getRegInfo().getZeroRegNum();
mvec.push_back(BuildMI(V9::ORr,3).addMReg(g0).addMReg(g0)
.addReg(&callInstr, MOTy::Def));
return true;
}
case LLVMIntrinsic::longjmp: {
// call abort()
Module* M = callInstr.getParent()->getParent()->getParent();
Function *F = M->getNamedFunction("abort");
mvec.push_back(BuildMI(V9::CALL, 1).addReg(F));
return true;
}
default:
return false;
}