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