* LLVM/AArch64: don't perform the parameter location extension workarounds

for LLVM, as that results in LLVM assuming exactly the opposite of
    what's intended (namely that the extended locations contain valid
    rather than invalid bits)

git-svn-id: trunk@43886 -
This commit is contained in:
Jonas Maebe 2020-01-07 20:22:20 +00:00
parent 31ef82b9c6
commit 3abdec9c95

View File

@ -292,6 +292,7 @@ unit cpupara;
if not assigned(result.location) or
not(result.location^.loc in [LOC_REGISTER,LOC_MMREGISTER,LOC_VOID]) then
internalerror(2014113001);
{$ifndef llvm}
{
According to ARM64 ABI: "If the size of the argument is less than 8 bytes then
the size of the argument is set to 8 bytes. The effect is as if the argument
@ -310,6 +311,7 @@ unit cpupara;
result.location^.size:=OS_64;
result.location^.def:=u64inttype;
end;
{$endif}
end;
@ -486,48 +488,45 @@ unit cpupara;
end
else
begin
{$ifndef llvm}
paraloc^.size:=locsize;
paraloc^.def:=locdef;
{$else llvm}
case locsize of
OS_8,OS_16,OS_32:
begin
paraloc^.size:=OS_64;
paraloc^.def:=u64inttype;
end;
OS_S8,OS_S16,OS_S32:
begin
paraloc^.size:=OS_S64;
paraloc^.def:=s64inttype;
end;
OS_F32:
begin
paraloc^.size:=OS_F32;
paraloc^.def:=s32floattype;
end;
OS_F64:
begin
paraloc^.size:=OS_F64;
paraloc^.def:=s64floattype;
end;
else
begin
if is_record(locdef) or
is_set(locdef) or
((locdef.typ=arraydef) and
not is_special_array(locdef)) then
{$ifdef llvm}
if not is_ordinal(paradef) then
begin
case locsize of
OS_8,OS_16,OS_32:
begin
paraloc^.size:=OS_64;
paraloc^.def:=u64inttype;
end
end;
OS_S8,OS_S16,OS_S32:
begin
paraloc^.size:=OS_S64;
paraloc^.def:=s64inttype;
end;
OS_F32:
begin
paraloc^.size:=OS_F32;
paraloc^.def:=s32floattype;
end;
OS_F64:
begin
paraloc^.size:=OS_F64;
paraloc^.def:=s64floattype;
end;
else
begin
paraloc^.size:=locsize;
paraloc^.def:=locdef;
if is_record(locdef) or
is_set(locdef) or
((locdef.typ=arraydef) and
not is_special_array(locdef)) then
begin
paraloc^.size:=OS_64;
paraloc^.def:=u64inttype;
end
end;
end;
end;
end;
{$endif llvm}
end;
@ -560,6 +559,7 @@ unit cpupara;
paraloc^.def:=u32inttype;
end;
end
{$ifndef llvm}
else
begin
if side=calleeside then
@ -568,6 +568,7 @@ unit cpupara;
paraloc^.def:=u32inttype;
end;
end;
{$endif llvm}
end;
{ in case it's a composite, "The argument is passed as though