github.com/varialus/godfly@v0.0.0-20130904042352-1934f9f095ab/src/pkg/syscall/asm_openbsd_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, OpenBSD 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 8(SP), AX // syscall entry 19 MOVQ 16(SP), DI 20 MOVQ 24(SP), SI 21 MOVQ 32(SP), DX 22 MOVQ $0, R10 23 MOVQ $0, R8 24 MOVQ $0, R9 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 8(SP), AX // syscall entry 42 MOVQ 16(SP), DI 43 MOVQ 24(SP), SI 44 MOVQ 32(SP), DX 45 MOVQ 40(SP), R10 46 MOVQ 48(SP), R8 47 MOVQ 56(SP), R9 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 // syscall entry 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 MOVQ 64(SP), R11 72 MOVQ 72(SP), R12 73 MOVQ 80(SP), R13 74 SUBQ $32, SP 75 MOVQ R11, 8(SP) // arg 7 76 MOVQ R12, 16(SP) // arg 8 77 MOVQ R13, 24(SP) // arg 9 78 SYSCALL 79 JCC ok9 80 ADDQ $32, SP 81 MOVQ $-1, 88(SP) // r1 82 MOVQ $0, 96(SP) // r2 83 MOVQ AX, 104(SP) // errno 84 CALL runtime·exitsyscall(SB) 85 RET 86 ok9: 87 ADDQ $32, SP 88 MOVQ AX, 88(SP) // r1 89 MOVQ DX, 96(SP) // r2 90 MOVQ $0, 104(SP) // errno 91 CALL runtime·exitsyscall(SB) 92 RET 93 94 TEXT ·RawSyscall(SB),NOSPLIT,$0-64 95 MOVQ 16(SP), DI 96 MOVQ 24(SP), SI 97 MOVQ 32(SP), DX 98 MOVQ $0, R10 99 MOVQ $0, R8 100 MOVQ $0, R9 101 MOVQ 8(SP), AX // syscall entry 102 SYSCALL 103 JCC ok1 104 MOVQ $-1, 40(SP) // r1 105 MOVQ $0, 48(SP) // r2 106 MOVQ AX, 56(SP) // errno 107 RET 108 ok1: 109 MOVQ AX, 40(SP) // r1 110 MOVQ DX, 48(SP) // r2 111 MOVQ $0, 56(SP) // errno 112 RET 113 114 TEXT ·RawSyscall6(SB),NOSPLIT,$0-88 115 MOVQ 16(SP), DI 116 MOVQ 24(SP), SI 117 MOVQ 32(SP), DX 118 MOVQ 40(SP), R10 119 MOVQ 48(SP), R8 120 MOVQ 56(SP), R9 121 MOVQ 8(SP), AX // syscall entry 122 SYSCALL 123 JCC ok2 124 MOVQ $-1, 64(SP) // r1 125 MOVQ $0, 72(SP) // r2 126 MOVQ AX, 80(SP) // errno 127 RET 128 ok2: 129 MOVQ AX, 64(SP) // r1 130 MOVQ DX, 72(SP) // r2 131 MOVQ $0, 80(SP) // errno 132 RET