we simulate a stack machine, why not use the stack :)
-.ifill ldw r0, 0-4(r3);0xE701FFFC
-.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
.ifill ldis r8, 0;0xed400004
.ifill mov r0, r7;0xe1038000
.ifill andx r0, 1;0xe2800008
.ifill adddnz r8, r8, r6;0x00443001
.ifill subi r7, r7, 2;0xe1bb8010
.fill 0x0b7ffe83;brnz+ loop
.ifill adddnz r8, r8, r6;0x00443001
.ifill subi r7, r7, 2;0xe1bb8010
.fill 0x0b7ffe83;brnz+ loop
-.ifill stw r8, 0-4(r3);0xe7c1fffc
prog_consts:
.fill 0xed300004;ldis r6, CONST
prog_consts:
.fill 0xed300004;ldis r6, CONST
-.ifill stw r6, 0(r3);0xe7b18000
-.ifill addi r3, r3, 4;0xe1198020
-.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 add r7, r7, r6;0xe03bb000
-.ifill stw r7, 0-4(r3);0xe7b9fffc
-.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 sub r7, r7, r6;0xe0bbb000
-.ifill stw r7, 0-4(r3);0xe7b9fffc
-.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 cmp r7, r6;0xec3b0000
-.ifill stwlt r14, 0-4(r3);
-.ifill stwge r15, 0-4(r3);
+.ifill pushlt r14
+.ifill pushge r15
-.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
-.ifill subi r3, r3, 4;0xe1998020
-.ifill ldw r6, 0(r3);0xe7318000
.ifill cmpi r6,0;0xecb00000
;static calced
.fill 1, 0x1b000103;breq- vm_next
.ifill cmpi r6,0;0xecb00000
;static calced
.fill 1, 0x1b000103;breq- vm_next
prog_imm:
.fill 1, 0xed400000;ldil r6, CONST
.fill 1, 0xed400002;ldih r6, CONST
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 subi r3, r3, 4;0xe1998020
-.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
-.ifill ldw r6, 0-4(r3);0xe731fffc
-.ifill stw r6, 0-4(r3);0xe7b1fffc
call+ jit
;set address to stack
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
;make r15 a 0-register
ldis r15, 0
ldil r7, prog_jmp@lo
ldih r7, prog_jmp@hi
;load branch template
ldil r7, prog_jmp@lo
ldih r7, prog_jmp@hi
;load branch template
;if actual and base are equal, no entry
cmp r9, r10
;if actual and base are equal, no entry
cmp r9, r10
stx r0, 44(r2)
ldw r0, 48(r14)
stx r0, 48(r2)
stx r0, 44(r2)
ldw r0, 48(r14)
stx r0, 48(r2)
- ldw r0, 52(r14)
- stx r0, 52(r2)
stx r0, 8(r2)
ldw r0, 12(r4)
stx r0, 12(r2)
stx r0, 8(r2)
ldw r0, 12(r4)
stx r0, 12(r2)
- ldw r0, 16(r4)
- stx r0, 16(r2)
stx r0, 8(r2)
ldw r0, 12(r4)
stx r0, 12(r2)
stx r0, 8(r2)
ldw r0, 12(r4)
stx r0, 12(r2)
- ldw r0, 16(r4)
- stx r0, 16(r2)
stx r0, 0(r2)
ldw r0, 4(r15)
stx r0, 4(r2)
stx r0, 0(r2)
ldw r0, 4(r15)
stx r0, 4(r2)
- ldw r0, 8(r15)
- stx r0, 8(r2)
stx r0, 12(r2)
ldw r0, 16(r4)
stx r0, 16(r2)
stx r0, 12(r2)
ldw r0, 16(r4)
stx r0, 16(r2)
- ldw r0, 20(r4)
- stx r0, 20(r2)
stx r0, 0(r2)
ldw r0, 4(r13)
stx r0, 4(r2)
stx r0, 0(r2)
ldw r0, 4(r13)
stx r0, 4(r2)
- ldw r0, 8(r13)
- stx r0, 8(r2)
ldw r0, 8(r4)
stx r0, 8(r2)
ldw r0, 8(r4)
stx r0, 8(r2)
- ldw r0, 12(r4)
- stx r0, 12(r2)
ldil r4, prog_jmp@lo
ldih r4, prog_jmp@hi
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)
ldw r0, 0(r4)
stx r0, 0(r2)
- ;load sp
- ;ldw r6, 0(r3)
- ldw r0, 4(r4)
- stx r0, 4(r2)
- ldw r0, 8(r4)
- stx r0, 8(r2)
+ ldw r0, 4(r4)
+ stx r0, 4(r2)
;breq+ vm_next
;is statically known
;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
;we add the offset to this instruction
;we know calculate the jump destination
;we know calculate the jump destination
;shift to the position of imm in br
lls r8, r8, 7
;load template br
;shift to the position of imm in br
lls r8, r8, 7
;load template br