mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-12 13:06:18 +02:00
* pass large "const" record parameters by reference for non-cdecl/cppdecl
(mantis #17442) git-svn-id: trunk@16620 -
This commit is contained in:
parent
d10f46ec59
commit
067536f8da
@ -664,6 +664,16 @@ unit cpupara;
|
|||||||
{ Win ABI depends on size to pass it in a register or not }
|
{ Win ABI depends on size to pass it in a register or not }
|
||||||
else if (target_info.system=system_x86_64_win64) then
|
else if (target_info.system=system_x86_64_win64) then
|
||||||
result:=not aggregate_in_registers_win64(varspez,def.size)
|
result:=not aggregate_in_registers_win64(varspez,def.size)
|
||||||
|
{ pass constant parameters that would be passed via memory by
|
||||||
|
reference for non-cdecl/cppdecl, and make sure that the tmethod
|
||||||
|
record (size=16) is passed the same way as a complex procvar }
|
||||||
|
else if ((varspez=vs_const) and
|
||||||
|
not(calloption in [pocall_cdecl,pocall_cppdecl])) or
|
||||||
|
(def.size=16) then
|
||||||
|
begin
|
||||||
|
numclasses:=classify_argument(def,vs_value,def.size,classes,0);
|
||||||
|
result:=numclasses=0;
|
||||||
|
end
|
||||||
else
|
else
|
||||||
{ SysV ABI always passes it as value parameter }
|
{ SysV ABI always passes it as value parameter }
|
||||||
result:=false;
|
result:=false;
|
||||||
|
Loading…
Reference in New Issue
Block a user