From: Martin Perner Date: Fri, 17 Dec 2010 09:30:17 +0000 (+0100) Subject: [bench] vm X-Git-Tag: bootrom_v1~74 X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=calu.git;a=commitdiff_plain;h=6362cfae3d037c76293001ec5183cc84208ecb1f [bench] vm everything implemented, nothing tested --- diff --git a/8_benchs/src/vm.s b/8_benchs/src/vm.s index 784dc93..3570bee 100644 --- a/8_benchs/src/vm.s +++ b/8_benchs/src/vm.s @@ -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 +