1/*
2** Copyright 2001, Travis Geiselbrecht. All rights reserved.
3** Distributed under the terms of the NewOS License.
4*/
5
6/*
7** arg layout:
8** r4-r7:  arg 1 - 4
9** r0-r3:  arg 5 - 8
10** r8-r13: arg 8 - 13
11*/
12#define FUNC(name) .align 2 ; .globl _##name ; .type _##name,@function ; _##name:
13
14#define SYSCALL0(name, n) \
15FUNC(name) \
16	trapa	#(n); \
17	nop; \
18	rts; \
19	nop;
20
21#define SYSCALL1(name, n) \
22FUNC(name) \
23	trapa	#(n); \
24	rts; \
25	nop;
26
27#define SYSCALL2(name, n) \
28FUNC(name) \
29	trapa	#(n); \
30	nop; \
31	rts; \
32	nop;
33
34#define SYSCALL3(name, n) \
35FUNC(name) \
36	trapa	#(n); \
37	nop; \
38	rts; \
39	nop;
40
41#define SYSCALL4(name, n) \
42FUNC(name) \
43	trapa	#(n); \
44	nop; \
45	rts; \
46	nop; \
47
48#define SYSCALL5(name, n) \
49FUNC(name) \
50	mov.l	@r15,r0; \
51	trapa	#(n); \
52	nop; \
53	rts; \
54	nop;
55
56#define SYSCALL6(name, n) \
57FUNC(name) \
58	mov.l	@(0,r15),r0; \
59	mov.l	@(4,r15),r1; \
60	trapa	#(n); \
61	nop; \
62	rts; \
63	nop;
64#define SYSCALL7(name, n) \
65FUNC(name) \
66	mov.l	@(0,r15),r0; \
67	mov.l	@(4,r15),r1; \
68	mov.l	@(8,r15),r2; \
69	trapa	#(n); \
70	nop; \
71	rts; \
72	nop;
73
74#define SYSCALL8(name, n) \
75FUNC(name) \
76	mov.l	@(0,r15),r0; \
77	mov.l	@(4,r15),r1; \
78	mov.l	@(8,r15),r2; \
79	mov.l	@(12,r15),r3; \
80	trapa	#(n); \
81	nop; \
82	rts; \
83	nop;
84
85#define SYSCALL9(name, n) \
86FUNC(name) \
87	mov.l	@(0,r15),r0; \
88	mov.l	@(4,r15),r1; \
89	mov.l	@(8,r15),r2; \
90	mov.l	@(12,r15),r3; \
91	mov.l	r8,@-r15; \
92	mov.l	@(20,r15),r8; \
93	trapa	#(n); \
94	nop; \
95	rts; \
96	mov.l	@r15+,r8
97
98