mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-04 06:56:08 +02:00
PascalScript: pass dyn. arrays in registers when i386 register calling conventions are used (related to FPC r30870 #7b0df7dac3). Issue #29230. From Maciej Izak.
git-svn-id: trunk@51018 -
This commit is contained in:
parent
1dc657f13d
commit
93d8895785
@ -542,11 +542,7 @@ _XMM0: Double;
|
|||||||
Result := True;
|
Result := True;
|
||||||
exit;
|
exit;
|
||||||
end else begin
|
end else begin
|
||||||
{$IFDEF FPC}
|
|
||||||
StoreReg(IPointer(FVar.Dta));
|
|
||||||
{$ELSE}
|
|
||||||
StoreReg(IPointer(FVar.Dta^));
|
StoreReg(IPointer(FVar.Dta^));
|
||||||
{$ENDIF}
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
btRecord:
|
btRecord:
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
{ implementation of x86 abi }
|
{ implementation of x86 abi }
|
||||||
{$ifdef FPC}
|
|
||||||
{$define PS_ARRAY_ON_STACK}
|
|
||||||
{$endif}
|
|
||||||
function RealFloatCall_Register(p: Pointer;
|
function RealFloatCall_Register(p: Pointer;
|
||||||
_EAX, _EDX, _ECX: Cardinal;
|
_EAX, _EDX, _ECX: Cardinal;
|
||||||
StackData: Pointer;
|
StackData: Pointer;
|
||||||
@ -390,9 +388,16 @@ var
|
|||||||
{$IFDEF PS_DYNARRAY}
|
{$IFDEF PS_DYNARRAY}
|
||||||
TempStr := StringOfChar(AnsiChar(#0),4);
|
TempStr := StringOfChar(AnsiChar(#0),4);
|
||||||
Pointer((@TempStr[1])^) := Pointer(fvar.Dta^);
|
Pointer((@TempStr[1])^) := Pointer(fvar.Dta^);
|
||||||
{$IFDEF PS_ARRAY_ON_STACK}
|
{$IFDEF FPC}
|
||||||
UseReg := false;
|
{$IF FPC_FULLVERSION < 30101}
|
||||||
|
// pass dyn. array on stack
|
||||||
|
UseReg := false;
|
||||||
|
{$ELSE}
|
||||||
|
// pass dyn. arrays in registers when i386 register calling conventions are used
|
||||||
|
// more details -> FPC r30870
|
||||||
|
UseReg := CallingConv = cdRegister;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
{$ENDIF ~FPC}
|
||||||
{$ELSE}
|
{$ELSE}
|
||||||
Exit;
|
Exit;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
Loading…
Reference in New Issue
Block a user