[bench] vm
authorMartin Perner <martin@perner.cc>
Fri, 17 Dec 2010 09:30:17 +0000 (10:30 +0100)
committerMartin Perner <martin@perner.cc>
Fri, 17 Dec 2010 09:31:12 +0000 (10:31 +0100)
everything implemented, nothing tested

8_benchs/src/vm.s

index 784dc93cdc101d6d6243221833e00b25b55788d4..3570bee6755d5a45d8678bd2b35c47a8eb55507c 100644 (file)
@@ -104,6 +104,38 @@ vm_eof:
 ;case *
 ;42
 vm_mul:
+       ;decrement sp
+       subi r3, r3, 4
+       ;load sp
+       ldw r6, 0(r3)
+       ;load sp-1
+       ldw r7, 0-4(r3)
+
+       ;return init
+       ldis r8, 0  
+       ;counter init
+       ldis r9, 0
+       ;save of sp-1
+       mov r7, r0
+       ;check if sp-1 is even or odd
+       andx r0, 1
+       ;add sp to result
+       adddnz r8, r8, r6
+       ;store sp-1 in r0 
+       addidnz r0, r7, 0
+       ;if odd decrement sp-1
+       subinz r7, r7, 1
+loop:
+       ;if last was not zero
+       ;add to sp sp-1
+       adddnz r6, r6, r0
+       adddnz r6, r6, r0
+       ;decrement sp-1 by 2
+       subinz r7, r7, 2
+       ;jump if not zero
+       brnz+ loop
+       ;save result
+       stw r6, 0-4(r3)
        br+ vm_loop
 
 ;case +