mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-12-05 22:47:09 +01:00
+ Aarch64: trgcpu.get_spill_subreg: return MM sub register correctly, resolves #37393
git-svn-id: trunk@45814 -
This commit is contained in:
parent
14bc6674a6
commit
13cb57b2c3
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -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
|
||||
|
||||
@ -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
14
tests/webtbs/tw37393.pp
Normal 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.
|
||||
Loading…
Reference in New Issue
Block a user