// vmachine.cpp -- wrapper to fake virtual machine for client

#include "../game/q_shared.h"
#include "vmachine.h"
#pragma warning (disable : 4514)
/*
==============================================================

VIRTUAL MACHINE

==============================================================
*/
intptr_t	VM_Call( intptr_t callnum, ... )
{
	intptr_t args[9];
	int i;
	va_list ap;

	va_start(ap, callnum);
	for (i = 0; i < 9; i++) {
		args[i] = va_arg(ap, intptr_t);
	}
	va_end(ap);
	return cgvm.entryPoint( callnum, args[0], args[1], args[2], args[3],
		args[4], args[5], args[6], args[7], args[8] );
	
}

/*
============
VM_DllSyscall

we pass this to the cgame dll to call back into the client
============
*/
extern intptr_t CL_CgameSystemCalls( intptr_t *args );
extern intptr_t CL_UISystemCalls( intptr_t *args );

intptr_t VM_DllSyscall( intptr_t arg, ... ) {
#if !defined(__i386__)  || defined(__clang__)
	intptr_t args[15];
	int i;
	va_list ap;

	args[0] = arg;

	va_start(ap, arg);
	for (i = 1; i < 15; i++)
		args[i] = va_arg(ap, intptr_t);
	va_end(ap);

	return CL_CgameSystemCalls( args );
#else
//	return cgvm->systemCall( &arg );
	return CL_CgameSystemCalls( &arg );
#endif
}
