1/*
2 * include/asm-v850/simsyscall.h -- `System calls' under the v850e emulator
3 *
4 *  Copyright (C) 2001  NEC Corporation
5 *  Copyright (C) 2001  Miles Bader <miles@gnu.org>
6 *
7 * This file is subject to the terms and conditions of the GNU General
8 * Public License.  See the file COPYING in the main directory of this
9 * archive for more details.
10 *
11 * Written by Miles Bader <miles@gnu.org>
12 */
13
14#ifndef __V850_SIMSYSCALL_H__
15#define __V850_SIMSYSCALL_H__
16
17#define V850_SIM_SYS_exit(a...)		V850_SIM_SYSCALL_1 (1	, ##a)
18#define V850_SIM_SYS_fork(a...)		V850_SIM_SYSCALL_0 (2	, ##a)
19#define V850_SIM_SYS_read(a...)		V850_SIM_SYSCALL_3 (3	, ##a)
20#define V850_SIM_SYS_write(a...)	V850_SIM_SYSCALL_3 (4	, ##a)
21#define V850_SIM_SYS_open(a...)		V850_SIM_SYSCALL_2 (5	, ##a)
22#define V850_SIM_SYS_close(a...)	V850_SIM_SYSCALL_1 (6	, ##a)
23#define V850_SIM_SYS_wait4(a...)	V850_SIM_SYSCALL_4 (7	, ##a)
24/* #define V850_SIM_SYS_creat(a...)	V850_SIM_SYSCALL_1 (8	, ##a) */
25/* #define V850_SIM_SYS_link(a...)	V850_SIM_SYSCALL_1 (9	, ##a) */
26/* #define V850_SIM_SYS_unlink(a...)	V850_SIM_SYSCALL_1 (10	, ##a) */
27#define V850_SIM_SYS_execv(a...)	V850_SIM_SYSCALL_2 (11	, ##a)
28/* #define V850_SIM_SYS_chdir(a...)	V850_SIM_SYSCALL_1 (12	, ##a) */
29/* #define V850_SIM_SYS_mknod(a...)	V850_SIM_SYSCALL_1 (14	, ##a) */
30#define V850_SIM_SYS_chmod(a...)	V850_SIM_SYSCALL_2 (15	, ##a)
31#define V850_SIM_SYS_chown(a...)	V850_SIM_SYSCALL_2 (16	, ##a)
32#define V850_SIM_SYS_lseek(a...)	V850_SIM_SYSCALL_3 (19	, ##a)
33/* #define V850_SIM_SYS_getpid(a...)	V850_SIM_SYSCALL_1 (20	, ##a) */
34/* #define V850_SIM_SYS_isatty(a...)	V850_SIM_SYSCALL_1 (21	, ##a) */
35/* #define V850_SIM_SYS_fstat(a...)	V850_SIM_SYSCALL_1 (22	, ##a) */
36#define V850_SIM_SYS_time(a...)		V850_SIM_SYSCALL_1 (23	, ##a)
37#define V850_SIM_SYS_poll(a...)		V850_SIM_SYSCALL_3 (24	, ##a)
38#define V850_SIM_SYS_stat(a...)		V850_SIM_SYSCALL_2 (38	, ##a)
39#define V850_SIM_SYS_pipe(a...)		V850_SIM_SYSCALL_1 (42	, ##a)
40#define V850_SIM_SYS_times(a...)	V850_SIM_SYSCALL_1 (43	, ##a)
41#define V850_SIM_SYS_execve(a...)	V850_SIM_SYSCALL_3 (59	, ##a)
42#define V850_SIM_SYS_gettimeofday(a...)	V850_SIM_SYSCALL_2 (116	, ##a)
43/* #define V850_SIM_SYS_utime(a...)	V850_SIM_SYSCALL_2 (201	, ##a) */
44/* #define V850_SIM_SYS_wait(a...)	V850_SIM_SYSCALL_1 (202	, ##a) */
45
46#define V850_SIM_SYS_make_raw(a...)	V850_SIM_SYSCALL_1 (1024 , ##a)
47
48
49#define V850_SIM_SYSCALL_0(_call)					      \
50({									      \
51	register int call __asm__ ("r6") = _call;			      \
52	register int rval __asm__ ("r10");				      \
53	__asm__ __volatile__ ("trap 31"					      \
54			      : "=r" (rval)				      \
55			      : "r" (call)				      \
56			      : "r11", "memory");			      \
57	rval;								      \
58})
59#define V850_SIM_SYSCALL_1(_call, _arg0)				      \
60({									      \
61	register int call __asm__ ("r6") = _call;			      \
62	register long arg0 __asm__ ("r7") = (long)_arg0;		      \
63	register int rval __asm__ ("r10");				      \
64	__asm__ __volatile__ ("trap 31"					      \
65			      : "=r" (rval)				      \
66			      : "r" (call), "r" (arg0)			      \
67			      : "r11", "memory");			      \
68	rval;								      \
69})
70#define V850_SIM_SYSCALL_2(_call, _arg0, _arg1)				      \
71({									      \
72	register int call __asm__ ("r6") = _call;			      \
73	register long arg0 __asm__ ("r7") = (long)_arg0;		      \
74	register long arg1 __asm__ ("r8") = (long)_arg1;		      \
75	register int rval __asm__ ("r10");				      \
76	__asm__ __volatile__ ("trap 31"					      \
77			      : "=r" (rval)				      \
78			      : "r" (call), "r" (arg0), "r" (arg1)	      \
79			      : "r11", "memory");			      \
80	rval;								      \
81})
82#define V850_SIM_SYSCALL_3(_call, _arg0, _arg1, _arg2)			      \
83({									      \
84	register int call __asm__ ("r6") = _call;			      \
85	register long arg0 __asm__ ("r7") = (long)_arg0;		      \
86	register long arg1 __asm__ ("r8") = (long)_arg1;		      \
87	register long arg2 __asm__ ("r9") = (long)_arg2;		      \
88	register int rval __asm__ ("r10");				      \
89	__asm__ __volatile__ ("trap 31"					      \
90			      : "=r" (rval)				      \
91			      : "r" (call), "r" (arg0), "r" (arg1), "r" (arg2)\
92			      : "r11", "memory");			      \
93	rval;								      \
94})
95
96#define V850_SIM_SYSCALL(call, args...) \
97   V850_SIM_SYS_##call (args)
98
99#endif /* __V850_SIMSYSCALL_H__ */
100