// 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.

/*
 * Apple still insists on underscore prefixes for C function names.
 */
#if defined(__APPLE__) || defined(_WIN32)
#define EXT(s) _##s
#else
#define EXT(s) s
#endif

/*
 * void crosscall_amd64(void (*fn)(void))
 *
 * Calling into the 6c tool chain, where all registers are caller save.
 * Called from standard x86-64 ABI, where %rbx, %rbp, %r12-%r15
 * are callee-save so they must be saved explicitly.
 * The standard x86-64 ABI passes the three arguments m, g, fn
 * in %rdi, %rsi, %rdx.
 *
 * Also need to set %r15 to g and %r14 to m (see ../pkg/runtime/mkasmh.sh)
 * during the call.
 */
.globl EXT(crosscall_amd64)
EXT(crosscall_amd64):
	pushq %rbx
	pushq %rbp
	pushq %r12
	pushq %r13
	pushq %r14
	pushq %r15

#if defined(_WIN64)
	call *%rcx	/* fn */
#else
	call *%rdi	/* fn */
#endif

	popq %r15
	popq %r14
	popq %r13
	popq %r12
	popq %rbp
	popq %rbx
	ret

/*
 * void crosscall2(void (*fn)(void*, int32), void *arg, int32 argsize)
 *
 * Save registers and call fn with two arguments.  fn is a Go function
 * which takes parameters on the stack rather than in registers.
 */
.globl EXT(crosscall2)
EXT(crosscall2):
	subq  $0x58, %rsp	/* keeps stack pointer 32-byte aligned */
	movq  %rbx, 0x10(%rsp)
	movq  %rbp, 0x18(%rsp)
	movq  %r12, 0x20(%rsp)
	movq  %r13, 0x28(%rsp)
	movq  %r14, 0x30(%rsp)
	movq  %r15, 0x38(%rsp)

#if defined(_WIN64)
	// Win64 save RBX, RBP, RDI, RSI, RSP, R12, R13, R14, and R15
	movq	%rdi, 0x40(%rsp)
	movq	%rsi, 0x48(%rsp)

	movq  %rdx, 0(%rsp)	/* arg */
	movq  %r8, 8(%rsp)	/* argsize (includes padding) */
	
	call %rcx	/* fn */
#else
	movq  %rsi, 0(%rsp)	/* arg */
	movq  %rdx, 8(%rsp)	/* argsize (includes padding) */

	call *%rdi	/* fn */
#endif

	movq  0x10(%rsp), %rbx
	movq  0x18(%rsp), %rbp
	movq  0x20(%rsp), %r12
	movq  0x28(%rsp), %r13
	movq  0x30(%rsp), %r14
	movq  0x38(%rsp), %r15
#if defined(__WIN64)
	movq	0x40(%rsp), %rdi
	movq	0x48(%rsp), %rsi
#endif	
	addq  $0x58, %rsp
	ret
