fpc/rtl/linux/loongarch64/syscall.inc
2023-02-05 19:18:48 +00:00

142 lines
3.0 KiB
PHP

{
This file is part of the Free Pascal run time library.
Perform syscall with 0..6 arguments.
If syscall return value is negative, negate it, set errno, and return -1.
Written by Edmund Grimley Evans in 2015 and released into the public domain.
}
function FpSysCall(sysnr:TSysParam):TSysResult;
assembler; nostackframe; [public,alias:'FPC_SYSCALL0'];
asm
ori $a7, $a0, 0
syscall 0
bge $a0, $zero, .Ldone
addi.d $sp, $sp, -16
st.d $ra, $sp, 8
sub.d $a0, $zero, $a0
bl seterrno
addi.d $a0, $zero, -1
ld.d $ra, $sp, 8
addi.d $sp, $sp, 16
.Ldone:
end;
function FpSysCall(sysnr,param1:TSysParam):TSysResult;
assembler; nostackframe; [public,alias:'FPC_SYSCALL1'];
asm
ori $a7, $a0, 0
ori $a0, $a1, 0
syscall 0
bge $a0, $zero, .Ldone
addi.d $sp, $sp, -16
st.d $ra, $sp, 8
sub.d $a0, $zero, $a0
bl seterrno
addi.d $a0, $zero, -1
ld.d $ra, $sp, 8
addi.d $sp, $sp, 16
.Ldone:
end;
function FpSysCall(sysnr,param1,param2:TSysParam):TSysResult;
assembler; nostackframe; [public,alias:'FPC_SYSCALL2'];
asm
ori $a7, $a0, 0
ori $a0, $a1, 0
ori $a1, $a2, 0
syscall 0
bge $a0, $zero, .Ldone
addi.d $sp, $sp, -16
st.d $ra, $sp, 8
sub.d $a0, $zero, $a0
bl seterrno
addi.d $a0, $zero, -1
ld.d $ra, $sp, 8
addi.d $sp, $sp, 16
.Ldone:
end;
function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult;
assembler; nostackframe; [public,alias:'FPC_SYSCALL3'];
asm
ori $a7, $a0, 0
ori $a0, $a1, 0
ori $a1, $a2, 0
ori $a2, $a3, 0
syscall 0
bge $a0, $zero, .Ldone
addi.d $sp, $sp, -16
st.d $ra, $sp, 8
sub.d $a0, $zero, $a0
bl seterrno
addi.d $a0, $zero, -1
ld.d $ra, $sp, 8
addi.d $sp, $sp, 16
.Ldone:
end;
function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult;
assembler; nostackframe; [public,alias:'FPC_SYSCALL4'];
asm
ori $a7, $a0, 0
ori $a0, $a1, 0
ori $a1, $a2, 0
ori $a2, $a3, 0
ori $a3, $a4, 0
syscall 0
bge $a0, $zero, .Ldone
addi.d $sp, $sp, -16
st.d $ra, $sp, 8
sub.d $a0, $zero, $a0
bl seterrno
addi.d $a0, $zero, -1
ld.d $ra, $sp, 8
addi.d $sp, $sp, 16
.Ldone:
end;
function FpSysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResult;
assembler; nostackframe; [public,alias:'FPC_SYSCALL5'];
asm
ori $a7, $a0, 0
ori $a0, $a1, 0
ori $a1, $a2, 0
ori $a2, $a3, 0
ori $a3, $a4, 0
ori $a4, $a5, 0
syscall 0
bge $a0, $zero, .Ldone
addi.d $sp, $sp, -16
st.d $ra, $sp, 8
sub.d $a0, $zero, $a0
bl seterrno
addi.d $a0, $zero, -1
ld.d $ra, $sp, 8
addi.d $sp, $sp, 16
.Ldone:
end;
function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):TSysResult;
assembler; nostackframe; [public,alias:'FPC_SYSCALL6'];
asm
ori $a7, $a0, 0
ori $a0, $a1, 0
ori $a1, $a2, 0
ori $a2, $a3, 0
ori $a3, $a4, 0
ori $a4, $a5, 0
ori $a5, $a6, 0
syscall 0
bge $a0, $zero, .Ldone
addi.d $sp, $sp, -16
st.d $ra, $sp, 8
sub.d $a0, $zero, $a0
bl seterrno
addi.d $a0, $zero, -1
ld.d $ra, $sp, 8
addi.d $sp, $sp, 16
.Ldone:
end;