mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-06-01 09:42:39 +02:00
* fixed edi allocation in allocRegBetween
* fixed bug I introduced yesterday, added comment to prevent it from happening again in the future
This commit is contained in:
parent
674a208dbf
commit
bee612f94a
@ -220,7 +220,7 @@ Procedure AllocRegBetween(AsmL: PAasmOutput; Reg: TRegister; p1, p2: Pai);
|
||||
{ the type of p1 and p2 must not be in SkipInstr }
|
||||
var hp: pai;
|
||||
Begin
|
||||
If not(reg in usableregs) or
|
||||
If not(reg in usableregs+[R_EDI,R_ESI]) or
|
||||
not(assigned(p1)) Then
|
||||
{ this happens with registers which are loaded implicitely, outside the }
|
||||
{ current block (e.g. esi with self) }
|
||||
@ -774,9 +774,9 @@ begin
|
||||
if assigned(hp^.next) then
|
||||
hp^.next^.previous := hp;
|
||||
{$endif replaceregdebug}
|
||||
ReplaceReg := true;
|
||||
replaceReg := true;
|
||||
returnEndP := endP;
|
||||
hp := p;
|
||||
getNextInstruction(p,hp);
|
||||
while hp <> endP do
|
||||
begin
|
||||
if not(PPaiProp(hp^.optInfo)^.canBeRemoved) and
|
||||
@ -796,7 +796,7 @@ begin
|
||||
If RegLoadedWithNewValue(newReg,true,endP) then
|
||||
GetLastInstruction(endP,hp)
|
||||
else hp := endP;
|
||||
if (p <> endp) or
|
||||
if (p <> endp) or
|
||||
not RegLoadedWithNewValue(newReg,true,endP) then
|
||||
RestoreRegContentsTo(newReg, c ,p, hp);
|
||||
{ In both case a and b, it is possible that the new register was modified }
|
||||
@ -1082,13 +1082,14 @@ Begin
|
||||
top_Reg:
|
||||
{ try to replace the new reg with the old reg }
|
||||
if (paicpu(p)^.opcode = A_MOV) and
|
||||
getLastInstruction(p,hp4) and
|
||||
getNextInstruction(p,hp3) then
|
||||
getLastInstruction(p,hp4) then
|
||||
begin
|
||||
Case paicpu(p)^.oper[1].typ of
|
||||
top_Reg:
|
||||
{ we only have to start replacing from the instruction after the mov, }
|
||||
{ but replacereg only starts with getnextinstruction(p,p) }
|
||||
if ReplaceReg(paicpu(p)^.oper[0].reg,
|
||||
paicpu(p)^.oper[1].reg,hp3,
|
||||
paicpu(p)^.oper[1].reg,p,
|
||||
PPaiProp(hp4^.optInfo)^.Regs[paicpu(p)^.oper[1].reg],false,hp1) then
|
||||
begin
|
||||
PPaiProp(p^.optInfo)^.canBeRemoved := true;
|
||||
@ -1193,7 +1194,12 @@ End.
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.48 2000-02-11 23:50:03 jonas
|
||||
Revision 1.49 2000-02-12 10:54:18 jonas
|
||||
* fixed edi allocation in allocRegBetween
|
||||
* fixed bug I introduced yesterday, added comment to prevent it from
|
||||
happening again in the future
|
||||
|
||||
Revision 1.48 2000/02/11 23:50:03 jonas
|
||||
* fixed crashing bug under Dos with -dnewoptimizations (found it,
|
||||
John!). Don't understand why it didn't crash under Linux :(
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user