소스 검색

+ resetregistercount, resetusableregisters

peter 27 년 전
부모
커밋
6b807957b1
2개의 변경된 파일77개의 추가작업 그리고 12개의 파일을 삭제
  1. 34 6
      compiler/tgen68k.pas
  2. 43 6
      compiler/tgeni386.pas

+ 34 - 6
compiler/tgen68k.pas

@@ -65,6 +65,9 @@ unit tgen68k;
     procedure pushusedregisters(var pushed : tpushed;b : word);
     procedure popusedregisters(const pushed : tpushed);
 
+    procedure clearregistercount;
+    procedure resetusableregisters;
+
     var
        unused,usableregs : tregisterset;
        c_usableregs : longint;
@@ -298,16 +301,41 @@ unit tgen68k;
          usableaddress:=getusableaddr;
       end;
 
+
+   procedure clearregistercount;
+     var
+       regi : tregister;
+     begin
+       for regi:=R_D0 to R_A6 do
+         begin
+           reg_pushes[regi]:=0;
+           is_reg_var[regi]:=false;
+         end;
+     end;
+
+
+
+   procedure resetusableregisters;
+     begin
+       usableregs:=[R_D0,R_D1,R_D2,R_D3,R_D4,R_D5,R_D6,R_D7,R_A0,R_A1,R_A2,R_A3,R_A4,
+             R_FP0,R_FP1,R_FP2,R_FP3,R_FP4,R_FP5,R_FP6,R_FP7];
+       c_usableregs:=4;
+       usableaddress:=3;
+       usablefloatreg:=6;
+     end;
+
+
+
+
 begin
-   { contains both information on Address registers and data registers }
-   { even if they are allocated separately.                            }
-   usableregs:=[R_D0,R_D1,R_D2,R_D3,R_D4,R_D5,R_D6,R_D7,R_A0,R_A1,R_A2,R_A3,R_A4,
-               R_FP0,R_FP1,R_FP2,R_FP3,R_FP4,R_FP5,R_FP6,R_FP7];
-   c_usableregs:=4;
+  resetusableregisters;
 end.
 {
   $Log$
-  Revision 1.3  1998-08-31 12:26:35  peter
+  Revision 1.4  1998-09-01 09:03:48  peter
+    + resetregistercount, resetusableregisters
+
+  Revision 1.3  1998/08/31 12:26:35  peter
     * m68k and palmos updates from surebugfixes
 
   Revision 1.2  1998/06/08 13:13:46  pierre

+ 43 - 6
compiler/tgeni386.pas

@@ -60,6 +60,9 @@ unit tgeni386;
     procedure pushusedregisters(var pushed : tpushed;b : byte);
     procedure popusedregisters(const pushed : tpushed);
 
+    procedure clearregistercount;
+    procedure resetusableregisters;
+
     var
        unused,usableregs : tregisterset;
        c_usableregs : longint;
@@ -76,7 +79,9 @@ unit tgeni386;
        reg_pushes : array[R_EAX..R_EDI] of longint;
        is_reg_var : array[R_EAX..R_EDI] of boolean;
 {$endif SUPPORT_MMX}
-  implementation
+
+
+implementation
 
     procedure pushusedregisters(var pushed : tpushed;b : byte);
 
@@ -304,16 +309,48 @@ unit tgeni386;
       end;
 
 
-begin
-   usableregs:=[R_EAX,R_EBX,R_ECX,R_EDX];
+   procedure clearregistercount;
+      var
+        regi : tregister;
+      begin
+{$ifdef SUPPORT_MMX}
+         for regi:=R_EAX to R_MM6 do
+           begin
+              reg_pushes[regi]:=0;
+              is_reg_var[regi]:=false;
+           end;
+{$else SUPPORT_MMX}
+         for regi:=R_EAX to R_EDI do
+           begin
+              reg_pushes[regi]:=0;
+              is_reg_var[regi]:=false;
+           end;
+{$endif SUPPORT_MMX}
+      end;
+
+
+
+   procedure resetusableregisters;
+      begin
 {$ifdef SUPPORT_MMX}
-   usableregs:=usableregs+[R_MM0..R_MM6];
+        usableregs:=[R_EAX,R_EBX,R_ECX,R_EDX,R_MM0..R_MM6];
+        c_usableregs:=4;
+        usableregmmx:=8;
+{$else} 
+        usableregs:=[R_EAX,R_EBX,R_ECX,R_EDX];
+        c_usableregs:=4;
 {$endif SUPPORT_MMX}
-   c_usableregs:=4;
+      end;
+
+begin
+  resetusableregisters;
 end.
 {
   $Log$
-  Revision 1.9  1998-08-19 16:07:56  jonas
+  Revision 1.10  1998-09-01 09:03:47  peter
+    + resetregistercount, resetusableregisters
+
+  Revision 1.9  1998/08/19 16:07:56  jonas
     * changed optimizer switches + cleanup of DestroyRefs in daopt386.pas
 
   Revision 1.8  1998/08/10 14:50:34  peter