github.com/code-reading/golang@v0.0.0-20220303082512-ba5bc0e589a3/go/src/syscall/asm_unix_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 //go:build dragonfly || freebsd || netbsd 6 // +build dragonfly freebsd netbsd 7 8 #include "textflag.h" 9 #include "funcdata.h" 10 11 // 12 // System call support for AMD64 unixes 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 trap+0(FP), AX // syscall entry 22 MOVQ a1+8(FP), DI 23 MOVQ a2+16(FP), SI 24 MOVQ a3+24(FP), DX 25 SYSCALL 26 JCC ok 27 MOVQ $-1, r1+32(FP) // r1 28 MOVQ $0, r2+40(FP) // r2 29 MOVQ AX, err+48(FP) // errno 30 CALL runtime·exitsyscall(SB) 31 RET 32 ok: 33 MOVQ AX, r1+32(FP) // r1 34 MOVQ DX, r2+40(FP) // r2 35 MOVQ $0, err+48(FP) // errno 36 CALL runtime·exitsyscall(SB) 37 RET 38 39 TEXT ·Syscall6(SB),NOSPLIT,$0-80 40 CALL runtime·entersyscall(SB) 41 MOVQ trap+0(FP), AX // syscall entry 42 MOVQ a1+8(FP), DI 43 MOVQ a2+16(FP), SI 44 MOVQ a3+24(FP), DX 45 MOVQ a4+32(FP), R10 46 MOVQ a5+40(FP), R8 47 MOVQ a6+48(FP), R9 48 SYSCALL 49 JCC ok6 50 MOVQ $-1, r1+56(FP) // r1 51 MOVQ $0, r2+64(FP) // r2 52 MOVQ AX, err+72(FP) // errno 53 CALL runtime·exitsyscall(SB) 54 RET 55 ok6: 56 MOVQ AX, r1+56(FP) // r1 57 MOVQ DX, r2+64(FP) // r2 58 MOVQ $0, err+72(FP) // errno 59 CALL runtime·exitsyscall(SB) 60 RET 61 62 TEXT ·RawSyscall(SB),NOSPLIT,$0-56 63 MOVQ a1+8(FP), DI 64 MOVQ a2+16(FP), SI 65 MOVQ a3+24(FP), DX 66 MOVQ trap+0(FP), AX // syscall entry 67 SYSCALL 68 JCC ok1 69 MOVQ $-1, r1+32(FP) // r1 70 MOVQ $0, r2+40(FP) // r2 71 MOVQ AX, err+48(FP) // errno 72 RET 73 ok1: 74 MOVQ AX, r1+32(FP) // r1 75 MOVQ DX, r2+40(FP) // r2 76 MOVQ $0, err+48(FP) // errno 77 RET 78 79 TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 80 MOVQ a1+8(FP), DI 81 MOVQ a2+16(FP), SI 82 MOVQ a3+24(FP), DX 83 MOVQ a4+32(FP), R10 84 MOVQ a5+40(FP), R8 85 MOVQ a6+48(FP), R9 86 MOVQ trap+0(FP), AX // syscall entry 87 SYSCALL 88 JCC ok2 89 MOVQ $-1, r1+56(FP) // r1 90 MOVQ $0, r2+64(FP) // r2 91 MOVQ AX, err+72(FP) // errno 92 RET 93 ok2: 94 MOVQ AX, r1+56(FP) // r1 95 MOVQ DX, r2+64(FP) // r2 96 MOVQ $0, err+72(FP) // errno 97 RET