// #included by rarvm.cpp
#ifdef RAR_COMMON_HPP
#define VMCF_OP0             0
#define VMCF_OP1             1
#define VMCF_OP2             2
#define VMCF_OPMASK          3
#define VMCF_BYTEMODE        4
#define VMCF_JUMP            8
#define VMCF_PROC           16
#define VMCF_USEFLAGS       32
#define VMCF_CHFLAGS        64

const
static byte VM_CmdFlags[]=
{
	/* VM_MOV   */ VMCF_OP2 | VMCF_BYTEMODE                                ,
	/* VM_CMP   */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS                 ,
	/* VM_ADD   */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS                 ,
	/* VM_SUB   */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS                 ,
	/* VM_JZ    */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS                    ,
	/* VM_JNZ   */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS                    ,
	/* VM_INC   */ VMCF_OP1 | VMCF_BYTEMODE | VMCF_CHFLAGS                 ,
	/* VM_DEC   */ VMCF_OP1 | VMCF_BYTEMODE | VMCF_CHFLAGS                 ,
	/* VM_JMP   */ VMCF_OP1 | VMCF_JUMP                                    ,
	/* VM_XOR   */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS                 ,
	/* VM_AND   */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS                 ,
	/* VM_OR    */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS                 ,
	/* VM_TEST  */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS                 ,
	/* VM_JS    */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS                    ,
	/* VM_JNS   */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS                    ,
	/* VM_JB    */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS                    ,
	/* VM_JBE   */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS                    ,
	/* VM_JA    */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS                    ,
	/* VM_JAE   */ VMCF_OP1 | VMCF_JUMP | VMCF_USEFLAGS                    ,
	/* VM_PUSH  */ VMCF_OP1                                                ,
	/* VM_POP   */ VMCF_OP1                                                ,
	/* VM_CALL  */ VMCF_OP1 | VMCF_PROC                                    ,
	/* VM_RET   */ VMCF_OP0 | VMCF_PROC                                    ,
	/* VM_NOT   */ VMCF_OP1 | VMCF_BYTEMODE                                ,
	/* VM_SHL   */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS                 ,
	/* VM_SHR   */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS                 ,
	/* VM_SAR   */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_CHFLAGS                 ,
	/* VM_NEG   */ VMCF_OP1 | VMCF_BYTEMODE | VMCF_CHFLAGS                 ,
	/* VM_PUSHA */ VMCF_OP0                                                ,
	/* VM_POPA  */ VMCF_OP0                                                ,
	/* VM_PUSHF */ VMCF_OP0 | VMCF_USEFLAGS                                ,
	/* VM_POPF  */ VMCF_OP0 | VMCF_CHFLAGS                                 ,
	/* VM_MOVZX */ VMCF_OP2                                                ,
	/* VM_MOVSX */ VMCF_OP2                                                ,
	/* VM_XCHG  */ VMCF_OP2 | VMCF_BYTEMODE                                ,
	/* VM_MUL   */ VMCF_OP2 | VMCF_BYTEMODE                                ,
	/* VM_DIV   */ VMCF_OP2 | VMCF_BYTEMODE                                ,
	/* VM_ADC   */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_USEFLAGS | VMCF_CHFLAGS ,
	/* VM_SBB   */ VMCF_OP2 | VMCF_BYTEMODE | VMCF_USEFLAGS | VMCF_CHFLAGS ,
	/* VM_PRINT */ VMCF_OP0
};
#endif
