* AArch64: fix spilling integer registers to stack offsets that cannot be

encoded directly into the spilling instructions (second part of
    mantis #38053)

git-svn-id: trunk@49207 -
This commit is contained in:
Jonas Maebe 2021-04-14 20:56:32 +00:00
parent 4b4ae79609
commit bb977b398d
3 changed files with 75 additions and 3 deletions

1
.gitattributes vendored
View File

@ -18733,6 +18733,7 @@ tests/webtbs/tw38012.pp svneol=native#text/pascal
tests/webtbs/tw38022.pp svneol=native#text/pascal
tests/webtbs/tw3805.pp svneol=native#text/plain
tests/webtbs/tw38051.pp svneol=native#text/pascal
tests/webtbs/tw38053.pp svneol=native#text/plain
tests/webtbs/tw38054.pp svneol=native#text/plain
tests/webtbs/tw38058.pp svneol=native#text/pascal
tests/webtbs/tw38069.pp svneol=native#text/pascal

View File

@ -1,7 +1,7 @@
{
Copyright (c) 1998-2002 by Florian Klaempfl
This unit implements the SPARC specific class for the register
This unit implements the AArch64 specific class for the register
allocator
This program is free software; you can redistribute it and/or modify
@ -87,8 +87,8 @@ implementation
begin
helplist:=TAsmList.create;
if getregtype(tempreg)=R_INTREGISTER then
hreg:=tempreg
if (getregtype(tempreg)=R_INTREGISTER) then
hreg:=getregisterinline(helplist,[R_SUBWHOLE])
else
hreg:=cg.getaddressregister(helplist);
@ -100,6 +100,8 @@ implementation
else
helpins:=spilling_create_store(tempreg,tmpref);
helplist.concat(helpins);
if (getregtype(tempreg)=R_INTREGISTER) then
ungetregisterinline(helplist,hreg);
add_cpu_interferences(helpins);
list.insertlistafter(pos,helplist);
helplist.free;

69
tests/webtbs/tw38053.pp Normal file
View File

@ -0,0 +1,69 @@
{ %opt=-Sg }
program fsz;
// fpc -OoREGVAR az.pas; ./az
// fpc -OoNoREGVAR az.pas; ./az
// {$mode delphi}
{$mode objfpc}
Type
ByteRA0 = array [0..0] of byte;
Bytep0 = ^ByteRA0;
TNIFTIhdr = record //Next: analyze Format Header structure
HdrSz : longint; //MUST BE 348
end;
function readTiff(fnm: string; nhdr: TNIFTIhdr; img: byteP0): string;
label
555;
type
TTIFFhdr = record
Compression, ImageHeight, ImageWidth,
NewSubfileType: uint32;
end;
const
kMaxIFD = 2200;
kVal = 1050090;
var
fsz, i, ok1: integer{int64};
jj,w, nTag, nIFD: uint32 {uint64};
hdr: array[1..kMaxIFD] of TTIFFhdr;
begin
result := '';
fsz := kVal;
ok1 := kVal;
jj := kVal;
w := kVal;
i := kVal;
nTag := kVal;
nIFD := kVal;
writeln('Value ', fsz,' ',ok1,' ',jj,' ',w,' ',i,' ',nTag,' ',nIFD,' -- ', kVal);
if fsz <> kVal then
halt(1);
if ok1 <> kVal then
halt(2);
if jj <> kVal then
halt(3);
if w <> kVal then
halt(4);
if i <> kVal then
halt(5);
if nTag <> kVal then
halt(6);
if nIFD <> kVal then
halt(7);
555:
end;
procedure ReportTiff();
var
img: byteP0;
nhdr: TNIFTIhdr;
begin
readTiff('xxx', nhdr, img);
end;
begin
ReportTiff();
end.