asm_dragonfly_386.s 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. // Copyright 2009 The Go Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. #include "textflag.h"
  5. //
  6. // System call support for 386, FreeBSD
  7. //
  8. // func Syscall(trap int32, a1, a2, a3 int32) (r1, r2, err int32);
  9. // func Syscall6(trap int32, a1, a2, a3, a4, a5, a6 int32) (r1, r2, err int32);
  10. // Trap # in AX, args on stack above caller pc.
  11. TEXT ·Syscall(SB),NOSPLIT,$0-32
  12. CALL runtime·entersyscall(SB)
  13. MOVL 4(SP), AX // syscall entry
  14. // slide args down on top of system call number
  15. LEAL 8(SP), SI
  16. LEAL 4(SP), DI
  17. CLD
  18. MOVSL
  19. MOVSL
  20. MOVSL
  21. INT $0x80
  22. JAE ok
  23. MOVL $-1, 20(SP) // r1
  24. MOVL $-1, 24(SP) // r2
  25. MOVL AX, 28(SP) // errno
  26. CALL runtime·exitsyscall(SB)
  27. RET
  28. ok:
  29. MOVL AX, 20(SP) // r1
  30. MOVL DX, 24(SP) // r2
  31. MOVL $0, 28(SP) // errno
  32. CALL runtime·exitsyscall(SB)
  33. RET
  34. TEXT ·Syscall6(SB),NOSPLIT,$0-44
  35. CALL runtime·entersyscall(SB)
  36. MOVL 4(SP), AX // syscall entry
  37. // slide args down on top of system call number
  38. LEAL 8(SP), SI
  39. LEAL 4(SP), DI
  40. CLD
  41. MOVSL
  42. MOVSL
  43. MOVSL
  44. MOVSL
  45. MOVSL
  46. MOVSL
  47. INT $0x80
  48. JAE ok6
  49. MOVL $-1, 32(SP) // r1
  50. MOVL $-1, 36(SP) // r2
  51. MOVL AX, 40(SP) // errno
  52. CALL runtime·exitsyscall(SB)
  53. RET
  54. ok6:
  55. MOVL AX, 32(SP) // r1
  56. MOVL DX, 36(SP) // r2
  57. MOVL $0, 40(SP) // errno
  58. CALL runtime·exitsyscall(SB)
  59. RET
  60. TEXT ·Syscall9(SB),NOSPLIT,$0-56
  61. CALL runtime·entersyscall(SB)
  62. MOVL 4(SP), AX // syscall entry
  63. // slide args down on top of system call number
  64. LEAL 8(SP), SI
  65. LEAL 4(SP), DI
  66. CLD
  67. MOVSL
  68. MOVSL
  69. MOVSL
  70. MOVSL
  71. MOVSL
  72. MOVSL
  73. MOVSL
  74. MOVSL
  75. MOVSL
  76. INT $0x80
  77. JAE ok9
  78. MOVL $-1, 44(SP) // r1
  79. MOVL $-1, 48(SP) // r2
  80. MOVL AX, 52(SP) // errno
  81. CALL runtime·exitsyscall(SB)
  82. RET
  83. ok9:
  84. MOVL AX, 44(SP) // r1
  85. MOVL DX, 48(SP) // r2
  86. MOVL $0, 52(SP) // errno
  87. CALL runtime·exitsyscall(SB)
  88. RET
  89. TEXT ·RawSyscall(SB),NOSPLIT,$0-32
  90. MOVL 4(SP), AX // syscall entry
  91. // slide args down on top of system call number
  92. LEAL 8(SP), SI
  93. LEAL 4(SP), DI
  94. CLD
  95. MOVSL
  96. MOVSL
  97. MOVSL
  98. INT $0x80
  99. JAE ok1
  100. MOVL $-1, 20(SP) // r1
  101. MOVL $-1, 24(SP) // r2
  102. MOVL AX, 28(SP) // errno
  103. RET
  104. ok1:
  105. MOVL AX, 20(SP) // r1
  106. MOVL DX, 24(SP) // r2
  107. MOVL $0, 28(SP) // errno
  108. RET
  109. TEXT ·RawSyscall6(SB),NOSPLIT,$0-44
  110. MOVL 4(SP), AX // syscall entry
  111. // slide args down on top of system call number
  112. LEAL 8(SP), SI
  113. LEAL 4(SP), DI
  114. CLD
  115. MOVSL
  116. MOVSL
  117. MOVSL
  118. MOVSL
  119. MOVSL
  120. MOVSL
  121. INT $0x80
  122. JAE ok2
  123. MOVL $-1, 32(SP) // r1
  124. MOVL $-1, 36(SP) // r2
  125. MOVL AX, 40(SP) // errno
  126. RET
  127. ok2:
  128. MOVL AX, 32(SP) // r1
  129. MOVL DX, 36(SP) // r2
  130. MOVL $0, 40(SP) // errno
  131. RET