Browse Source

* more getsupreg(...)<>/=getsupreg(...) replaced by SuperRegisterEqual which is more safe, the former could break as the register could have different register types

git-svn-id: trunk@34746 -
florian 8 năm trước cách đây
mục cha
commit
781d6f31a8
1 tập tin đã thay đổi với 5 bổ sung5 xóa
  1. 5 5
      compiler/x86/aoptx86.pas

+ 5 - 5
compiler/x86/aoptx86.pas

@@ -272,8 +272,8 @@ unit aoptx86;
               if assigned(p1) and
                  (p1.typ = ait_regalloc) then
                 begin
-                  if (getregtype(reg)=getregtype(tai_regalloc(p1).reg)) and
-                    (getsupreg(tai_regalloc(p1).reg)=getsupreg(reg)) and (tai_regalloc(p1).reg<>reg) then
+                  { same super register, different sub register? }
+                  if SuperRegistersEqual(reg,tai_regalloc(p1).reg) and (tai_regalloc(p1).reg<>reg) then
                     begin
                       if (getsubreg(tai_regalloc(p1).reg)>getsubreg(reg)) or (getsubreg(reg)=R_SUBH) then
                         internalerror(2016101501);
@@ -342,14 +342,14 @@ unit aoptx86;
             (p.opcode = A_MOVAPD) or
             (p.opcode = A_MOVAPS)) and
            (p.oper[1]^.typ = top_reg) and
-           (getsupreg(p.oper[1]^.reg) = getsupreg(reg)) and
+           (SuperRegistersEqual(p.oper[1]^.reg,reg)) and
            ((p.oper[0]^.typ = top_const) or
             ((p.oper[0]^.typ = top_reg) and
-             (getsupreg(p.oper[0]^.reg) <> getsupreg(reg))) or
+             not(SuperRegistersEqual(p.oper[0]^.reg,reg))) or
             ((p.oper[0]^.typ = top_ref) and
              not RegInRef(reg,p.oper[0]^.ref^)))) or
           ((p.opcode = A_POP) and
-           (getsupreg(p.oper[0]^.reg) = getsupreg(reg)));
+           (SuperRegistersEqual(p.oper[0]^.reg,reg)));
       end;