fpc/tests/test/tx64ccnv.pp
Jonas Maebe 265c8e7bbc + support for specifying ms_abi_default, ms_abi_cdelc, sysv_abi_default, and
sysv_abi_cdecl calling conventions on x86-64 to force using the SYSV/
    Microsoft ABI on platforms that don't use it by default (mainly to ease
    porting pure assembler routines)

git-svn-id: trunk@35425 -
2017-02-11 19:57:12 +00:00

99 lines
1.7 KiB
ObjectPascal

{ %cpu=x86_64 }
function proc_msabidefault(para1,para2,para3,para4: qword): boolean; ms_abi_default;
assembler;
asm
cmpq $1, %rcx
jne .Lerror
cmpq $2, %rdx
jne .Lerror
cmpq $3, %r8
jne .Lerror
cmpq $4, %r9
jne .Lerror
movq $1,%rax
jmp .Lok
.Lerror:
movq $0,%rax
.Lok:
end;
function proc_msabicdecl(para1,para2,para3,para4: qword): boolean; ms_abi_cdecl;
assembler;
asm
cmpq $1, %rcx
jne .Lerror
cmpq $2, %rdx
jne .Lerror
cmpq $3, %r8
jne .Lerror
cmpq $4, %r9
jne .Lerror
movq $1,%rax
jmp .Lok
.Lerror:
movq $0,%rax
.Lok:
end;
function proc_sysvabidefault(para1,para2,para3,para4,para5,para6: qword): boolean; sysv_abi_default;
assembler;
asm
cmpq $1, %rdi
jne .Lerror
cmpq $2, %rsi
jne .Lerror
cmpq $3, %rdx
jne .Lerror
cmpq $4, %rcx
jne .Lerror
cmpq $5, %r8
jne .Lerror
cmpq $6, %r9
jne .Lerror
movq $1,%rax
jmp .Lok
.Lerror:
movq $0,%rax
.Lok:
end;
function proc_sysvabicdecl_extern(para1,para2,para3,para4,para5,para6: qword): boolean; sysv_abi_cdecl; varargs; external name '_FPC_PROCC_SYSVABICDECL';
function proc_sysvabicdecl(para1,para2,para3,para4,para5,para6: qword): boolean; sysv_abi_cdecl; [public, alias: '_FPC_PROCC_SYSVABICDECL'];
assembler;
asm
cmpb $0, %al
jne .Lerror
cmpq $1, %rdi
jne .Lerror
cmpq $2, %rsi
jne .Lerror
cmpq $3, %rdx
jne .Lerror
cmpq $4, %rcx
jne .Lerror
cmpq $5, %r8
jne .Lerror
cmpq $6, %r9
jne .Lerror
movq $1,%rax
jmp .Lok
.Lerror:
movq $0,%rax
.Lok:
end;
begin
if not proc_msabidefault(1,2,3,4) then
halt(1);
if not proc_msabicdecl(1,2,3,4) then
halt(2);
if not proc_sysvabidefault(1,2,3,4,5,6) then
halt(3);
if not proc_sysvabicdecl_extern(1,2,3,4,5,6) then
halt(4);
end.