mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-12 22:14:25 +02:00
* load 0 into unaligned memory in a simpler way
git-svn-id: trunk@44717 -
This commit is contained in:
parent
7c2c8581b7
commit
2bae2a451c
@ -681,15 +681,32 @@ implementation
|
|||||||
procedure tcgaarch64.a_load_const_ref(list: TAsmList; size: tcgsize; a: tcgint; const ref: treference);
|
procedure tcgaarch64.a_load_const_ref(list: TAsmList; size: tcgsize; a: tcgint; const ref: treference);
|
||||||
var
|
var
|
||||||
reg: tregister;
|
reg: tregister;
|
||||||
|
href: treference;
|
||||||
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
{ use the zero register if possible }
|
{ use the zero register if possible }
|
||||||
if a=0 then
|
if a=0 then
|
||||||
begin
|
begin
|
||||||
if size in [OS_64,OS_S64] then
|
href:=ref;
|
||||||
reg:=NR_XZR
|
inc(href.offset,tcgsize2size[size]-1);
|
||||||
|
if (tcgsize2size[size]>1) and (ref.alignment=1) and (simple_ref_type(A_STP,OS_8,PF_None,ref)=sr_simple) and
|
||||||
|
(simple_ref_type(A_STP,OS_8,PF_None,href)=sr_simple) then
|
||||||
|
begin
|
||||||
|
href:=ref;
|
||||||
|
for i:=0 to tcgsize2size[size]-1 do
|
||||||
|
begin
|
||||||
|
a_load_const_ref(list,OS_8,0,href);
|
||||||
|
inc(href.offset);
|
||||||
|
end;
|
||||||
|
end
|
||||||
else
|
else
|
||||||
reg:=NR_WZR;
|
begin
|
||||||
a_load_reg_ref(list,size,size,reg,ref);
|
if size in [OS_64,OS_S64] then
|
||||||
|
reg:=NR_XZR
|
||||||
|
else
|
||||||
|
reg:=NR_WZR;
|
||||||
|
a_load_reg_ref(list,size,size,reg,ref);
|
||||||
|
end;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
inherited;
|
inherited;
|
||||||
|
Loading…
Reference in New Issue
Block a user