testing assembler
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Thu, 16 Jun 2022 03:51:45 +0000 (22:51 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Thu, 16 Jun 2022 03:51:45 +0000 (22:51 -0500)
math.asm [new file with mode: 0644]
src/cli.c
src/tools/assembler.c

diff --git a/math.asm b/math.asm
new file mode 100644 (file)
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
+
index a6dde3f3ff7c3ba7b1ef65f13fa100f0e86f39a8..cc8856d783ace227ed71b79ebe75875b5a9d979e 100644 (file)
--- 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);
index 7cb2af24b1134732f5c8a3e578eb2e4ca3a7442d..a27216fb6ff74847dd4c37a43a8d31f7073782e1 100644 (file)
@@ -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 },