peter 22 rokov pred
rodič
commit
c642c454a2
1 zmenil súbory, kde vykonal 26 pridanie a 3 odobranie
  1. 26 3
      compiler/sparc/cpupara.pas

+ 26 - 3
compiler/sparc/cpupara.pas

@@ -34,7 +34,8 @@ interface
         {Returns a structure giving the information on the storage of the parameter
         {Returns a structure giving the information on the storage of the parameter
         (which must be an integer parameter)
         (which must be an integer parameter)
         @param(nr Parameter number of routine, starting from 1)}
         @param(nr Parameter number of routine, starting from 1)}
-        function GetIntParaLoc(List:TAasmOutput;nr:longint):TParaLocation;override;
+        function getintparaloc(list: taasmoutput; nr : longint) : tparalocation;override;
+        procedure freeintparaloc(list: taasmoutput; nr : longint); override;
         {Creates location information related to the parameter of the function}
         {Creates location information related to the parameter of the function}
         procedure create_param_loc_info(p:TAbstractProcDef);override;
         procedure create_param_loc_info(p:TAbstractProcDef);override;
         {Returns the location where the invisible parameter for structured function
         {Returns the location where the invisible parameter for structured function
@@ -48,7 +49,7 @@ implementation
     uses
     uses
       verbose,
       verbose,
       cpuinfo,cginfo,cgbase,
       cpuinfo,cginfo,cgbase,
-      defutil;
+      defutil,rgobj;
 
 
     function TSparcParaManager.GetIntParaLoc(List:TAasmOutput;nr:longint):TParaLocation;
     function TSparcParaManager.GetIntParaLoc(List:TAasmOutput;nr:longint):TParaLocation;
       begin
       begin
@@ -64,6 +65,7 @@ implementation
               loc:=LOC_REGISTER;
               loc:=LOC_REGISTER;
               register.enum:=R_INTREGISTER;
               register.enum:=R_INTREGISTER;
               register.number:=(RS_I0+nr) shl 8;
               register.number:=(RS_I0+nr) shl 8;
+              rg.getexplicitregisterint(list,register.number);
             end
             end
            else
            else
            { The other parameters are passed into the frame }
            { The other parameters are passed into the frame }
@@ -78,6 +80,24 @@ implementation
       end;
       end;
 
 
 
 
+    procedure tsparcparamanager.freeintparaloc(list: taasmoutput; nr : longint);
+
+      var
+        r: tregister;
+
+      begin
+        if nr<1 then
+          internalerror(2003060401);
+        Dec(nr);
+        if nr<6 then
+          begin
+            r.enum := R_INTREGISTER;
+            r.number:=(RS_I0+nr) shl 8;
+            rg.ungetregisterint(list,r);
+          end;
+      end;
+
+
     function GetParaLoc(p:TDef):TCGLoc;
     function GetParaLoc(p:TDef):TCGLoc;
       begin
       begin
         { Later, the LOC_REFERENCE is in most cases changed into
         { Later, the LOC_REFERENCE is in most cases changed into
@@ -312,7 +332,10 @@ begin
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.20  2003-06-09 21:44:14  mazen
+  Revision 1.21  2003-06-17 16:36:59  peter
+    * freeintparaloc
+
+  Revision 1.20  2003/06/09 21:44:14  mazen
   * fix compile problem related to modification
   * fix compile problem related to modification
     of the declareation of GetIntParaLoc in the
     of the declareation of GetIntParaLoc in the
     ancestor's declaration
     ancestor's declaration