PascalScript: pass dyn. arrays in registers when i386 register calling conventions are used (related to FPC r30870 #7b0df7dac3). Issue . From Maciej Izak.

git-svn-id: trunk@51018 -
This commit is contained in:
juha 2015-12-24 00:57:51 +00:00
parent 1dc657f13d
commit 93d8895785
2 changed files with 10 additions and 9 deletions
components/PascalScript/Source

View File

@ -542,11 +542,7 @@ _XMM0: Double;
Result := True;
exit;
end else begin
{$IFDEF FPC}
StoreReg(IPointer(FVar.Dta));
{$ELSE}
StoreReg(IPointer(FVar.Dta^));
{$ENDIF}
end;
end;
btRecord:

View File

@ -1,7 +1,5 @@
{ implementation of x86 abi }
{$ifdef FPC}
{$define PS_ARRAY_ON_STACK}
{$endif}
function RealFloatCall_Register(p: Pointer;
_EAX, _EDX, _ECX: Cardinal;
StackData: Pointer;
@ -390,9 +388,16 @@ var
{$IFDEF PS_DYNARRAY}
TempStr := StringOfChar(AnsiChar(#0),4);
Pointer((@TempStr[1])^) := Pointer(fvar.Dta^);
{$IFDEF PS_ARRAY_ON_STACK}
UseReg := false;
{$IFDEF FPC}
{$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 ~FPC}
{$ELSE}
Exit;
{$ENDIF}