#ifndef __VIRTUALIZER_H
#define __VIRTUALIZER_H

#include "Code.h"
#include "VmCode.h"
#include "NativeCode.h"


/*
* Structure:
* 
* Instructions:
*	- Two byte opcode
*	- 
* 
* 
* LOC register(Frame pointer):
*	- A register for which all local variables are addressed from
*	- Specific instructions for quick access of stuff around this ptr
*	- Example Frame:
*	-		[Previous function variables
*	-		[Return Address
*	-		[Previous Functions LOC
*	-  LOC->[Empty Stack Space
* 
* 
*	-VmEnter will essentially "call into" the vm and will be created using a function to rearrange and push arguments based on the arguments passed to said function.
*/



BOOL ViCanHandleInst(PNATIVE_CODE_LINK Link);
BOOL ViValidateNativeCodeBlock(PNATIVE_CODE_BLOCK Block);

BOOL VmEmitEnter(ULONG ArgumentCount, PNATIVE_CODE_BLOCK Block);
BOOL VmEmitExit(ULONG ArgumentCount, PNATIVE_CODE_BLOCK Block);

#endif