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