* improved register allocation of generic a_param_const and a_param_ref

This commit is contained in:
florian 2003-12-15 21:39:39 +00:00
parent d9b98b35be
commit f041463abf

View File

@ -732,7 +732,7 @@ implementation
reference_reset(ref);
ref.base:=locpara.reference.index;
ref.offset:=locpara.reference.offset;
a_load_reg_ref(list,size,size,r,ref);
a_load_reg_ref(list,size,locpara.size,r,ref);
end
else
internalerror(2002071004);
@ -742,22 +742,41 @@ implementation
procedure tcg.a_param_const(list : taasmoutput;size : tcgsize;a : aword;const locpara : tparalocation);
var
hr : tregister;
ref : treference;
begin
hr:=getintregister(list,size);
a_load_const_reg(list,size,a,hr);
ungetregister(list,hr);
a_param_reg(list,size,hr,locpara);
case locpara.loc of
LOC_REGISTER,LOC_CREGISTER:
a_load_const_reg(list,locpara.size,a,locpara.register);
LOC_REFERENCE,LOC_CREFERENCE:
begin
reference_reset(ref);
ref.base:=locpara.reference.index;
ref.offset:=locpara.reference.offset;
a_load_const_ref(list,locpara.size,a,ref);
end
else
internalerror(2002071004);
end;
end;
procedure tcg.a_param_ref(list : taasmoutput;size : tcgsize;const r : treference;const locpara : tparalocation);
var
hr : tregister;
ref : treference;
begin
hr:=getintregister(list,size);
a_load_ref_reg(list,size,size,r,hr);
ungetregister(list,hr);
a_param_reg(list,size,hr,locpara);
case locpara.loc of
LOC_REGISTER,LOC_CREGISTER:
a_load_ref_reg(list,size,locpara.size,r,locpara.register);
LOC_REFERENCE,LOC_CREFERENCE:
begin
reference_reset(ref);
ref.base:=locpara.reference.index;
ref.offset:=locpara.reference.offset;
a_load_ref_ref(list,size,locpara.size,r,ref);
end
else
internalerror(2002071004);
end;
end;
@ -1954,7 +1973,10 @@ finalization
end.
{
$Log$
Revision 1.139 2003-12-15 21:25:48 peter
Revision 1.140 2003-12-15 21:39:39 florian
* improved register allocation of generic a_param_const and a_param_ref
Revision 1.139 2003/12/15 21:25:48 peter
* reg allocations for imaginary register are now inserted just
before reg allocation
* tregister changed to enum to allow compile time check