vm: interpreter version converted to stack
authorMartin Perner <martin@perner.cc>
Sun, 9 Jan 2011 13:39:29 +0000 (14:39 +0100)
committerMartin Perner <martin@perner.cc>
Sun, 9 Jan 2011 13:39:29 +0000 (14:39 +0100)
8_benchs/src/vm.s

index 635ae332d1867185996280cd99b1773ae0d8da0c..92e3c7e5f914b953cf5e4499c861845f50030c58 100644 (file)
@@ -60,18 +60,21 @@ vm_loop:
 
 vm_eof:
        ;load stack[sp-1]
-       ldw r0, 0-4(r3);
+       ;ldw r0, 0-4(r3);
+       pop r0
        ret+;
 
 ;case *
 ;42
 vm_mul:
        ;decrement sp
-       subi r3, r3, 4
+       ;subi r3, r3, 4
        ;load sp
-       ldw r6, 0(r3)
+       ;ldw r6, 0(r3)
+       pop r6
        ;load sp-1
-       ldw r7, 0-4(r3)
+       ;ldw r7, 0-4(r3)
+       pop r7
 
        ;return init
        ldis r8, 0  
@@ -95,37 +98,44 @@ loop:
        ;jump if not zero
        brnz+ loop
        ;save result
-       stw r8, 0-4(r3)
+       ;stw r8, 0-4(r3)
+       push r8
        br+ vm_loop
 
 ;case +
 ;43
 vm_add:
        ;decrement sp
-       subi r3, r3, 4
+       ;subi r3, r3, 4
        ;load sp
-       ldw r6, 0(r3)
+       ;ldw r6, 0(r3)
+       pop r6
        ;load sp-1
-       ldw r7, 0-4(r3)
+       ;ldw r7, 0-4(r3)
+       pop r7
        ;sp-1 = sp-1 + sp
        add r7, r7, r6
        ;store sp-1
-       stw r7, 0-4(r3)
+       ;stw r7, 0-4(r3)
+       push r7
        br+ vm_loop
 
 ;case -
 ;45
 vm_sub:
        ;decrement sp
-       subi r3, r3, 4
+       ;subi r3, r3, 4
        ;load sp
-       ldw r6, 0(r3)
+       ;ldw r6, 0(r3)
+       pop r6
        ;load sp-1
-       ldw r7, 0-4(r3)
+       ;ldw r7, 0-4(r3)
+       pop r7
        ;sp-1 = sp-1 - sp
        sub r7, r7, r6
        ;store sp-1
-       stw r7, 0-4(r3)
+       ;stw r7, 0-4(r3)
+       push r7
        br+ vm_loop
 
 ;case 0 1 2 3 4 5 6 7 8 9
@@ -134,20 +144,23 @@ vm_consts:
        ;input minus offset
        subi r6, r5, 48
        ;store onto stack
-       stw r6, 0(r3)
+       ;stw r6, 0(r3)
+       push r6
        ;increment stack addr
-       addi r3, r3, 4
+       ;addi r3, r3, 4
        br+ vm_loop
 
 ;case <
 ;60
 vm_lessthan:
        ;decrement sp
-       subi r3, r3, 4
+       ;subi r3, r3, 4
        ;load sp
-       ldw r6, 0(r3)
+       ;ldw r6, 0(r3)
+       pop r6
        ;load sp-1
-       ldw r7, 0-4(r3)
+       ;ldw r7, 0-4(r3)
+       pop r7
        ;load r8 with 0
        ldis r8, 0
        ;compare sp-1 with sp
@@ -155,18 +168,21 @@ vm_lessthan:
        ;set r8 to -1 if less than
        ldislt r8, 0xFF
        ;store r8 to sp-1
-       stw r8, 0-4(r3)
+       ;stw r8, 0-4(r3)
+       push r8
        br+ vm_loop
 
 ;case D
 ;68
 vm_dup:
        ;load sp-1
-       ldw r6, 0-4(r3)
+       ;ldw r6, 0-4(r3)
+       fetch r6
        ;store to sp
-       stw r6, 0(r3)
+       ;stw r6, 0(r3)
+       push r6
        ;increment stack addr
-       addi r3, r3, 4
+       ;addi r3, r3, 4
        br+ vm_loop
 
 ;case I
@@ -193,20 +209,22 @@ vm_imm:
        ;add
        add r6, r6, r7
        ;store result to stack
-       stw r6, 0(r3)
+       ;stw r6, 0(r3)
+       push r6
        ;pc+4
        addi r1, r1, 4
        ;increment sp
-       addi r3, r3, 4
+       ;addi r3, r3, 4
        br+ vm_loop
 
 ;case J
 ;74
 vm_jmp:
        ;decrement sp
-       subi r3, r3, 4
+       ;subi r3, r3, 4
        ;load sp
-       ldw r6, 0(r3)
+       ;ldw r6, 0(r3)
+       pop r6
        ;compare to 0
        cmpi r6,0
        ;increment pc if == 0
@@ -231,28 +249,35 @@ vm_possign:
 ;80
 vm_pop:
        ;decrement stack addr
-       subi r3, r3, 4
+       ;subi r3, r3, 4
+       disc r0
        br+ vm_loop
 
 ;case X
 ;88
 vm_xch:
        ;load sp-1
-       ldw r6, 0-4(r3)
+       ;ldw r6, 0-4(r3)
+       pop r6
        ;load sp-2
-       ldw r7, 0-8(r3)
+       ;ldw r7, 0-8(r3)
+       pop r7
        ;store sp-1 to sp-2
-       stw r6, 0-8(r3)
+       ;stw r6, 0-8(r3)
+       push r6
        ;store sp-2 to sp-1
-       stw r7, 0-4(r3)
+       ;stw r7, 0-4(r3)
+       push r7
        br+ vm_loop
 
 ;case ~
 ;126
 vm_not:
-       ldw r6, 0-4(r3)
+       ;ldw r6, 0-4(r3)
+       pop r6
        not r6
-       stw r6, 0-4(r3)
+       ;stw r6, 0-4(r3)
+       push r6
        br+ vm_loop
 
 .data