Browse Source

+ make use of the Reg1WriteOverwritesReg2Entirely and Reg1ReadDependsOnReg2
instead of SuperRegistersEqual in TX86AsmOptimizer.RegLoadedWithNewValue, so
it returns correct information for the 16-bit and 8-bit subregisters
(including AH,BH,CH and DH)

git-svn-id: trunk@36066 -

nickysn 8 years ago
parent
commit
1f5aec6d3d
1 changed files with 5 additions and 5 deletions
  1. 5 5
      compiler/x86/aoptx86.pas

+ 5 - 5
compiler/x86/aoptx86.pas

@@ -427,18 +427,18 @@ unit aoptx86;
             (p.opcode = A_MOVAPS)) and
            (p.ops=2) and  { A_MOVSD can have zero operands, so this check is needed }
            (p.oper[1]^.typ = top_reg) and
-           (SuperRegistersEqual(p.oper[1]^.reg,reg)) and
+           (Reg1WriteOverwritesReg2Entirely(p.oper[1]^.reg,reg)) and
            ((p.oper[0]^.typ = top_const) or
             ((p.oper[0]^.typ = top_reg) and
-             not(SuperRegistersEqual(p.oper[0]^.reg,reg))) or
+             not(Reg1ReadDependsOnReg2(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
-           (SuperRegistersEqual(p.oper[0]^.reg,reg))) or
+           (Reg1WriteOverwritesReg2Entirely(p.oper[0]^.reg,reg))) or
           ((p.opcode = A_IMUL) and
            (p.ops=3) and
-           (SuperRegistersEqual(p.oper[2]^.reg,reg)) and
-           not((SuperRegistersEqual(p.oper[1]^.reg,reg))));
+           (Reg1WriteOverwritesReg2Entirely(p.oper[2]^.reg,reg)) and
+           not((Reg1ReadDependsOnReg2(p.oper[1]^.reg,reg))));
       end;