Blame


1 8a708fb2 2003-11-23 devnull #include "threadimpl.h"
2 8a708fb2 2003-11-23 devnull
3 8a708fb2 2003-11-23 devnull static void
4 8a708fb2 2003-11-23 devnull launchersparc(int o0, int o1, int o2, int o3, int o4,
5 8a708fb2 2003-11-23 devnull void (*f)(void *arg), void *arg)
6 8a708fb2 2003-11-23 devnull {
7 8a708fb2 2003-11-23 devnull (*f)(arg);
8 8a708fb2 2003-11-23 devnull threadexits(nil);
9 8a708fb2 2003-11-23 devnull }
10 8a708fb2 2003-11-23 devnull
11 8a708fb2 2003-11-23 devnull void
12 8a708fb2 2003-11-23 devnull _threadinitstack(Thread *t, void (*f)(void*), void *arg)
13 8a708fb2 2003-11-23 devnull {
14 8a708fb2 2003-11-23 devnull ulong *tos, *stk;
15 8a708fb2 2003-11-23 devnull
16 8a708fb2 2003-11-23 devnull tos = (ulong*)&t->stk[t->stksize&~7];
17 8a708fb2 2003-11-23 devnull stk = tos;
18 8a708fb2 2003-11-23 devnull --stk;
19 8a708fb2 2003-11-23 devnull *--stk = (ulong)arg;
20 8a708fb2 2003-11-23 devnull *--stk = (ulong)f;
21 8a708fb2 2003-11-23 devnull t->sched.link = (ulong)launchersparc - 8;
22 8a708fb2 2003-11-23 devnull t->sched.input[6] = 0;
23 8a708fb2 2003-11-23 devnull t->sched.sp = (ulong)stk - 0x5c;
24 8a708fb2 2003-11-23 devnull }
25 8a708fb2 2003-11-23 devnull