diff --git a/compiler/tgen68k.pas b/compiler/tgen68k.pas index ecac392ffe..e284900cd4 100644 --- a/compiler/tgen68k.pas +++ b/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 diff --git a/compiler/tgeni386.pas b/compiler/tgeni386.pas index 662a2fec7f..f55362d90b 100644 --- a/compiler/tgeni386.pas +++ b/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} - usableregs:=usableregs+[R_MM0..R_MM6]; + 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} - c_usableregs:=4; + end; + + + + procedure resetusableregisters; + begin +{$ifdef SUPPORT_MMX} + 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} + 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