mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-23 17:49:43 +02:00
* always use 16-bit pushes for pushing/popping the segment registers on i8086 in Tcgx86.g_concatcopy
git-svn-id: trunk@24735 -
This commit is contained in:
parent
4f67d25a6a
commit
c9c882c30a
@ -1850,16 +1850,19 @@ unit cgx86;
|
||||
REGSI=NR_RSI;
|
||||
REGDI=NR_RDI;
|
||||
copy_len_sizes = [1, 2, 4, 8];
|
||||
push_segment_size = S_L;
|
||||
{$elseif defined(cpu32bitalu)}
|
||||
REGCX=NR_ECX;
|
||||
REGSI=NR_ESI;
|
||||
REGDI=NR_EDI;
|
||||
copy_len_sizes = [1, 2, 4];
|
||||
push_segment_size = S_L;
|
||||
{$elseif defined(cpu16bitalu)}
|
||||
REGCX=NR_CX;
|
||||
REGSI=NR_SI;
|
||||
REGDI=NR_DI;
|
||||
copy_len_sizes = [1, 2];
|
||||
push_segment_size = S_W;
|
||||
{$endif}
|
||||
|
||||
type copymode=(copy_move,copy_mmx,copy_string);
|
||||
@ -1979,8 +1982,8 @@ unit cgx86;
|
||||
begin
|
||||
a_loadaddr_ref_reg(list,dest,REGDI);
|
||||
{$ifdef volatile_es}
|
||||
list.concat(taicpu.op_reg(A_PUSH,S_L,NR_DS));
|
||||
list.concat(taicpu.op_reg(A_POP,S_L,NR_ES));
|
||||
list.concat(taicpu.op_reg(A_PUSH,push_segment_size,NR_DS));
|
||||
list.concat(taicpu.op_reg(A_POP,push_segment_size,NR_ES));
|
||||
{$endif volatile_es}
|
||||
end
|
||||
else
|
||||
@ -1989,10 +1992,10 @@ unit cgx86;
|
||||
dstref.segment:=NR_NO;
|
||||
a_loadaddr_ref_reg(list,dstref,REGDI);
|
||||
{$ifndef volatile_es}
|
||||
list.concat(taicpu.op_reg(A_PUSH,S_L,NR_ES));
|
||||
list.concat(taicpu.op_reg(A_PUSH,push_segment_size,NR_ES));
|
||||
{$endif not volatile_es}
|
||||
list.concat(taicpu.op_reg(A_PUSH,S_L,dest.segment));
|
||||
list.concat(taicpu.op_reg(A_POP,S_L,NR_ES));
|
||||
list.concat(taicpu.op_reg(A_PUSH,push_segment_size,dest.segment));
|
||||
list.concat(taicpu.op_reg(A_POP,push_segment_size,NR_ES));
|
||||
end;
|
||||
getcpuregister(list,REGSI);
|
||||
if (source.segment=NR_NO) then
|
||||
@ -2054,10 +2057,10 @@ unit cgx86;
|
||||
ungetcpuregister(list,REGSI);
|
||||
ungetcpuregister(list,REGDI);
|
||||
if (source.segment<>NR_NO) then
|
||||
list.concat(taicpu.op_reg(A_POP,S_L,NR_DS));
|
||||
list.concat(taicpu.op_reg(A_POP,push_segment_size,NR_DS));
|
||||
{$ifndef volatile_es}
|
||||
if (dest.segment<>NR_NO) then
|
||||
list.concat(taicpu.op_reg(A_POP,S_L,NR_ES));
|
||||
list.concat(taicpu.op_reg(A_POP,push_segment_size,NR_ES));
|
||||
{$endif not volatile_es}
|
||||
end;
|
||||
end;
|
||||
|
Loading…
Reference in New Issue
Block a user