summaryrefslogtreecommitdiff
path: root/rtl/linux/riscv32/syscall.inc
blob: 146250e826c5ba15bca7f1624bd8610cfdbd65dc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
{
  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
  addi x17, sysnr, 0
  ecall
  bge x10,x0,.Ldone
  sw x1, -4(x2)
  addi x2, x2, -4
  sub x10, x0, x10
  jal x1, seterrno
  addi x2, x2, 4
  lw x1, -4(x2)
  addi x10,x0, -1
.Ldone:
end;

function FpSysCall(sysnr,param1:TSysParam):TSysResult;
assembler; nostackframe; [public,alias:'FPC_SYSCALL1'];
asm
  addi x17, sysnr, 0
  addi x10, x11, 0
  ecall
  bge x10,x0,.Ldone
  sw x1, -4(x2)
  addi x2, x2, -4
  sub x10, x0, x10
  jal x1, seterrno
  addi x2, x2, 4
  lw x1, -4(x2)
  addi x10,x0, -1
.Ldone:
end;

function FpSysCall(sysnr,param1,param2:TSysParam):TSysResult;
assembler; nostackframe; [public,alias:'FPC_SYSCALL2'];
asm
  addi x17, sysnr, 0
  addi x10, x11, 0
  addi x11, x12, 0
  ecall
  bge x10,x0,.Ldone
  sw x1, -4(x2)
  addi x2, x2, -4
  sub x10, x0, x10
  jal x1, seterrno
  addi x2, x2, 4
  lw x1, -4(x2)
  addi x10,x0, -1
.Ldone:
end;

function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult;
assembler; nostackframe; [public,alias:'FPC_SYSCALL3'];
asm
  addi x17, sysnr, 0
  addi x10, x11, 0
  addi x11, x12, 0
  addi x12, x13, 0
  ecall
  bge x10,x0,.Ldone
  sw x1, -4(x2)
  addi x2, x2, -4
  sub x10, x0, x10
  jal x1, seterrno
  addi x2, x2, 4
  lw x1, -4(x2)
  addi x10,x0, -1
.Ldone:
end;

function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult;
assembler; nostackframe; [public,alias:'FPC_SYSCALL4'];
asm
  addi x17, sysnr, 0
  addi x10, x11, 0
  addi x11, x12, 0
  addi x12, x13, 0
  addi x13, x14, 0
  ecall
  bge x10,x0,.Ldone
  sw x1, -4(x2)
  addi x2, x2, -4
  sub x10, x0, x10
  jal x1, seterrno
  addi x2, x2, 4
  lw x1, -4(x2)
  addi x10,x0, -1
.Ldone:
end;

function FpSysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResult;
assembler; nostackframe; [public,alias:'FPC_SYSCALL5'];
asm
  addi x17, sysnr, 0
  addi x10, x11, 0
  addi x11, x12, 0
  addi x12, x13, 0
  addi x13, x14, 0
  addi x14, x15, 0
  ecall
  bge x10,x0,.Ldone
  sw x1, -4(x2)
  addi x2, x2, -4
  sub x10, x0, x10
  jal x1, seterrno
  addi x2, x2, 4
  lw x1, -4(x2)
  addi x10,x0, -1
.Ldone:
end;

function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):TSysResult;
assembler; nostackframe; [public,alias:'FPC_SYSCALL6'];
asm
  addi x17, sysnr, 0
  addi x10, x11, 0
  addi x11, x12, 0
  addi x12, x13, 0
  addi x13, x14, 0
  addi x14, x15, 0
  addi x15, x16, 0
  ecall
  bge x10,x0,.Ldone
  sw x1, -4(x2)
  addi x2, x2, -4
  sub x10, x0, x10
  jal x1, seterrno
  addi x2, x2, 4
  lw x1, -4(x2)
  addi x10,x0, -1
.Ldone:
end;