Add $PIC OFF directive for FPC compilation and change Data field type to int64 to avoid size errors

git-svn-id: trunk@38432 -
This commit is contained in:
pierre 2018-03-06 11:08:03 +00:00
parent 7e98f58c8a
commit 593794c0fd

View File

@ -1,21 +1,25 @@
{ %cpu=x86_64 }
{$ifdef FPC}
{$PIC OFF}
{$endif FPC}
program asmclass;
{$mode delphiunicode}
{$asmmode intel}
type
TMyClass = class
public
Data: longint;
function AsmToClass: longint; ms_abi_default;
Data: int64;
function AsmToClass: int64; ms_abi_default;
end;
function TMyClass.AsmToClass: longint; ms_abi_default;
function TMyClass.AsmToClass: int64; ms_abi_default;
asm
mov RAX, Self.Data // Error: Can't access fields directly for parameters
end;
function AsmToClassProc(Inst: TMyClass): longint; ms_abi_default;
function AsmToClassProc(Inst: TMyClass): int64; ms_abi_default;
asm
mov RAX, Inst.Data // Error: Can't access fields directly for parameters
end;
@ -29,13 +33,14 @@ var
C: TMyClass;
begin
C := TMyClass.Create;
c.data:=123548;
if C.AsmToClass<>123548 then
c.data:=$123456789AB;
if C.AsmToClass<>$123456789AB then
halt(1);
if AsmToClassProc(C)<>123548 then
if AsmToClassProc(C)<>$123456789AB then
halt(2);
if AsmToClassProc2(C)<>ppointer(c)^ then
halt(3);
C.Free;
writeln('ok');
end.