mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-16 15:39:40 +02:00
Removed reuse of src and dest registers in g_concatcopy as that
could modify registers used for other stuff(ex. framepointer). git-svn-id: branches/laksen/riscv_new@39717 -
This commit is contained in:
parent
fb0ef295f1
commit
1f68caaf82
@ -519,14 +519,6 @@ implementation
|
|||||||
src, dst, src2, dst2: TReference;
|
src, dst, src2, dst2: TReference;
|
||||||
lab: tasmlabel;
|
lab: tasmlabel;
|
||||||
Count, count2: aint;
|
Count, count2: aint;
|
||||||
|
|
||||||
function reference_is_reusable(const ref: treference): boolean;
|
|
||||||
begin
|
|
||||||
result:=(ref.base<>NR_NO) and (ref.index=NR_NO) and
|
|
||||||
(ref.symbol=nil) and
|
|
||||||
is_imm12(ref.offset);
|
|
||||||
end;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
src2:=source;
|
src2:=source;
|
||||||
fixref(list,src2);
|
fixref(list,src2);
|
||||||
@ -550,24 +542,16 @@ implementation
|
|||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
Count := len div 8;
|
Count := len div 8;
|
||||||
if (count<=8) and reference_is_reusable(src2) then
|
|
||||||
src:=src2
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
reference_reset(src,sizeof(aint),[]);
|
reference_reset(src,sizeof(aint),[]);
|
||||||
{ load the address of src2 into src.base }
|
{ load the address of src2 into src.base }
|
||||||
src.base := GetAddressRegister(list);
|
src.base := GetAddressRegister(list);
|
||||||
a_loadaddr_ref_reg(list, src2, src.base);
|
a_loadaddr_ref_reg(list, src2, src.base);
|
||||||
end;
|
|
||||||
if (count<=8) and reference_is_reusable(dst2) then
|
|
||||||
dst:=dst2
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
reference_reset(dst,sizeof(aint),[]);
|
reference_reset(dst,sizeof(aint),[]);
|
||||||
{ load the address of dst2 into dst.base }
|
{ load the address of dst2 into dst.base }
|
||||||
dst.base := GetAddressRegister(list);
|
dst.base := GetAddressRegister(list);
|
||||||
a_loadaddr_ref_reg(list, dst2, dst.base);
|
a_loadaddr_ref_reg(list, dst2, dst.base);
|
||||||
end;
|
|
||||||
{ generate a loop }
|
{ generate a loop }
|
||||||
if Count > 4 then
|
if Count > 4 then
|
||||||
begin
|
begin
|
||||||
|
Loading…
Reference in New Issue
Block a user