mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-09 23:46:00 +02:00
* allow mov to smaller sizes
This commit is contained in:
parent
4fcace5406
commit
fad88e2c7c
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user