- switch to using setjmp/longjmp for exception handling

This commit is contained in:
Magnus Norddahl 2018-10-09 16:30:55 +02:00
commit 884e185db0
6 changed files with 102 additions and 125 deletions

View file

@ -170,16 +170,13 @@ void JitCompiler::EmitDoCall(asmjit::X86Gp ptr)
}
auto result = newResultInt32();
auto call = CreateCall<int, VMFunction*, int, int, VMValue*, VMReturn*, JitExceptionInfo*>(&JitCompiler::DoCall);
auto call = CreateCall<int, VMFunction*, int, int, VMValue*, VMReturn*>(&JitCompiler::DoCall);
call->setRet(0, result);
call->setArg(0, ptr);
call->setArg(1, Imm(B));
call->setArg(2, Imm(C));
call->setArg(3, paramsptr);
call->setArg(4, callReturns);
call->setArg(5, exceptInfo);
EmitCheckForException();
LoadInOuts(B);
LoadReturns(pc + 1, C);
@ -214,14 +211,13 @@ void JitCompiler::EmitDoTail(asmjit::X86Gp ptr)
}
auto result = newResultInt32();
auto call = CreateCall<int, VMFunction*, int, int, VMValue*, VMReturn*, JitExceptionInfo*>(&JitCompiler::DoCall);
auto call = CreateCall<int, VMFunction*, int, int, VMValue*, VMReturn*>(&JitCompiler::DoCall);
call->setRet(0, result);
call->setArg(0, ptr);
call->setArg(1, Imm(B));
call->setArg(2, numret);
call->setArg(3, paramsptr);
call->setArg(4, ret);
call->setArg(5, exceptInfo);
EmitPopFrame();
cc.ret(result);
@ -393,7 +389,7 @@ void JitCompiler::FillReturns(const VMOP *retval, int numret)
}
}
int JitCompiler::DoCall(VMFunction *call, int b, int c, VMValue *param, VMReturn *returns, JitExceptionInfo *exceptinfo)
int JitCompiler::DoCall(VMFunction *call, int b, int c, VMValue *param, VMReturn *returns)
{
try
{
@ -424,8 +420,7 @@ int JitCompiler::DoCall(VMFunction *call, int b, int c, VMValue *param, VMReturn
}
catch (...)
{
exceptinfo->reason = X_OTHER;
exceptinfo->cppException = std::current_exception();
VMThrowException(std::current_exception());
return 0;
}
}