Browse Source

* parameter regvar fixes

peter 21 years ago
parent
commit
4f7667488b
4 changed files with 37 additions and 8 deletions
  1. 14 2
      compiler/ncgutil.pas
  2. 8 2
      compiler/pdecsub.pas
  3. 9 2
      compiler/symdef.pas
  4. 6 2
      compiler/symsym.pas

+ 14 - 2
compiler/ncgutil.pas

@@ -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
 
 

+ 8 - 2
compiler/pdecsub.pas

@@ -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

+ 9 - 2
compiler/symdef.pas

@@ -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

+ 6 - 2
compiler/symsym.pas

@@ -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