Jelajahi Sumber

* allocpara/freepara 64bit support

peter 22 tahun lalu
induk
melakukan
b489c2d65e
1 mengubah file dengan 27 tambahan dan 9 penghapusan
  1. 27 9
      compiler/paramgr.pas

+ 27 - 9
compiler/paramgr.pas

@@ -77,7 +77,7 @@ unit paramgr;
             @param(list Current assembler list)
             @param(nr Parameter number of routine, starting from 1)
           }
-          procedure freeintparaloc(list: taasmoutput; nr : longint); virtual;
+          procedure freeintparaloc(list: taasmoutput; nr : longint); virtual; abstract;
 
 
           {# allocate a parameter location created with create_param_loc_info
@@ -269,16 +269,21 @@ implementation
       end;
 
 
-    procedure tparamanager.freeintparaloc(list: taasmoutput; nr : longint);
-      begin
-      end;
-
-
     procedure tparamanager.allocparaloc(list: taasmoutput; const loc: tparalocation);
       begin
         case loc.loc of
           LOC_REGISTER, LOC_CREGISTER:
-            rg.getexplicitregisterint(list,loc.register.number);
+            begin
+{$ifndef cpu64bit}
+              if (loc.size in [OS_64,OS_S64]) then
+                begin
+                  rg.getexplicitregisterint(list,loc.registerhigh.number);
+                  rg.getexplicitregisterint(list,loc.registerlow.number);
+                end
+              else
+{$endif cpu64bit}
+                rg.getexplicitregisterint(list,loc.register.number);
+            end;
           LOC_FPUREGISTER, LOC_CFPUREGISTER:
             rg.getexplicitregisterfpu(list,loc.register.enum);
           LOC_REFERENCE,LOC_CREFERENCE:
@@ -293,7 +298,17 @@ implementation
       begin
         case loc.loc of
           LOC_REGISTER, LOC_CREGISTER:
-            rg.ungetregisterint(list,loc.register);
+            begin
+{$ifndef cpu64bit}
+              if (loc.size in [OS_64,OS_S64]) then
+                begin
+                  rg.ungetregisterint(list,loc.registerhigh);
+                  rg.ungetregisterint(list,loc.registerlow);
+                end
+              else
+{$endif cpu64bit}
+                rg.ungetregisterint(list,loc.register);
+            end;
           LOC_FPUREGISTER, LOC_CFPUREGISTER:
             rg.ungetregisterfpu(list,loc.register,loc.size);
           LOC_REFERENCE,LOC_CREFERENCE:
@@ -414,7 +429,10 @@ end.
 
 {
    $Log$
-   Revision 1.45  2003-06-13 21:19:30  peter
+   Revision 1.46  2003-06-17 16:32:03  peter
+     * allocpara/freepara 64bit support
+
+   Revision 1.45  2003/06/13 21:19:30  peter
      * current_procdef removed, use current_procinfo.procdef instead
 
    Revision 1.44  2003/06/12 21:11:10  peter