* forgot to commit yesterday :( (less unnecessary loading of regvars with

if-statements)
This commit is contained in:
Jonas Maebe 2001-12-03 12:17:02 +00:00
parent 733f7dd6d3
commit c8ce1c2584

View File

@ -30,7 +30,7 @@ interface
aasm,
node,
symsym,
cpubase;
cpubase, tgcpu;
procedure assign_regvars(p: tnode);
procedure load_regvars(asml: TAAsmoutput; p: tnode);
@ -40,13 +40,16 @@ interface
procedure load_regvar_reg(asml: TAAsmoutput; reg: tregister);
procedure load_all_regvars(asml: TAAsmoutput);
procedure sync_regvars(list1, list2: taasmoutput; const regvarsloaded1,
regvarsloaded2: regvar_booleanarray);
implementation
uses
globtype,systems,comphook,
cutils,cclasses,verbose,globals,
symconst,symbase,symtype,symdef,types,
cgbase,cpuasm,tgcpu,cgobj,cgcpu,cga;
cgbase,cpuasm,cgobj,cgcpu,cga;
var
parasym : boolean;
@ -287,7 +290,7 @@ implementation
hr.offset:=-vsym.address+vsym.owner.address_fixup
else hr.offset:=vsym.address+vsym.owner.address_fixup;
hr.base:=procinfo^.framepointer;
cg.a_load_reg_ref(exprasmlist,def_cgsize(vsym.vartype.def),vsym.reg,hr);
cg.a_load_reg_ref(asml,def_cgsize(vsym.vartype.def),vsym.reg,hr);
{ asml.concat(Taicpu.op_reg_ref(A_MOV,regsize(vsym.reg),vsym.reg,hr)); }
end;
asml.concat(Tairegalloc.dealloc(makereg32(reg)));
@ -317,7 +320,7 @@ implementation
opsize := OS_32
else
opsize := def_cgsize(vsym.vartype.def);
cg.a_load_ref_reg(exprasmlist,opsize,hr,makereg32(vsym.reg));
cg.a_load_ref_reg(asml,opsize,hr,makereg32(vsym.reg));
{ asml.concat(Taicpu.op_ref_reg(opcode,opsize,hr,makereg32(vsym.reg))); }
regvar_loaded[makereg32(vsym.reg)] := true;
end;
@ -414,6 +417,24 @@ implementation
end;
procedure sync_regvars(list1, list2: taasmoutput; const regvarsloaded1,
regvarsloaded2: regvar_booleanarray);
var
counter: tregister;
begin
for counter := low(regvar_loaded) to high(regvar_loaded) do
begin
regvar_loaded[counter] := regvarsloaded1[counter] and
regvarsloaded2[counter];
if regvarsloaded1[counter] xor regvarsloaded2[counter] then
if regvarsloaded1[counter] then
load_regvar_reg(list2,counter)
else
load_regvar_reg(list1,counter);
end;
end;
procedure cleanup_regvars(asml: TAAsmoutput);
var
i: longint;
@ -442,7 +463,11 @@ end.
{
$Log$
Revision 1.20 2001-11-05 16:49:32 jonas
Revision 1.21 2001-12-03 12:17:02 jonas
* forgot to commit yesterday :( (less unnecessary loading of regvars with
if-statements)
Revision 1.20 2001/11/05 16:49:32 jonas
* constant regvars (addresses of var/out para's and const para's) aren't
saved to memory anymore when their register will be destroyed
* unit has been made mostly processor independent