mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-15 16:29:14 +02:00
* forgot to commit yesterday :( (less unnecessary loading of regvars with
if-statements)
This commit is contained in:
parent
733f7dd6d3
commit
c8ce1c2584
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user