plan 9 kernel history: overview | file list | diff list

1994/0612/carrera/l.s (diff list | history)

1994/0611/sys/src/9/carrera/l.s:12,411994/0612/sys/src/9/carrera/l.s:12,32 (short | long | prev | next)
1993/0903    
/* 
 *  R4000 instructions 
 */ 
1994/0610    
#define	LD(offset, base, rt)	WORD	$((067<<26)|((base)<<21)|((rt)<<16)|((offset)&0xFFFF)) 
#define	STD(rt, offset, base)	WORD	$((077<<26)|((base)<<21)|((rt)<<16)|((offset)&0xFFFF)) 
#define	DSLL(sa, rt, rd)	WORD	$(((rt)<<16)|((rd)<<11)|((sa)<<6)|070) 
#define	DSRA(sa, rt, rd)	WORD	$(((rt)<<16)|((rd)<<11)|((sa)<<6)|073) 
1993/0903    
#define	LL(base, rt)		WORD	$((060<<26)|((base)<<21)|((rt)<<16)) 
#define	SC(base, rt)		WORD	$((070<<26)|((base)<<21)|((rt)<<16)) 
 
1994/0522    
#define DBG(S)	CONST(0xa0001000, R20);CONST(S, R21);MOVW	R21,(R20) 
                 
1993/0903    
/* 
 * Boot first processor 
 */ 
TEXT	start(SB), $-4 
 
1994/0610    
DBG(0x55aa0000) 
1993/0903    
	MOVW	$setR30(SB), R30 
1994/0524    
	MOVW	$(CU1|INTR7|INTR6|INTR5|INTR4|INTR3|INTR2|INTR1|INTR0), R1 
1993/0903    
	MOVW	R1, M(STATUS) 
	WAIT 
1994/0610    
DBG(0x55aa0001) 
1993/0903    
 
	MOVW	$TLBROFF, R1 
	MOVW	R1, M(WIRED) 
1994/0610    
DBG(0x55aa0002) 
1993/0903    
 
	MOVW	$((0x1C<<7)|(1<<24)), R1 
	MOVW	R1, FCR31	/* permit only inexact and underflow */ 
1994/0611/sys/src/9/carrera/l.s:57,751994/0612/sys/src/9/carrera/l.s:48,61
1993/0903    
	MOVD	F24, F18 
	MOVD	F24, F20 
	MOVD	F24, F22 
1994/0610    
DBG(0x55aa0003) 
1993/0903    
 
	MOVW	$MACHADDR, R(MACH) 
	ADDU	$(BY2PG-4), R(MACH), SP 
	MOVW	$0, R(USER) 
1994/0610    
DBG(0x55aa0010) 
MOVW R(MACH),4(R20) 
1993/0903    
	MOVW	R0, 0(R(MACH)) 
1994/0610    
DBG(0x55aa0011) 
1993/0903    
 
	MOVW	$edata(SB), R1 
	MOVW	$end(SB), R2 
1994/0610    
DBG(0x55aa0004) 
1993/0903    
 
clrbss: 
	MOVB	$0, (R1) 
1994/0611/sys/src/9/carrera/l.s:93,991994/0612/sys/src/9/carrera/l.s:79,85
1993/0903    
	MOVW	M(STATUS), R4 
	WAIT 
	AND	$(~KMODEMASK), R4 
1994/0611    
	OR	$(KUSER|EXL|IE), R4 
1994/0612    
	OR	$(KUSER|EXL|IE|UX), R4 
1993/0903    
	MOVW	R4, M(STATUS) 
	WAIT 
	MOVW	R1, SP 
1994/0611/sys/src/9/carrera/l.s:384,3971994/0612/sys/src/9/carrera/l.s:370,383
1993/0903    
	MOVW	8(R27), R26		/* R26 = m->proc */ 
	MOVW	8(R26), R27		/* R27 = m->proc->kstack */ 
1994/0610    
	MOVW	SP, R26			/* save user sp */ 
	ADDU	$(KSTACK-UREGSIZE-2*BY2WD), R27, SP 
1994/0612    
	ADDU	$(KSTACK-UREGSIZE), R27, SP 
1993/0903    
 
1994/0610    
	MOVW	R26, 0x10(SP)			/* user SP */ 
	MOVW	R31, 0x28(SP) 
	MOVW	R30, 0x2C(SP) 
1994/0612    
	MOVW	R26, Ureg_sp(SP)	/* user SP */ 
	MOVV	R31, Ureg_r31(SP) 
	MOVV	R30, Ureg_r30(SP) 
1993/0903    
	MOVW	M(CAUSE), R26 
1994/0610    
	MOVW	R(MACH), 0x3C(SP) 
	MOVW	R(USER), 0x40(SP) 
1994/0612    
	MOVV	R(MACH), Ureg_r25(SP) 
	MOVV	R(USER), Ureg_r24(SP) 
1993/0903    
	AND	$(EXCMASK<<2), R26 
	SUBU	$(CSYS<<2), R26 
 
1994/0611/sys/src/9/carrera/l.s:407,4191994/0612/sys/src/9/carrera/l.s:393,405
1993/0903    
	JAL	syscall(SB) 
 
sysrestore: 
1994/0610    
	MOVW	0x28(SP), R31 
	MOVW	0x08(SP), R26 
	MOVW	0x2C(SP), R30 
1994/0612    
	MOVV	Ureg_r31(SP), R31 
	MOVW	Ureg_status(SP), R26 
	MOVV	Ureg_r30(SP), R30 
1993/0903    
	MOVW	R26, M(STATUS) 
	WAIT 
1994/0610    
	MOVW	0x0C(SP), R26		/* old pc */ 
	MOVW	0x10(SP), SP 
1994/0612    
	MOVW	Ureg_pc(SP), R26		/* old pc */ 
	MOVW	Ureg_sp(SP), SP 
1994/0610    
	MOVW	R26, M(EPC) 
1993/0903    
	ERET 
 
1994/0611/sys/src/9/carrera/l.s:421,4451994/0612/sys/src/9/carrera/l.s:407,434
1993/0903    
	JAL	trap(SB) 
restore: 
	JAL	restregs(SB) 
1994/0610    
	MOVW	0x28(SP), R31 
	MOVW	0x2C(SP), R30 
	MOVW	0x3C(SP), R(MACH) 
	MOVW	0x40(SP), R(USER) 
	MOVW	0x10(SP), SP 
1994/0612    
	MOVV	Ureg_r31(SP), R31 
	MOVV	Ureg_r30(SP), R30 
	MOVV	Ureg_r25(SP), R(MACH) 
	MOVV	Ureg_r24(SP), R(USER) 
	MOVW	Ureg_sp(SP), SP 
1994/0610    
	MOVW	R26, M(EPC) 
1993/0903    
	ERET 
 
waskernel: 
1994/0609    
	MOVW	$1, R26			/* not syscall */ 
1994/0610    
	MOVW	SP, -(UREGSIZE-16)(SP) 
1994/0612    
	MOVW	SP, R26 
1994/0610    
	SUBU	$UREGSIZE, SP 
	MOVW	R31, 0x28(SP) 
1994/0612    
	OR	$7, SP 
	XOR	$7, SP 
	MOVW	R26, Ureg_sp(SP) 
	MOVV	R31, Ureg_r31(SP) 
	MOVW	$1, R26			/* not syscall */ 
1993/0903    
	JAL	saveregs(SB) 
	MOVW	4(SP), R1		/* first arg for trap */ 
	JAL	trap(SB) 
	JAL	restregs(SB) 
1994/0610    
	MOVW	0x28(SP), R31 
	ADDU	$UREGSIZE, SP 
1994/0612    
	MOVV	Ureg_r31(SP), R31 
	MOVW	Ureg_sp(SP), SP 
1994/0610    
	MOVW	R26, M(EPC) 
1993/0903    
	ERET 
 
1994/0611/sys/src/9/carrera/l.s:448,4681994/0612/sys/src/9/carrera/l.s:437,453
1993/0903    
	JMP	sysrestore 
 
TEXT	saveregs(SB), $-4 
1994/0610    
	MOVW	R1, 0x9C(SP) 
	MOVW	R2, 0x98(SP) 
	/* save R5, R6 as 64 bits */ 
	ADDU	$(UREGSIZE-16), SP, R1 
	MOVW	$~7, R2			/* don't let him use R28 */ 
	AND		R2, R1 
	STD		(5, 0,(1)) 
	STD		(6, 8,(1)) 
	ADDU	$8, SP, R1 
	MOVW	R1, 0x04(SP)		/* arg to base of regs */ 
1994/0612    
	MOVV	R1, Ureg_r1(SP) 
	MOVV	R2, Ureg_r2(SP) 
	MOVV	R5, Ureg_r5(SP) 
	MOVV	R6, Ureg_r6(SP) 
	ADDU	$Uoffset, SP, R1 
	MOVW	R1, 4(SP)		/* arg to base of regs */ 
1993/0903    
	MOVW	M(STATUS), R1 
1994/0610    
	MOVW	M(EPC), R2 
1993/0903    
	WAIT 
1994/0610    
	MOVW	R1, 0x08(SP) 
	MOVW	R2, 0x0C(SP) 
1994/0612    
	MOVW	R1, Ureg_status(SP) 
	MOVW	R2, Ureg_pc(SP) 
1993/0903    
 
	MOVW	$(~KMODEMASK),R2	/* don't let him use R28 */ 
	AND	R2, R1 
1994/0611/sys/src/9/carrera/l.s:473,5601994/0612/sys/src/9/carrera/l.s:458,537
1993/0903    
	MOVW	M(CAUSE), R1 
1994/0610    
	MOVW	M(BADVADDR), R2 
1993/0903    
	NOOP 
1994/0610    
	MOVW	R1, 0x14(SP) 
1994/0612    
	MOVW	R1, Ureg_cause(SP) 
1994/0610    
	MOVW	M(TLBVIRT), R1 
1993/0903    
	NOOP 
1994/0610    
	MOVW	R2, 0x18(SP) 
	MOVW	R1, 0x1C(SP) 
1993/0903    
	MOVW	HI, R1 
	MOVW	LO, R2 
1994/0610    
	MOVW	R1, 0x20(SP) 
	MOVW	R2, 0x24(SP) 
1994/0612    
	MOVW	R2, Ureg_badvaddr(SP) 
	MOVW	R1, Ureg_tlbvirt(SP) 
 
	MOVV	HI, R1 
	MOVV	LO, R2 
	MOVV	R1, Ureg_hi(SP) 
	MOVV	R2, Ureg_lo(SP) 
1993/0903    
					/* LINK,SB,SP missing */ 
1994/0610    
	MOVW	R28, 0x30(SP) 
1994/0612    
	MOVV	R28, Ureg_r28(SP) 
1993/0903    
					/* R27, R26 not saved */ 
					/* R25, R24 missing */ 
1994/0610    
	MOVW	R23, 0x44(SP) 
	MOVW	R22, 0x48(SP) 
	MOVW	R21, 0x4C(SP) 
	MOVW	R20, 0x50(SP) 
	MOVW	R19, 0x54(SP) 
	MOVW	R18, 0x58(SP) 
	MOVW	R17, 0x5C(SP) 
	MOVW	R16, 0x60(SP) 
	MOVW	R15, 0x64(SP) 
	MOVW	R14, 0x68(SP) 
	MOVW	R13, 0x6C(SP) 
	MOVW	R12, 0x70(SP) 
	MOVW	R11, 0x74(SP) 
	MOVW	R10, 0x78(SP) 
	MOVW	R9, 0x7C(SP) 
	MOVW	R8, 0x80(SP) 
	MOVW	R7, 0x84(SP) 
	MOVW	R6, 0x88(SP) 
	MOVW	R5, 0x8C(SP) 
	MOVW	R4, 0x90(SP) 
	MOVW	R3, 0x94(SP) 
1994/0612    
	MOVV	R23, Ureg_r23(SP) 
	MOVV	R22, Ureg_r22(SP) 
	MOVV	R21, Ureg_r21(SP) 
	MOVV	R20, Ureg_r20(SP) 
	MOVV	R19, Ureg_r19(SP) 
	MOVV	R18, Ureg_r18(SP) 
	MOVV	R17, Ureg_r17(SP) 
	MOVV	R16, Ureg_r16(SP) 
	MOVV	R15, Ureg_r15(SP) 
	MOVV	R14, Ureg_r14(SP) 
	MOVV	R13, Ureg_r13(SP) 
	MOVV	R12, Ureg_r12(SP) 
	MOVV	R11, Ureg_r11(SP) 
	MOVV	R10, Ureg_r10(SP) 
	MOVV	R9, Ureg_r9(SP) 
	MOVV	R8, Ureg_r8(SP) 
	MOVV	R7, Ureg_r7(SP) 
	MOVV	R6, Ureg_r6(SP) 
	MOVV	R5, Ureg_r5(SP) 
	MOVV	R4, Ureg_r4(SP) 
	MOVV	R3, Ureg_r3(SP) 
1993/0903    
return: 
	RET 
 
TEXT	restregs(SB), $-4 
					/* LINK,SB,SP missing */ 
1994/0610    
	MOVW	0x30(SP), R28 
1994/0612    
	MOVV	Ureg_r28(SP), R28 
1993/0903    
					/* R27, R26 not saved */ 
					/* R25, R24 missing */ 
1994/0610    
	MOVW	0x44(SP), R23 
	MOVW	0x48(SP), R22 
	MOVW	0x4C(SP), R21 
	MOVW	0x50(SP), R20 
	MOVW	0x54(SP), R19 
	MOVW	0x58(SP), R18 
	MOVW	0x5C(SP), R17 
	MOVW	0x60(SP), R16 
	MOVW	0x64(SP), R15 
	MOVW	0x68(SP), R14 
	MOVW	0x6C(SP), R13 
	MOVW	0x70(SP), R12 
	MOVW	0x74(SP), R11 
	MOVW	0x78(SP), R10 
	MOVW	0x7C(SP), R9 
	MOVW	0x80(SP), R8 
	MOVW	0x84(SP), R7 
	/* 
	 * restored below 
	 * MOVW	0x88(SP), R6 
	 * MOVW	0x8C(SP), R5 
	 */ 
	MOVW	0x90(SP), R4 
	MOVW	0x94(SP), R3 
	MOVW	0x24(SP), R2 
	MOVW	0x20(SP), R1 
1993/0903    
	MOVW	R2, LO 
	MOVW	R1, HI 
1994/0610    
	/* restore 64-bit R5, R6 */ 
	ADDU	$(UREGSIZE-16), SP, R1 
	MOVW	$~7, R2			/* don't let him use R28 */ 
	AND		R2, R1 
	LD		(0,(1), 5) 
	LD		(8,(1), 6) 
	MOVW	0x08(SP), R1 
	MOVW	0x98(SP), R2 
1994/0612    
	MOVV	Ureg_r23(SP), R23 
	MOVV	Ureg_r22(SP), R22 
	MOVV	Ureg_r21(SP), R21 
	MOVV	Ureg_r20(SP), R20 
	MOVV	Ureg_r19(SP), R19 
	MOVV	Ureg_r18(SP), R18 
	MOVV	Ureg_r17(SP), R17 
	MOVV	Ureg_r16(SP), R16 
	MOVV	Ureg_r15(SP), R15 
	MOVV	Ureg_r14(SP), R14 
	MOVV	Ureg_r13(SP), R13 
	MOVV	Ureg_r12(SP), R12 
	MOVV	Ureg_r11(SP), R11 
	MOVV	Ureg_r10(SP), R10 
	MOVV	Ureg_r9(SP), R9 
	MOVV	Ureg_r8(SP), R8 
	MOVV	Ureg_r7(SP), R7 
	MOVV	Ureg_r6(SP), R6 
	MOVV	Ureg_r5(SP), R5 
	MOVV	Ureg_r4(SP), R4 
	MOVV	Ureg_r3(SP), R3 
	MOVV	Ureg_lo(SP), R2 
	MOVV	Ureg_hi(SP), R1 
	MOVV	R2, LO 
	MOVV	R1, HI 
	MOVW	Ureg_status(SP), R1 
	MOVV	Ureg_r2(SP), R2 
1993/0903    
	MOVW	R1, M(STATUS) 
	WAIT 
1994/0610    
	MOVW	0x9C(SP), R1 
	MOVW	0x0C(SP), R26		/* old pc */ 
1994/0612    
	MOVV	Ureg_r1(SP), R1 
	MOVW	Ureg_pc(SP), R26 
1993/0903    
	RET 
 
1994/0610    
TEXT	rfnote(SB), $0 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)