+ before calling a helper procedure, all register classes are now saved, this patch is subject to being merged back

git-svn-id: trunk@201 -
This commit is contained in:
florian 2005-06-05 08:12:33 +00:00
parent 36dd45fbc3
commit 355aaa69c8
7 changed files with 112 additions and 110 deletions

View File

@ -95,6 +95,8 @@ unit cgobj;
{# Free multiple registers specified.}
procedure dealloccpuregisters(list:Taasmoutput;rt:Tregistertype;r:Tcpuregisterset);virtual;
procedure allocallcpuregisters(list:Taasmoutput);virtual;
procedure deallocallcpuregisters(list:Taasmoutput);virtual;
procedure do_register_allocation(list:Taasmoutput;headertai:tai);virtual;
function makeregsize(list:Taasmoutput;reg:Tregister;size:Tcgsize):Tregister;
@ -617,6 +619,14 @@ implementation
end;
procedure tcg.allocallcpuregisters(list:Taasmoutput);
begin
alloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
alloccpuregisters(list,R_FPUREGISTER,paramanager.get_volatile_registers_fpu(pocall_default));
alloccpuregisters(list,R_MMREGISTER,paramanager.get_volatile_registers_mm(pocall_default));
end;
procedure tcg.dealloccpuregisters(list:Taasmoutput;rt:Tregistertype;r:Tcpuregisterset);
begin
if assigned(rg[rt]) then
@ -626,6 +636,14 @@ implementation
end;
procedure tcg.deallocallcpuregisters(list:Taasmoutput);
begin
dealloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
dealloccpuregisters(list,R_FPUREGISTER,paramanager.get_volatile_registers_fpu(pocall_default));
dealloccpuregisters(list,R_MMREGISTER,paramanager.get_volatile_registers_mm(pocall_default));
end;
function tcg.uses_registers(rt:Tregistertype):boolean;
begin
if assigned(rg[rt]) then
@ -1374,13 +1392,9 @@ implementation
paramanager.freeparaloc(list,cgpara3);
paramanager.freeparaloc(list,cgpara2);
paramanager.freeparaloc(list,cgpara1);
alloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
alloccpuregisters(list,R_FPUREGISTER,paramanager.get_volatile_registers_fpu(pocall_default));
alloccpuregisters(list,R_MMREGISTER,paramanager.get_volatile_registers_mm(pocall_default));
allocallcpuregisters(list);
a_call_name(list,'FPC_SHORTSTR_ASSIGN');
dealloccpuregisters(list,R_MMREGISTER,paramanager.get_volatile_registers_mm(pocall_default));
dealloccpuregisters(list,R_FPUREGISTER,paramanager.get_volatile_registers_fpu(pocall_default));
dealloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
deallocallcpuregisters(list);
cgpara3.done;
cgpara2.done;
cgpara1.done;
@ -1427,11 +1441,9 @@ implementation
{ these functions get the pointer by value }
a_param_ref(list,OS_ADDR,ref,cgpara1);
paramanager.freeparaloc(list,cgpara1);
alloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
alloccpuregisters(list,R_FPUREGISTER,paramanager.get_volatile_registers_fpu(pocall_default));
alloccpuregisters(list,R_MMREGISTER,paramanager.get_volatile_registers_int(pocall_default));
allocallcpuregisters(list);
a_call_name(list,incrfunc);
dealloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
deallocallcpuregisters(list);
end
else
begin
@ -1442,9 +1454,9 @@ implementation
a_paramaddr_ref(list,ref,cgpara1);
paramanager.freeparaloc(list,cgpara1);
paramanager.freeparaloc(list,cgpara2);
alloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
allocallcpuregisters(list);
a_call_name(list,'FPC_ADDREF');
dealloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
deallocallcpuregisters(list);
end;
cgpara2.done;
cgpara1.done;
@ -1503,9 +1515,9 @@ implementation
paramanager.freeparaloc(list,cgpara1);
if needrtti then
paramanager.freeparaloc(list,cgpara2);
alloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
allocallcpuregisters(list);
a_call_name(list,decrfunc);
dealloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
deallocallcpuregisters(list);
end
else
begin
@ -1516,9 +1528,9 @@ implementation
a_paramaddr_ref(list,ref,cgpara1);
paramanager.freeparaloc(list,cgpara1);
paramanager.freeparaloc(list,cgpara2);
alloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
allocallcpuregisters(list);
a_call_name(list,'FPC_DECREF');
dealloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
deallocallcpuregisters(list);
end;
cgpara2.done;
cgpara1.done;
@ -1548,11 +1560,9 @@ implementation
a_paramaddr_ref(list,ref,cgpara1);
paramanager.freeparaloc(list,cgpara1);
paramanager.freeparaloc(list,cgpara2);
alloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
alloccpuregisters(list,R_FPUREGISTER,paramanager.get_volatile_registers_fpu(pocall_default));
allocallcpuregisters(list);
a_call_name(list,'FPC_INITIALIZE');
dealloccpuregisters(list,R_FPUREGISTER,paramanager.get_volatile_registers_fpu(pocall_default));
dealloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
deallocallcpuregisters(list);
end;
cgpara1.done;
cgpara2.done;
@ -1584,11 +1594,9 @@ implementation
a_paramaddr_ref(list,ref,cgpara1);
paramanager.freeparaloc(list,cgpara1);
paramanager.freeparaloc(list,cgpara2);
alloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
alloccpuregisters(list,R_FPUREGISTER,paramanager.get_volatile_registers_fpu(pocall_default));
allocallcpuregisters(list);
a_call_name(list,'FPC_FINALIZE');
dealloccpuregisters(list,R_FPUREGISTER,paramanager.get_volatile_registers_fpu(pocall_default));
dealloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
deallocallcpuregisters(list);
end;
cgpara1.done;
cgpara2.done;
@ -1798,9 +1806,9 @@ implementation
a_param_reg(list,OS_ADDR,reg,cgpara1);
paramanager.freeparaloc(list,cgpara1);
paramanager.freeparaloc(list,cgpara2);
alloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
allocallcpuregisters(list);
a_call_name(list,'FPC_CHECK_OBJECT_EXT');
dealloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
deallocallcpuregisters(list);
end
else
if (cs_check_range in aktlocalswitches) then
@ -1808,9 +1816,9 @@ implementation
paramanager.allocparaloc(list,cgpara1);
a_param_reg(list,OS_ADDR,reg,cgpara1);
paramanager.freeparaloc(list,cgpara1);
alloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
allocallcpuregisters(list);
a_call_name(list,'FPC_CHECK_OBJECT');
dealloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
deallocallcpuregisters(list);
end;
cgpara1.done;
cgpara2.done;
@ -1854,11 +1862,9 @@ implementation
paramanager.allocparaloc(list,cgpara1);
a_param_reg(list,OS_INT,sizereg,cgpara1);
paramanager.freeparaloc(list,cgpara1);
alloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
alloccpuregisters(list,R_FPUREGISTER,paramanager.get_volatile_registers_fpu(pocall_default));
allocallcpuregisters(list);
a_call_name(list,'FPC_GETMEM');
dealloccpuregisters(list,R_FPUREGISTER,paramanager.get_volatile_registers_fpu(pocall_default));
dealloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
deallocallcpuregisters(list);
cgpara1.done;
{ return the new address }
a_load_reg_reg(list,OS_ADDR,OS_ADDR,NR_FUNCTION_RESULT_REG,destreg);
@ -1882,11 +1888,9 @@ implementation
paramanager.freeparaloc(list,cgpara3);
paramanager.freeparaloc(list,cgpara2);
paramanager.freeparaloc(list,cgpara1);
alloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
alloccpuregisters(list,R_FPUREGISTER,paramanager.get_volatile_registers_fpu(pocall_default));
allocallcpuregisters(list);
a_call_name(list,'FPC_MOVE');
dealloccpuregisters(list,R_FPUREGISTER,paramanager.get_volatile_registers_fpu(pocall_default));
dealloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
deallocallcpuregisters(list);
cgpara3.done;
cgpara2.done;
cgpara1.done;
@ -1904,11 +1908,9 @@ implementation
paramanager.allocparaloc(list,cgpara1);
a_param_loc(list,l,cgpara1);
paramanager.freeparaloc(list,cgpara1);
alloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
alloccpuregisters(list,R_FPUREGISTER,paramanager.get_volatile_registers_fpu(pocall_default));
allocallcpuregisters(list);
a_call_name(list,'FPC_FREEMEM');
dealloccpuregisters(list,R_FPUREGISTER,paramanager.get_volatile_registers_fpu(pocall_default));
dealloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
deallocallcpuregisters(list);
cgpara1.done;
end;

View File

@ -1022,9 +1022,9 @@ implementation
(right=nil) and
not(po_virtualmethod in procdefinition.procoptions) then
begin
cg.alloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(exprasmlist);
cg.a_call_name(exprasmlist,'FPC_IOCHECK');
cg.dealloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(exprasmlist);
end;
{ release temps of paras }
@ -1172,9 +1172,9 @@ implementation
(right=nil) and
not(po_virtualmethod in procdefinition.procoptions) then
begin
cg.alloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(exprasmlist);
cg.a_call_name(exprasmlist,'FPC_IOCHECK');
cg.dealloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(exprasmlist);
end;
{ release temps of paras }

View File

@ -830,16 +830,16 @@ implementation
paramanager.freeparaloc(exprasmlist,paraloc1);
paramanager.freeparaloc(exprasmlist,paraloc2);
paramanager.freeparaloc(exprasmlist,paraloc3);
cg.alloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(exprasmlist);
cg.a_call_name(exprasmlist,'FPC_RAISEEXCEPTION');
cg.dealloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(exprasmlist);
end
else
begin
cg.alloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(exprasmlist);
cg.a_call_name(exprasmlist,'FPC_POPADDRSTACK');
cg.a_call_name(exprasmlist,'FPC_RERAISE');
cg.dealloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(exprasmlist);
end;
paraloc1.done;
paraloc2.done;
@ -861,17 +861,17 @@ implementation
var
paraloc1 : tcgpara;
begin
cg.alloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(exprasmlist);
cg.a_call_name(exprasmlist,'FPC_POPOBJECTSTACK');
cg.dealloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(exprasmlist);
paraloc1.init;
paramanager.getintparaloc(pocall_default,1,paraloc1);
paramanager.allocparaloc(exprasmlist,paraloc1);
cg.a_param_reg(exprasmlist,OS_ADDR,NR_FUNCTION_RESULT_REG,paraloc1);
paramanager.freeparaloc(exprasmlist,paraloc1);
cg.alloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(exprasmlist);
cg.a_call_name(exprasmlist,'FPC_DESTROYEXCEPTION');
cg.dealloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(exprasmlist);
paraloc1.done;
end;
@ -983,9 +983,9 @@ implementation
paramanager.allocparaloc(exprasmlist,paraloc1);
cg.a_param_const(exprasmlist,OS_ADDR,-1,paraloc1);
paramanager.freeparaloc(exprasmlist,paraloc1);
cg.alloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(exprasmlist);
cg.a_call_name(exprasmlist,'FPC_CATCHES');
cg.dealloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(exprasmlist);
paraloc1.done;
{ the destruction of the exception object must be also }
@ -1005,18 +1005,18 @@ implementation
free_exception(exprasmlist,destroytemps,0,doobjectdestroy,false);
cg.alloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(exprasmlist);
cg.a_call_name(exprasmlist,'FPC_POPSECONDOBJECTSTACK');
cg.dealloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(exprasmlist);
paraloc1.init;
paramanager.getintparaloc(pocall_default,1,paraloc1);
paramanager.allocparaloc(exprasmlist,paraloc1);
cg.a_param_reg(exprasmlist, OS_ADDR, NR_FUNCTION_RESULT_REG, paraloc1);
paramanager.freeparaloc(exprasmlist,paraloc1);
cg.alloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(exprasmlist);
cg.a_call_name(exprasmlist,'FPC_DESTROYEXCEPTION');
cg.dealloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(exprasmlist);
paraloc1.done;
{ we don't need to restore esi here because reraise never }
{ returns }
@ -1039,9 +1039,9 @@ implementation
cg.a_label(exprasmlist,exitexceptlabel);
{ we must also destroy the address frame which guards }
{ exception object }
cg.alloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(exprasmlist);
cg.a_call_name(exprasmlist,'FPC_POPADDRSTACK');
cg.dealloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(exprasmlist);
cg.g_exception_reason_load(exprasmlist,excepttemps.reasonbuf);
cleanupobjectstack;
cg.a_jmp_always(exprasmlist,oldaktexitlabel);
@ -1052,9 +1052,9 @@ implementation
cg.a_label(exprasmlist,breakexceptlabel);
{ we must also destroy the address frame which guards }
{ exception object }
cg.alloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(exprasmlist);
cg.a_call_name(exprasmlist,'FPC_POPADDRSTACK');
cg.dealloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(exprasmlist);
cg.g_exception_reason_load(exprasmlist,excepttemps.reasonbuf);
cleanupobjectstack;
cg.a_jmp_always(exprasmlist,oldaktbreaklabel);
@ -1065,9 +1065,9 @@ implementation
cg.a_label(exprasmlist,continueexceptlabel);
{ we must also destroy the address frame which guards }
{ exception object }
cg.alloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(exprasmlist);
cg.a_call_name(exprasmlist,'FPC_POPADDRSTACK');
cg.dealloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(exprasmlist);
cg.g_exception_reason_load(exprasmlist,excepttemps.reasonbuf);
cleanupobjectstack;
cg.a_jmp_always(exprasmlist,oldaktcontinuelabel);
@ -1077,9 +1077,9 @@ implementation
begin
{ do some magic for exit in the try block }
cg.a_label(exprasmlist,exittrylabel);
cg.alloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(exprasmlist);
cg.a_call_name(exprasmlist,'FPC_POPADDRSTACK');
cg.dealloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(exprasmlist);
cg.g_exception_reason_load(exprasmlist,excepttemps.reasonbuf);
cg.a_jmp_always(exprasmlist,oldaktexitlabel);
end;
@ -1087,9 +1087,9 @@ implementation
if fc_break in tryflowcontrol then
begin
cg.a_label(exprasmlist,breaktrylabel);
cg.alloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(exprasmlist);
cg.a_call_name(exprasmlist,'FPC_POPADDRSTACK');
cg.dealloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(exprasmlist);
cg.g_exception_reason_load(exprasmlist,excepttemps.reasonbuf);
cg.a_jmp_always(exprasmlist,oldaktbreaklabel);
end;
@ -1097,9 +1097,9 @@ implementation
if fc_continue in tryflowcontrol then
begin
cg.a_label(exprasmlist,continuetrylabel);
cg.alloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(exprasmlist);
cg.a_call_name(exprasmlist,'FPC_POPADDRSTACK');
cg.dealloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(exprasmlist);
cg.g_exception_reason_load(exprasmlist,excepttemps.reasonbuf);
cg.a_jmp_always(exprasmlist,oldaktcontinuelabel);
end;
@ -1154,9 +1154,9 @@ implementation
paramanager.allocparaloc(exprasmlist,paraloc1);
cg.a_paramaddr_ref(exprasmlist,href2,paraloc1);
paramanager.freeparaloc(exprasmlist,paraloc1);
cg.alloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(exprasmlist);
cg.a_call_name(exprasmlist,'FPC_CATCHES');
cg.dealloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(exprasmlist);
{ is it this catch? No. go to next onlabel }
cg.a_cmp_const_reg_label(exprasmlist,OS_ADDR,OC_EQ,0,NR_FUNCTION_RESULT_REG,nextonlabel);
@ -1208,18 +1208,18 @@ implementation
free_exception(exprasmlist,excepttemps,0,doobjectdestroy,false);
cg.alloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(exprasmlist);
cg.a_call_name(exprasmlist,'FPC_POPSECONDOBJECTSTACK');
cg.dealloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(exprasmlist);
paramanager.getintparaloc(pocall_default,1,paraloc1);
paramanager.allocparaloc(exprasmlist,paraloc1);
cg.a_param_reg(exprasmlist, OS_ADDR, NR_FUNCTION_RESULT_REG, paraloc1);
paramanager.freeparaloc(exprasmlist,paraloc1);
cg.alloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(exprasmlist);
cg.a_call_name(exprasmlist,'FPC_DESTROYEXCEPTION');
cg.dealloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
{ we don't need to restore esi here because reraise never }
{ returns }
cg.deallocallcpuregisters(exprasmlist);
{ we don't need to store/restore registers here because reraise never
returns }
cg.a_call_name(exprasmlist,'FPC_RERAISE');
cg.a_label(exprasmlist,doobjectdestroy);

View File

@ -231,9 +231,9 @@ implementation
paramanager.freeparaloc(exprasmlist,paraloc2);
paramanager.freeparaloc(exprasmlist,paraloc3);
paramanager.freeparaloc(exprasmlist,paraloc4);
cg.alloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(exprasmlist);
cg.a_call_name(exprasmlist,'FPC_ASSERT');
cg.dealloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(exprasmlist);
location_freetemp(exprasmlist,hp3.location);
location_freetemp(exprasmlist,hp2.location);
cg.a_label(exprasmlist,truelabel);

View File

@ -171,9 +171,9 @@ implementation
cg.a_param_ref(exprasmlist,OS_ADDR,href,paraloc1);
paramanager.freeparaloc(exprasmlist,paraloc1);
paraloc1.done;
cg.alloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(exprasmlist);
cg.a_call_reg(exprasmlist,hregister);
cg.dealloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(exprasmlist);
cg.getcpuregister(exprasmlist,NR_FUNCTION_RESULT_REG);
cg.ungetcpuregister(exprasmlist,NR_FUNCTION_RESULT_REG);
hregister:=cg.getaddressregister(exprasmlist);

View File

@ -258,9 +258,9 @@ implementation
cg.a_param_reg(exprasmlist, OS_ADDR,location.reference.base,paraloc1);
paramanager.freeparaloc(exprasmlist,paraloc1);
paraloc1.done;
cg.alloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(exprasmlist);
cg.a_call_name(exprasmlist,'FPC_CHECKPOINTER');
cg.dealloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(exprasmlist);
end;
end;
@ -312,9 +312,9 @@ implementation
paramanager.allocparaloc(exprasmlist,paraloc1);
cg.a_param_reg(exprasmlist, OS_ADDR,location.reference.base,paraloc1);
paramanager.freeparaloc(exprasmlist,paraloc1);
cg.alloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(exprasmlist);
cg.a_call_name(exprasmlist,'FPC_CHECKPOINTER');
cg.dealloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(exprasmlist);
end;
end
else if is_interfacecom(left.resulttype.def) then
@ -330,9 +330,9 @@ implementation
paramanager.allocparaloc(exprasmlist,paraloc1);
cg.a_param_reg(exprasmlist, OS_ADDR,location.reference.base,paraloc1);
paramanager.freeparaloc(exprasmlist,paraloc1);
cg.alloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(exprasmlist);
cg.a_call_name(exprasmlist,'FPC_CHECKPOINTER');
cg.dealloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(exprasmlist);
end;
end
else
@ -526,9 +526,9 @@ implementation
cg.a_param_loc(exprasmlist,left.location,paraloc1);
paramanager.freeparaloc(exprasmlist,paraloc1);
paramanager.freeparaloc(exprasmlist,paraloc2);
cg.alloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(exprasmlist);
cg.a_call_name(exprasmlist,'FPC_DYNARRAY_RANGECHECK');
cg.dealloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(exprasmlist);
end
else
cg.g_rangecheck(exprasmlist,right.location,right.resulttype.def,left.resulttype.def);
@ -592,9 +592,9 @@ implementation
paramanager.allocparaloc(exprasmlist,paraloc1);
cg.a_param_reg(exprasmlist,OS_ADDR,location.reference.base,paraloc1);
paramanager.freeparaloc(exprasmlist,paraloc1);
cg.alloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(exprasmlist);
cg.a_call_name(exprasmlist,'FPC_'+upper(tstringdef(left.resulttype.def).stringtypname)+'_CHECKZERO');
cg.dealloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(exprasmlist);
end;
{ in ansistrings/widestrings S[1] is p<w>char(S)[0] !! }
@ -685,9 +685,9 @@ implementation
cg.a_param_ref(exprasmlist,OS_INT,href,paraloc1);
paramanager.freeparaloc(exprasmlist,paraloc1);
paramanager.freeparaloc(exprasmlist,paraloc2);
cg.alloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(exprasmlist);
cg.a_call_name(exprasmlist,'FPC_'+upper(tstringdef(left.resulttype.def).stringtypname)+'_RANGECHECK');
cg.dealloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(exprasmlist);
end;
st_shortstring:
@ -824,9 +824,9 @@ implementation
cg.a_param_ref(exprasmlist,OS_INT,href,paraloc1);
paramanager.freeparaloc(exprasmlist,paraloc1);
paramanager.freeparaloc(exprasmlist,paraloc2);
cg.alloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(exprasmlist);
cg.a_call_name(exprasmlist,'FPC_'+upper(tstringdef(left.resulttype.def).stringtypname)+'_RANGECHECK');
cg.dealloccpuregisters(exprasmlist,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(exprasmlist);
end;
st_shortstring:
begin

View File

@ -357,17 +357,17 @@ implementation
paramanager.freeparaloc(list,paraloc3);
paramanager.freeparaloc(list,paraloc2);
paramanager.freeparaloc(list,paraloc1);
cg.alloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(list);
cg.a_call_name(list,'FPC_PUSHEXCEPTADDR');
cg.dealloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(list);
paramanager.getintparaloc(pocall_default,1,paraloc1);
paramanager.allocparaloc(list,paraloc1);
cg.a_param_reg(list,OS_ADDR,NR_FUNCTION_RESULT_REG,paraloc1);
paramanager.freeparaloc(list,paraloc1);
cg.alloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(list);
cg.a_call_name(list,'FPC_SETJMP');
cg.dealloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(list);
cg.g_exception_reason_save(list, t.reasonbuf);
cg.a_cmp_const_reg_label(list,OS_S32,OC_NE,0,cg.makeregsize(list,NR_FUNCTION_RESULT_REG,OS_S32),exceptlabel);
@ -379,9 +379,9 @@ implementation
procedure free_exception(list:TAAsmoutput;const t:texceptiontemps;a:aint;endexceptlabel:tasmlabel;onlyfree:boolean);
begin
cg.alloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(list);
cg.a_call_name(list,'FPC_POPADDRSTACK');
cg.dealloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(list);
if not onlyfree then
begin
@ -1583,9 +1583,9 @@ implementation
if not (target_info.system in [system_i386_win32,system_i386_wdosx]) or
not (current_procinfo.procdef.proctypeoption=potype_proginit) then
begin
cg.alloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_cdecl));
cg.allocallcpuregisters(list);
cg.g_profilecode(list);
cg.dealloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_cdecl));
cg.deallocallcpuregisters(list);
end;
end;
@ -1606,15 +1606,15 @@ implementation
cg.a_paramaddr_ref(list,href,paraloc1);
paramanager.freeparaloc(list,paraloc2);
paramanager.freeparaloc(list,paraloc1);
cg.alloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_cdecl));
cg.allocallcpuregisters(list);
cg.a_call_name(list,'_monstartup');
cg.dealloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_cdecl));
cg.deallocallcpuregisters(list);
end;
{ initialize units }
cg.alloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(list);
cg.a_call_name(list,'FPC_INITIALIZEUNITS');
cg.dealloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(list);
{$ifdef GDB}
if (cs_debuginfo in aktmoduleswitches) then
@ -1863,9 +1863,9 @@ implementation
paramanager.allocparaloc(list,paraloc1);
paramanager.freeparaloc(list,paraloc1);
{ Call the helper }
cg.alloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.allocallcpuregisters(list);
cg.a_call_name(list,'FPC_STACKCHECK');
cg.dealloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
cg.deallocallcpuregisters(list);
paraloc1.done;
end;