summaryrefslogtreecommitdiff
path: root/compiler/ncgmem.pas
diff options
context:
space:
mode:
authornickysn <nickysn@3ad0048d-3df7-0310-abae-a5850022a9f2>2013-04-21 13:26:12 +0000
committernickysn <nickysn@3ad0048d-3df7-0310-abae-a5850022a9f2>2013-04-21 13:26:12 +0000
commit952952adcd4fe310da6e4ae9340550c6c50f2d7c (patch)
tree296d6a448a129d81a5265d635535c7dba987d88d /compiler/ncgmem.pas
parent5b9324bb6850838bed929a6d35fea20764a9c2e3 (diff)
downloadfpc-952952adcd4fe310da6e4ae9340550c6c50f2d7c.tar.gz
* initial support for system procs that use calling conventions that push left to right on i8086 or i386
git-svn-id: http://svn.freepascal.org/svn/fpc/branches/i8086@24282 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'compiler/ncgmem.pas')
-rw-r--r--compiler/ncgmem.pas24
1 files changed, 20 insertions, 4 deletions
diff --git a/compiler/ncgmem.pas b/compiler/ncgmem.pas
index 264ae8accc..53b9e47c05 100644
--- a/compiler/ncgmem.pas
+++ b/compiler/ncgmem.pas
@@ -721,8 +721,16 @@ implementation
pd:=search_system_proc('fpc_dynarray_rangecheck');
paramanager.getintparaloc(pd,1,paraloc1);
paramanager.getintparaloc(pd,2,paraloc2);
- cg.a_load_loc_cgpara(current_asmdata.CurrAsmList,right.location,paraloc2);
- cg.a_load_loc_cgpara(current_asmdata.CurrAsmList,left.location,paraloc1);
+ if pd.is_pushleftright then
+ begin
+ cg.a_load_loc_cgpara(current_asmdata.CurrAsmList,left.location,paraloc1);
+ cg.a_load_loc_cgpara(current_asmdata.CurrAsmList,right.location,paraloc2);
+ end
+ else
+ begin
+ cg.a_load_loc_cgpara(current_asmdata.CurrAsmList,right.location,paraloc2);
+ cg.a_load_loc_cgpara(current_asmdata.CurrAsmList,left.location,paraloc1);
+ end;
paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1);
paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc2);
cg.allocallcpuregisters(current_asmdata.CurrAsmList);
@@ -755,8 +763,16 @@ implementation
pd:=search_system_proc(helpername);
paramanager.getintparaloc(pd,1,paraloc1);
paramanager.getintparaloc(pd,2,paraloc2);
- cg.a_load_loc_cgpara(current_asmdata.CurrAsmList,left.location,paraloc1);
- cg.a_load_loc_cgpara(current_asmdata.CurrAsmList,right.location,paraloc2);
+ if pd.is_pushleftright then
+ begin
+ cg.a_load_loc_cgpara(current_asmdata.CurrAsmList,left.location,paraloc1);
+ cg.a_load_loc_cgpara(current_asmdata.CurrAsmList,right.location,paraloc2);
+ end
+ else
+ begin
+ cg.a_load_loc_cgpara(current_asmdata.CurrAsmList,right.location,paraloc2);
+ cg.a_load_loc_cgpara(current_asmdata.CurrAsmList,left.location,paraloc1);
+ end;
paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1);
paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc2);