Blob


1 #include <sys/syscall.h>
2 #include <machine/asm.h>
4 ENTRY(_tas)
5 li %r0, 0
6 mr %r4, %r3
7 lis %r5, 0xcafe
8 ori %r5, %r5, 0xbabe
9 1:
10 lwarx %r3, %r0, %r4
11 cmpwi %r3, 0
12 bne 2f
13 stwcx. %r5, %r0, %r4
14 bne- 1b
15 2:
16 sync
17 blr
19 ENTRY(_getmcontext) /* xxx: instruction scheduling */
20 mflr %r0
21 mfcr %r5
22 mfctr %r6
23 mfxer %r7
24 stw %r0, 0*4(%r3)
25 stw %r5, 1*4(%r3)
26 stw %r6, 2*4(%r3)
27 stw %r7, 3*4(%r3)
29 stw %r1, 4*4(%r3)
30 stw %r2, 5*4(%r3)
31 li %r5, 1 /* return value for setmcontext */
32 stw %r5, 6*4(%r3)
34 stw %r13, (0+7)*4(%r3) /* callee-save GPRs */
35 stw %r14, (1+7)*4(%r3) /* xxx: block move */
36 stw %r15, (2+7)*4(%r3)
37 stw %r16, (3+7)*4(%r3)
38 stw %r17, (4+7)*4(%r3)
39 stw %r18, (5+7)*4(%r3)
40 stw %r19, (6+7)*4(%r3)
41 stw %r20, (7+7)*4(%r3)
42 stw %r21, (8+7)*4(%r3)
43 stw %r22, (9+7)*4(%r3)
44 stw %r23, (10+7)*4(%r3)
45 stw %r24, (11+7)*4(%r3)
46 stw %r25, (12+7)*4(%r3)
47 stw %r26, (13+7)*4(%r3)
48 stw %r27, (14+7)*4(%r3)
49 stw %r28, (15+7)*4(%r3)
50 stw %r29, (16+7)*4(%r3)
51 stw %r30, (17+7)*4(%r3)
52 stw %r31, (18+7)*4(%r3)
54 li %r3, 0 /* return */
55 blr
57 ENTRY(_setmcontext)
58 lwz %r13, (0+7)*4(%r3) /* callee-save GPRs */
59 lwz %r14, (1+7)*4(%r3) /* xxx: block move */
60 lwz %r15, (2+7)*4(%r3)
61 lwz %r16, (3+7)*4(%r3)
62 lwz %r17, (4+7)*4(%r3)
63 lwz %r18, (5+7)*4(%r3)
64 lwz %r19, (6+7)*4(%r3)
65 lwz %r20, (7+7)*4(%r3)
66 lwz %r21, (8+7)*4(%r3)
67 lwz %r22, (9+7)*4(%r3)
68 lwz %r23, (10+7)*4(%r3)
69 lwz %r24, (11+7)*4(%r3)
70 lwz %r25, (12+7)*4(%r3)
71 lwz %r26, (13+7)*4(%r3)
72 lwz %r27, (14+7)*4(%r3)
73 lwz %r28, (15+7)*4(%r3)
74 lwz %r29, (16+7)*4(%r3)
75 lwz %r30, (17+7)*4(%r3)
76 lwz %r31, (18+7)*4(%r3)
78 lwz %r1, 4*4(%r3)
79 lwz %r2, 5*4(%r3)
81 lwz %r0, 0*4(%r3)
82 mtlr %r0
83 lwz %r0, 1*4(%r3)
84 mtcr %r0 /* mtcrf 0xFF, %r0 */
85 lwz %r0, 2*4(%r3)
86 mtctr %r0
87 lwz %r0, 3*4(%r3)
88 mtxer %r0
90 lwz %r3, 6*4(%r3)
91 blr
93 ENTRY(rfork_thread)
94 /* sanity check */
95 cmpwi %r4, 0
96 beq 1f
97 cmpwi %r5, 0
98 beq 1f
100 mr %r7,%r4
102 /* call rfork */
103 li %r0, SYS_rfork
104 sc
105 cmpwi %r0, 0
106 bne 2f
108 /* check if we are parent or child */
109 cmpwi %r3, 0
110 bnelr
112 /* child */
113 mtlr %r5 /* fp */
114 mr %r3, %r6 /* arg */
115 mr %r1, %r7 /* new sp */
116 blrl
118 /* child returned, call _exit */
119 li %r0, SYS_exit
120 sc
121 1:
122 li %r3, -1
123 2:
124 b PIC_PLT(_C_LABEL(__cerror))