* make use of xor reg,reg by generating it directly instead of hoping for the peephole

optimizer which cannot do this properly due to missing information about flags. By doing
  so the size of the compiler executable gets reduced by ~1 %

git-svn-id: trunk@33524 -
This commit is contained in:
florian 2016-04-15 19:27:22 +00:00
parent 2dbcdbe466
commit f576b0c01b
2 changed files with 4 additions and 13 deletions

View File

@ -453,16 +453,6 @@ begin
hp1.free;
end;
end;
A_XOR:
if (taicpu(p).oper[0]^.typ = top_reg) and
(taicpu(p).oper[1]^.typ = top_reg) and
(taicpu(p).oper[0]^.reg = taicpu(p).oper[1]^.reg) then
{ temporarily change this to 'mov reg,0' to make it easier }
{ for the CSE. Will be changed back in pass 2 }
begin
taicpu(p).opcode := A_MOV;
taicpu(p).loadConst(0,0);
end;
end;
end;
end;

View File

@ -909,9 +909,10 @@ unit cgx86;
begin
check_register_size(tosize,reg);
{ the optimizer will change it to "xor reg,reg" when loading zero, }
{ no need to do it here too (JM) }
list.concat(taicpu.op_const_reg(A_MOV,TCGSize2OpSize[tosize],a,reg))
if a=0 then
list.concat(taicpu.op_reg_reg(A_XOR,TCGSize2OpSize[tosize],reg,reg))
else
list.concat(taicpu.op_const_reg(A_MOV,TCGSize2OpSize[tosize],a,reg));
end;