+ Allow replace spilling for "opcode register,const" and "opcode const,register"

git-svn-id: trunk@7183 -
This commit is contained in:
daniel 2007-04-28 19:11:17 +00:00
parent abfa85563f
commit f3660976bc

View File

@ -111,6 +111,11 @@ implementation
function trgx86.do_spill_replace(list:TAsmList;instr:taicpu;orgreg:tsuperregister;const spilltemp:treference):boolean; function trgx86.do_spill_replace(list:TAsmList;instr:taicpu;orgreg:tsuperregister;const spilltemp:treference):boolean;
{Decide wether a "replace" spill is possible, i.e. wether we can replace a register
in an instruction by a memory reference. For example, in "mov ireg26d,0", the imaginary
register ireg26d can be replaced by a memory reference.}
var var
replaceoper : longint; replaceoper : longint;
begin begin
@ -146,7 +151,26 @@ implementation
(get_alias(getsupreg(oper[1]^.reg))=orgreg) then (get_alias(getsupreg(oper[1]^.reg))=orgreg) then
replaceoper:=1 replaceoper:=1
else else
internalerror(200410106); internalerror(200704281);
end;
if (oper[0]^.typ=top_reg) and
(oper[1]^.typ=top_const) then
begin
if (getregtype(oper[0]^.reg)=regtype) and
(get_alias(getsupreg(oper[0]^.reg))=orgreg) then
replaceoper:=0
else
internalerror(200704282);
end;
if (oper[0]^.typ=top_const) and
(oper[1]^.typ=top_reg) then
begin
if (getregtype(oper[1]^.reg)=regtype) and
(get_alias(getsupreg(oper[1]^.reg))=orgreg) then
replaceoper:=1
else
internalerror(200704283);
end;
case replaceoper of case replaceoper of
0 : 0 :
begin begin
@ -212,7 +236,6 @@ implementation
end; end;
end; end;
end; end;
end;
{ Replace register with spill reference } { Replace register with spill reference }
if replaceoper<>-1 then if replaceoper<>-1 then