Explorar o código

* check register type to not mixup sse registers

git-svn-id: trunk@7505 -
peter %!s(int64=18) %!d(string=hai) anos
pai
achega
e1132f8fe1
Modificáronse 2 ficheiros con 4 adicións e 1 borrados
  1. 2 1
      compiler/i386/csopt386.pas
  2. 2 0
      compiler/i386/daopt386.pas

+ 2 - 1
compiler/i386/csopt386.pas

@@ -85,7 +85,8 @@ begin
       if p.oper[1]^.typ = top_ref then
         for regCounter := RS_EAX to RS_EDI do
           begin
-            if p.oper[0]^.typ<>top_reg then
+            if (p.oper[0]^.typ<>top_reg) or
+               (getregtype(p.oper[0]^.reg) <> R_INTREGISTER) then
                break;
             if writeToMemDestroysContents(getsupreg(p.oper[0]^.reg),p.oper[1]^.ref^,
                  regCounter,topsize2tcgsize[p.opsize],c[regCounter],dummy) then

+ 2 - 0
compiler/i386/daopt386.pas

@@ -1901,6 +1901,7 @@ begin
   case op.typ of
     top_reg:
       writeDestroysContents :=
+        (getregtype(op.reg) = R_INTREGISTER) and
         writeToRegDestroysContents(getsupreg(op.reg),supreg,c);
     top_ref:
       writeDestroysContents :=
@@ -2097,6 +2098,7 @@ begin
             labeltable^[tai_label(p).labsym.labelnr-lolab].taiobj := p;
 {$ifdef i386}
         ait_regalloc:
+         if (getregtype(tai_regalloc(p).reg) = R_INTREGISTER) then
           begin
             supreg:=getsupreg(tai_regalloc(p).reg);
             case tai_regalloc(p).ratype of