diff --git a/compiler/ncgutil.pas b/compiler/ncgutil.pas index 8202d65b3b..c956967687 100644 --- a/compiler/ncgutil.pas +++ b/compiler/ncgutil.pas @@ -1239,7 +1239,16 @@ implementation LOC_REFERENCE : begin 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; else internalerror(2002081302); @@ -2207,7 +2216,10 @@ implementation end. { $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 float regvar loading diff --git a/compiler/pdecsub.pas b/compiler/pdecsub.pas index 552954282b..89213607af 100644 --- a/compiler/pdecsub.pas +++ b/compiler/pdecsub.pas @@ -136,9 +136,12 @@ implementation if pd.deftype=procdef then 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); include(vs.varoptions,vo_is_parentfp); + vs.varregable:=vr_none; pd.parast.insert(vs); pd.insertpara(vs.vartype,vs,nil,true); @@ -2260,7 +2263,10 @@ const end. { $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 Revision 1.190 2004/08/29 11:28:41 peter diff --git a/compiler/symdef.pas b/compiler/symdef.pas index beab56130a..84bd445f4b 100644 --- a/compiler/symdef.pas +++ b/compiler/symdef.pas @@ -1281,7 +1281,11 @@ implementation function tstoreddef.is_fpuregable : boolean; begin - is_fpuregable:=(deftype=floatdef); +{$ifdef x86} + result:=false; +{$else x86} + result:=(deftype=floatdef); +{$endif x86} end; @@ -6200,7 +6204,10 @@ implementation end. { $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 Revision 1.256 2004/09/21 23:36:51 hajny diff --git a/compiler/symsym.pas b/compiler/symsym.pas index 4c0f0fdb56..5215e59fb7 100644 --- a/compiler/symsym.pas +++ b/compiler/symsym.pas @@ -1511,7 +1511,8 @@ implementation if (vo_is_self in varoptions) then begin case loc of - LOC_REGISTER: + LOC_REGISTER, + LOC_CREGISTER: regidx:=findreg_by_number(localloc.register); LOC_REFERENCE: ; else @@ -2222,7 +2223,10 @@ implementation end. { $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 * loading of parameters to local temps/regs cleanup * regvar support for parameters