[bench] vm: lut, inputdata, bug fixes
authorMartin Perner <martin@perner.cc>
Sat, 18 Dec 2010 00:44:31 +0000 (01:44 +0100)
committerMartin Perner <martin@perner.cc>
Sat, 18 Dec 2010 00:44:31 +0000 (01:44 +0100)
jump has still a bug, more bugs not know till know
but only tested till the first jump :P

8_benchs/src/vm.s

index c9b7e04adf258359a49672beb049afe720bea392..e90902dd3f0677c23a9469ed7845d83b4d0c1277 100644 (file)
@@ -3,26 +3,16 @@
 inputdata:
 ;8 * 8 4
 .fill 1, 0x382A3834
-;8 * X 1
-.fill 1, 0x382A5831
 ;1 X * 8
 .fill 1, 0x31582A38
-;- X D +
-.fill 1, 0x2D58442B
 ;+ D X -
 .fill 1, 0x2B44582D
 ;P \xF8 J D
 .fill 1, 0x50F84A44
-;6 8 * +
-.fill 1, 0x36382A2B
 ;+ * 8 6
 .fill 1, 0x2B2A3836
-;D I \020 \000
-.fill 1, 0x44492000
 ;\000 \020 I D
 .fill 1, 0x00204944
-;\000 \000 < ~
-.fill 1, 0x00003C7E
 ;~ < \000 \000
 .fill 1, 0x7E3C0000
 ;8 P \005 J
@@ -36,10 +26,14 @@ stack:
 .text
 main:
        ldi r1, inputdata
+
+       ldw r0, 0(r2)
+
        call+ vm
        br+ main
 
 vm:
+       ;r0 ... lut address (can be overwritten)
        ;r1 ... addr to input
        ;r2 ... pc
        ;r3 ... effective stack address
@@ -59,8 +53,12 @@ vm_loop:
        add r4, r1, r2
        ;load input
        ldb r5, 0(r4)
+       ;we need to multiply input by 4 to get correct address offset
+       lls r0, r5, 2
+       ;calc position in jumptable
+       ldw r0, jumptable(r0)
        ;jump to instr
-       brr r5
+       brr r0
 
 vm_eof:
        ;load stack[sp-1]
@@ -252,7 +250,7 @@ vm_not:
 .data
 jumptable:
 ;0
-.fill 0, vm_eof
+.fill 1, vm_eof
 .fill 40, vm_default
 ;42
 .fill 1, vm_mul