// Copyright 2018 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 "go_asm.h"
#include "go_tls.h"
#include "textflag.h"

TEXT runtime·threadinit(SB),NOSPLIT,$0
	MOVQ	DI, R8

	MOVQ	m_g0(R8), DX		// g
	MOVQ	R8, g_m(DX)

	// Layout new m scheduler stack on os stack.
	// TODO: which os stack? do we need to make a new vmo?
	LEAQ	(-8*1024+104)(SP), BX
	MOVQ	BX, g_stackguard0(DX)
	MOVQ	BX, g_stackguard1(DX)
	MOVQ	BX, (g_stack+stack_lo)(DX)
	MOVQ	SP, (g_stack+stack_hi)(DX)

	PUSHQ	R8

	// Set up tls.
	LEAQ	m_tls(R8), DI
	CALL 	runtime·settls(SB)

	get_tls(CX)

	POPQ	R8
	MOVQ	m_g0(R8), DX
	MOVQ	DX, g(CX)

	CLD				// convention is D is always left cleared
	CALL	runtime·stackcheck(SB)	// clobbers AX,CX
	CALL	runtime·mstart(SB)
	// TODO CALL	syscall/zx·Sys_zircon_thread_exit(SB)
	RET

// Set TLS base to DI for the thread handle supplied in SI.
TEXT runtime·settls(SB),NOSPLIT,$0
	ADDQ	$8, DI		// ELF wants to use -8(FS)
	PUSHQ	DI
	LEAQ	0(SP), DX	// object_set_property takes a pointer to the base

	SUBQ	$28, SP

	MOVL	SI, 0(SP)	// thread handle
	MOVL	$4, 4(SP)	// ZX_PROP_REGISTER_FS
	MOVQ	DX, 8(SP)	// pointer to fs base
	MOVQ	$8, 16(SP)	// size
	CALL	runtime·vdsoCall_zx_object_set_property(SB)

	// Stash return and restore SP
	MOVL	24(SP), AX
	ADDQ	$28, SP
	TESTL	$0, AX
	JZ	2(PC)
	MOVL	$0xf1, 0xf1  // crash
	POPQ	DI
	RET

TEXT ·cgocallm0(SB),NOSPLIT,$0-20
	MOVQ fn+0(FP), AX
	MOVQ arg+8(FP), DI

	MOVQ SP, BP // BP is callee-save in the x86-64 ABI

	ANDQ $~15, SP
	CALL AX

	MOVQ BP, SP
	get_tls(CX)
	RET

// This implementation lives separately because the m/g for the profiler
// are faked, and this causes issues with runtime.exitsyscall not returning.
TEXT runtime·profiler_object_wait_one(SB),NOSPLIT,$0-28
	MOVL handle+0(FP), DI
	MOVL signals+4(FP), SI
	MOVQ deadline+8(FP), DX
	MOVQ observed+16(FP), CX
	MOVQ vdso_zx_object_wait_one(SB), AX
	CALL AX
	MOVL AX, ret+24(FP)
	RET

TEXT runtime·osyield(SB),NOSPLIT,$0
	MOVQ $0, DI
	MOVQ vdso_zx_nanosleep(SB), AX
	CALL AX
	RET
