+ Aarch64: trgcpu.get_spill_subreg: return MM sub register correctly, resolves #37393

git-svn-id: trunk@45814 -
This commit is contained in:
florian 2020-07-20 21:07:09 +00:00
parent 14bc6674a6
commit 13cb57b2c3
3 changed files with 25 additions and 0 deletions

1
.gitattributes vendored
View File

@ -18379,6 +18379,7 @@ tests/webtbs/tw37301.pp svneol=native#text/pascal
tests/webtbs/tw37322.pp svneol=native#text/pascal
tests/webtbs/tw37323.pp svneol=native#text/pascal
tests/webtbs/tw37339.pp svneol=native#text/pascal
tests/webtbs/tw37393.pp svneol=native#text/pascal
tests/webtbs/tw3742.pp svneol=native#text/plain
tests/webtbs/tw3751.pp svneol=native#text/plain
tests/webtbs/tw3758.pp svneol=native#text/plain

View File

@ -36,6 +36,7 @@ unit rgcpu;
trgcpu=class(trgobj)
procedure do_spill_read(list: TAsmList; pos: tai; const spilltemp: treference; tempreg: tregister; orgsupreg: tsuperregister); override;
procedure do_spill_written(list: TAsmList; pos: tai; const spilltemp: treference; tempreg: tregister; orgsupreg: tsuperregister); override;
function get_spill_subreg(r: tregister): tsubregister; override;
protected
procedure do_spill_op(list: tasmlist; op: tasmop; pos: tai; const spilltemp: treference; tempreg: tregister; orgsupreg: tsuperregister);
end;
@ -51,6 +52,15 @@ implementation
verbose,cutils,
cgobj;
function trgcpu.get_spill_subreg(r:tregister) : tsubregister;
begin
if (getregtype(r)<>R_MMREGISTER) then
result:=defaultsub
else
result:=getsubreg(r);
end;
procedure trgcpu.do_spill_read(list: TAsmList; pos: tai; const spilltemp: treference; tempreg: tregister; orgsupreg: tsuperregister);
begin
do_spill_op(list,A_LDR,pos,spilltemp,tempreg,orgsupreg);

14
tests/webtbs/tw37393.pp Normal file
View File

@ -0,0 +1,14 @@
{ %OPT=-O2 }
program fx;
procedure rep9(a,b,c,d, e,f,g,h, i,j,k,l: single);
begin
writeln(a, ' ', b, ' ', c, ' ', d);
writeln(e, ' ', f, ' ', g, ' ', h);
writeln(i, ' ', j, ' ', k, ' ', l);
if (i<>9) or (j<>10) or (k<>11) or (l<>12) then
halt(1);
end;
begin
rep9(1,2,3,4,5,6,7,8,9,10,11,12);
writeln('ok');
end.