More Darwin.
This commit is contained in:
parent
a995e477ff
commit
a46395ecf9
10 changed files with 311 additions and 246 deletions
5
src/libthread/Darwin.c
Normal file
5
src/libthread/Darwin.c
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
int
|
||||
_schedfork(Proc *p)
|
||||
{
|
||||
return ffork(RFMEM|RFNOWAIT, _schedinit, p);
|
||||
}
|
||||
28
src/libthread/PowerMacintosh.c
Normal file
28
src/libthread/PowerMacintosh.c
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
#include "threadimpl.h"
|
||||
|
||||
static void
|
||||
launcherpower(int a0, int a1, int a2, int a3, int a4, int a5, int a6, int a7,
|
||||
void (*f)(void *arg), void *arg)
|
||||
{
|
||||
(*f)(arg);
|
||||
threadexits(nil);
|
||||
}
|
||||
|
||||
void
|
||||
_threadinitstack(Thread *t, void (*f)(void*), void *arg)
|
||||
{
|
||||
ulong *tos, *stk;
|
||||
int n;
|
||||
|
||||
tos = (ulong*)&t->stk[t->stksize&~7];
|
||||
stk = tos;
|
||||
--stk;
|
||||
--stk;
|
||||
--stk;
|
||||
--stk;
|
||||
*--stk = (ulong)arg;
|
||||
*--stk = (ulong)f;
|
||||
t->sched.pc = (ulong)launcherpower+LABELDPC;
|
||||
t->sched.sp = (ulong)tos-80;
|
||||
}
|
||||
|
||||
80
src/libthread/asm-Darwin-PowerMacintosh.s
Normal file
80
src/libthread/asm-Darwin-PowerMacintosh.s
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
/* get FPR and VR use flags with sc 0x7FF3 */
|
||||
/* get vsave with mfspr reg, 256 */
|
||||
|
||||
.text
|
||||
.align 2
|
||||
|
||||
.globl __setlabel
|
||||
|
||||
__setlabel: /* xxx: instruction scheduling */
|
||||
mflr r0
|
||||
mfcr r5
|
||||
mfctr r6
|
||||
mfxer r7
|
||||
stw r0, 0*4(r3)
|
||||
stw r5, 1*4(r3)
|
||||
stw r6, 2*4(r3)
|
||||
stw r7, 3*4(r3)
|
||||
|
||||
stw r1, 4*4(r3)
|
||||
stw r2, 5*4(r3)
|
||||
|
||||
stw r13, (0+6)*4(r3) /* callee-save GPRs */
|
||||
stw r14, (1+6)*4(r3) /* xxx: block move */
|
||||
stw r15, (2+6)*4(r3)
|
||||
stw r16, (3+6)*4(r3)
|
||||
stw r17, (4+6)*4(r3)
|
||||
stw r18, (5+6)*4(r3)
|
||||
stw r19, (6+6)*4(r3)
|
||||
stw r20, (7+6)*4(r3)
|
||||
stw r21, (8+6)*4(r3)
|
||||
stw r22, (9+6)*4(r3)
|
||||
stw r23, (10+6)*4(r3)
|
||||
stw r24, (11+6)*4(r3)
|
||||
stw r25, (12+6)*4(r3)
|
||||
stw r26, (13+6)*4(r3)
|
||||
stw r27, (14+6)*4(r3)
|
||||
stw r28, (15+6)*4(r3)
|
||||
stw r29, (16+6)*4(r3)
|
||||
stw r30, (17+6)*4(r3)
|
||||
stw r31, (18+6)*4(r3)
|
||||
|
||||
li r3, 0 /* return */
|
||||
blr
|
||||
|
||||
.globl __gotolabel
|
||||
|
||||
__gotolabel:
|
||||
lwz r13, (0+6)*4(r3) /* callee-save GPRs */
|
||||
lwz r14, (1+6)*4(r3) /* xxx: block move */
|
||||
lwz r15, (2+6)*4(r3)
|
||||
lwz r16, (3+6)*4(r3)
|
||||
lwz r17, (4+6)*4(r3)
|
||||
lwz r18, (5+6)*4(r3)
|
||||
lwz r19, (6+6)*4(r3)
|
||||
lwz r20, (7+6)*4(r3)
|
||||
lwz r21, (8+6)*4(r3)
|
||||
lwz r22, (9+6)*4(r3)
|
||||
lwz r23, (10+6)*4(r3)
|
||||
lwz r24, (11+6)*4(r3)
|
||||
lwz r25, (12+6)*4(r3)
|
||||
lwz r26, (13+6)*4(r3)
|
||||
lwz r27, (14+6)*4(r3)
|
||||
lwz r28, (15+6)*4(r3)
|
||||
lwz r29, (16+6)*4(r3)
|
||||
lwz r30, (17+6)*4(r3)
|
||||
lwz r31, (18+6)*4(r3)
|
||||
|
||||
lwz r1, 4*4(r3)
|
||||
lwz r2, 5*4(r3)
|
||||
|
||||
lwz r0, 0*4(r3)
|
||||
mtlr r0
|
||||
lwz r0, 1*4(r3)
|
||||
mtcr r0 /* mtcrf 0xFF, r0 */
|
||||
lwz r0, 2*4(r3)
|
||||
mtctr r0
|
||||
lwz r0, 3*4(r3)
|
||||
mtxer r0
|
||||
li r3, 1
|
||||
blr
|
||||
Loading…
Add table
Add a link
Reference in a new issue