From: Martin Perner Date: Sun, 19 Dec 2010 17:09:27 +0000 (+0100) Subject: [bench] vm: merged pc with address to input X-Git-Tag: bootrom_v1~57 X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=calu.git;a=commitdiff_plain;h=39b3fc6ba58ab1ff1c7ed04bacc15c8fcc987950 [bench] vm: merged pc with address to input the pc isn't any more kept seperated from the address to the input => reduced instructions --- diff --git a/8_benchs/src/vm.s b/8_benchs/src/vm.s index 37a1ae7..c39a847 100644 --- a/8_benchs/src/vm.s +++ b/8_benchs/src/vm.s @@ -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