diff options
Diffstat (limited to 'compiler/ncgutil.pas')
-rw-r--r-- | compiler/ncgutil.pas | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/compiler/ncgutil.pas b/compiler/ncgutil.pas index 1fc04519f9..df41c263b5 100644 --- a/compiler/ncgutil.pas +++ b/compiler/ncgutil.pas @@ -439,10 +439,20 @@ implementation paramanager.getintparaloc(pd,1,paraloc1); paramanager.getintparaloc(pd,2,paraloc2); paramanager.getintparaloc(pd,3,paraloc3); - cg.a_loadaddr_ref_cgpara(list,t.envbuf,paraloc3); - cg.a_loadaddr_ref_cgpara(list,t.jmpbuf,paraloc2); - { push type of exceptionframe } - cg.a_load_const_cgpara(list,pushexceptaddr_frametype_cgsize,1,paraloc1); + if pd.is_pushleftright then + begin + { push type of exceptionframe } + cg.a_load_const_cgpara(list,pushexceptaddr_frametype_cgsize,1,paraloc1); + cg.a_loadaddr_ref_cgpara(list,t.jmpbuf,paraloc2); + cg.a_loadaddr_ref_cgpara(list,t.envbuf,paraloc3); + end + else + begin + cg.a_loadaddr_ref_cgpara(list,t.envbuf,paraloc3); + cg.a_loadaddr_ref_cgpara(list,t.jmpbuf,paraloc2); + { push type of exceptionframe } + cg.a_load_const_cgpara(list,pushexceptaddr_frametype_cgsize,1,paraloc1); + end; paramanager.freecgpara(list,paraloc3); paramanager.freecgpara(list,paraloc2); paramanager.freecgpara(list,paraloc1); |