* reorganize Tcgx86.g_concatcopy

This commit is contained in:
florian 2024-05-17 21:39:18 +02:00
parent b826ad8b7e
commit e29d1ecda9

View File

@ -2759,14 +2759,14 @@ unit cgx86;
{$endif}
type
copymode=(copy_move,copy_mmx,copy_string,copy_mm,copy_avx,copy_avx512);
tcopymode=(copy_mov,copy_mmx,copy_string,copy_mm,copy_avx,copy_avx512,copy_fpc_move);
var srcref,dstref,tmpref:Treference;
r,r0,r1,r2,r3:Tregister;
helpsize:tcgint;
copysize:byte;
cgsize:Tcgsize;
cm:copymode;
cm:tcopymode;
saved_ds,saved_es: Boolean;
hlist: TAsmList;
@ -2813,7 +2813,7 @@ unit cgx86;
dstref.base:=r;
end;
{$endif x86_64}
cm:=copy_move;
cm:=copy_mov;
helpsize:=3*sizeof(aword);
if cs_opt_size in current_settings.optimizerswitches then
helpsize:=2*sizeof(aword);
@ -2848,6 +2848,12 @@ unit cgx86;
else
if len>helpsize then
cm:=copy_string;
if (cm=copy_string) and not(CPUX86_HINT_FAST_SHORT_REP_MOVS in cpu_optimization_hints[current_settings.optimizecputype]) and
{ we can use the move variant only if the subroutine does another call }
(pi_do_call in current_procinfo.flags) then
cm:=copy_fpc_move;
if (cs_opt_size in current_settings.optimizerswitches) and
not((len<=16) and (cm in [copy_mmx,copy_mm,copy_avx])) and
not(len in copy_len_sizes) then
@ -2859,7 +2865,7 @@ unit cgx86;
cm:=copy_string;
{$endif not i8086}
case cm of
copy_move:
copy_mov:
begin
copysize:=sizeof(aint);
cgsize:=int_cgsize(copysize);
@ -3047,11 +3053,9 @@ unit cgx86;
end;
list.concatList(hlist);
hlist.free;
end
else if (CPUX86_HINT_FAST_SHORT_REP_MOVS in cpu_optimization_hints[current_settings.optimizecputype]) or
{ we can use the move variant only if the subroutine does another call }
not(pi_do_call in current_procinfo.flags) then
{ copy_string, should be a good fallback in case of unhandled if short rep movs are fast }
end;
copy_string:
begin
getcpuregister(list,REGDI);
if (dstref.segment=NR_NO) and