asm_darwin_amd64.s 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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. // TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP)
  5. // so that go vet can check that they are correct.
  6. #include "../../cmd/ld/textflag.h"
  7. //
  8. // System call support for AMD64, Darwin
  9. //
  10. // func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64);
  11. // func Syscall6(trap int64, a1, a2, a3, a4, a5, a6 int64) (r1, r2, err int64);
  12. // Trap # in AX, args in DI SI DX, return in AX DX
  13. TEXT ·Syscall(SB),NOSPLIT,$0-56
  14. CALL runtime·entersyscall(SB)
  15. MOVQ 16(SP), DI
  16. MOVQ 24(SP), SI
  17. MOVQ 32(SP), DX
  18. MOVQ $0, R10
  19. MOVQ $0, R8
  20. MOVQ $0, R9
  21. MOVQ 8(SP), AX // syscall entry
  22. ADDQ $0x2000000, AX
  23. SYSCALL
  24. JCC ok
  25. MOVQ $-1, 40(SP) // r1
  26. MOVQ $0, 48(SP) // r2
  27. MOVQ AX, 56(SP) // errno
  28. CALL runtime·exitsyscall(SB)
  29. RET
  30. ok:
  31. MOVQ AX, 40(SP) // r1
  32. MOVQ DX, 48(SP) // r2
  33. MOVQ $0, 56(SP) // errno
  34. CALL runtime·exitsyscall(SB)
  35. RET
  36. TEXT ·Syscall6(SB),NOSPLIT,$0-80
  37. CALL runtime·entersyscall(SB)
  38. MOVQ 16(SP), DI
  39. MOVQ 24(SP), SI
  40. MOVQ 32(SP), DX
  41. MOVQ 40(SP), R10
  42. MOVQ 48(SP), R8
  43. MOVQ 56(SP), R9
  44. MOVQ 8(SP), AX // syscall entry
  45. ADDQ $0x2000000, AX
  46. SYSCALL
  47. JCC ok6
  48. MOVQ $-1, 64(SP) // r1
  49. MOVQ $0, 72(SP) // r2
  50. MOVQ AX, 80(SP) // errno
  51. CALL runtime·exitsyscall(SB)
  52. RET
  53. ok6:
  54. MOVQ AX, 64(SP) // r1
  55. MOVQ DX, 72(SP) // r2
  56. MOVQ $0, 80(SP) // errno
  57. CALL runtime·exitsyscall(SB)
  58. RET
  59. TEXT ·RawSyscall(SB),NOSPLIT,$0-56
  60. MOVQ 16(SP), DI
  61. MOVQ 24(SP), SI
  62. MOVQ 32(SP), DX
  63. MOVQ $0, R10
  64. MOVQ $0, R8
  65. MOVQ $0, R9
  66. MOVQ 8(SP), AX // syscall entry
  67. ADDQ $0x2000000, AX
  68. SYSCALL
  69. JCC ok1
  70. MOVQ $-1, 40(SP) // r1
  71. MOVQ $0, 48(SP) // r2
  72. MOVQ AX, 56(SP) // errno
  73. RET
  74. ok1:
  75. MOVQ AX, 40(SP) // r1
  76. MOVQ DX, 48(SP) // r2
  77. MOVQ $0, 56(SP) // errno
  78. RET
  79. TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
  80. MOVQ 16(SP), DI
  81. MOVQ 24(SP), SI
  82. MOVQ 32(SP), DX
  83. MOVQ 40(SP), R10
  84. MOVQ 48(SP), R8
  85. MOVQ 56(SP), R9
  86. MOVQ 8(SP), AX // syscall entry
  87. ADDQ $0x2000000, AX
  88. SYSCALL
  89. JCC ok2
  90. MOVQ $-1, 64(SP) // r1
  91. MOVQ $0, 72(SP) // r2
  92. MOVQ AX, 80(SP) // errno
  93. RET
  94. ok2:
  95. MOVQ AX, 64(SP) // r1
  96. MOVQ DX, 72(SP) // r2
  97. MOVQ $0, 80(SP) // errno
  98. RET