43 lines
592 B
ArmAsm
43 lines
592 B
ArmAsm
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
|