188 lines
2.6 KiB
C
188 lines
2.6 KiB
C
#include "vm.h"
|
|
|
|
u32 mp; /* memory pointer */
|
|
u32 cp; /* code pointer */
|
|
u32 pc; /* program counter */
|
|
u32 flag; /* flag */
|
|
u32 *code; /* code */
|
|
u8 *mem; /* memory */
|
|
|
|
bool step_vm() {
|
|
|
|
u32 instruction = code[pc];
|
|
u8 opcode = DECODE_OP(instruction);
|
|
|
|
switch (opcode) {
|
|
case OP_HALT: {
|
|
return false;
|
|
}
|
|
case OP_CALL: {
|
|
|
|
}
|
|
case OP_RETURN: {
|
|
}
|
|
case OP_SYSCALL: {
|
|
}
|
|
case OP_LOAD_IMM: {
|
|
}
|
|
case OP_LOAD_UPPER_IMM: {
|
|
}
|
|
case OP_LOAD_IND_8: {
|
|
}
|
|
case OP_LOAD_IND_16: {
|
|
}
|
|
case OP_LOAD_IND_32: {
|
|
}
|
|
case OP_LOAD_ABS_8: {
|
|
}
|
|
case OP_LOAD_ABS_16: {
|
|
}
|
|
case OP_LOAD_ABS_32: {
|
|
}
|
|
case OP_LOAD_OFF_8: {
|
|
}
|
|
case OP_LOAD_OFF_16: {
|
|
}
|
|
case OP_LOAD_OFF_32: {
|
|
}
|
|
case OP_STORE_ABS_8: {
|
|
}
|
|
case OP_STORE_ABS_16: {
|
|
}
|
|
case OP_STORE_ABS_32: {
|
|
}
|
|
case OP_STORE_IND_8: {
|
|
}
|
|
case OP_STORE_IND_16: {
|
|
}
|
|
case OP_STORE_IND_32: {
|
|
}
|
|
case OP_STORE_OFF_8: {
|
|
}
|
|
case OP_STORE_OFF_16: {
|
|
}
|
|
case OP_STORE_OFF_32: {
|
|
}
|
|
case OP_MEM_ALLOC: {
|
|
}
|
|
case OP_MEM_CPY: {
|
|
}
|
|
case OP_MEM_SET_8: {
|
|
}
|
|
case OP_MEM_SET_16: {
|
|
}
|
|
case OP_MEM_SET_32: {
|
|
}
|
|
case OP_REG_MOV: {
|
|
}
|
|
case OP_ADD_INT: {
|
|
}
|
|
case OP_SUB_INT: {
|
|
}
|
|
case OP_MUL_INT: {
|
|
}
|
|
case OP_DIV_INT: {
|
|
}
|
|
case OP_ABS_INT: {
|
|
}
|
|
case OP_NEG_INT: {
|
|
}
|
|
case OP_ADD_NAT: {
|
|
}
|
|
case OP_SUB_NAT: {
|
|
}
|
|
case OP_MUL_NAT: {
|
|
}
|
|
case OP_DIV_NAT: {
|
|
}
|
|
case OP_ABS_NAT: {
|
|
}
|
|
case OP_NEG_NAT: {
|
|
}
|
|
case OP_ADD_REAL: {
|
|
}
|
|
case OP_SUB_REAL: {
|
|
}
|
|
case OP_MUL_REAL: {
|
|
}
|
|
case OP_DIV_REAL: {
|
|
}
|
|
case OP_ABS_REAL: {
|
|
}
|
|
case OP_NEG_REAL: {
|
|
}
|
|
case OP_INT_TO_REAL: {
|
|
}
|
|
case OP_INT_TO_NAT: {
|
|
}
|
|
case OP_NAT_TO_REAL: {
|
|
}
|
|
case OP_NAT_TO_INT: {
|
|
}
|
|
case OP_REAL_TO_INT: {
|
|
}
|
|
case OP_REAL_TO_NAT: {
|
|
}
|
|
case OP_BIT_SHIFT_LEFT: {
|
|
}
|
|
case OP_BIT_SHIFT_RIGHT: {
|
|
}
|
|
case OP_BIT_SHIFT_R_EXT: {
|
|
}
|
|
case OP_BIT_AND: {
|
|
}
|
|
case OP_BIT_OR: {
|
|
}
|
|
case OP_BIT_XOR: {
|
|
}
|
|
case OP_JMP_IMM: {
|
|
}
|
|
case OP_JMP_ABS: {
|
|
}
|
|
case OP_JMP_OFF: {
|
|
}
|
|
case OP_JMP_FLAG: {
|
|
}
|
|
case OP_JEQ_INT: {
|
|
}
|
|
case OP_JNE_INT: {
|
|
}
|
|
case OP_JGT_INT: {
|
|
}
|
|
case OP_JLT_INT: {
|
|
}
|
|
case OP_JLE_INT: {
|
|
}
|
|
case OP_JGE_INT: {
|
|
}
|
|
case OP_JEQ_NAT: {
|
|
}
|
|
case OP_JNE_NAT: {
|
|
}
|
|
case OP_JGT_NAT: {
|
|
}
|
|
case OP_JLT_NAT: {
|
|
}
|
|
case OP_JLE_NAT: {
|
|
}
|
|
case OP_JGE_NAT: {
|
|
}
|
|
case OP_JEQ_REAL: {
|
|
}
|
|
case OP_JNE_REAL: {
|
|
}
|
|
case OP_JGE_REAL: {
|
|
}
|
|
case OP_JGT_REAL: {
|
|
}
|
|
case OP_JLT_REAL: {
|
|
}
|
|
case OP_JLE_REAL: {
|
|
}
|
|
}
|
|
|
|
/* something went very wrong */
|
|
flag = 255;
|
|
return false;
|
|
}
|