mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-10-01 03:19:31 +02:00
* improved register allocation of generic a_param_const and a_param_ref
This commit is contained in:
parent
d9b98b35be
commit
f041463abf
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user