[bench] vm: made loading of address correct
[calu.git] / 8_benchs / src / vm.s
index 05b98125c4d87e69b3b2b7de0447ec7d470eb6b5..37a1ae7c033c37be1fa71757d3e4f7cbf6830331 100644 (file)
@@ -25,9 +25,9 @@ stack:
 
 .text
 main:
-       ldi r1, inputdata
-
-       ldw r0, 0(r2)
+       ;set address of input
+       ldil r1, inputdata@lo
+       ldih r1, inputdata@hi
 
        call+ vm
        br+ main
@@ -40,10 +40,11 @@ vm:
        ;r4 ... effective input addr
        ;r5 ... input
 
-       ;set pc to -4
+       ;set pc to -1
        ldis r2, 0xFFFF
        ;load base address of stack
-       ldi r3, stack
+       ldil r3, stack@lo
+       ldih r3, stack@hi
 
 vm_default:    
 vm_loop:
@@ -175,29 +176,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 +216,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