* allow mov to smaller sizes

This commit is contained in:
peter 2004-02-20 16:01:49 +00:00
parent 4fcace5406
commit fad88e2c7c

View File

@ -604,7 +604,7 @@ unit cgx86;
begin
check_register_size(tosize,reg);
sizes2load(fromsize,tosize,op,s);
{$ifdef x86_64}
{$ifdef x86_64}
{ zero extensions to 64 bit on the x86_64 are simply done by writting to the lower 32 bit
which clears the upper 64 bit too, so it could be that s is S_L while the reg is
64 bit (FK) }
@ -623,7 +623,14 @@ unit cgx86;
begin
check_register_size(fromsize,reg1);
check_register_size(tosize,reg2);
sizes2load(fromsize,tosize,op,s);
if tcgsize2size[fromsize]>tcgsize2size[tosize] then
begin
reg1:=makeregsize(reg1,tosize);
s:=tcgsize2opsize[tosize];
op:=A_MOV;
end
else
sizes2load(fromsize,tosize,op,s);
{$ifdef x86_64}
{ zero extensions to 64 bit on the x86_64 are simply done by writting to the lower 32 bit
which clears the upper 64 bit too, so it could be that s is S_L while the reg is
@ -1040,7 +1047,7 @@ unit cgx86;
OP_SHR,OP_SHL,OP_SAR:
begin
getexplicitregister(list,NR_CL);
a_load_reg_reg(list,size,OS_8,dst,NR_CL);
a_load_reg_reg(list,OS_8,OS_8,makeregsize(dst,OS_8),NR_CL);
list.concat(taicpu.op_reg_reg(Topcg2asmop[op],S_B,src,NR_CL));
ungetregister(list,NR_CL);
end;
@ -1880,7 +1887,10 @@ unit cgx86;
end.
{
$Log$
Revision 1.110 2004-02-09 22:14:17 peter
Revision 1.111 2004-02-20 16:01:49 peter
* allow mov to smaller sizes
Revision 1.110 2004/02/09 22:14:17 peter
* more x86_64 parameter fixes
* tparalocation.lochigh is now used to indicate if registerhigh
is used and what the type is