;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 +