⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 l.s

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 S
📖 第 1 页 / 共 2 页
字号:
 * traps force memory mapping off. * the following code has been executed at the exception * vector location *	MOVW	R0, SPR(SAVER0) *	MOVW	LR, R0 *	MOVW	R0, SPR(SAVELR) *	bl	trapvec(SB) * */TEXT trapvec(SB), $-4	MOVW	LR, R0	MOVW	R1, SPR(SAVER1)	MOVW	R0, SPR(SAVEXX)		/* vector */	/* did we come from user space */	MOVW	SPR(SRR1), R0	MOVW	CR, R1	MOVW	R0, CR	BC	4, 17, ktrap	/* switch to kernel stack */	MOVW	R1, CR	MOVW	$MACHPADDR, R1		/* PADDR(m->) */	MOVW	8(R1), R1		/* m->proc */	RLWNM	$0, R1, $~KZERO, R1	/* PADDR(m->proc) */	MOVW	8(R1), R1		/* m->proc->kstack */	RLWNM	$0, R1, $~KZERO, R1	/* PADDR(m->proc->kstack) */	ADD	$(KSTACK-UREGSIZE), R1	/* make room on stack */	BL	saveureg(SB)	BL	trap(SB)	BR	restoreuregktrap:	MOVW	R1, CR	MOVW	SPR(SAVER1), R1	RLWNM	$0, R1, $~KZERO, R1	/* set stack pointer */	SUB	$UREGSPACE, R1	BL	saveureg(SB)		/* addressed relative to PC */	BL	trap(SB)	BR	restoreureg/* * enter with stack set and mapped. * on return, SB (R2) has been set, and R3 has the Ureg*, * the MMU has been re-enabled, kernel text and PC are in KSEG, * R(MACH) has been set, and R0 contains 0. * */TEXT saveureg(SB), $-4/* * save state */	MOVMW	R2, 48(R1)		/* save r2 .. r31 in 48(R1) .. 164(R1) */	MOVW	$MACHPADDR, R(MACH)	/* PADDR(m->) */	MOVW	8(R(MACH)), R(USER)	/* up-> */	MOVW	$MACHADDR, R(MACH)	/* m-> */	MOVW	SPR(SAVER1), R4	MOVW	R4, 44(R1)	MOVW	SPR(SAVER0), R5	MOVW	R5, 40(R1)	MOVW	CTR, R6	MOVW	R6, 36(R1)	MOVW	XER, R4	MOVW	R4, 32(R1)	MOVW	CR, R5	MOVW	R5, 28(R1)	MOVW	SPR(SAVELR), R6		/* LR */	MOVW	R6, 24(R1)	/* pad at 20(R1) */	MOVW	SPR(SRR0), R0	MOVW	R0, 16(R1)		/* old PC */	MOVW	SPR(SRR1), R0	MOVW	R0, 12(R1)		/* old status */	MOVW	SPR(SAVEXX), R0	MOVW	R0, 8(R1)		/* cause/vector */	MOVW	SPR(DCMP), R0	MOVW	R0, (160+8)(R1)	MOVW	SPR(iCMP), R0	MOVW	R0, (164+8)(R1)	MOVW	SPR(DMISS), R0	MOVW	R0, (168+8)(R1)	MOVW	SPR(IMISS), R0	MOVW	R0, (172+8)(R1)	MOVW	SPR(HASH1), R0	MOVW	R0, (176+8)(R1)	MOVW	SPR(HASH2), R0	MOVW	R0, (180+8)(R1)	MOVW	SPR(DAR), R0	MOVW	R0, (184+8)(R1)	MOVW	SPR(DSISR), R0	MOVW	R0, (188+8)(R1)	ADD	$8, R1, R3		/* Ureg* */	OR	$KZERO, R3		/* fix ureg */	STWCCC	R3, (R1)		/* break any pending reservations */	MOVW	$0, R0			/* compiler/linker expect R0 to be zero */	MOVW	$setSB(SB), R2		/* SB register */	MOVW	MSR, R5	OR	$(MSR_IR|MSR_DR|MSR_FP|MSR_RI), R5	/* enable MMU */	MOVW	R5, SPR(SRR1)	MOVW	LR, R31	OR	$KZERO, R31		/* return PC in KSEG0 */	MOVW	R31, SPR(SRR0)	OR	$KZERO, R1		/* fix stack pointer */	RFI				/* returns to trap handler *//* * restore state from Ureg and return from trap/interrupt */TEXT forkret(SB), $0	BR	restoreuregrestoreureg:	MOVMW	48(R1), R2		/* restore r2 through r31 */	/* defer R1 */	MOVW	40(R1), R0	MOVW	R0, SPR(SAVER0)		/* resave saved R0 */	MOVW	36(R1), R0	MOVW	R0, CTR	MOVW	32(R1), R0	MOVW	R0, XER	MOVW	28(R1), R0	MOVW	R0, CR			/* Condition register*/	MOVW	24(R1), R0	MOVW	R0, LR	/* pad, skip */	MOVW	16(R1), R0	MOVW	R0, SPR(SRR0)		/* old PC */	MOVW	12(R1), R0	MOVW	R0, SPR(SRR1)		/* old MSR */	/* cause, skip */	MOVW	44(R1), R1		/* old SP */	MOVW	SPR(SAVER0), R0	RFITEXT getpvr(SB), $0	MOVW	SPR(PVR), R3	RETURNTEXT getdec(SB), $0	MOVW	SPR(DEC), R3	RETURNTEXT putdec(SB), $0	MOVW	R3, SPR(DEC)	RETURNTEXT getdar(SB), $0	MOVW	SPR(DAR), R3	RETURNTEXT getdsisr(SB), $0	MOVW	SPR(DSISR), R3	RETURNTEXT getmsr(SB), $0	MOVW	MSR, R3	RETURNTEXT putmsr(SB), $0	MOVW	R3, MSR	MSRSYNC	RETURNTEXT putsdr1(SB), $0	SYNC	MOVW	R3, SPR(SDR1)	ISYNC	RETURNTEXT putsr(SB), $0	MOVW	4(FP), R4	SYNC	MOVW	R4, SEG(R3)	MSRSYNC	RETURNTEXT getsr(SB), $0	MOVW	SEG(R3), R3	RETURNTEXT gethid0(SB), $0	MOVW	SPR(HID0), R3	RETURNTEXT puthid0(SB), $0	SYNC	ISYNC	MOVW	R3, SPR(HID0)	SYNC	RETURNTEXT gethid1(SB), $0	MOVW	SPR(HID1), R3	RETURNTEXT gethid2(SB), $0	MOVW	SPR(HID2), R3	RETURNTEXT puthid2(SB), $0	MOVW	R3, SPR(HID2)	RETURNTEXT eieio(SB), $0	EIEIO	RETURNTEXT sync(SB), $0	SYNC	RETURN/* Power PC 603e specials */TEXT getimiss(SB), $0	MOVW	SPR(IMISS), R3	RETURNTEXT geticmp(SB), $0	MOVW	SPR(iCMP), R3	RETURNTEXT puticmp(SB), $0	MOVW	R3, SPR(iCMP)	RETURNTEXT getdmiss(SB), $0	MOVW	SPR(DMISS), R3	RETURNTEXT getdcmp(SB), $0	MOVW	SPR(DCMP), R3	RETURNTEXT putdcmp(SB), $0	MOVW	R3, SPR(DCMP)	RETURNTEXT getsdr1(SB), $0	MOVW	SPR(SDR1), R3	RETURNTEXT gethash1(SB), $0	MOVW	SPR(HASH1), R3	RETURNTEXT puthash1(SB), $0	MOVW	R3, SPR(HASH1)	RETURNTEXT gethash2(SB), $0	MOVW	SPR(HASH2), R3	RETURNTEXT puthash2(SB), $0	MOVW	R3, SPR(HASH2)	RETURNTEXT getrpa(SB), $0	MOVW	SPR(RPA), R3	RETURNTEXT putrpa(SB), $0	MOVW	R3, SPR(RPA)	RETURNTEXT tlbli(SB), $0	TLBLI(3)	ISYNC	RETURNTEXT tlbld(SB), $0	SYNC	TLBLD(3)	ISYNC	RETURNTEXT getsrr1(SB), $0	MOVW	SPR(SRR1), R3	RETURNTEXT putsrr1(SB), $0	MOVW	R3, SPR(SRR1)	RETURNTEXT fpsave(SB), $0	FMOVD	F0, (0*8)(R3)	FMOVD	F1, (1*8)(R3)	FMOVD	F2, (2*8)(R3)	FMOVD	F3, (3*8)(R3)	FMOVD	F4, (4*8)(R3)	FMOVD	F5, (5*8)(R3)	FMOVD	F6, (6*8)(R3)	FMOVD	F7, (7*8)(R3)	FMOVD	F8, (8*8)(R3)	FMOVD	F9, (9*8)(R3)	FMOVD	F10, (10*8)(R3)	FMOVD	F11, (11*8)(R3)	FMOVD	F12, (12*8)(R3)	FMOVD	F13, (13*8)(R3)	FMOVD	F14, (14*8)(R3)	FMOVD	F15, (15*8)(R3)	FMOVD	F16, (16*8)(R3)	FMOVD	F17, (17*8)(R3)	FMOVD	F18, (18*8)(R3)	FMOVD	F19, (19*8)(R3)	FMOVD	F20, (20*8)(R3)	FMOVD	F21, (21*8)(R3)	FMOVD	F22, (22*8)(R3)	FMOVD	F23, (23*8)(R3)	FMOVD	F24, (24*8)(R3)	FMOVD	F25, (25*8)(R3)	FMOVD	F26, (26*8)(R3)	FMOVD	F27, (27*8)(R3)	FMOVD	F28, (28*8)(R3)	FMOVD	F29, (29*8)(R3)	FMOVD	F30, (30*8)(R3)	FMOVD	F31, (31*8)(R3)	MOVFL	FPSCR, F0	FMOVD	F0, (32*8)(R3)	RETURNTEXT fprestore(SB), $0	FMOVD	(32*8)(R3), F0	MOVFL	F0, FPSCR	FMOVD	(0*8)(R3), F0	FMOVD	(1*8)(R3), F1	FMOVD	(2*8)(R3), F2	FMOVD	(3*8)(R3), F3	FMOVD	(4*8)(R3), F4	FMOVD	(5*8)(R3), F5	FMOVD	(6*8)(R3), F6	FMOVD	(7*8)(R3), F7	FMOVD	(8*8)(R3), F8	FMOVD	(9*8)(R3), F9	FMOVD	(10*8)(R3), F10	FMOVD	(11*8)(R3), F11	FMOVD	(12*8)(R3), F12	FMOVD	(13*8)(R3), F13	FMOVD	(14*8)(R3), F14	FMOVD	(15*8)(R3), F15	FMOVD	(16*8)(R3), F16	FMOVD	(17*8)(R3), F17	FMOVD	(18*8)(R3), F18	FMOVD	(19*8)(R3), F19	FMOVD	(20*8)(R3), F20	FMOVD	(21*8)(R3), F21	FMOVD	(22*8)(R3), F22	FMOVD	(23*8)(R3), F23	FMOVD	(24*8)(R3), F24	FMOVD	(25*8)(R3), F25	FMOVD	(26*8)(R3), F26	FMOVD	(27*8)(R3), F27	FMOVD	(28*8)(R3), F28	FMOVD	(29*8)(R3), F29	FMOVD	(30*8)(R3), F30	FMOVD	(31*8)(R3), F31	RETURNTEXT dcacheenb(SB), $0	SYNC	MOVW	SPR(HID0), R4		/* Get HID0 and clear unwanted bits */	RLWNM	$0, R4, $~(HID_DLOCK), R4	MOVW	$(HID_DCFI|HID_DCE), R5	OR	R4, R5	MOVW	$HID_DCE, R3	OR	R4, R3	SYNC//	MOVW	R5, SPR(HID0)		/* Cache enable and flash invalidate */	MOVW	R3, SPR(HID0)		/* Cache enable */	SYNC	RETURNTEXT icacheenb(SB), $0	SYNC	MOVW	SPR(HID0), R4		/* Get HID0 and clear unwanted bits */	RLWNM	$0, R4, $~(HID_ILOCK), R4	MOVW	$(HID_ICFI|HID_ICE), R5	OR	R4, R5	MOVW	$HID_ICE, R3	OR	R4, R3	SYNC	MOVW	R5, SPR(HID0)		/* Cache enable and flash invalidate */	MOVW	R3, SPR(HID0)		/* Cache enable */	SYNC	RETURN#ifdef ucuconfTEXT getpll(SB), $0	MOVW	SPR(1009), R3	ISYNC	RETURNTEXT getl2pm(SB), $0	MOVW	SPR(1016), R3	RETURNTEXT getl2cr(SB), $0	MOVW	SPR(1017), R3	RETURNTEXT putl2cr(SB), $0	MOVW	R3, SPR(1017)	RETURNTEXT dcachedis(SB), $0	SYNC/*	MOVW	SPR(HID0), R4	RLWNM	$0, R4, $~(HID_DCE), R4	MOVW	R4, SPR(HID0)		/* L1 Cache disable */	MOVW	SPR(1017), R4	RLWNM	$0, R4, $~(0x80000000), R4	MOVW	R4, SPR(1017)		/* L2 Cache disable */	SYNC	RETURNTEXT l2disable(SB), $0	SYNC	MOVW	SPR(1017), R4	RLWNM	$0, R4, $~(0x80000000), R4	MOVW	R4, SPR(1017)		/* L2 Cache disable */	SYNC	RETURNTEXT getbats(SB), $0	MOVW	SPR(DBATU(0)), R4	MOVW	R4, 0(R3)	MOVW	SPR(DBATL(0)), R4	MOVW	R4, 4(R3)	MOVW	SPR(IBATU(0)), R4	MOVW	R4, 8(R3)	MOVW	SPR(IBATL(0)), R4	MOVW	R4, 12(R3)	MOVW	SPR(DBATU(1)), R4	MOVW	R4, 16(R3)	MOVW	SPR(DBATL(1)), R4	MOVW	R4, 20(R3)	MOVW	SPR(IBATU(1)), R4	MOVW	R4, 24(R3)	MOVW	SPR(IBATL(1)), R4	MOVW	R4, 28(R3)	MOVW	SPR(DBATU(2)), R4	MOVW	R4, 32(R3)	MOVW	SPR(DBATL(2)), R4	MOVW	R4, 36(R3)	MOVW	SPR(IBATU(2)), R4	MOVW	R4, 40(R3)	MOVW	SPR(IBATL(2)), R4	MOVW	R4, 44(R3)	MOVW	SPR(DBATU(3)), R4	MOVW	R4, 48(R3)	MOVW	SPR(DBATL(3)), R4	MOVW	R4, 52(R3)	MOVW	SPR(IBATU(3)), R4	MOVW	R4, 56(R3)	MOVW	SPR(IBATL(3)), R4	MOVW	R4, 60(R3)	RETURNTEXT setdbat0(SB), $0	MOVW	0(R3), R4	MOVW	R4, SPR(DBATU(0))	MOVW	4(R3), R4	MOVW	R4, SPR(DBATL(0))	RETURN#endif /* ucuconf */TEXT mmudisable(SB), $0	/* disable MMU */	MOVW	LR, R4	MOVW	$KZERO, R5	ANDN	R5, R4	MOVW	R4, SPR(SRR0)		/* Stored PC for RFI instruction */	MOVW	MSR, R4	MOVW	$(MSR_IR|MSR_DR|MSR_RI|MSR_FP), R5	ANDN	R5, R4	MOVW	R4, SPR(SRR1)	MOVW	SPR(HID0), R4		/* Get HID0 and clear unwanted bits */	MOVW	$(HID_ICE|HID_DCE), R5	ANDN	R5, R4	MOVW	R4, SPR(HID0)		/* Cache disable */	RFI				/* resume caller with MMU off */	RETURNTEXT kreboot(SB), $0	BL	mmudisable(SB)	MOVW	R3, LR	RETURNTEXT mul64fract(SB), $0	MOVW	a0+8(FP), R9	MOVW	a1+4(FP), R10	MOVW	b0+16(FP), R4	MOVW	b1+12(FP), R5	MULLW	R10, R5, R13		/* c2 = lo(a1*b1) */	MULLW	R10, R4, R12		/* c1 = lo(a1*b0) */	MULHWU	R10, R4, R7		/* hi(a1*b0) */	ADD	R7, R13			/* c2 += hi(a1*b0) */	MULLW	R9, R5, R6		/* lo(a0*b1) */	MULHWU	R9, R5, R7		/* hi(a0*b1) */	ADDC	R6, R12			/* c1 += lo(a0*b1) */	ADDE	R7, R13			/* c2 += hi(a0*b1) + carry */	MULHWU	R9, R4, R7		/* hi(a0*b0) */	ADDC	R7, R12			/* c1 += hi(a0*b0) */	ADDE	R0, R13			/* c2 += carry */	MOVW	R12, 4(R3)	MOVW	R13, 0(R3)	RETURN

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -