* 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 -
This commit is contained in:
florian 2016-10-20 18:32:23 +00:00
parent 0c75c760bf
commit 781d6f31a8

View File

@ -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;