deepjit/deepjit_reg: bugfixes
[calu.git] / progs / deepjit_reg.s
index e9e20fcc71ff7b2154699f48aefb708a9b19ae5e..cbef6eab23ed6657b1e7996a72184832b83d74de 100644 (file)
@@ -31,6 +31,7 @@ instrtable:
 .fill 42, 0
 
 prog_eof:
+.ifill pop r7
 .ifill mov r0, r6
 .ifill ret+
 
@@ -59,12 +60,13 @@ prog_add:
 
 prog_sub:
 .ifill pop r7
-.ifill sub r6, r7, r6;0xe0bbb000
+.ifill sub r7, r7, r6;0xe0bbb000
+.ifill mov r6, r7
 
 prog_lessthan:
 .ifill pop r7
 .ifill cmp r7, r6;0xec3b0000
-.ifill movlt r6, r14
+.ifill movdlt r6, r14
 .ifill movge r6, r15
 
 prog_dup:
@@ -79,8 +81,8 @@ prog_jmp:
 
 prog_imm:
 .ifill push r6
-.fill 1, 0xed400000;ldil r6, CONST
-.fill 1, 0xed400002;ldih r6, CONST
+.fill 1, 0xed300000;ldil r6, CONST
+.fill 1, 0xed300002;ldih r6, CONST
 
 prog_pop:
 .ifill pop r6
@@ -194,14 +196,13 @@ jit:
 
        ;backup defer table address
        mov r10, r9
-       ;decrement address to input by 1
-       subi r1, r1, 1
+       br+ vm_loop_1
 
 vm_default:    
 vm_loop:
        ;increment input address
        addi r1, r1, 1
-
+vm_loop_1:
        ;store address of next instruction in table
        stw r2, 0(r3)
        ;increment instr. table
@@ -225,6 +226,8 @@ vm_eof:
        stw r0, PDATA(r13)
        ldw r0, 4(r4)
        stw r0, PDATA(r13)
+       ldw r0, 8(r4)
+       stw r0, PDATA(r13)
 
        ;end of program
        ;now it is time to clear up the defer table
@@ -262,7 +265,7 @@ vm_defer:
        addi r10, r10, 8
        cmp r10, r9
        reteq+
-       brnq- vm_defer
+       br+ vm_defer
 
 ;case *
 ;42
@@ -328,9 +331,11 @@ vm_sub:
        PROGINSTR
        ldw r0, 4(r4)
        PROGINSTR
+       ldw r0, 8(r4)
+       PROGINSTR
 
        ;increment address
-       addi r2, r2, 2
+       addi r2, r2, 3
 
        br+ vm_loop
 
@@ -429,7 +434,7 @@ vm_imm:
        ldil r4, prog_imm@lo
        ldih r4, prog_imm@hi
 
-       ldw r0, 4(r4)
+       ldw r0, 0(r4)
        PROGINSTR
 
        ;save r6 to r7