mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-23 18:49:13 +02:00
* tcgaarch64.g_concatcopy calls tcgaarch64.g_concatcopy_move only if the current subroutine has pi_do_call set
* fixed copy loop in tcgaarch64.g_concatcopy if ldp/stp is used: fixed increment calculation and fixed tail length calculation
This commit is contained in:
parent
7e4753bebd
commit
e0a78c2485
@ -2500,7 +2500,8 @@ implementation
|
|||||||
if cs_opt_size in current_settings.optimizerswitches then
|
if cs_opt_size in current_settings.optimizerswitches then
|
||||||
maxlenunrolled:=maxlenunrolled div 2;
|
maxlenunrolled:=maxlenunrolled div 2;
|
||||||
if (len>maxlenunrolled) and
|
if (len>maxlenunrolled) and
|
||||||
(len>totalalign*8) then
|
(len>totalalign*8) and
|
||||||
|
(pi_do_call in current_procinfo.flags) then
|
||||||
begin
|
begin
|
||||||
g_concatcopy_move(list,source,dest,len);
|
g_concatcopy_move(list,source,dest,len);
|
||||||
exit;
|
exit;
|
||||||
@ -2585,7 +2586,7 @@ implementation
|
|||||||
current_asmdata.getjumplabel(hl);
|
current_asmdata.getjumplabel(hl);
|
||||||
countreg:=getintregister(list,OS_32);
|
countreg:=getintregister(list,OS_32);
|
||||||
if loadop=A_LDP then
|
if loadop=A_LDP then
|
||||||
a_load_const_reg(list,OS_32,len div tcgsize2size[opsize]*2,countreg)
|
a_load_const_reg(list,OS_32,len div (tcgsize2size[opsize]*2),countreg)
|
||||||
else
|
else
|
||||||
a_load_const_reg(list,OS_32,len div tcgsize2size[opsize],countreg);
|
a_load_const_reg(list,OS_32,len div tcgsize2size[opsize],countreg);
|
||||||
a_label(list,hl);
|
a_label(list,hl);
|
||||||
@ -2604,7 +2605,10 @@ implementation
|
|||||||
genloadstore(list,storeop,regs[1],tmpdest,postfix,opsize);
|
genloadstore(list,storeop,regs[1],tmpdest,postfix,opsize);
|
||||||
end;
|
end;
|
||||||
list.concat(taicpu.op_reg_sym_ofs(A_CBNZ,countreg,hl,0));
|
list.concat(taicpu.op_reg_sym_ofs(A_CBNZ,countreg,hl,0));
|
||||||
len:=len mod tcgsize2size[opsize];
|
if loadop=A_LDP then
|
||||||
|
len:=len mod (tcgsize2size[opsize]*2)
|
||||||
|
else
|
||||||
|
len:=len mod tcgsize2size[opsize];
|
||||||
end;
|
end;
|
||||||
gencopyleftovers(list,tmpsource,tmpdest,len);
|
gencopyleftovers(list,tmpsource,tmpdest,len);
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user