MiniUnix/usr/source/tmg/tmgb/emit.s
f=r5
g=r4
.globl ofile
.globl dogen
.globl succ
.globl g1,k
.globl emit
emit:
mov f,-(sp)
add $g1,(sp)
mov g,r1
1: /look for a translation
cmp (sp),r1
bge 3f /none at all
bit -(r1),$100001
beq 1b
/move it to end of stak
mov (r1)+,r0
1:
cmp g,r1
ble 1f
mov (r1),-2(r1)
mov r0,(r1)+
br 1b
1:
mov ofile,r0
jsr pc,dogen
mov g,r1
1:
cmp (sp),r1 /try to find prev value of k
bge 1f /nothing more in this stack frame
tst -(r1)
bge 1b /this isnt a k pointer (negative)
mov (r1),k(f)
br 3f
1:
mov f,r0 /go back to prev stack frame
mov k(r0),k(f)
3:
tst (sp)+
jmp succ