From a67480486907190b4ad78cd2ed29c6794c29a4ac Mon Sep 17 00:00:00 2001 From: Jonas Maebe <jonas@freepascal.org> Date: Wed, 8 Apr 2015 19:08:30 +0000 Subject: [PATCH] * made fpc_setjmp() code generic and fixed it for llvm git-svn-id: trunk@30497 - --- compiler/ncgutil.pas | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/compiler/ncgutil.pas b/compiler/ncgutil.pas index bf67368a08..279c092ec2 100644 --- a/compiler/ncgutil.pas +++ b/compiler/ncgutil.pas @@ -451,15 +451,13 @@ implementation paramanager.freecgpara(list,paraloc1); { perform the fpc_setjmp call } setjmpres:=hlcg.g_call_system_proc(list,pd,[@paraloc1],nil); - setjmpres.check_simple_location; - if setjmpres.location^.loc<>LOC_REGISTER then - internalerror(2014080701); - hlcg.getcpuregister(list,setjmpres.location^.register); - hlcg.g_exception_reason_save(list,setjmpres.def,ossinttype,setjmpres.location^.register,t.reasonbuf); + location_reset(tmpresloc,LOC_REGISTER,def_cgsize(setjmpres.def)); + tmpresloc.register:=hlcg.getaddressregister(list,pushexceptres.def); + hlcg.gen_load_cgpara_loc(list,pushexceptres.def,setjmpres,tmpresloc,true); + hlcg.g_exception_reason_save(list,setjmpres.def,ossinttype,tmpresloc.register,t.reasonbuf); { if we get 0 here in the function result register, it means that we longjmp'd back here } - hlcg.a_cmp_const_reg_label(list,setjmpres.def,OC_NE,0,setjmpres.location^.register,exceptlabel); - hlcg.ungetcpuregister(list,setjmpres.location^.register); + hlcg.a_cmp_const_reg_label(list,setjmpres.def,OC_NE,0,tmpresloc.register,exceptlabel); setjmpres.resetiftemp; paraloc1.done; paraloc2.done;