state->pc = 0;
ovm_value_t values[] = {
- { .type = OVM_TYPE_I32, .i32 = 20 },
- { .type = OVM_TYPE_I32, .i32 = 40 },
+ { .type = OVM_TYPE_I32, .i32 = 1 },
+ { .type = OVM_TYPE_I32, .i32 = 2 },
};
- ovm_value_t result = ovm_func_call(engine, state, prog, 2, 0, values);
+ ovm_value_t result = ovm_func_call(engine, state, prog, 0, 2, values);
printf("%d %d\n", result.type, result.i32);
ovm_state_delete(state);
static struct instruction_mapping_t instr_map[] = {
{ "nop", OVMI_NOP },
- { "imm.i8", OVM_TYPED_INSTR(OVMI_IMM, OVM_TYPE_I8) , op_reg, op_imm },
- { "imm.i16", OVM_TYPED_INSTR(OVMI_IMM, OVM_TYPE_I16), op_reg, op_imm },
- { "imm.i32", OVM_TYPED_INSTR(OVMI_IMM, OVM_TYPE_I32), op_reg, op_imm },
- { "imm.i64", OVM_TYPED_INSTR(OVMI_IMM, OVM_TYPE_I64), op_reg, op_imm },
- { "imm.f32", OVM_TYPED_INSTR(OVMI_IMM, OVM_TYPE_F32), op_reg, op_imm },
- { "imm.f64", OVM_TYPED_INSTR(OVMI_IMM, OVM_TYPE_F64), op_reg, op_imm },
-
{ "add.i8", OVM_TYPED_INSTR(OVMI_ADD, OVM_TYPE_I8) , op_reg, op_reg, op_reg },
{ "add.i16", OVM_TYPED_INSTR(OVMI_ADD, OVM_TYPE_I16), op_reg, op_reg, op_reg },
{ "add.i32", OVM_TYPED_INSTR(OVMI_ADD, OVM_TYPE_I32), op_reg, op_reg, op_reg },
// More operands to do...
+ { "imm.i8", OVM_TYPED_INSTR(OVMI_IMM, OVM_TYPE_I8) , op_reg, op_imm },
+ { "imm.i16", OVM_TYPED_INSTR(OVMI_IMM, OVM_TYPE_I16), op_reg, op_imm },
+ { "imm.i32", OVM_TYPED_INSTR(OVMI_IMM, OVM_TYPE_I32), op_reg, op_imm },
+ { "imm.i64", OVM_TYPED_INSTR(OVMI_IMM, OVM_TYPE_I64), op_reg, op_imm },
+ { "imm.f32", OVM_TYPED_INSTR(OVMI_IMM, OVM_TYPE_F32), op_reg, op_imm },
+ { "imm.f64", OVM_TYPED_INSTR(OVMI_IMM, OVM_TYPE_F64), op_reg, op_imm },
+
+ { "mov", OVMI_MOV, op_reg, op_reg },
+
{ "reg.get", OVMI_REG_GET, op_reg, op_sym },
{ "reg.set", OVMI_REG_SET, op_sym, op_reg },