root/src/pkg/syscall/asm_dragonfly_amd64.s

/* [<][>][^][v][top][bottom][index][help] */
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

#include "../../cmd/ld/textflag.h"

//
// System call support for AMD64, DragonFly
//

// func Syscall(trap int64, a1, a2, a3 int64) (r1, r2, err int64);
// func Syscall6(trap int64, a1, a2, a3, a4, a5, a6 int64) (r1, r2, err int64);
// func Syscall9(trap int64, a1, a2, a3, a4, a5, a6, a7, a8, a9 int64) (r1, r2, err int64)
// Trap # in AX, args in DI SI DX, return in AX DX

TEXT    ·Syscall(SB),NOSPLIT,$0-64
        CALL    runtime·entersyscall(SB)
        MOVQ    16(SP), DI
        MOVQ    24(SP), SI
        MOVQ    32(SP), DX
        MOVQ    $0, R10
        MOVQ    $0, R8
        MOVQ    $0, R9
        MOVQ    8(SP), AX       // syscall entry
        SYSCALL
        JCC     ok
        MOVQ    $-1, 40(SP)     // r1
        MOVQ    $0, 48(SP)      // r2
        MOVQ    AX, 56(SP)  // errno
        CALL    runtime·exitsyscall(SB)
        RET
ok:
        MOVQ    AX, 40(SP)      // r1
        MOVQ    DX, 48(SP)      // r2
        MOVQ    $0, 56(SP)      // errno
        CALL    runtime·exitsyscall(SB)
        RET

TEXT    ·Syscall6(SB),NOSPLIT,$0-88
        CALL    runtime·entersyscall(SB)
        MOVQ    16(SP), DI
        MOVQ    24(SP), SI
        MOVQ    32(SP), DX
        MOVQ    40(SP), R10
        MOVQ    48(SP), R8
        MOVQ    56(SP), R9
        MOVQ    8(SP), AX       // syscall entry
        SYSCALL
        JCC     ok6
        MOVQ    $-1, 64(SP)     // r1
        MOVQ    $0, 72(SP)      // r2
        MOVQ    AX, 80(SP)  // errno
        CALL    runtime·exitsyscall(SB)
        RET
ok6:
        MOVQ    AX, 64(SP)      // r1
        MOVQ    DX, 72(SP)      // r2
        MOVQ    $0, 80(SP)      // errno
        CALL    runtime·exitsyscall(SB)
        RET

TEXT    ·Syscall9(SB),NOSPLIT,$0-112
        CALL    runtime·entersyscall(SB)
        MOVQ    8(SP), AX
        MOVQ    16(SP), DI
        MOVQ    24(SP), SI
        MOVQ    32(SP), DX
        MOVQ    40(SP), R10
        MOVQ    48(SP), R8
        MOVQ    56(SP), R9

        // shift around the last three arguments so they're at the
        // top of the stack when the syscall is called.
        MOVQ    64(SP), R11 // arg 7
        MOVQ    R11, 8(SP)
        MOVQ    72(SP), R11 // arg 8
        MOVQ    R11, 16(SP)
        MOVQ    80(SP), R11 // arg 9
        MOVQ    R11, 24(SP)

        SYSCALL
        JCC     ok9
        MOVQ    $-1, 88(SP)     // r1
        MOVQ    $0, 96(SP)      // r2
        MOVQ    AX, 104(SP)  // errno
        CALL    runtime·exitsyscall(SB)
        RET
ok9:
        MOVQ    AX, 88(SP)      // r1
        MOVQ    DX, 96(SP)      // r2
        MOVQ    $0, 104(SP)     // errno
        CALL    runtime·exitsyscall(SB)
        RET

TEXT ·RawSyscall(SB),NOSPLIT,$0-64
        MOVQ    16(SP), DI
        MOVQ    24(SP), SI
        MOVQ    32(SP), DX
        MOVQ    $0, R10
        MOVQ    $0, R8
        MOVQ    $0, R9
        MOVQ    8(SP), AX       // syscall entry
        SYSCALL
        JCC     ok1
        MOVQ    $-1, 40(SP)     // r1
        MOVQ    $0, 48(SP)      // r2
        MOVQ    AX, 56(SP)  // errno
        RET
ok1:
        MOVQ    AX, 40(SP)      // r1
        MOVQ    DX, 48(SP)      // r2
        MOVQ    $0, 56(SP)      // errno
        RET

TEXT    ·RawSyscall6(SB),NOSPLIT,$0-88
        MOVQ    16(SP), DI
        MOVQ    24(SP), SI
        MOVQ    32(SP), DX
        MOVQ    40(SP), R10
        MOVQ    48(SP), R8
        MOVQ    56(SP), R9
        MOVQ    8(SP), AX       // syscall entry
        SYSCALL
        JCC     ok2
        MOVQ    $-1, 64(SP)     // r1
        MOVQ    $0, 72(SP)      // r2
        MOVQ    AX, 80(SP)  // errno
        RET
ok2:
        MOVQ    AX, 64(SP)      // r1
        MOVQ    DX, 72(SP)      // r2
        MOVQ    $0, 80(SP)      // errno
        RET

/* [<][>][^][v][top][bottom][index][help] */