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