Blame


1 a46395ec 2003-10-01 devnull #include "threadimpl.h"
2 a46395ec 2003-10-01 devnull
3 a46395ec 2003-10-01 devnull static void
4 a46395ec 2003-10-01 devnull launcherpower(int a0, int a1, int a2, int a3, int a4, int a5, int a6, int a7,
5 a46395ec 2003-10-01 devnull void (*f)(void *arg), void *arg)
6 a46395ec 2003-10-01 devnull {
7 a46395ec 2003-10-01 devnull (*f)(arg);
8 a46395ec 2003-10-01 devnull threadexits(nil);
9 a46395ec 2003-10-01 devnull }
10 a46395ec 2003-10-01 devnull
11 a46395ec 2003-10-01 devnull void
12 a46395ec 2003-10-01 devnull _threadinitstack(Thread *t, void (*f)(void*), void *arg)
13 a46395ec 2003-10-01 devnull {
14 a46395ec 2003-10-01 devnull ulong *tos, *stk;
15 a46395ec 2003-10-01 devnull int n;
16 a46395ec 2003-10-01 devnull
17 a46395ec 2003-10-01 devnull tos = (ulong*)&t->stk[t->stksize&~7];
18 a46395ec 2003-10-01 devnull stk = tos;
19 a46395ec 2003-10-01 devnull --stk;
20 a46395ec 2003-10-01 devnull --stk;
21 a46395ec 2003-10-01 devnull --stk;
22 a46395ec 2003-10-01 devnull --stk;
23 a46395ec 2003-10-01 devnull *--stk = (ulong)arg;
24 a46395ec 2003-10-01 devnull *--stk = (ulong)f;
25 a46395ec 2003-10-01 devnull t->sched.pc = (ulong)launcherpower+LABELDPC;
26 a46395ec 2003-10-01 devnull t->sched.sp = (ulong)tos-80;
27 a46395ec 2003-10-01 devnull }
28 a46395ec 2003-10-01 devnull