1// Copyright 2016 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 7#include "textflag.h" 8#include "funcdata.h" 9 10// 11// Syscall9 support for AMD64, DragonFly, FreeBSD and NetBSD 12// 13 14// func Syscall9(trap int64, a1, a2, a3, a4, a5, a6, a7, a8, a9 int64) (r1, r2, err int64); 15TEXT ·Syscall9(SB),NOSPLIT,$32-104 16 NO_LOCAL_POINTERS 17 CALL runtime·entersyscall<ABIInternal>(SB) 18 MOVQ num+0(FP), AX // syscall entry 19 MOVQ a1+8(FP), DI 20 MOVQ a2+16(FP), SI 21 MOVQ a3+24(FP), DX 22 MOVQ a4+32(FP), R10 23 MOVQ a5+40(FP), R8 24 MOVQ a6+48(FP), R9 25 MOVQ a7+56(FP), R11 26 MOVQ a8+64(FP), R12 27 MOVQ a9+72(FP), R13 28 29 // only the first 6 arguments can be passed in registers, 30 // the last three should be placed at the top of the stack. 31 MOVQ R11, 8(SP) // arg 7 32 MOVQ R12, 16(SP) // arg 8 33 MOVQ R13, 24(SP) // arg 9 34 35 SYSCALL 36 JCC ok9 37 MOVQ $-1, r1+80(FP) // r1 38 MOVQ $0, r2+88(FP) // r2 39 MOVQ AX, err+96(FP) // errno 40 CALL runtime·exitsyscall<ABIInternal>(SB) 41 RET 42ok9: 43 MOVQ AX, r1+80(FP) // r1 44 MOVQ DX, r2+88(FP) // r2 45 MOVQ $0, err+96(FP) // errno 46 CALL runtime·exitsyscall<ABIInternal>(SB) 47 RET 48