* Fixed interface delegation for aarch64 (tdel1 and tdel2 tests).

It was broken by r31676 which did not take in account r29953. As a consequence $self was passed in register x1 instead of x0 when the method result is of a managed type.
  This fix enables changing order of the $self and $result parameters only for aarch64 AND llvm combination where it is actually needed.
  The issue with interface delegation still exists for aarch64-llvm and need to be fixed separately. Probably by applying llvm-specific workarounds as it was made in r29953 for regular aarch64 targets.

git-svn-id: trunk@39948 -
This commit is contained in:
yury 2018-10-16 20:32:02 +00:00
parent 84b5129f1d
commit 9ee1682955

View File

@ -124,18 +124,17 @@ const
paranr_blockselfpara = 1;
paranr_parentfp = 2;
paranr_parentfp_delphi_cc_leftright = 2;
{$ifndef aarch64}
paranr_self = 3;
paranr_result = 4;
{$else aarch64}
{ on AArch64, the result parameter is passed in a special register, so its
order doesn't really matter -- except for LLVM, where the "sret" parameter
{$if defined(aarch64) and defined(llvm)}
{ for AArch64 on LLVM, the "sret" parameter
must always be the first -> give it a higher number; can't do it for other
platforms, because that would change the register assignment/parameter order
and the current one is presumably Delphi-compatible }
paranr_result = 3;
paranr_self = 4;
{$endif aarch64}
{$else}
paranr_self = 3;
paranr_result = 4;
{$endif}
paranr_vmt = 5;
{ the implicit parameters for Objective-C methods need to come