mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-21 08:49:26 +02:00
* fixed another problem with readln(<floating point register variable>);
* the register allocator takes now care of necessary pushes/pops for readln/writeln
This commit is contained in:
parent
e6f4922ad6
commit
ff5b72e3bd
@ -101,7 +101,12 @@ implementation
|
||||
emit_reg(op,opsize,correct_fpuregister(dest^.location.register,fpuvaroffset+1));
|
||||
end
|
||||
else
|
||||
floatstore(PFloatDef(dest^.resulttype)^.typ,dest^.location.reference);
|
||||
begin
|
||||
floatstore(PFloatDef(dest^.resulttype)^.typ,dest^.location.reference);
|
||||
{ floatstore decrements the fpu var offset }
|
||||
{ but in fact we didn't increment it }
|
||||
inc(fpuvaroffset);
|
||||
end;
|
||||
orddef:
|
||||
begin
|
||||
if is_64bitint(dest^.resulttype) then
|
||||
@ -1520,7 +1525,12 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.97 2000-04-02 17:47:47 florian
|
||||
Revision 1.98 2000-04-02 18:30:11 florian
|
||||
* fixed another problem with readln(<floating point register variable>);
|
||||
* the register allocator takes now care of necessary pushes/pops for
|
||||
readln/writeln
|
||||
|
||||
Revision 1.97 2000/04/02 17:47:47 florian
|
||||
* readln(r); works now, if r is a fpu register variable
|
||||
|
||||
Revision 1.96 2000/03/31 22:56:46 pierre
|
||||
|
@ -132,9 +132,6 @@ implementation
|
||||
{ Boolean, wenn eine loadn kein Assembler erzeugt hat }
|
||||
simple_loadn : boolean;
|
||||
|
||||
{ tries to hold the amount of times which the current tree is processed }
|
||||
t_times : longint;
|
||||
|
||||
{ true, if an error while code generation occurs }
|
||||
codegenerror : boolean;
|
||||
|
||||
@ -160,7 +157,6 @@ implementation
|
||||
procedure codegen_newmodule;
|
||||
procedure codegen_newprocedure;
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
@ -449,7 +445,12 @@ end.
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.57 2000-02-18 20:53:14 pierre
|
||||
Revision 1.58 2000-04-02 18:30:12 florian
|
||||
* fixed another problem with readln(<floating point register variable>);
|
||||
* the register allocator takes now care of necessary pushes/pops for
|
||||
readln/writeln
|
||||
|
||||
Revision 1.57 2000/02/18 20:53:14 pierre
|
||||
* fixes a stabs problem for functions
|
||||
+ includes a stabs local var for with statements
|
||||
the name is with in lowercase followed by an index
|
||||
|
@ -503,8 +503,7 @@ implementation
|
||||
{$ifndef newcg}
|
||||
{ calc the correture value for the register }
|
||||
{$ifdef i386}
|
||||
for regi:=R_EAX to R_EDI do
|
||||
inc(reg_pushes[regi],t_times*2);
|
||||
incrementregisterpushed($ff);
|
||||
{$endif}
|
||||
{$ifdef m68k}
|
||||
for regi:=R_D0 to R_A6 do
|
||||
@ -1063,11 +1062,7 @@ implementation
|
||||
end;
|
||||
{$ifndef newcg}
|
||||
{$ifdef i386}
|
||||
for regi:=R_EAX to R_EDI do
|
||||
begin
|
||||
if (pprocdef(p^.procdefinition)^.usedregisters and ($80 shr word(regi)))<>0 then
|
||||
inc(reg_pushes[regi],t_times*2);
|
||||
end;
|
||||
incrementregisterpushed(pprocdef(p^.procdefinition)^.usedregisters);
|
||||
{$endif}
|
||||
{$ifdef m68k}
|
||||
for regi:=R_D0 to R_A6 do
|
||||
@ -1236,7 +1231,12 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.82 2000-02-29 22:13:41 pierre
|
||||
Revision 1.83 2000-04-02 18:30:12 florian
|
||||
* fixed another problem with readln(<floating point register variable>);
|
||||
* the register allocator takes now care of necessary pushes/pops for
|
||||
readln/writeln
|
||||
|
||||
Revision 1.82 2000/02/29 22:13:41 pierre
|
||||
+ use $GOTO ON
|
||||
|
||||
Revision 1.81 2000/02/24 18:41:39 peter
|
||||
|
@ -709,6 +709,7 @@ implementation
|
||||
hp:=p^.left;
|
||||
while assigned(hp) do
|
||||
begin
|
||||
incrementregisterpushed($ff);
|
||||
if (hp^.left^.treetype=typen) then
|
||||
CGMessage(type_e_cant_read_write_type);
|
||||
if assigned(hp^.left^.resulttype) then
|
||||
@ -1315,7 +1316,12 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.72 2000-03-27 09:42:50 pierre
|
||||
Revision 1.73 2000-04-02 18:30:12 florian
|
||||
* fixed another problem with readln(<floating point register variable>);
|
||||
* the register allocator takes now care of necessary pushes/pops for
|
||||
readln/writeln
|
||||
|
||||
Revision 1.72 2000/03/27 09:42:50 pierre
|
||||
+ add error if trying to use readln or writeln for files
|
||||
or read or write on untyped files.
|
||||
Reset and rewrite are still incompatible with BP
|
||||
|
@ -44,6 +44,10 @@ unit tgeni386;
|
||||
usableregmmx : byte = 8;
|
||||
{$endif SUPPORT_MMX}
|
||||
|
||||
var
|
||||
{ tries to hold the amount of times which the current tree is processed }
|
||||
t_times : longint;
|
||||
|
||||
{$ifdef TEMPREGDEBUG}
|
||||
procedure testregisters32;
|
||||
{$endif TEMPREGDEBUG}
|
||||
@ -71,6 +75,9 @@ unit tgeni386;
|
||||
procedure saveusedregisters(var saved : tsaved;b : byte);
|
||||
procedure restoreusedregisters(const saved : tsaved);
|
||||
|
||||
{ increments the push count of all registers in b}
|
||||
procedure incrementregisterpushed(b : byte);
|
||||
|
||||
procedure clearregistercount;
|
||||
procedure resetusableregisters;
|
||||
|
||||
@ -110,6 +117,19 @@ implementation
|
||||
uses
|
||||
globtype,temp_gen;
|
||||
|
||||
procedure incrementregisterpushed(b : byte);
|
||||
|
||||
var
|
||||
regi : tregister;
|
||||
|
||||
begin
|
||||
for regi:=R_EAX to R_EDI do
|
||||
begin
|
||||
if (b and ($80 shr word(regi)))<>0 then
|
||||
inc(reg_pushes[regi],t_times*2);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure pushusedregisters(var pushed : tpushed;b : byte);
|
||||
|
||||
var
|
||||
@ -631,7 +651,12 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.41 2000-02-10 11:27:18 jonas
|
||||
Revision 1.42 2000-04-02 18:30:12 florian
|
||||
* fixed another problem with readln(<floating point register variable>);
|
||||
* the register allocator takes now care of necessary pushes/pops for
|
||||
readln/writeln
|
||||
|
||||
Revision 1.41 2000/02/10 11:27:18 jonas
|
||||
* esi is never deallocated anymore in methods
|
||||
|
||||
Revision 1.40 2000/02/09 13:23:08 peter
|
||||
@ -684,5 +709,4 @@ end.
|
||||
Revision 1.28 1999/08/02 17:17:11 florian
|
||||
* small changes for the new code generator
|
||||
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user