fpc/tests/test/tasm10.pp
2018-10-18 13:05:45 +00:00

57 lines
1.1 KiB
ObjectPascal

{ %CPU=x86_64 }
{ %skiptarget=android }
{ Tests that object fields with zero offset are handled by Intel assembler reader
the same way as fields with nonzero offset }
{$ifdef fpc}
{$mode delphi}
{$asmmode intel}
{$PIC OFF}
{$endif}
type
TTest=object
Data1,Data2:Integer;
procedure Setter;
function Getter1: TTest;
function Getter2: TTest;
end;
procedure TTest.Setter; assembler;
asm
mov Self.Data1,1234
mov Self.Data2,5678
end;
function TTest.Getter1: TTest; assembler;
asm
mov eax,Self.Data1
mov result.Data1, eax
mov eax,Self.Data2
mov result.Data2, eax
end;
function TTest.Getter2: TTest; assembler;
asm
mov eax,Self.Data1
mov @result.Data1, eax
mov eax,Self.Data2
mov @result.Data2, eax
end;
var
testobj, testobj2: TTest;
begin
testobj.Setter;
testobj2:=testobj.Getter1;
if (testobj2.Data1 <> 1234) or (testobj2.Data2 <> 5678) then
Halt(1);
testobj2:=testobj.Getter2;
if (testobj2.Data1 <> 1234) or (testobj2.Data2 <> 5678) then
Halt(2);
writeln('ok');
end.