github.com/go-darwin/sys@v0.0.0-20220510002607-68fd01f054ca/crosscall2_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 "textflag.h"
     6  #include "abi_amd64.h"
     7  
     8  // crosscall2 called by C code generated by cmd/cgo.
     9  // func crosscall2(fn, a unsafe.Pointer, n int32, ctxt uintptr)
    10  // Saves C callee-saved registers and calls cgocallback with three arguments.
    11  // fn is the PC of a func(a unsafe.Pointer) function.
    12  // This signature is known to SWIG, so we can't change it.
    13  TEXT _crosscall2(SB),NOSPLIT,$0-0
    14  	PUSH_REGS_HOST_TO_ABI0()
    15  
    16  	// Make room for arguments to cgocallback.
    17  	ADJSP	$0x18
    18  #ifndef GOOS_windows
    19  	MOVQ	DI, 0x0(SP)	/* fn */
    20  	MOVQ	SI, 0x8(SP)	/* arg */
    21  	// Skip n in DX.
    22  	MOVQ	CX, 0x10(SP)	/* ctxt */
    23  #else
    24  	MOVQ	CX, 0x0(SP)	/* fn */
    25  	MOVQ	DX, 0x8(SP)	/* arg */
    26  	// Skip n in R8.
    27  	MOVQ	R9, 0x10(SP)	/* ctxt */
    28  #endif
    29  
    30  	CALL	runtime·cgocallback(SB)
    31  
    32  	ADJSP	$-0x18
    33  	POP_REGS_HOST_TO_ABI0()
    34  	RET