#pragma once

#ifndef ROS_INC_ARCH_SYSCALL_H
#error "Do not include include ros/arch/syscall64.h directly"
#endif

#ifndef ROS_KERNEL

#include <sys/types.h>
#include <stdint.h>
#include <ros/common.h>
#include <ros/arch/mmu.h>
#include <assert.h>

static inline intreg_t __syscall_sysenter(uintreg_t a0, uintreg_t a1)
{
	intreg_t ret = 0;
	long dummy; /* force D, S clobber */

	/* we're calling using the amd function call abi.  this asm and the
	 * kernel will save the callee-saved state.  We'll use the clobber list
	 * to force the compiler to save caller-saved state.  As with uthread
	 * code, you need to make sure you have one ABI-compliant, non-inlined
	 * function call between any floating point ops and this.
	 *
	 * Note that syscall doesn't save the stack pointer - using rdx for
	 * that.  The kernel will restore it for us. */
	asm volatile ("movq %%rsp, %%rdx;       "
	              "syscall;                 "
	              : "=a"(ret), "=D"(dummy), "=S"(dummy)
	              : "D"(a0), "S"(a1)
	              : "cc", "memory", "rcx", "rdx", "r8", "r9", "r10", "r11");
	return ret;
}

static inline intreg_t __syscall_trap(uintreg_t a0, uintreg_t a1)
{
	intreg_t ret;

	/* If you change this, change pop_user_ctx() */
	asm volatile("int %1"
	             : "=a" (ret)
	             : "i" (T_SYSCALL),
	               "D" (a0),
	               "S" (a1)
	             : "cc", "memory");
	return ret;
}

/* The kernel has a fast path for setting the fs base, used for TLS changes on
 * machines that can't do it from user space.  The magic value for rdi (D) is a
 * non-canonical address, which should never be a legitamate syscall. */
static inline void __fastcall_setfsbase(uintptr_t fsbase)
{
	long dummy; /* force D, S clobber */

	asm volatile ("syscall" : "=D"(dummy), "=S"(dummy)
	                        : "D"(FASTCALL_SETFSBASE), "S"(fsbase)
	                        : "rax", "r11", "rcx", "rdx", "memory");
}

#endif
