mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-12 11:06:19 +02:00
* allow mov to smaller sizes
This commit is contained in:
parent
4fcace5406
commit
fad88e2c7c
@ -604,7 +604,7 @@ unit cgx86;
|
|||||||
begin
|
begin
|
||||||
check_register_size(tosize,reg);
|
check_register_size(tosize,reg);
|
||||||
sizes2load(fromsize,tosize,op,s);
|
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
|
{ 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
|
which clears the upper 64 bit too, so it could be that s is S_L while the reg is
|
||||||
64 bit (FK) }
|
64 bit (FK) }
|
||||||
@ -623,7 +623,14 @@ unit cgx86;
|
|||||||
begin
|
begin
|
||||||
check_register_size(fromsize,reg1);
|
check_register_size(fromsize,reg1);
|
||||||
check_register_size(tosize,reg2);
|
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}
|
{$ifdef x86_64}
|
||||||
{ zero extensions to 64 bit on the x86_64 are simply done by writting to the lower 32 bit
|
{ 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
|
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:
|
OP_SHR,OP_SHL,OP_SAR:
|
||||||
begin
|
begin
|
||||||
getexplicitregister(list,NR_CL);
|
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));
|
list.concat(taicpu.op_reg_reg(Topcg2asmop[op],S_B,src,NR_CL));
|
||||||
ungetregister(list,NR_CL);
|
ungetregister(list,NR_CL);
|
||||||
end;
|
end;
|
||||||
@ -1880,7 +1887,10 @@ unit cgx86;
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$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
|
* more x86_64 parameter fixes
|
||||||
* tparalocation.lochigh is now used to indicate if registerhigh
|
* tparalocation.lochigh is now used to indicate if registerhigh
|
||||||
is used and what the type is
|
is used and what the type is
|
||||||
|
Loading…
Reference in New Issue
Block a user