50 lines
529 B
ArmAsm
50 lines
529 B
ArmAsm
/
|
|
/
|
|
|
|
/ rb -- funct/subr stuff
|
|
|
|
.globl call
|
|
.globl callp
|
|
.globl retrn
|
|
.globl stsp
|
|
|
|
callp:
|
|
mov (r4)+,r0
|
|
add r3,r0
|
|
mov (r0),r0
|
|
br 1f
|
|
|
|
call:
|
|
mov (r4)+,r0
|
|
1:
|
|
mov r3,-(sp)
|
|
mov (r4)+,r3
|
|
mov r4,-(sp)
|
|
mov r0,r4
|
|
mov (r4)+,-(sp) / lv of funct
|
|
jmp *(r4)+
|
|
|
|
retrn:
|
|
mov r3,r0
|
|
mov (sp)+,r1 / lv of funct
|
|
mov (sp)+,r4
|
|
mov (sp)+,r3
|
|
mov (r0),sp
|
|
tst (r4)+ / arg count
|
|
mov (r4)+,r0 / return byte count
|
|
inc r0
|
|
bic $1,r0
|
|
add r0,r1
|
|
1:
|
|
sub $2,r0
|
|
blt 1f
|
|
mov -(r1),-(sp)
|
|
br 1b
|
|
1:
|
|
jmp *(r4)+
|
|
|
|
stsp:
|
|
mov sp,*(r4)+
|
|
jmp *(r4)+
|
|
|