mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-17 06:19:28 +02:00
* fixed dword -> qword/int64 type cast on x86_64
This commit is contained in:
parent
992876d041
commit
e94fe45846
@ -601,9 +601,28 @@ unit cgx86;
|
||||
{$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) }
|
||||
64 bit (FK)
|
||||
but we shouldn't allow the reg. allocator to remove the instruction in this case (FK)
|
||||
}
|
||||
if s in [S_BL,S_WL,S_L] then
|
||||
reg2:=makeregsize(list,reg2,OS_32);
|
||||
begin
|
||||
reg2:=makeregsize(list,reg2,OS_32);
|
||||
list.concat(taicpu.op_reg_reg(op,s,reg1,reg2));
|
||||
if fromsize<tosize then
|
||||
begin
|
||||
case s of
|
||||
S_BL:
|
||||
list.concat(taicpu.op_const_reg(A_AND,S_L,$ff,reg2));
|
||||
S_WL:
|
||||
list.concat(taicpu.op_const_reg(A_AND,S_L,$ffff,reg2));
|
||||
S_L:
|
||||
list.concat(taicpu.op_const_reg(A_AND,S_L,$ffffffff,reg2));
|
||||
else
|
||||
internalerror(200502051);
|
||||
end;
|
||||
end;
|
||||
end
|
||||
else
|
||||
{$endif x86_64}
|
||||
if (reg1<>reg2) then
|
||||
begin
|
||||
@ -1740,7 +1759,10 @@ unit cgx86;
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.142 2005-01-25 18:48:15 peter
|
||||
Revision 1.143 2005-02-05 18:08:48 florian
|
||||
* fixed dword -> qword/int64 type cast on x86_64
|
||||
|
||||
Revision 1.142 2005/01/25 18:48:15 peter
|
||||
* tf_pic_uses_got added
|
||||
|
||||
Revision 1.141 2005/01/08 16:00:55 florian
|
||||
|
Loading…
Reference in New Issue
Block a user