mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-11-20 02:49:28 +01:00
becoming X86_64_SSE_CLASS/X86_64_INTEGER_CLASS/... This is not defined in
the ABI because there sizeof(extended)=16 and hence the class of the upper
eightbyte of the extended value can never be merged with the class of
another field (except in a union, but then the class of the lower
eightbyte will also be overwritten).
Handle it the same as when the lower eightbyte class of an extended in an
aggregate gets changed into something else: pass everything in memory
(part of mantis #26993)
git-svn-id: trunk@28984 -
51 lines
847 B
ObjectPascal
51 lines
847 B
ObjectPascal
program tw26993a;
|
|
|
|
{$mode delphi}
|
|
|
|
uses
|
|
Classes, SysUtils;
|
|
|
|
type
|
|
|
|
{ TExtendedTestCase }
|
|
|
|
TExtendedTestCase = record
|
|
private
|
|
FValue: extended;
|
|
dummy: array[0..5] of byte;
|
|
public
|
|
property Value: extended read FValue write FValue;
|
|
class operator Add(v1, v2: TExtendedTestCase): TExtendedTestCase;
|
|
class operator Multiply(v1, v2: TExtendedTestCase): TExtendedTestCase;
|
|
end;
|
|
|
|
|
|
{ TExtendedTestCase }
|
|
|
|
class operator TExtendedTestCase.Add(v1, v2: TExtendedTestCase): TExtendedTestCase;
|
|
begin
|
|
Result.Value := v1.Value + v2.Value;
|
|
end;
|
|
|
|
class operator TExtendedTestCase.Multiply(v1, v2: TExtendedTestCase):
|
|
TExtendedTestCase;
|
|
begin
|
|
Result.Value := v1.Value * v2.Value;
|
|
end;
|
|
|
|
var
|
|
e1,e2,e3: textendedtestcase;
|
|
begin
|
|
e1.fvalue:=2.0;
|
|
e2.fvalue:=3.0;
|
|
e3:=e1+e2;
|
|
if (e3*e2).fvalue<>15.0 then
|
|
halt(1);
|
|
|
|
end.
|
|
|
|
|
|
|
|
|
|
|