gipu/vm/opcodes.h

173 lines
2.3 KiB
C
Raw Normal View History

2017-05-17 17:32:05 +01:00
/*
MEMORY LOCATIONS AND IMMEDIATES ARE 16 BITS LONG
*/
2017-05-25 16:53:49 +01:00
#ifndef DBG
2017-05-17 17:58:00 +01:00
enum OPS_STARTING_VALUES {
2017-05-17 17:32:05 +01:00
MOVI,
MOVR,
2017-05-24 14:29:20 +01:00
LODI,
LODR,
STRI,
STRR,
2017-05-17 17:32:05 +01:00
ADDI,
ADDR,
SUBI,
SUBR,
2017-05-18 16:28:10 +01:00
ANDB,
ANDW,
ANDR,
YORB,
YORW,
YORR,
XORB,
XORW,
2017-05-17 17:32:05 +01:00
XORR,
NOTR,
MULI,
MULR,
DIVI,
DIVR,
2017-05-24 14:07:56 +01:00
SHLI,
SHLR,
SHRI,
SHRR,
2017-05-17 17:32:05 +01:00
PUSH,
POOP,
2017-05-24 19:54:12 +01:00
CMPB,
CMPW,
CMPR,
2017-05-18 14:41:05 +01:00
JMPI,
JMPR,
JPAI,
JPAR,
JPBI,
JPBR,
JPEI,
JPER,
2017-05-18 16:28:10 +01:00
JPNI,
JPNR,
2017-05-24 19:54:12 +01:00
CALL,
RETN,
2017-05-17 17:32:05 +01:00
SHIT,
NOPE,
GRMN,
2017-05-17 17:32:05 +01:00
NUM_OPS
};
2017-05-25 16:53:49 +01:00
#else
enum OPS_STARTING_VALUES {
MOVI,
MOVR,
LODI,
LODR,
STRI,
STRR,
ADDI,
ADDR,
SUBI,
SUBR,
ANDB,
ANDW,
ANDR,
YORB,
YORW,
YORR,
XORB,
XORW,
XORR,
NOTR,
MULI,
MULR,
DIVI,
DIVR,
SHLI,
SHLR,
SHRI,
SHRR,
PUSH,
POOP,
CMPB,
CMPW,
CMPR,
JMPI,
JMPR,
JPAI,
JPAR,
JPBI,
JPBR,
JPEI,
JPER,
JPNI,
JPNR,
CALL,
RETN,
SHIT,
NOPE,
GRMN,
DEBG,
NUM_OPS
};
#endif
2017-05-17 17:32:05 +01:00
uint8_t OPS[NUM_OPS];
/*
INSTRUCTION SIZE TYPES
*/
2017-05-17 18:31:27 +01:00
#define REG2REG 2
#define IMM2REG 4
#define REG2IMM 4
#define BYT2REG 3
2017-05-18 14:41:05 +01:00
#define REGONLY 2
#define IMMONLY 3
#define SINGLE 1
2017-05-17 18:31:27 +01:00
/*
INSTRUCTION SIZES
*/
2017-05-17 18:31:27 +01:00
#define MOVI_SIZE IMM2REG
#define MOVR_SIZE REG2REG
2017-05-24 14:29:20 +01:00
#define LODI_SIZE IMM2REG
#define LODR_SIZE REG2REG
#define STRI_SIZE IMM2REG
#define STRR_SIZE REG2REG
2017-05-17 18:31:27 +01:00
#define ADDI_SIZE IMM2REG
#define ADDR_SIZE REG2REG
#define SUBI_SIZE IMM2REG
#define SUBR_SIZE REG2REG
2017-05-18 16:28:10 +01:00
#define ANDB_SIZE BYT2REG
#define ANDW_SIZE IMM2REG
#define ANDR_SIZE REG2REG
#define YORB_SIZE BYT2REG
#define YORW_SIZE IMM2REG
#define YORR_SIZE REG2REG
#define XORB_SIZE BYT2REG
#define XORW_SIZE IMM2REG
#define XORR_SIZE REG2REG
2017-05-18 14:41:05 +01:00
#define NOTR_SIZE REGONLY
#define MULI_SIZE IMM2REG
#define MULR_SIZE REG2REG
#define DIVI_SIZE IMM2REG
#define DIVR_SIZE REG2REG
2017-05-24 14:07:56 +01:00
#define SHLI_SIZE IMM2REG
#define SHLR_SIZE REG2REG
#define SHRI_SIZE IMM2REG
#define SHRR_SIZE REG2REG
2017-05-18 14:41:05 +01:00
#define PUSH_SIZE REGONLY
#define POOP_SIZE REGONLY
2017-05-24 19:54:12 +01:00
#define CMPB_SIZE BYT2REG
#define CMPW_SIZE IMM2REG
#define CMPR_SIZE REG2REG
2017-05-18 14:41:05 +01:00
#define JMPI_SIZE IMMONLY
#define JMPR_SIZE REGONLY
#define JPAI_SIZE IMMONLY
#define JPAR_SIZE REGONLY
#define JPBI_SIZE IMMONLY
#define JPBR_SIZE REGONLY
#define JPEI_SIZE IMMONLY
#define JPER_SIZE REGONLY
2017-05-18 16:28:10 +01:00
#define JPNI_SIZE IMMONLY
#define JPNR_SIZE REGONLY
#define RETN_SIZE SINGLE
#define SHIT_SIZE SINGLE
#define NOPE_SIZE SINGLE
2017-05-25 16:53:49 +01:00
#define GRMN_SIZE SINGLE
#define DEBG_SIZE SINGLE