瀏覽代碼

* fixed internalerror when cycling with -O3p3u

Jonas Maebe 20 年之前
父節點
當前提交
b2869b3c75
共有 1 個文件被更改,包括 11 次插入3 次删除
  1. 11 3
      compiler/i386/csopt386.pas

+ 11 - 3
compiler/i386/csopt386.pas

@@ -845,9 +845,9 @@ end;
 procedure RestoreRegContentsTo(supreg: tsuperregister; const c: TContent; p, endP: tai);
 procedure RestoreRegContentsTo(supreg: tsuperregister; const c: TContent; p, endP: tai);
 var
 var
 {$ifdef replaceregdebug}
 {$ifdef replaceregdebug}
-  hp: tai;
   l: longint;
   l: longint;
 {$endif replaceregdebug}
 {$endif replaceregdebug}
+  hp: tai;
   dummyregs: tregset;
   dummyregs: tregset;
   tmpState, newrstate: byte;
   tmpState, newrstate: byte;
   prevcontenttyp: byte;
   prevcontenttyp: byte;
@@ -878,7 +878,12 @@ begin
     end;
     end;
   tmpState := ptaiprop(p.optinfo)^.Regs[supreg].wState;
   tmpState := ptaiprop(p.optinfo)^.Regs[supreg].wState;
   if (newrstate = ptaiprop(p.optinfo)^.Regs[supreg].rState) then
   if (newrstate = ptaiprop(p.optinfo)^.Regs[supreg].rState) then
-    internalerror(2004101012);
+    begin
+      incstate(ptaiprop(p.optinfo)^.regs[supreg].rstate,63);
+      if getnextinstruction(p,hp) and
+         (ptaiprop(hp.optinfo)^.regs[supreg].rstate = ptaiprop(p.optinfo)^.regs[supreg].rstate) then
+        internalerror(2004122710);
+     end;
   dummyregs := [supreg];
   dummyregs := [supreg];
   repeat
   repeat
     newrstate := ptaiprop(p.optinfo)^.Regs[supreg].rState;
     newrstate := ptaiprop(p.optinfo)^.Regs[supreg].rState;
@@ -2177,7 +2182,10 @@ end.
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.70  2004-12-18 15:16:10  jonas
+  Revision 1.71  2004-12-27 15:20:03  jonas
+    * fixed internalerror when cycling with -O3p3u
+
+  Revision 1.70  2004/12/18 15:16:10  jonas
     * fixed tracking of usage of flags register
     * fixed tracking of usage of flags register
     * fixed destroying of "memwrite"'s
     * fixed destroying of "memwrite"'s
     * fixed checking of entire sequences in all cases (previously this was
     * fixed checking of entire sequences in all cases (previously this was