* support LOC_MMREGISTER for paralocs when loading 128 bit function results

into integer registers (a record that consists of 4 32 bit floats is
    returned in 2 xmm registers on x86_64) (mantis #30329)

git-svn-id: trunk@34058 -
This commit is contained in:
Jonas Maebe 2016-07-03 21:18:23 +00:00
parent 18639304e1
commit db77aad2cc
3 changed files with 35 additions and 1 deletions

1
.gitattributes vendored
View File

@ -15125,6 +15125,7 @@ tests/webtbs/tw30207.pp svneol=native#text/plain
tests/webtbs/tw30208.pp svneol=native#text/pascal
tests/webtbs/tw3023.pp svneol=native#text/plain
tests/webtbs/tw3028.pp svneol=native#text/plain
tests/webtbs/tw30329.pp -text svneol=native#text/plain
tests/webtbs/tw3038.pp svneol=native#text/plain
tests/webtbs/tw3041.pp svneol=native#text/plain
tests/webtbs/tw3045.pp svneol=native#text/plain

View File

@ -856,7 +856,8 @@ implementation
is_record(vardef)) then
begin
case paraloc^.loc of
LOC_REGISTER:
LOC_REGISTER,
LOC_MMREGISTER:
begin
if not assigned(paraloc^.next) then
internalerror(200410104);

32
tests/webtbs/tw30329.pp Normal file
View File

@ -0,0 +1,32 @@
program TestOutbox2d;
{$mode objfpc}{$H+}
type
TGF2DPoint = array[0..1] of Single;
TGF2DOutbox = packed record
FMin, FMax: TGF2DPoint;
end;
function Some2DOutbox : TGF2DOutbox;
begin
Result.FMin[0]:=1.0;
Result.FMin[1]:=2.0;
Result.FMax[0]:=3.0;
Result.FMax[1]:=4.0;
end;
var
Outbox : TGF2DOutbox;
begin
Outbox:=Some2DOutbox;
with outbox do
if (fmin[0]<>1.0) or
(fmin[1]<>2.0) or
(fmax[0]<>3.0) or
(fmax[1]<>4.0) then
halt(1);
end.