* 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:
Jonas Maebe 2000-02-12 10:54:18 +00:00
parent 674a208dbf
commit bee612f94a

View File

@ -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 :(