github.com/ader1990/go@v0.0.0-20140630135419-8c24447fa791/src/pkg/syscall/asm_dragonfly_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 #include "../../cmd/ld/textflag.h" 6 7 // 8 // System call support for AMD64, DragonFly 9 // 10 11 // func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64); 12 // func Syscall6(trap int64, a1, a2, a3, a4, a5, a6 int64) (r1, r2, err int64); 13 // func Syscall9(trap int64, a1, a2, a3, a4, a5, a6, a7, a8, a9 int64) (r1, r2, err int64) 14 // Trap # in AX, args in DI SI DX, return in AX DX 15 16 TEXT ·Syscall(SB),NOSPLIT,$0-64 17 CALL runtime·entersyscall(SB) 18 MOVQ 16(SP), DI 19 MOVQ 24(SP), SI 20 MOVQ 32(SP), DX 21 MOVQ $0, R10 22 MOVQ $0, R8 23 MOVQ $0, R9 24 MOVQ 8(SP), AX // syscall entry 25 SYSCALL 26 JCC ok 27 MOVQ $-1, 40(SP) // r1 28 MOVQ $0, 48(SP) // r2 29 MOVQ AX, 56(SP) // errno 30 CALL runtime·exitsyscall(SB) 31 RET 32 ok: 33 MOVQ AX, 40(SP) // r1 34 MOVQ DX, 48(SP) // r2 35 MOVQ $0, 56(SP) // errno 36 CALL runtime·exitsyscall(SB) 37 RET 38 39 TEXT ·Syscall6(SB),NOSPLIT,$0-88 40 CALL runtime·entersyscall(SB) 41 MOVQ 16(SP), DI 42 MOVQ 24(SP), SI 43 MOVQ 32(SP), DX 44 MOVQ 40(SP), R10 45 MOVQ 48(SP), R8 46 MOVQ 56(SP), R9 47 MOVQ 8(SP), AX // syscall entry 48 SYSCALL 49 JCC ok6 50 MOVQ $-1, 64(SP) // r1 51 MOVQ $0, 72(SP) // r2 52 MOVQ AX, 80(SP) // errno 53 CALL runtime·exitsyscall(SB) 54 RET 55 ok6: 56 MOVQ AX, 64(SP) // r1 57 MOVQ DX, 72(SP) // r2 58 MOVQ $0, 80(SP) // errno 59 CALL runtime·exitsyscall(SB) 60 RET 61 62 TEXT ·Syscall9(SB),NOSPLIT,$0-112 63 CALL runtime·entersyscall(SB) 64 MOVQ 8(SP), AX 65 MOVQ 16(SP), DI 66 MOVQ 24(SP), SI 67 MOVQ 32(SP), DX 68 MOVQ 40(SP), R10 69 MOVQ 48(SP), R8 70 MOVQ 56(SP), R9 71 72 // shift around the last three arguments so they're at the 73 // top of the stack when the syscall is called. 74 MOVQ 64(SP), R11 // arg 7 75 MOVQ R11, 8(SP) 76 MOVQ 72(SP), R11 // arg 8 77 MOVQ R11, 16(SP) 78 MOVQ 80(SP), R11 // arg 9 79 MOVQ R11, 24(SP) 80 81 SYSCALL 82 JCC ok9 83 MOVQ $-1, 88(SP) // r1 84 MOVQ $0, 96(SP) // r2 85 MOVQ AX, 104(SP) // errno 86 CALL runtime·exitsyscall(SB) 87 RET 88 ok9: 89 MOVQ AX, 88(SP) // r1 90 MOVQ DX, 96(SP) // r2 91 MOVQ $0, 104(SP) // errno 92 CALL runtime·exitsyscall(SB) 93 RET 94 95 TEXT ·RawSyscall(SB),NOSPLIT,$0-64 96 MOVQ 16(SP), DI 97 MOVQ 24(SP), SI 98 MOVQ 32(SP), DX 99 MOVQ $0, R10 100 MOVQ $0, R8 101 MOVQ $0, R9 102 MOVQ 8(SP), AX // syscall entry 103 SYSCALL 104 JCC ok1 105 MOVQ $-1, 40(SP) // r1 106 MOVQ $0, 48(SP) // r2 107 MOVQ AX, 56(SP) // errno 108 RET 109 ok1: 110 MOVQ AX, 40(SP) // r1 111 MOVQ DX, 48(SP) // r2 112 MOVQ $0, 56(SP) // errno 113 RET 114 115 TEXT ·RawSyscall6(SB),NOSPLIT,$0-88 116 MOVQ 16(SP), DI 117 MOVQ 24(SP), SI 118 MOVQ 32(SP), DX 119 MOVQ 40(SP), R10 120 MOVQ 48(SP), R8 121 MOVQ 56(SP), R9 122 MOVQ 8(SP), AX // syscall entry 123 SYSCALL 124 JCC ok2 125 MOVQ $-1, 64(SP) // r1 126 MOVQ $0, 72(SP) // r2 127 MOVQ AX, 80(SP) // errno 128 RET 129 ok2: 130 MOVQ AX, 64(SP) // r1 131 MOVQ DX, 72(SP) // r2 132 MOVQ $0, 80(SP) // errno 133 RET