xref: /plan9-contrib/sys/src/cmd/4a/l.s (revision 7edc7532330e121456ef36aacaa3205d15f19c4a)
1*7edc7532SDavid du Colombier/*
2*7edc7532SDavid du Colombier * Memory and machine-specific definitions.  Used in C and assembler.
3*7edc7532SDavid du Colombier */
4*7edc7532SDavid du Colombier
5*7edc7532SDavid du Colombier/*
6*7edc7532SDavid du Colombier * Sizes
7*7edc7532SDavid du Colombier */
8*7edc7532SDavid du Colombier
9*7edc7532SDavid du Colombier#define	BI2BY		8			/* bits per byte */
10*7edc7532SDavid du Colombier#define BI2WD		32			/* bits per word */
11*7edc7532SDavid du Colombier#define	BY2WD		4			/* bytes per word */
12*7edc7532SDavid du Colombier#define	BY2PG		4096			/* bytes per page */
13*7edc7532SDavid du Colombier#define	WD2PG		(BY2PG/BY2WD)		/* words per page */
14*7edc7532SDavid du Colombier#define	PGSHIFT		12			/* log(BY2PG) */
15*7edc7532SDavid du Colombier
16*7edc7532SDavid du Colombier#define	MAXMACH		4			/* max # cpus system can run */
17*7edc7532SDavid du Colombier
18*7edc7532SDavid du Colombier/*
19*7edc7532SDavid du Colombier * Time
20*7edc7532SDavid du Colombier */
21*7edc7532SDavid du Colombier#define	MS2HZ		50			/* millisec per clock tick */
22*7edc7532SDavid du Colombier#define	TK2SEC(t)	((t)/20)		/* ticks to seconds */
23*7edc7532SDavid du Colombier#define	TK2MS(t)	((t)*MS2HZ)		/* ticks to milliseconds */
24*7edc7532SDavid du Colombier#define	MS2TK(t)	((t)/MS2HZ)		/* milliseconds to ticks */
25*7edc7532SDavid du Colombier
26*7edc7532SDavid du Colombier/*
27*7edc7532SDavid du Colombier * CP0 registers
28*7edc7532SDavid du Colombier */
29*7edc7532SDavid du Colombier
30*7edc7532SDavid du Colombier#define INDEX		0
31*7edc7532SDavid du Colombier#define RANDOM		1
32*7edc7532SDavid du Colombier#define TLBPHYS		2
33*7edc7532SDavid du Colombier#define CONTEXT		4
34*7edc7532SDavid du Colombier#define BADVADDR	8
35*7edc7532SDavid du Colombier#define TLBVIRT		10
36*7edc7532SDavid du Colombier#define STATUS		12
37*7edc7532SDavid du Colombier#define CAUSE		13
38*7edc7532SDavid du Colombier#define EPC		14
39*7edc7532SDavid du Colombier#define	PRID		15
40*7edc7532SDavid du Colombier
41*7edc7532SDavid du Colombier/*
42*7edc7532SDavid du Colombier * M(STATUS) bits
43*7edc7532SDavid du Colombier */
44*7edc7532SDavid du Colombier#define IEC		0x00000001
45*7edc7532SDavid du Colombier#define KUC		0x00000002
46*7edc7532SDavid du Colombier#define IEP		0x00000004
47*7edc7532SDavid du Colombier#define KUP		0x00000008
48*7edc7532SDavid du Colombier#define INTMASK		0x0000ff00
49*7edc7532SDavid du Colombier#define SW0		0x00000100
50*7edc7532SDavid du Colombier#define SW1		0x00000200
51*7edc7532SDavid du Colombier#define INTR0		0x00000400
52*7edc7532SDavid du Colombier#define INTR1		0x00000800
53*7edc7532SDavid du Colombier#define INTR2		0x00001000
54*7edc7532SDavid du Colombier#define INTR3		0x00002000
55*7edc7532SDavid du Colombier#define INTR4		0x00004000
56*7edc7532SDavid du Colombier#define INTR5		0x00008000
57*7edc7532SDavid du Colombier#define ISC		0x00010000
58*7edc7532SDavid du Colombier#define SWC		0x00020000
59*7edc7532SDavid du Colombier#define CU1		0x20000000
60*7edc7532SDavid du Colombier
61*7edc7532SDavid du Colombier/*
62*7edc7532SDavid du Colombier * Traps
63*7edc7532SDavid du Colombier */
64*7edc7532SDavid du Colombier
65*7edc7532SDavid du Colombier#define	UTLBMISS	(KSEG0+0x00)
66*7edc7532SDavid du Colombier#define	EXCEPTION	(KSEG0+0x80)
67*7edc7532SDavid du Colombier
68*7edc7532SDavid du Colombier/*
69*7edc7532SDavid du Colombier * Magic registers
70*7edc7532SDavid du Colombier */
71*7edc7532SDavid du Colombier
72*7edc7532SDavid du Colombier#define	MACH		25		/* R25 is m-> */
73*7edc7532SDavid du Colombier#define	USER		24		/* R24 is u-> */
74*7edc7532SDavid du Colombier#define	MPID		0xBF000000	/* long; low 3 bits identify mp bus slot */
75*7edc7532SDavid du Colombier#define WBFLUSH		0xBC000000	/* D-CACHE data; used for write buffer flush */
76*7edc7532SDavid du Colombier
77*7edc7532SDavid du Colombier/*
78*7edc7532SDavid du Colombier * Fundamental addresses
79*7edc7532SDavid du Colombier */
80*7edc7532SDavid du Colombier
81*7edc7532SDavid du Colombier#define	MACHADDR	0x80014000
82*7edc7532SDavid du Colombier#define	USERADDR	0xC0000000
83*7edc7532SDavid du Colombier#define	UREGADDR	(USERADDR+BY2PG-4-0xA0)
84*7edc7532SDavid du Colombier/*
85*7edc7532SDavid du Colombier * MMU
86*7edc7532SDavid du Colombier */
87*7edc7532SDavid du Colombier
88*7edc7532SDavid du Colombier#define	KUSEG	0x00000000
89*7edc7532SDavid du Colombier#define KSEG0	0x80000000
90*7edc7532SDavid du Colombier#define KSEG1	0xA0000000
91*7edc7532SDavid du Colombier#define	KSEG2	0xC0000000
92*7edc7532SDavid du Colombier#define	KSEGM	0xE0000000	/* mask to check which seg */
93*7edc7532SDavid du Colombier
94*7edc7532SDavid du Colombier#define	PTEGLOBL	(1<<8)
95*7edc7532SDavid du Colombier#define	PTEVALID	(1<<9)
96*7edc7532SDavid du Colombier#define	PTEWRITE	(1<<10)
97*7edc7532SDavid du Colombier#define	PTEPID(n)	((n)<<6)
98*7edc7532SDavid du Colombier
99*7edc7532SDavid du Colombier#define	NTLBPID	64	/* number of pids */
100*7edc7532SDavid du Colombier#define	NTLB	64	/* number of entries */
101*7edc7532SDavid du Colombier#define	TLBROFF	8	/* offset of first randomly indexed entry */
102*7edc7532SDavid du Colombier
103*7edc7532SDavid du Colombier/*
104*7edc7532SDavid du Colombier * Address spaces
105*7edc7532SDavid du Colombier */
106*7edc7532SDavid du Colombier
107*7edc7532SDavid du Colombier#define	UZERO	KUSEG			/* base of user address space */
108*7edc7532SDavid du Colombier#define	UTZERO	(UZERO+BY2PG)		/* first address in user text */
109*7edc7532SDavid du Colombier#define	USTKTOP	KZERO			/* byte just beyond user stack */
110*7edc7532SDavid du Colombier#define	TSTKTOP	(USERADDR+100*BY2PG)	/* top of temporary stack */
111*7edc7532SDavid du Colombier#define	KZERO	KSEG0			/* base of kernel address space */
112*7edc7532SDavid du Colombier#define	KTZERO	(KSEG0+0x20000)		/* first address in kernel text */
113*7edc7532SDavid du Colombier#define	USTACKSIZE	(4*1024*1024)	/* size of user stack */
114*7edc7532SDavid du Colombier/*
115*7edc7532SDavid du Colombier * Exception codes
116*7edc7532SDavid du Colombier */
117*7edc7532SDavid du Colombier#define	CINT	 0		/* external interrupt */
118*7edc7532SDavid du Colombier#define	CTLBM	 1		/* TLB modification */
119*7edc7532SDavid du Colombier#define	CTLBL	 2		/* TLB miss (load or fetch) */
120*7edc7532SDavid du Colombier#define	CTLBS	 3		/* TLB miss (store) */
121*7edc7532SDavid du Colombier#define	CADREL	 4		/* address error (load or fetch) */
122*7edc7532SDavid du Colombier#define	CADRES	 5		/* address error (store) */
123*7edc7532SDavid du Colombier#define	CBUSI	 6		/* bus error (fetch) */
124*7edc7532SDavid du Colombier#define	CBUSD	 7		/* bus error (data load or store) */
125*7edc7532SDavid du Colombier#define	CSYS	 8		/* system call */
126*7edc7532SDavid du Colombier#define	CBRK	 9		/* breakpoint */
127*7edc7532SDavid du Colombier#define	CRES	10		/* reserved instruction */
128*7edc7532SDavid du Colombier#define	CCPU	11		/* coprocessor unusable */
129*7edc7532SDavid du Colombier#define	COVF	12		/* arithmetic overflow */
130*7edc7532SDavid du Colombier#define	CUNK13	13		/* undefined 13 */
131*7edc7532SDavid du Colombier#define	CUNK14	14		/* undefined 14 */
132*7edc7532SDavid du Colombier#define	CUNK15	15		/* undefined 15 */
133*7edc7532SDavid du Colombier
134*7edc7532SDavid du Colombier#define	NSEG	5
135*7edc7532SDavid du Colombier
136*7edc7532SDavid du Colombier#define SP		R29
137*7edc7532SDavid du Colombier
138*7edc7532SDavid du Colombier#define PROM		(KSEG1+0x1FC00000)
139*7edc7532SDavid du Colombier#define	NOOP		NOR R0,R0
140*7edc7532SDavid du Colombier#define	WAIT		NOOP; NOOP
141*7edc7532SDavid du Colombier
142*7edc7532SDavid du Colombier/*
143*7edc7532SDavid du Colombier * Boot first processor
144*7edc7532SDavid du Colombier *   - why is the processor number loaded from R0 ?????
145*7edc7532SDavid du Colombier */
146*7edc7532SDavid du ColombierTEXT	start(SB), $-4
147*7edc7532SDavid du Colombier
148*7edc7532SDavid du Colombier	MOVW	$setR30(SB), R30
149*7edc7532SDavid du Colombier	MOVW	$(CU1|INTR5|INTR4|INTR3|INTR2|INTR1|SW1|SW0), R1
150*7edc7532SDavid du Colombier	MOVW	R1, M(STATUS)
151*7edc7532SDavid du Colombier	WAIT
152*7edc7532SDavid du Colombier
153*7edc7532SDavid du Colombier	MOVW	$(0x1C<<7), R1
154*7edc7532SDavid du Colombier	MOVW	R1, FCR31	/* permit only inexact and underflow */
155*7edc7532SDavid du Colombier	NOOP
156*7edc7532SDavid du Colombier	MOVD	$0.5, F26
157*7edc7532SDavid du Colombier	SUBD	F26, F26, F24
158*7edc7532SDavid du Colombier	ADDD	F26, F26, F28
159*7edc7532SDavid du Colombier	ADDD	F28, F28, F30
160*7edc7532SDavid du Colombier
161*7edc7532SDavid du Colombier	MOVD	F24, F0
162*7edc7532SDavid du Colombier	MOVD	F24, F2
163*7edc7532SDavid du Colombier	MOVD	F24, F4
164*7edc7532SDavid du Colombier	MOVD	F24, F6
165*7edc7532SDavid du Colombier	MOVD	F24, F8
166*7edc7532SDavid du Colombier	MOVD	F24, F10
167*7edc7532SDavid du Colombier	MOVD	F24, F12
168*7edc7532SDavid du Colombier	MOVD	F24, F14
169*7edc7532SDavid du Colombier	MOVD	F24, F16
170*7edc7532SDavid du Colombier	MOVD	F24, F18
171*7edc7532SDavid du Colombier	MOVD	F24, F20
172*7edc7532SDavid du Colombier	MOVD	F24, F22
173*7edc7532SDavid du Colombier
174*7edc7532SDavid du Colombier	MOVW	$MACHADDR, R(MACH)
175*7edc7532SDavid du Colombier	ADDU	$(BY2PG-4), R(MACH), SP
176*7edc7532SDavid du Colombier	MOVW	$0, R(USER)
177*7edc7532SDavid du Colombier	MOVW	R0, 0(R(MACH))
178*7edc7532SDavid du Colombier
179*7edc7532SDavid du Colombier	MOVW	$edata(SB), R1
180*7edc7532SDavid du Colombier	MOVW	$end(SB), R2
181*7edc7532SDavid du Colombier
182*7edc7532SDavid du Colombierclrbss:
183*7edc7532SDavid du Colombier	MOVB	$0, (R1)
184*7edc7532SDavid du Colombier	ADDU	$1, R1
185*7edc7532SDavid du Colombier	BNE	R1, R2, clrbss
186*7edc7532SDavid du Colombier
187*7edc7532SDavid du Colombier	MOVW	R4, _argc(SB)
188*7edc7532SDavid du Colombier	MOVW	R5, _argv(SB)
189*7edc7532SDavid du Colombier	MOVW	R6, _env(SB)
190*7edc7532SDavid du Colombier	JAL	main(SB)
191*7edc7532SDavid du Colombier	JMP	(R0)
192*7edc7532SDavid du Colombier
193*7edc7532SDavid du Colombier/*
194*7edc7532SDavid du Colombier * Take first processor into user mode
195*7edc7532SDavid du Colombier * 	- argument is stack pointer to user
196*7edc7532SDavid du Colombier */
197*7edc7532SDavid du Colombier
198*7edc7532SDavid du ColombierTEXT	touser(SB), $-4
199*7edc7532SDavid du Colombier
200*7edc7532SDavid du Colombier	MOVW	M(STATUS), R1
201*7edc7532SDavid du Colombier	OR	$(KUP|IEP), R1
202*7edc7532SDavid du Colombier	MOVW	R1, M(STATUS)
203*7edc7532SDavid du Colombier	NOOP
204*7edc7532SDavid du Colombier	MOVW	0(FP), SP
205*7edc7532SDavid du Colombier	MOVW	$(UTZERO+32), R26	/* header appears in text */
206*7edc7532SDavid du Colombier	RFE	(R26)
207*7edc7532SDavid du Colombier
208*7edc7532SDavid du Colombier/*
209*7edc7532SDavid du Colombier * Bring subsequent processors on line
210*7edc7532SDavid du Colombier */
211*7edc7532SDavid du ColombierTEXT	newstart(SB), $0
212*7edc7532SDavid du Colombier
213*7edc7532SDavid du Colombier	MOVW	$setR30(SB), R30
214*7edc7532SDavid du Colombier	MOVW	$(INTR5|INTR4|INTR3|INTR2|INTR1|SW1|SW0), R1
215*7edc7532SDavid du Colombier	MOVW	R1, M(STATUS)
216*7edc7532SDavid du Colombier	NOOP
217*7edc7532SDavid du Colombier	MOVW	$MACHADDR, R(MACH)
218*7edc7532SDavid du Colombier	MOVB	(MPID+3), R1
219*7edc7532SDavid du Colombier	AND	$7, R1
220*7edc7532SDavid du Colombier	SLL	$PGSHIFT, R1, R2
221*7edc7532SDavid du Colombier	ADDU	R2, R(MACH)
222*7edc7532SDavid du Colombier	ADDU	$(BY2PG-4), R(MACH), SP
223*7edc7532SDavid du Colombier	MOVW	$0, R(USER)
224*7edc7532SDavid du Colombier	MOVW	R1, 0(R(MACH))
225*7edc7532SDavid du Colombier	JAL	online(SB)
226*7edc7532SDavid du Colombier	JMP	(R0)
227*7edc7532SDavid du Colombier
228*7edc7532SDavid du ColombierTEXT	firmware(SB), $0
229*7edc7532SDavid du Colombier
230*7edc7532SDavid du Colombier	MOVW	$(PROM+0x18), R1 /**/
231*7edc7532SDavid du Colombier/*	MOVW	$(PROM+0x00), R1 /**/
232*7edc7532SDavid du Colombier	JMP	(R1)
233*7edc7532SDavid du Colombier
234*7edc7532SDavid du ColombierTEXT	splhi(SB), $0
235*7edc7532SDavid du Colombier
236*7edc7532SDavid du Colombier	MOVW	M(STATUS), R1
237*7edc7532SDavid du Colombier	AND	$~IEC, R1, R2
238*7edc7532SDavid du Colombier	MOVW	R2, M(STATUS)
239*7edc7532SDavid du Colombier	NOOP
240*7edc7532SDavid du Colombier	RET
241*7edc7532SDavid du Colombier
242*7edc7532SDavid du ColombierTEXT	spllo(SB), $0
243*7edc7532SDavid du Colombier
244*7edc7532SDavid du Colombier	MOVW	M(STATUS), R1
245*7edc7532SDavid du Colombier	OR	$IEC, R1, R2
246*7edc7532SDavid du Colombier	MOVW	R2, M(STATUS)
247*7edc7532SDavid du Colombier	NOOP
248*7edc7532SDavid du Colombier	RET
249*7edc7532SDavid du Colombier
250*7edc7532SDavid du ColombierTEXT	splx(SB), $0
251*7edc7532SDavid du Colombier
252*7edc7532SDavid du Colombier	MOVW	0(FP), R1
253*7edc7532SDavid du Colombier	MOVW	M(STATUS), R2
254*7edc7532SDavid du Colombier	AND	$IEC, R1
255*7edc7532SDavid du Colombier	AND	$~IEC, R2
256*7edc7532SDavid du Colombier	OR	R2, R1
257*7edc7532SDavid du Colombier	MOVW	R1, M(STATUS)
258*7edc7532SDavid du Colombier	NOOP
259*7edc7532SDavid du Colombier	RET
260*7edc7532SDavid du Colombier
261*7edc7532SDavid du ColombierTEXT	wbflush(SB), $-4
262*7edc7532SDavid du Colombier
263*7edc7532SDavid du Colombier	MOVW	$WBFLUSH, R1
264*7edc7532SDavid du Colombier	MOVW	0(R1), R1
265*7edc7532SDavid du Colombier	RET
266*7edc7532SDavid du Colombier
267*7edc7532SDavid du ColombierTEXT	setlabel(SB), $0
268*7edc7532SDavid du Colombier
269*7edc7532SDavid du Colombier	MOVW	0(FP), R2
270*7edc7532SDavid du Colombier	MOVW	$0, R1
271*7edc7532SDavid du Colombier	MOVW	R31, 0(R2)
272*7edc7532SDavid du Colombier	MOVW	R29, 4(R2)
273*7edc7532SDavid du Colombier	RET
274*7edc7532SDavid du Colombier
275*7edc7532SDavid du ColombierTEXT	gotolabel(SB), $0
276*7edc7532SDavid du Colombier
277*7edc7532SDavid du Colombier	MOVW	0(FP), R2
278*7edc7532SDavid du Colombier	MOVW	$1, R1
279*7edc7532SDavid du Colombier	MOVW	0(R2), R31
280*7edc7532SDavid du Colombier	MOVW	4(R2), R29
281*7edc7532SDavid du Colombier	RET
282*7edc7532SDavid du Colombier
283*7edc7532SDavid du ColombierTEXT	gotopc(SB), $8
284*7edc7532SDavid du Colombier
285*7edc7532SDavid du Colombier	MOVW	0(FP), R7		/* save arguments for later */
286*7edc7532SDavid du Colombier	MOVW	_argc(SB), R4
287*7edc7532SDavid du Colombier	MOVW	_argv(SB), R5
288*7edc7532SDavid du Colombier	MOVW	_env(SB), R6
289*7edc7532SDavid du Colombier	MOVW	R0, 4(SP)
290*7edc7532SDavid du Colombier	MOVW	$(64*1024), R1
291*7edc7532SDavid du Colombier	MOVW	R1, 8(SP)
292*7edc7532SDavid du Colombier	JAL	icflush(SB)
293*7edc7532SDavid du Colombier	JMP	(R7)
294*7edc7532SDavid du Colombier
295*7edc7532SDavid du ColombierTEXT	puttlb(SB), $4
296*7edc7532SDavid du Colombier
297*7edc7532SDavid du Colombier	JAL	splhi(SB)
298*7edc7532SDavid du Colombier	MOVW	0(FP), R2
299*7edc7532SDavid du Colombier	MOVW	4(FP), R3
300*7edc7532SDavid du Colombier	MOVW	R1, 4(SP)
301*7edc7532SDavid du Colombier	MOVW	R2, M(TLBVIRT)
302*7edc7532SDavid du Colombier	MOVW	R3, M(TLBPHYS)
303*7edc7532SDavid du Colombier	NOOP
304*7edc7532SDavid du Colombier	TLBP
305*7edc7532SDavid du Colombier	NOOP
306*7edc7532SDavid du Colombier	MOVW	M(INDEX), R4
307*7edc7532SDavid du Colombier	BGEZ	R4, index
308*7edc7532SDavid du Colombier	TLBWR
309*7edc7532SDavid du Colombier	NOOP
310*7edc7532SDavid du Colombier	JAL	splx(SB)
311*7edc7532SDavid du Colombier	RET
312*7edc7532SDavid du Colombierindex:
313*7edc7532SDavid du Colombier	TLBWI
314*7edc7532SDavid du Colombier	NOOP
315*7edc7532SDavid du Colombier	JAL	splx(SB)
316*7edc7532SDavid du Colombier	RET
317*7edc7532SDavid du Colombier
318*7edc7532SDavid du ColombierTEXT	puttlbx(SB), $0
319*7edc7532SDavid du Colombier
320*7edc7532SDavid du Colombier	MOVW	0(FP), R4
321*7edc7532SDavid du Colombier	MOVW	4(FP), R2
322*7edc7532SDavid du Colombier	MOVW	8(FP), R3
323*7edc7532SDavid du Colombier	SLL	$8, R4
324*7edc7532SDavid du Colombier	MOVW	R2, M(TLBVIRT)
325*7edc7532SDavid du Colombier	MOVW	R3, M(TLBPHYS)
326*7edc7532SDavid du Colombier	MOVW	R4, M(INDEX)
327*7edc7532SDavid du Colombier	NOOP
328*7edc7532SDavid du Colombier	TLBWI
329*7edc7532SDavid du Colombier	NOOP
330*7edc7532SDavid du Colombier	RET
331*7edc7532SDavid du Colombier
332*7edc7532SDavid du ColombierTEXT	tlbp(SB), $0
333*7edc7532SDavid du Colombier	TLBP
334*7edc7532SDavid du Colombier	NOOP
335*7edc7532SDavid du Colombier	MOVW	M(INDEX), R1
336*7edc7532SDavid du Colombier	RET
337*7edc7532SDavid du Colombier
338*7edc7532SDavid du ColombierTEXT	tlbvirt(SB), $0
339*7edc7532SDavid du Colombier	TLBP
340*7edc7532SDavid du Colombier	NOOP
341*7edc7532SDavid du Colombier	MOVW	M(TLBVIRT), R1
342*7edc7532SDavid du Colombier	RET
343*7edc7532SDavid du Colombier
344*7edc7532SDavid du Colombier
345*7edc7532SDavid du ColombierTEXT	gettlb(SB), $0
346*7edc7532SDavid du Colombier
347*7edc7532SDavid du Colombier	MOVW	0(FP), R3
348*7edc7532SDavid du Colombier	MOVW	4(FP), R4
349*7edc7532SDavid du Colombier	SLL	$8, R3
350*7edc7532SDavid du Colombier	MOVW	R3, M(INDEX)
351*7edc7532SDavid du Colombier	NOOP
352*7edc7532SDavid du Colombier	TLBR
353*7edc7532SDavid du Colombier	NOOP
354*7edc7532SDavid du Colombier	MOVW	M(TLBVIRT), R1
355*7edc7532SDavid du Colombier	MOVW	M(TLBPHYS), R2
356*7edc7532SDavid du Colombier	NOOP
357*7edc7532SDavid du Colombier	MOVW	R1, 0(R4)
358*7edc7532SDavid du Colombier	MOVW	R2, 4(R4)
359*7edc7532SDavid du Colombier	RET
360*7edc7532SDavid du Colombier
361*7edc7532SDavid du ColombierTEXT	gettlbvirt(SB), $0
362*7edc7532SDavid du Colombier
363*7edc7532SDavid du Colombier	MOVW	0(FP), R3
364*7edc7532SDavid du Colombier	SLL	$8, R3
365*7edc7532SDavid du Colombier	MOVW	R3, M(INDEX)
366*7edc7532SDavid du Colombier	NOOP
367*7edc7532SDavid du Colombier	TLBR
368*7edc7532SDavid du Colombier	NOOP
369*7edc7532SDavid du Colombier	MOVW	M(TLBVIRT), R1
370*7edc7532SDavid du Colombier	NOOP
371*7edc7532SDavid du Colombier	RET
372*7edc7532SDavid du Colombier
373*7edc7532SDavid du ColombierTEXT	vector80(SB), $-4
374*7edc7532SDavid du Colombier
375*7edc7532SDavid du Colombier	MOVW	$exception(SB), R26
376*7edc7532SDavid du Colombier	JMP	(R26)
377*7edc7532SDavid du Colombier
378*7edc7532SDavid du ColombierTEXT	exception(SB), $-4
379*7edc7532SDavid du Colombier
380*7edc7532SDavid du Colombier	MOVW	M(STATUS), R26
381*7edc7532SDavid du Colombier	AND	$KUP, R26
382*7edc7532SDavid du Colombier	BEQ	R26, waskernel
383*7edc7532SDavid du Colombier
384*7edc7532SDavid du Colombierwasuser:
385*7edc7532SDavid du Colombier	MOVW	SP, R26
386*7edc7532SDavid du Colombier		/*
387*7edc7532SDavid du Colombier		 * set kernel sp: ureg - ureg* - pc
388*7edc7532SDavid du Colombier		 * done in 2 steps because R30 is not set
389*7edc7532SDavid du Colombier		 * and the loader will make a literal
390*7edc7532SDavid du Colombier		 */
391*7edc7532SDavid du Colombier	MOVW	$((UREGADDR-2*BY2WD) & 0xffff0000), SP
392*7edc7532SDavid du Colombier	OR	$((UREGADDR-2*BY2WD) & 0xffff), SP
393*7edc7532SDavid du Colombier	MOVW	R26, 0x10(SP)			/* user SP */
394*7edc7532SDavid du Colombier	MOVW	R31, 0x28(SP)
395*7edc7532SDavid du Colombier	MOVW	R30, 0x2C(SP)
396*7edc7532SDavid du Colombier	MOVW	M(CAUSE), R26
397*7edc7532SDavid du Colombier	MOVW	R(MACH), 0x3C(SP)
398*7edc7532SDavid du Colombier	MOVW	R(USER), 0x40(SP)
399*7edc7532SDavid du Colombier	AND	$(0xF<<2), R26
400*7edc7532SDavid du Colombier	SUB	$(CSYS<<2), R26
401*7edc7532SDavid du Colombier
402*7edc7532SDavid du Colombier	JAL	saveregs(SB)
403*7edc7532SDavid du Colombier
404*7edc7532SDavid du Colombier	MOVW	$setR30(SB), R30
405*7edc7532SDavid du Colombier	SUBU	$(UREGADDR-2*BY2WD-USERADDR), SP, R(USER)
406*7edc7532SDavid du Colombier	MOVW	$MPID, R1
407*7edc7532SDavid du Colombier	MOVB	3(R1), R1
408*7edc7532SDavid du Colombier	MOVW	$MACHADDR, R(MACH)		/* locn of mach 0 */
409*7edc7532SDavid du Colombier	AND	$7, R1
410*7edc7532SDavid du Colombier	SLL	$PGSHIFT, R1
411*7edc7532SDavid du Colombier	ADDU	R1, R(MACH)			/* add offset for mach # */
412*7edc7532SDavid du Colombier
413*7edc7532SDavid du Colombier	BNE	R26, notsys
414*7edc7532SDavid du Colombier
415*7edc7532SDavid du Colombier	JAL	syscall(SB)
416*7edc7532SDavid du Colombier
417*7edc7532SDavid du Colombier	MOVW	0x28(SP), R31
418*7edc7532SDavid du Colombier	MOVW	0x08(SP), R26
419*7edc7532SDavid du Colombier	MOVW	0x2C(SP), R30
420*7edc7532SDavid du Colombier	MOVW	R26, M(STATUS)
421*7edc7532SDavid du Colombier	NOOP
422*7edc7532SDavid du Colombier	MOVW	0x0C(SP), R26		/* old pc */
423*7edc7532SDavid du Colombier	MOVW	0x10(SP), SP
424*7edc7532SDavid du Colombier	RFE	(R26)
425*7edc7532SDavid du Colombier
426*7edc7532SDavid du Colombiernotsys:
427*7edc7532SDavid du Colombier	JAL	trap(SB)
428*7edc7532SDavid du Colombier
429*7edc7532SDavid du Colombierrestore:
430*7edc7532SDavid du Colombier	JAL	restregs(SB)
431*7edc7532SDavid du Colombier	MOVW	0x28(SP), R31
432*7edc7532SDavid du Colombier	MOVW	0x2C(SP), R30
433*7edc7532SDavid du Colombier	MOVW	0x3C(SP), R(MACH)
434*7edc7532SDavid du Colombier	MOVW	0x40(SP), R(USER)
435*7edc7532SDavid du Colombier	MOVW	0x10(SP), SP
436*7edc7532SDavid du Colombier	RFE	(R26)
437*7edc7532SDavid du Colombier
438*7edc7532SDavid du Colombierwaskernel:
439*7edc7532SDavid du Colombier	MOVW	$1, R26			/* not sys call */
440*7edc7532SDavid du Colombier	MOVW	SP, -0x90(SP)		/* drop this if possible */
441*7edc7532SDavid du Colombier	SUB	$0xA0, SP
442*7edc7532SDavid du Colombier	MOVW	R31, 0x28(SP)
443*7edc7532SDavid du Colombier	JAL	saveregs(SB)
444*7edc7532SDavid du Colombier	JAL	trap(SB)
445*7edc7532SDavid du Colombier	JAL	restregs(SB)
446*7edc7532SDavid du Colombier	MOVW	0x28(SP), R31
447*7edc7532SDavid du Colombier	ADD	$0xA0, SP
448*7edc7532SDavid du Colombier	RFE	(R26)
449*7edc7532SDavid du Colombier
450*7edc7532SDavid du ColombierTEXT	saveregs(SB), $-4
451*7edc7532SDavid du Colombier	MOVW	R1, 0x9C(SP)
452*7edc7532SDavid du Colombier	MOVW	R2, 0x98(SP)
453*7edc7532SDavid du Colombier	ADDU	$8, SP, R1
454*7edc7532SDavid du Colombier	MOVW	R1, 0x04(SP)		/* arg to base of regs */
455*7edc7532SDavid du Colombier	MOVW	M(STATUS), R1
456*7edc7532SDavid du Colombier	MOVW	M(EPC), R2
457*7edc7532SDavid du Colombier	MOVW	R1, 0x08(SP)
458*7edc7532SDavid du Colombier	MOVW	R2, 0x0C(SP)
459*7edc7532SDavid du Colombier
460*7edc7532SDavid du Colombier	BEQ	R26, return		/* sys call, don't save */
461*7edc7532SDavid du Colombier
462*7edc7532SDavid du Colombier	MOVW	M(CAUSE), R1
463*7edc7532SDavid du Colombier	MOVW	M(BADVADDR), R2
464*7edc7532SDavid du Colombier	MOVW	R1, 0x14(SP)
465*7edc7532SDavid du Colombier	MOVW	M(TLBVIRT), R1
466*7edc7532SDavid du Colombier	MOVW	R2, 0x18(SP)
467*7edc7532SDavid du Colombier	MOVW	R1, 0x1C(SP)
468*7edc7532SDavid du Colombier	MOVW	HI, R1
469*7edc7532SDavid du Colombier	MOVW	LO, R2
470*7edc7532SDavid du Colombier	MOVW	R1, 0x20(SP)
471*7edc7532SDavid du Colombier	MOVW	R2, 0x24(SP)
472*7edc7532SDavid du Colombier					/* LINK,SB,SP missing */
473*7edc7532SDavid du Colombier	MOVW	R28, 0x30(SP)
474*7edc7532SDavid du Colombier					/* R27, R26 not saved */
475*7edc7532SDavid du Colombier					/* R25, R24 missing */
476*7edc7532SDavid du Colombier	MOVW	R23, 0x44(SP)
477*7edc7532SDavid du Colombier	MOVW	R22, 0x48(SP)
478*7edc7532SDavid du Colombier	MOVW	R21, 0x4C(SP)
479*7edc7532SDavid du Colombier	MOVW	R20, 0x50(SP)
480*7edc7532SDavid du Colombier	MOVW	R19, 0x54(SP)
481*7edc7532SDavid du Colombier	MOVW	R18, 0x58(SP)
482*7edc7532SDavid du Colombier	MOVW	R17, 0x5C(SP)
483*7edc7532SDavid du Colombier	MOVW	R16, 0x60(SP)
484*7edc7532SDavid du Colombier	MOVW	R15, 0x64(SP)
485*7edc7532SDavid du Colombier	MOVW	R14, 0x68(SP)
486*7edc7532SDavid du Colombier	MOVW	R13, 0x6C(SP)
487*7edc7532SDavid du Colombier	MOVW	R12, 0x70(SP)
488*7edc7532SDavid du Colombier	MOVW	R11, 0x74(SP)
489*7edc7532SDavid du Colombier	MOVW	R10, 0x78(SP)
490*7edc7532SDavid du Colombier	MOVW	R9, 0x7C(SP)
491*7edc7532SDavid du Colombier	MOVW	R8, 0x80(SP)
492*7edc7532SDavid du Colombier	MOVW	R7, 0x84(SP)
493*7edc7532SDavid du Colombier	MOVW	R6, 0x88(SP)
494*7edc7532SDavid du Colombier	MOVW	R5, 0x8C(SP)
495*7edc7532SDavid du Colombier	MOVW	R4, 0x90(SP)
496*7edc7532SDavid du Colombier	MOVW	R3, 0x94(SP)
497*7edc7532SDavid du Colombierreturn:
498*7edc7532SDavid du Colombier	RET
499*7edc7532SDavid du Colombier
500*7edc7532SDavid du ColombierTEXT	restregs(SB), $-4
501*7edc7532SDavid du Colombier					/* LINK,SB,SP missing */
502*7edc7532SDavid du Colombier	MOVW	0x30(SP), R28
503*7edc7532SDavid du Colombier					/* R27, R26 not saved */
504*7edc7532SDavid du Colombier					/* R25, R24 missing */
505*7edc7532SDavid du Colombier	MOVW	0x44(SP), R23
506*7edc7532SDavid du Colombier	MOVW	0x48(SP), R22
507*7edc7532SDavid du Colombier	MOVW	0x4C(SP), R21
508*7edc7532SDavid du Colombier	MOVW	0x50(SP), R20
509*7edc7532SDavid du Colombier	MOVW	0x54(SP), R19
510*7edc7532SDavid du Colombier	MOVW	0x58(SP), R18
511*7edc7532SDavid du Colombier	MOVW	0x5C(SP), R17
512*7edc7532SDavid du Colombier	MOVW	0x60(SP), R16
513*7edc7532SDavid du Colombier	MOVW	0x64(SP), R15
514*7edc7532SDavid du Colombier	MOVW	0x68(SP), R14
515*7edc7532SDavid du Colombier	MOVW	0x6C(SP), R13
516*7edc7532SDavid du Colombier	MOVW	0x70(SP), R12
517*7edc7532SDavid du Colombier	MOVW	0x74(SP), R11
518*7edc7532SDavid du Colombier	MOVW	0x78(SP), R10
519*7edc7532SDavid du Colombier	MOVW	0x7C(SP), R9
520*7edc7532SDavid du Colombier	MOVW	0x80(SP), R8
521*7edc7532SDavid du Colombier	MOVW	0x84(SP), R7
522*7edc7532SDavid du Colombier	MOVW	0x88(SP), R6
523*7edc7532SDavid du Colombier	MOVW	0x8C(SP), R5
524*7edc7532SDavid du Colombier	MOVW	0x90(SP), R4
525*7edc7532SDavid du Colombier	MOVW	0x94(SP), R3
526*7edc7532SDavid du Colombier	MOVW	0x24(SP), R2
527*7edc7532SDavid du Colombier	MOVW	0x20(SP), R1
528*7edc7532SDavid du Colombier	MOVW	R2, LO
529*7edc7532SDavid du Colombier	MOVW	R1, HI
530*7edc7532SDavid du Colombier	MOVW	0x08(SP), R1
531*7edc7532SDavid du Colombier	MOVW	0x98(SP), R2
532*7edc7532SDavid du Colombier	MOVW	R1, M(STATUS)
533*7edc7532SDavid du Colombier	NOOP
534*7edc7532SDavid du Colombier	MOVW	0x9C(SP), R1
535*7edc7532SDavid du Colombier	MOVW	0x0C(SP), R26		/* old pc */
536*7edc7532SDavid du Colombier	RET
537*7edc7532SDavid du Colombier
538*7edc7532SDavid du ColombierTEXT	rfnote(SB), $0
539*7edc7532SDavid du Colombier	MOVW	0(FP), R26		/* 1st arg is &uregpointer */
540*7edc7532SDavid du Colombier	SUBU	$(BY2WD), R26, SP	/* pc hole */
541*7edc7532SDavid du Colombier	BNE	R26, restore
542*7edc7532SDavid du Colombier
543*7edc7532SDavid du Colombier
544*7edc7532SDavid du ColombierTEXT	clrfpintr(SB), $0
545*7edc7532SDavid du Colombier	MOVW	FCR31, R1
546*7edc7532SDavid du Colombier	MOVW	R1, R2
547*7edc7532SDavid du Colombier	AND	$~(0x3F<<12), R2
548*7edc7532SDavid du Colombier	MOVW	R2, FCR31
549*7edc7532SDavid du Colombier	RET
550*7edc7532SDavid du Colombier
551*7edc7532SDavid du ColombierTEXT	savefpregs(SB), $0
552*7edc7532SDavid du Colombier	MOVW	M(STATUS), R3
553*7edc7532SDavid du Colombier	MOVW	0(FP), R1
554*7edc7532SDavid du Colombier	MOVW	FCR31, R2
555*7edc7532SDavid du Colombier
556*7edc7532SDavid du Colombier	MOVD	F0, 0x00(R1)
557*7edc7532SDavid du Colombier	MOVD	F2, 0x08(R1)
558*7edc7532SDavid du Colombier	MOVD	F4, 0x10(R1)
559*7edc7532SDavid du Colombier	MOVD	F6, 0x18(R1)
560*7edc7532SDavid du Colombier	MOVD	F8, 0x20(R1)
561*7edc7532SDavid du Colombier	MOVD	F10, 0x28(R1)
562*7edc7532SDavid du Colombier	MOVD	F12, 0x30(R1)
563*7edc7532SDavid du Colombier	MOVD	F14, 0x38(R1)
564*7edc7532SDavid du Colombier	MOVD	F16, 0x40(R1)
565*7edc7532SDavid du Colombier	MOVD	F18, 0x48(R1)
566*7edc7532SDavid du Colombier	MOVD	F20, 0x50(R1)
567*7edc7532SDavid du Colombier	MOVD	F22, 0x58(R1)
568*7edc7532SDavid du Colombier	MOVD	F24, 0x60(R1)
569*7edc7532SDavid du Colombier	MOVD	F26, 0x68(R1)
570*7edc7532SDavid du Colombier	MOVD	F28, 0x70(R1)
571*7edc7532SDavid du Colombier	MOVD	F30, 0x78(R1)
572*7edc7532SDavid du Colombier
573*7edc7532SDavid du Colombier	MOVW	R2, 0x80(R1)
574*7edc7532SDavid du Colombier	AND	$~CU1, R3
575*7edc7532SDavid du Colombier	MOVW	R3, M(STATUS)
576*7edc7532SDavid du Colombier	RET
577*7edc7532SDavid du Colombier
578*7edc7532SDavid du ColombierTEXT	restfpregs(SB), $0
579*7edc7532SDavid du Colombier
580*7edc7532SDavid du Colombier	MOVW	M(STATUS), R3
581*7edc7532SDavid du Colombier	MOVW	0(FP), R1
582*7edc7532SDavid du Colombier	OR	$CU1, R3
583*7edc7532SDavid du Colombier	MOVW	R3, M(STATUS)
584*7edc7532SDavid du Colombier	MOVW	0x80(R1), R2
585*7edc7532SDavid du Colombier
586*7edc7532SDavid du Colombier	MOVD	0x00(R1), F0
587*7edc7532SDavid du Colombier	MOVD	0x08(R1), F2
588*7edc7532SDavid du Colombier	MOVD	0x10(R1), F4
589*7edc7532SDavid du Colombier	MOVD	0x18(R1), F6
590*7edc7532SDavid du Colombier	MOVD	0x20(R1), F8
591*7edc7532SDavid du Colombier	MOVD	0x28(R1), F10
592*7edc7532SDavid du Colombier	MOVD	0x30(R1), F12
593*7edc7532SDavid du Colombier	MOVD	0x38(R1), F14
594*7edc7532SDavid du Colombier	MOVD	0x40(R1), F16
595*7edc7532SDavid du Colombier	MOVD	0x48(R1), F18
596*7edc7532SDavid du Colombier	MOVD	0x50(R1), F20
597*7edc7532SDavid du Colombier	MOVD	0x58(R1), F22
598*7edc7532SDavid du Colombier	MOVD	0x60(R1), F24
599*7edc7532SDavid du Colombier	MOVD	0x68(R1), F26
600*7edc7532SDavid du Colombier	MOVD	0x70(R1), F28
601*7edc7532SDavid du Colombier	MOVD	0x78(R1), F30
602*7edc7532SDavid du Colombier
603*7edc7532SDavid du Colombier	MOVW	R2, FCR31
604*7edc7532SDavid du Colombier	AND	$~CU1, R3
605*7edc7532SDavid du Colombier	MOVW	R3, M(STATUS)
606*7edc7532SDavid du Colombier	RET
607*7edc7532SDavid du Colombier
608*7edc7532SDavid du Colombier/*
609*7edc7532SDavid du Colombier *  we avoid using R4, R5, R6, and R7 so gotopc can call us without saving them
610*7edc7532SDavid du Colombier */
611*7edc7532SDavid du ColombierTEXT icflush(SB), $-4			/* icflush(physaddr, nbytes) */
612*7edc7532SDavid du Colombier
613*7edc7532SDavid du Colombier	MOVW	M(STATUS), R10
614*7edc7532SDavid du Colombier	MOVW	0(FP), R8
615*7edc7532SDavid du Colombier	MOVW	4(FP), R9
616*7edc7532SDavid du Colombier	MOVW	$KSEG0, R3
617*7edc7532SDavid du Colombier	OR	R3, R8
618*7edc7532SDavid du Colombier	MOVW	$0, M(STATUS)
619*7edc7532SDavid du Colombier	MOVW	$WBFLUSH, R1		/* wbflush */
620*7edc7532SDavid du Colombier	MOVW	0(R1), R1
621*7edc7532SDavid du Colombier	NOOP
622*7edc7532SDavid du Colombier	MOVW	$KSEG1, R3
623*7edc7532SDavid du Colombier	MOVW	$icflush0(SB), R2	/* make sure PC is in uncached address space */
624*7edc7532SDavid du Colombier	MOVW	$(SWC|ISC), R1
625*7edc7532SDavid du Colombier	OR	R3, R2
626*7edc7532SDavid du Colombier	JMP	(R2)
627*7edc7532SDavid du Colombier
628*7edc7532SDavid du ColombierTEXT icflush0(SB), $-4
629*7edc7532SDavid du Colombier
630*7edc7532SDavid du Colombier	MOVW	R1, M(STATUS)		/* swap and isolate cache, splhi */
631*7edc7532SDavid du Colombier	MOVW	$icflush1(SB), R2
632*7edc7532SDavid du Colombier	JMP	(R2)
633*7edc7532SDavid du Colombier
634*7edc7532SDavid du ColombierTEXT icflush1(SB), $-4
635*7edc7532SDavid du Colombier
636*7edc7532SDavid du Colombier_icflush1:
637*7edc7532SDavid du Colombier	MOVBU	R0, 0x00(R8)
638*7edc7532SDavid du Colombier	MOVBU	R0, 0x04(R8)
639*7edc7532SDavid du Colombier	MOVBU	R0, 0x08(R8)
640*7edc7532SDavid du Colombier	MOVBU	R0, 0x0C(R8)
641*7edc7532SDavid du Colombier	MOVBU	R0, 0x10(R8)
642*7edc7532SDavid du Colombier	MOVBU	R0, 0x14(R8)
643*7edc7532SDavid du Colombier	MOVBU	R0, 0x18(R8)
644*7edc7532SDavid du Colombier	MOVBU	R0, 0x1C(R8)
645*7edc7532SDavid du Colombier	MOVBU	R0, 0x20(R8)
646*7edc7532SDavid du Colombier	MOVBU	R0, 0x24(R8)
647*7edc7532SDavid du Colombier	MOVBU	R0, 0x28(R8)
648*7edc7532SDavid du Colombier	MOVBU	R0, 0x2C(R8)
649*7edc7532SDavid du Colombier	MOVBU	R0, 0x30(R8)
650*7edc7532SDavid du Colombier	MOVBU	R0, 0x34(R8)
651*7edc7532SDavid du Colombier	MOVBU	R0, 0x38(R8)
652*7edc7532SDavid du Colombier	MOVBU	R0, 0x3C(R8)
653*7edc7532SDavid du Colombier	SUB	$0x40, R9
654*7edc7532SDavid du Colombier	ADD	$0x40, R8
655*7edc7532SDavid du Colombier	BGTZ	R9, _icflush1
656*7edc7532SDavid du Colombier	MOVW	$icflush2(SB), R2	/* make sure PC is in uncached address space */
657*7edc7532SDavid du Colombier	OR	R3, R2
658*7edc7532SDavid du Colombier	JMP	(R2)
659*7edc7532SDavid du Colombier
660*7edc7532SDavid du ColombierTEXT icflush2(SB), $-4
661*7edc7532SDavid du Colombier
662*7edc7532SDavid du Colombier	MOVW	$0, M(STATUS)		/* swap back caches, de-isolate them, and stay splhi */
663*7edc7532SDavid du Colombier	NOOP				/* +++ */
664*7edc7532SDavid du Colombier	MOVW	R10, M(STATUS)
665*7edc7532SDavid du Colombier	RET
666*7edc7532SDavid du Colombier
667*7edc7532SDavid du ColombierTEXT dcflush(SB), $-4			/* dcflush(physaddr, nbytes) */
668*7edc7532SDavid du Colombier
669*7edc7532SDavid du Colombier	MOVW	M(STATUS), R6
670*7edc7532SDavid du Colombier	MOVW	0(FP), R4
671*7edc7532SDavid du Colombier	MOVW	4(FP), R5
672*7edc7532SDavid du Colombier	MOVW	$KSEG0, R3
673*7edc7532SDavid du Colombier	OR	R3, R4
674*7edc7532SDavid du Colombier	MOVW	$0, M(STATUS)
675*7edc7532SDavid du Colombier	MOVW	$WBFLUSH, R1
676*7edc7532SDavid du Colombier	MOVW	0(R1), R1
677*7edc7532SDavid du Colombier	NOOP
678*7edc7532SDavid du Colombier	MOVW	$ISC, R1
679*7edc7532SDavid du Colombier	MOVW	R1, M(STATUS)
680*7edc7532SDavid du Colombier_dcflush0:
681*7edc7532SDavid du Colombier	MOVBU	R0, 0x00(R4)
682*7edc7532SDavid du Colombier	MOVBU	R0, 0x04(R4)
683*7edc7532SDavid du Colombier	MOVBU	R0, 0x08(R4)
684*7edc7532SDavid du Colombier	MOVBU	R0, 0x0C(R4)
685*7edc7532SDavid du Colombier	MOVBU	R0, 0x10(R4)
686*7edc7532SDavid du Colombier	MOVBU	R0, 0x14(R4)
687*7edc7532SDavid du Colombier	MOVBU	R0, 0x18(R4)
688*7edc7532SDavid du Colombier	MOVBU	R0, 0x1C(R4)
689*7edc7532SDavid du Colombier	MOVBU	R0, 0x20(R4)
690*7edc7532SDavid du Colombier	MOVBU	R0, 0x24(R4)
691*7edc7532SDavid du Colombier	MOVBU	R0, 0x28(R4)
692*7edc7532SDavid du Colombier	MOVBU	R0, 0x2C(R4)
693*7edc7532SDavid du Colombier	MOVBU	R0, 0x30(R4)
694*7edc7532SDavid du Colombier	MOVBU	R0, 0x34(R4)
695*7edc7532SDavid du Colombier	MOVBU	R0, 0x38(R4)
696*7edc7532SDavid du Colombier	MOVBU	R0, 0x3C(R4)
697*7edc7532SDavid du Colombier	SUB	$0x40, R5
698*7edc7532SDavid du Colombier	ADD	$0x40, R4
699*7edc7532SDavid du Colombier	BGTZ	R5, _dcflush0
700*7edc7532SDavid du Colombier	MOVW	$0, M(STATUS)
701*7edc7532SDavid du Colombier	NOOP				/* +++ */
702*7edc7532SDavid du Colombier	MOVW	R6, M(STATUS)
703*7edc7532SDavid du Colombier	RET
704