ref: 33bdd7e6c2bbfc7e2373b4e8d0371fd89dc31e52
dir: /sys/src/9/teg2/lproc.s/
#include "arm.s" /* * This is the first jump from kernel to user mode. * Fake a return from interrupt. * * Enter with R0 containing the user stack pointer. * UTZERO + 0x20 is always the entry point. * */ TEXT touser(SB), 1, $-4 /* store the user stack pointer into the USR_r13 */ MOVM.DB.W [R0], (R13) /* avoid the ambiguity described in notes/movm.w. */ MOVM.S (R13), [R13] ADD $4, R13 /* pop new user SP */ /* set up a PSR for user level */ MOVW $(PsrMusr), R0 MOVW R0, SPSR /* push new user PSR */ MOVM.DB.W [R0], (R13) /* push the new user PC on the stack */ MOVW $(UTZERO+0x20), R0 MOVM.DB.W [R0], (R13) RFEV7W(13) /* * here to jump to a newly forked process */ TEXT forkret(SB), 1, $-4 ADD $(4*NREGS), R13 /* make r13 point to ureg->type */ MOVW 8(R13), R14 /* restore link */ MOVW 4(R13), R0 /* restore SPSR */ B rfue(SB)