* parameter regvar fixes

This commit is contained in:
peter 2004-10-10 21:08:55 +00:00
parent d6bffaf5c6
commit 4f7667488b
4 changed files with 37 additions and 8 deletions

View File

@ -1239,7 +1239,16 @@ implementation
LOC_REFERENCE : LOC_REFERENCE :
begin begin
reference_reset_base(href,paraloc.reference.index,paraloc.reference.offset); reference_reset_base(href,paraloc.reference.index,paraloc.reference.offset);
cg.a_load_ref_reg(list,paraloc.size,paraloc.size,href,reg); case getregtype(reg) of
R_INTREGISTER :
cg.a_load_ref_reg(list,paraloc.size,paraloc.size,href,reg);
R_FPUREGISTER :
cg.a_loadfpu_ref_reg(list,paraloc.size,href,reg);
R_MMREGISTER :
cg.a_loadmm_ref_reg(list,paraloc.size,paraloc.size,href,reg,mms_movescalar);
else
internalerror(2004101012);
end;
end; end;
else else
internalerror(2002081302); internalerror(2002081302);
@ -2207,7 +2216,10 @@ implementation
end. end.
{ {
$Log$ $Log$
Revision 1.224 2004-10-10 20:51:46 peter Revision 1.225 2004-10-10 21:08:55 peter
* parameter regvar fixes
Revision 1.224 2004/10/10 20:51:46 peter
* fixed sparc compile * fixed sparc compile
* fixed float regvar loading * fixed float regvar loading

View File

@ -136,9 +136,12 @@ implementation
if pd.deftype=procdef then if pd.deftype=procdef then
akttokenpos:=tprocdef(pd).fileinfo; akttokenpos:=tprocdef(pd).fileinfo;
{ Generate result variable accessing function result } { Generate result variable accessing function result, it
can't be put in a register since it must be accessable
from the framepointer }
vs:=tvarsym.create('$parentfp',vs_var,voidpointertype); vs:=tvarsym.create('$parentfp',vs_var,voidpointertype);
include(vs.varoptions,vo_is_parentfp); include(vs.varoptions,vo_is_parentfp);
vs.varregable:=vr_none;
pd.parast.insert(vs); pd.parast.insert(vs);
pd.insertpara(vs.vartype,vs,nil,true); pd.insertpara(vs.vartype,vs,nil,true);
@ -2260,7 +2263,10 @@ const
end. end.
{ {
$Log$ $Log$
Revision 1.191 2004-10-08 17:09:43 peter Revision 1.192 2004-10-10 21:08:55 peter
* parameter regvar fixes
Revision 1.191 2004/10/08 17:09:43 peter
* tvarsym.varregable added, split vo_regable from varoptions * tvarsym.varregable added, split vo_regable from varoptions
Revision 1.190 2004/08/29 11:28:41 peter Revision 1.190 2004/08/29 11:28:41 peter

View File

@ -1281,7 +1281,11 @@ implementation
function tstoreddef.is_fpuregable : boolean; function tstoreddef.is_fpuregable : boolean;
begin begin
is_fpuregable:=(deftype=floatdef); {$ifdef x86}
result:=false;
{$else x86}
result:=(deftype=floatdef);
{$endif x86}
end; end;
@ -6200,7 +6204,10 @@ implementation
end. end.
{ {
$Log$ $Log$
Revision 1.257 2004-10-04 21:23:15 florian Revision 1.258 2004-10-10 21:08:55 peter
* parameter regvar fixes
Revision 1.257 2004/10/04 21:23:15 florian
* rtti alignment fixed * rtti alignment fixed
Revision 1.256 2004/09/21 23:36:51 hajny Revision 1.256 2004/09/21 23:36:51 hajny

View File

@ -1511,7 +1511,8 @@ implementation
if (vo_is_self in varoptions) then if (vo_is_self in varoptions) then
begin begin
case loc of case loc of
LOC_REGISTER: LOC_REGISTER,
LOC_CREGISTER:
regidx:=findreg_by_number(localloc.register); regidx:=findreg_by_number(localloc.register);
LOC_REFERENCE: ; LOC_REFERENCE: ;
else else
@ -2222,7 +2223,10 @@ implementation
end. end.
{ {
$Log$ $Log$
Revision 1.182 2004-10-10 20:22:53 peter Revision 1.183 2004-10-10 21:08:55 peter
* parameter regvar fixes
Revision 1.182 2004/10/10 20:22:53 peter
* symtable allocation rewritten * symtable allocation rewritten
* loading of parameters to local temps/regs cleanup * loading of parameters to local temps/regs cleanup
* regvar support for parameters * regvar support for parameters