From: Martin Perner Date: Sun, 9 Jan 2011 14:17:30 +0000 (+0100) Subject: deepjit: 1420 X-Git-Tag: bootrom_v1~31 X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=calu.git;a=commitdiff_plain;h=9b1ed535c75017fd506a4bd0c2e4f52fb86bb860 deepjit: 1420 we simulate a stack machine, why not use the stack :) --- diff --git a/3_test/deepjit.s b/3_test/deepjit.s index 52949a2..bf6507b 100644 --- a/3_test/deepjit.s +++ b/3_test/deepjit.s @@ -29,13 +29,12 @@ instrtable: .fill 42, 0 prog_eof: -.ifill ldw r0, 0-4(r3);0xE701FFFC +.ifill pop r0 .ifill ret+ prog_mul: -.ifill subi r3, r3, 4;0xE1998020 -.ifill ldw r6, 0(r3);0xe7318000 -.ifill ldw r7, 0-4(r3);0xe739fffc +.ifill pop r6 +.ifill pop r7 .ifill ldis r8, 0;0xed400004 .ifill mov r0, r7;0xe1038000 .ifill andx r0, 1;0xe2800008 @@ -47,43 +46,37 @@ prog_mul: .ifill adddnz r8, r8, r6;0x00443001 .ifill subi r7, r7, 2;0xe1bb8010 .fill 0x0b7ffe83;brnz+ loop -.ifill stw r8, 0-4(r3);0xe7c1fffc +.ifill push r8 prog_consts: .fill 0xed300004;ldis r6, CONST -.ifill stw r6, 0(r3);0xe7b18000 -.ifill addi r3, r3, 4;0xe1198020 +.ifill push r6 prog_add: -.ifill subi r3, r3, 4;0xe1998020 -.ifill ldw r6, 0(r3);0xe7318000 -.ifill ldw r7, 0-4(r3);0xe739fffc +.ifill pop r6 +.ifill pop r7 .ifill add r7, r7, r6;0xe03bb000 -.ifill stw r7, 0-4(r3);0xe7b9fffc +.ifill push r7 prog_sub: -.ifill subi r3, r3, 4;0xe1998020 -.ifill ldw r6, 0(r3);0xe7318000 -.ifill ldw r7, 0-4(r3);0xe739fffc +.ifill pop r6 +.ifill pop r7 .ifill sub r7, r7, r6;0xe0bbb000 -.ifill stw r7, 0-4(r3);0xe7b9fffc +.ifill push r7 prog_lessthan: -.ifill subi r3, r3, 4;0xe1998020 -.ifill ldw r6, 0(r3);0xe7318000 -.ifill ldw r7, 0-4(r3);0xe739fffc +.ifill pop r6 +.ifill pop r7 .ifill cmp r7, r6;0xec3b0000 -.ifill stwlt r14, 0-4(r3); -.ifill stwge r15, 0-4(r3); +.ifill pushlt r14 +.ifill pushge r15 prog_dup: -.ifill ldw r6, 0-4(r3);0xe731fffc -.ifill stw r6, 0(r3);0xe7b18000 -.ifill addi r3, r3, 4;0xe1198020 +.ifill fetch r6 +.ifill push r6 prog_jmp: -.ifill subi r3, r3, 4;0xe1998020 -.ifill ldw r6, 0(r3);0xe7318000 +.ifill pop r6 .ifill cmpi r6,0;0xecb00000 ;static calced .fill 1, 0x1b000103;breq- vm_next @@ -92,22 +85,21 @@ prog_jmp: prog_imm: .fill 1, 0xed400000;ldil r6, CONST .fill 1, 0xed400002;ldih r6, CONST -.ifill stw r6, 0(r3);0xe7b18000 -.ifill addi r3, r3, 4;0xe1198020 +.ifill push r6 prog_pop: -.ifill subi r3, r3, 4;0xe1998020 +.ifill disc r6 prog_xch: -.ifill ldw r6, 0-4(r3);0xe731fffc -.ifill ldw r7, 0-8(r3);0xe739fff8 -.ifill stw r6, 0-8(r3);0xe7b1fff8 -.ifill stw r7, 0-4(r3);0xe7b9fffc +.ifill pop r6 +.ifill pop r7 +.ifill push r6 +.ifill push r7 prog_not: -.ifill ldw r6, 0-4(r3);0xe731fffc +.ifill pop r6 .ifill not r6;0xe4b7fffa -.ifill stw r6, 0-4(r3);0xe7b1fffc +.ifill push r6 .text main: @@ -132,8 +124,8 @@ main: call+ jit ;set address to stack - ldil r3, stack@lo - ldih r3, stack@hi + ;ldil r3, stack@lo + ;ldih r3, stack@hi ;make r15 a 0-register ldis r15, 0 @@ -207,7 +199,7 @@ vm_eof: ldil r7, prog_jmp@lo ldih r7, prog_jmp@hi ;load branch template - ldw r7, 16(r7) + ldw r7, 12(r7) ;if actual and base are equal, no entry cmp r9, r10 @@ -267,11 +259,9 @@ vm_mul: stx r0, 44(r2) ldw r0, 48(r14) stx r0, 48(r2) - ldw r0, 52(r14) - stx r0, 52(r2) ;increment address - addi r2, r2, 56 + addi r2, r2, 52 br+ vm_loop @@ -291,11 +281,9 @@ vm_add: stx r0, 8(r2) ldw r0, 12(r4) stx r0, 12(r2) - ldw r0, 16(r4) - stx r0, 16(r2) ;increment address - addi r2, r2, 20 + addi r2, r2, 16 br+ vm_loop @@ -315,11 +303,9 @@ vm_sub: stx r0, 8(r2) ldw r0, 12(r4) stx r0, 12(r2) - ldw r0, 16(r4) - stx r0, 16(r2) ;increment address - addi r2, r2, 20 + addi r2, r2, 16 br+ vm_loop @@ -343,11 +329,9 @@ vm_consts: stx r0, 0(r2) ldw r0, 4(r15) stx r0, 4(r2) - ldw r0, 8(r15) - stx r0, 8(r2) ;increment address - addi r2, r2, 12 + addi r2, r2, 8 br+ vm_loop @@ -369,11 +353,9 @@ vm_lessthan: stx r0, 12(r2) ldw r0, 16(r4) stx r0, 16(r2) - ldw r0, 20(r4) - stx r0, 20(r2) ;increment address - addi r2, r2, 24 + addi r2, r2, 20 br+ vm_loop @@ -386,11 +368,9 @@ vm_dup: stx r0, 0(r2) ldw r0, 4(r13) stx r0, 4(r2) - ldw r0, 8(r13) - stx r0, 8(r2) ;increment address - addi r2, r2, 12 + addi r2, r2, 8 br+ vm_loop @@ -448,11 +428,9 @@ vm_imm: ldw r0, 8(r4) stx r0, 8(r2) - ldw r0, 12(r4) - stx r0, 12(r2) ;increment address - addi r2, r2, 16 + addi r2, r2, 12 ;pc+4 addi r1, r1, 4 @@ -470,29 +448,22 @@ vm_jmp: ldil r4, prog_jmp@lo ldih r4, prog_jmp@hi - ;program instruction (3) - ;decrement sp - ;subi r3, r3, 4 + ;program instruction (2) + ;pop r6 ldw r0, 0(r4) stx r0, 0(r2) - ;load sp - ;ldw r6, 0(r3) - ldw r0, 4(r4) - stx r0, 4(r2) ;compare to 0 ;cmpi r6,0 - ldw r0, 8(r4) - stx r0, 8(r2) + ldw r0, 4(r4) + stx r0, 4(r2) ;breq+ vm_next ;is statically known - ldw r0, 12(r4) - stx r0, 12(r2) + ldw r0, 8(r4) + stx r0, 8(r2) - ;r8 has now the current base - ;ldw r8, 0-4(r3) ;we add the offset to this instruction - addi r8, r2, 16 + addi r8, r2, 12 ;we know calculate the jump destination @@ -529,12 +500,12 @@ vm_jmp: ;shift to the position of imm in br lls r8, r8, 7 ;load template br - ldw r0, 16(r4) + ldw r0, 12(r4) or r0, r0, r8 - stx r0, 16(r2) + stx r0, 12(r2) ;increment address - addi r2, r2, 20 + addi r2, r2, 16 br+ vm_loop