[bench] vm: now working correct
[calu.git] / 8_benchs / src / vm.s
index 05b98125c4d87e69b3b2b7de0447ec7d470eb6b5..bcb2a03a7ab1c1c7e479ad9717ff95e39e05b2f4 100644 (file)
@@ -175,29 +175,31 @@ vm_dup:
 ;73
 vm_imm:
        ;load new high byte
-       ldb r6, 4(r2)
+       ldb r6, 4(r4)
        ;shift high byte
        lls r6, r6, 8
        ;load 2nd byte
-       ldb r7, 3(r2)
+       ldb r7, 3(r4)
        ;add to high byte
        add r6, r6, r7
        ;shift
        lls r6, r6, 8
        ;load
-       ldb r7, 2(r2)
+       ldb r7, 2(r4)
        ;add
        add r6, r6, r7
        ;shift
        lls r6, r6, 8
        ;load
-       ldb r7, 1(r2)
+       ldb r7, 1(r4)
        ;add
        add r6, r6, r7
        ;store result to stack
        stw r6, 0(r3)
        ;pc+4
        addi r2, r2, 4
+       ;increment sp
+       addi r3, r3, 4
        br+ vm_loop
 
 ;case J
@@ -213,6 +215,8 @@ vm_jmp:
        addideq r2, r2, 1
        breq+ vm_loop
        ;if != 0
+       ;set r6 to 0 (to clear upper bytes)
+       ldis r6, 0
        ;load pc+1 input
        ldb r6, 1(r4)
        ;compare input with neg. max of 8 bit