simsyscall.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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. #ifndef __V850_SIMSYSCALL_H__
  14. #define __V850_SIMSYSCALL_H__
  15. #define V850_SIM_SYS_exit(a...) V850_SIM_SYSCALL_1 (1 , ##a)
  16. #define V850_SIM_SYS_fork(a...) V850_SIM_SYSCALL_0 (2 , ##a)
  17. #define V850_SIM_SYS_read(a...) V850_SIM_SYSCALL_3 (3 , ##a)
  18. #define V850_SIM_SYS_write(a...) V850_SIM_SYSCALL_3 (4 , ##a)
  19. #define V850_SIM_SYS_open(a...) V850_SIM_SYSCALL_2 (5 , ##a)
  20. #define V850_SIM_SYS_close(a...) V850_SIM_SYSCALL_1 (6 , ##a)
  21. #define V850_SIM_SYS_wait4(a...) V850_SIM_SYSCALL_4 (7 , ##a)
  22. /* #define V850_SIM_SYS_creat(a...) V850_SIM_SYSCALL_1 (8 , ##a) */
  23. /* #define V850_SIM_SYS_link(a...) V850_SIM_SYSCALL_1 (9 , ##a) */
  24. /* #define V850_SIM_SYS_unlink(a...) V850_SIM_SYSCALL_1 (10 , ##a) */
  25. #define V850_SIM_SYS_execv(a...) V850_SIM_SYSCALL_2 (11 , ##a)
  26. /* #define V850_SIM_SYS_chdir(a...) V850_SIM_SYSCALL_1 (12 , ##a) */
  27. /* #define V850_SIM_SYS_mknod(a...) V850_SIM_SYSCALL_1 (14 , ##a) */
  28. #define V850_SIM_SYS_chmod(a...) V850_SIM_SYSCALL_2 (15 , ##a)
  29. #define V850_SIM_SYS_chown(a...) V850_SIM_SYSCALL_2 (16 , ##a)
  30. #define V850_SIM_SYS_lseek(a...) V850_SIM_SYSCALL_3 (19 , ##a)
  31. /* #define V850_SIM_SYS_getpid(a...) V850_SIM_SYSCALL_1 (20 , ##a) */
  32. /* #define V850_SIM_SYS_isatty(a...) V850_SIM_SYSCALL_1 (21 , ##a) */
  33. /* #define V850_SIM_SYS_fstat(a...) V850_SIM_SYSCALL_1 (22 , ##a) */
  34. #define V850_SIM_SYS_time(a...) V850_SIM_SYSCALL_1 (23 , ##a)
  35. #define V850_SIM_SYS_poll(a...) V850_SIM_SYSCALL_3 (24 , ##a)
  36. #define V850_SIM_SYS_stat(a...) V850_SIM_SYSCALL_2 (38 , ##a)
  37. #define V850_SIM_SYS_pipe(a...) V850_SIM_SYSCALL_1 (42 , ##a)
  38. #define V850_SIM_SYS_times(a...) V850_SIM_SYSCALL_1 (43 , ##a)
  39. #define V850_SIM_SYS_execve(a...) V850_SIM_SYSCALL_3 (59 , ##a)
  40. #define V850_SIM_SYS_gettimeofday(a...) V850_SIM_SYSCALL_2 (116 , ##a)
  41. /* #define V850_SIM_SYS_utime(a...) V850_SIM_SYSCALL_2 (201 , ##a) */
  42. /* #define V850_SIM_SYS_wait(a...) V850_SIM_SYSCALL_1 (202 , ##a) */
  43. #define V850_SIM_SYS_make_raw(a...) V850_SIM_SYSCALL_1 (1024 , ##a)
  44. #define V850_SIM_SYSCALL_0(_call) \
  45. ({ \
  46. register int call __asm__ ("r6") = _call; \
  47. register int rval __asm__ ("r10"); \
  48. __asm__ __volatile__ ("trap 31" \
  49. : "=r" (rval) \
  50. : "r" (call) \
  51. : "r11", "memory"); \
  52. rval; \
  53. })
  54. #define V850_SIM_SYSCALL_1(_call, _arg0) \
  55. ({ \
  56. register int call __asm__ ("r6") = _call; \
  57. register long arg0 __asm__ ("r7") = (long)_arg0; \
  58. register int rval __asm__ ("r10"); \
  59. __asm__ __volatile__ ("trap 31" \
  60. : "=r" (rval) \
  61. : "r" (call), "r" (arg0) \
  62. : "r11", "memory"); \
  63. rval; \
  64. })
  65. #define V850_SIM_SYSCALL_2(_call, _arg0, _arg1) \
  66. ({ \
  67. register int call __asm__ ("r6") = _call; \
  68. register long arg0 __asm__ ("r7") = (long)_arg0; \
  69. register long arg1 __asm__ ("r8") = (long)_arg1; \
  70. register int rval __asm__ ("r10"); \
  71. __asm__ __volatile__ ("trap 31" \
  72. : "=r" (rval) \
  73. : "r" (call), "r" (arg0), "r" (arg1) \
  74. : "r11", "memory"); \
  75. rval; \
  76. })
  77. #define V850_SIM_SYSCALL_3(_call, _arg0, _arg1, _arg2) \
  78. ({ \
  79. register int call __asm__ ("r6") = _call; \
  80. register long arg0 __asm__ ("r7") = (long)_arg0; \
  81. register long arg1 __asm__ ("r8") = (long)_arg1; \
  82. register long arg2 __asm__ ("r9") = (long)_arg2; \
  83. register int rval __asm__ ("r10"); \
  84. __asm__ __volatile__ ("trap 31" \
  85. : "=r" (rval) \
  86. : "r" (call), "r" (arg0), "r" (arg1), "r" (arg2)\
  87. : "r11", "memory"); \
  88. rval; \
  89. })
  90. #define V850_SIM_SYSCALL(call, args...) \
  91. V850_SIM_SYS_##call (args)
  92. #endif /* __V850_SIMSYSCALL_H__ */