From: Brendan Hansen Date: Thu, 16 Jun 2022 03:51:45 +0000 (-0500) Subject: testing assembler X-Git-Url: https://git.brendanfh.com/?a=commitdiff_plain;h=2f93e36326f8cc0c4471406e1f04b8844ac182c6;p=onyx-embedder.git testing assembler --- diff --git a/math.asm b/math.asm new file mode 100644 index 0000000..bacaf30 --- /dev/null +++ b/math.asm @@ -0,0 +1,14 @@ + + +.native_func print 1 + + +.func main 2 + mov %2, %0 + mov %3, %1 + add.i32 %2, %2, %3 + imm.i32 %3, 10 + add.i32 %2, %2, %3 + param %2 + native_call print + diff --git a/src/cli.c b/src/cli.c index a6dde3f..cc8856d 100644 --- a/src/cli.c +++ b/src/cli.c @@ -36,10 +36,10 @@ int main(int argc, char *argv[]) { 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); diff --git a/src/tools/assembler.c b/src/tools/assembler.c index 7cb2af2..a27216f 100644 --- a/src/tools/assembler.c +++ b/src/tools/assembler.c @@ -69,13 +69,6 @@ struct instruction_mapping_t { 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 }, @@ -126,6 +119,15 @@ static struct instruction_mapping_t instr_map[] = { // 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 },