[bench] vm: merged pc with address to input
authorMartin Perner <martin@perner.cc>
Sun, 19 Dec 2010 17:09:27 +0000 (18:09 +0100)
committerMartin Perner <martin@perner.cc>
Sun, 19 Dec 2010 17:09:27 +0000 (18:09 +0100)
the pc isn't any more kept seperated from the
address to the input => reduced instructions

8_benchs/src/vm.s

index 37a1ae7c033c37be1fa71757d3e4f7cbf6830331..c39a84797904649acec73f7228215012f63e54c7 100644 (file)
@@ -34,26 +34,23 @@ main:
 
 vm:
        ;r0 ... lut address (can be overwritten)
-       ;r1 ... addr to input
-       ;r2 ... pc
+       ;r1 ... address to input, every byte is a new input
+       ;       includes pc implicitly
        ;r3 ... effective stack address
-       ;r4 ... effective input addr
        ;r5 ... input
 
-       ;set pc to -1
-       ldis r2, 0xFFFF
+       ;decrement address to input by 1
+       subi r1, r1, 1
        ;load base address of stack
        ldil r3, stack@lo
        ldih r3, stack@hi
 
 vm_default:    
 vm_loop:
-       ;increment pc
-       addi r2, r2, 1
-       ;generate effective input addr
-       add r4, r1, r2
+       ;increment input address
+       addi r1, r1, 1
        ;load input
-       ldb r5, 0(r4)
+       ldb r5, 0(r1)
        ;we need to multiply input by 4 to get correct address offset
        lls r0, r5, 2
        ;calc position in jumptable
@@ -176,29 +173,29 @@ vm_dup:
 ;73
 vm_imm:
        ;load new high byte
-       ldb r6, 4(r4)
+       ldb r6, 4(r1)
        ;shift high byte
        lls r6, r6, 8
        ;load 2nd byte
-       ldb r7, 3(r4)
+       ldb r7, 3(r1)
        ;add to high byte
        add r6, r6, r7
        ;shift
        lls r6, r6, 8
        ;load
-       ldb r7, 2(r4)
+       ldb r7, 2(r1)
        ;add
        add r6, r6, r7
        ;shift
        lls r6, r6, 8
        ;load
-       ldb r7, 1(r4)
+       ldb r7, 1(r1)
        ;add
        add r6, r6, r7
        ;store result to stack
        stw r6, 0(r3)
        ;pc+4
-       addi r2, r2, 4
+       addi r1, r1, 4
        ;increment sp
        addi r3, r3, 4
        br+ vm_loop
@@ -213,13 +210,13 @@ vm_jmp:
        ;compare to 0
        cmpi r6,0
        ;increment pc if == 0
-       addideq r2, r2, 1
+       addideq r1, r1, 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)
+       ldb r6, 1(r1)
        ;compare input with neg. max of 8 bit
        cmpi r6, 0x80
        brlt- vm_possign
@@ -227,7 +224,7 @@ vm_jmp:
        add r6, r6, r7
 vm_possign:
        ;pc += data
-       add r2, r2, r6
+       add r1, r1, r6
        br+ vm_loop
 
 ;case P