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

1991/0112/ss/l.s (diff list | history)

1991/0111/sys/src/9/ss/l.s:1,61991/0112/sys/src/9/ss/l.s:1,6 (short | long | prev | next)
1990/1223    
#include "mem.h" 
 
1991/0111    
#define	SYSPSR	(SPL(0x0)|PSRSUPER) 
1991/0112    
#define	SYSPSR	(SPL(0x0)|PSREF|PSRSUPER) 
1990/1226    
 
1990/1223    
TEXT	start(SB), $-4 
 
1991/0111/sys/src/9/ss/l.s:28,421991/0112/sys/src/9/ss/l.s:28,37
1990/1223    
	UNIMP 
	RETURN 
 
1990/1226    
TEXT	getpsr(SB), $0 
                 
	MOVW	PSR, R7 
1990/1223    
	RETURN 
                 
1991/0110    
TEXT	swap1(SB), $0 
1991/0109    
 
	MOVW	keyaddr+0(FP), R8 
1991/0110    
	TAS	(R8), R7 
1991/0112    
	TAS	(R8), R7		/* LDSTUB, thank you ken */ 
1991/0109    
	RETURN 
 
1990/1226    
TEXT	swap1_should_work(SB), $0 
1991/0111/sys/src/9/ss/l.s:110,1151991/0112/sys/src/9/ss/l.s:105,116
1990/1226    
	MOVW	$(UTZERO+32+4), R8	/* nPC */ 
	RETT	R7, R8 
 
1991/0112    
TEXT	rfnote(SB), $0 
 
	MOVW	0(FP), R1		/* 1st arg is &uregpointer */ 
	ADD	$4, R1			/* point at ureg */ 
	JMP	restore 
 
1990/1226    
TEXT	traplink(SB), $-4 
 
	/* R8 to R23 are free to play with */ 
1991/0111/sys/src/9/ss/l.s:122,1341991/0112/sys/src/9/ss/l.s:123,137
1990/1226    
	/* 
	 * Interrupt or fault from kernel 
	 */ 
	MOVW	R1, (0-(4*(32+5))+(4*1))(R1)	/* save R1=SP */ 
1991/0112    
	ANDN	$7, R1, R20			/* dbl aligned */ 
	MOVW	R1, (0-(4*(32+6))+(4*1))(R20)	/* save R1=SP */ 
1990/1226    
	/* really clumsy: store these in Ureg so can be restored below */ 
	MOVW	R2, (0-(4*(32+5))+(4*2))(R1)	/* SB */ 
	MOVW	R5, (0-(4*(32+5))+(4*5))(R1)	/* USER */ 
	MOVW	R6, (0-(4*(32+5))+(4*6))(R1)	/* MACH */ 
1991/0112    
	MOVW	R2, (0-(4*(32+6))+(4*2))(R20)	/* SB */ 
	MOVW	R5, (0-(4*(32+6))+(4*5))(R20)	/* USER */ 
	MOVW	R6, (0-(4*(32+6))+(4*6))(R20)	/* MACH */ 
	SUB	$(4*(32+6)), R20, R1 
 
1990/1226    
trap1: 
	SUB	$(4*(32+5)), R1 
	MOVW	Y, R20 
	MOVW	R20, (4*(32+0))(R1)		/* Y */ 
	MOVW	TBR, R20 
1991/0111/sys/src/9/ss/l.s:143,1721991/0112/sys/src/9/ss/l.s:146,164
1990/1226    
	MOVW	R7, (4*7)(R1) 
	RESTORE	R0, R0 
	/* now our registers R8-R31 are same as before trap */ 
	MOVW	R8, (4*8)(R1) 
	MOVW	R9, (4*9)(R1) 
	MOVW	R10, (4*10)(R1) 
	MOVW	R11, (4*11)(R1) 
	MOVW	R12, (4*12)(R1) 
	MOVW	R13, (4*13)(R1) 
	MOVW	R14, (4*14)(R1) 
	MOVW	R15, (4*15)(R1) 
	MOVW	R16, (4*16)(R1) 
	MOVW	R17, (4*17)(R1) 
	MOVW	R18, (4*18)(R1) 
	MOVW	R19, (4*19)(R1) 
	MOVW	R20, (4*20)(R1) 
	MOVW	R21, (4*21)(R1) 
	MOVW	R22, (4*22)(R1) 
	MOVW	R23, (4*23)(R1) 
	MOVW	R24, (4*24)(R1) 
	MOVW	R25, (4*25)(R1) 
	MOVW	R26, (4*26)(R1) 
	MOVW	R27, (4*27)(R1) 
	MOVW	R28, (4*28)(R1) 
	MOVW	R29, (4*29)(R1) 
	MOVW	R30, (4*30)(R1) 
	MOVW	R31, (4*31)(R1) 
1991/0112    
	/* save registers two at a time */ 
	MOVD	R8, (4*8)(R1) 
	MOVD	R10, (4*10)(R1) 
	MOVD	R12, (4*12)(R1) 
	MOVD	R14, (4*14)(R1) 
	MOVD	R16, (4*16)(R1) 
	MOVD	R18, (4*18)(R1) 
	MOVD	R20, (4*20)(R1) 
	MOVD	R22, (4*22)(R1) 
	MOVD	R24, (4*24)(R1) 
	MOVD	R26, (4*26)(R1) 
	MOVD	R28, (4*28)(R1) 
	MOVD	R30, (4*30)(R1) 
1990/1226    
	/* SP and SB and u and m are already set; away we go */ 
	MOVW	R1, -4(R1)		/* pointer to Ureg */ 
	SUB	$8, R1 
1991/0111/sys/src/9/ss/l.s:178,2201991/0112/sys/src/9/ss/l.s:170,198
1990/1226    
	JMPL	faultsparc(SB) 
 
	ADD	$8, R1 
	MOVW	(4*(32+2))(R1), R7		/* PSR */ 
	MOVW	R7, PSR 
1991/0112    
restore: 
	MOVW	(4*(32+2))(R1), R8		/* PSR */ 
	MOVW	R8, PSR 
1990/1226    
	OR	R0, R0 
	OR	R0, R0 
	OR	R0, R0 
 
	MOVW	(4*31)(R1), R31 
	MOVW	(4*30)(R1), R30 
	MOVW	(4*29)(R1), R29 
	MOVW	(4*28)(R1), R28 
	MOVW	(4*27)(R1), R27 
	MOVW	(4*26)(R1), R26 
	MOVW	(4*25)(R1), R25 
	MOVW	(4*24)(R1), R24 
	MOVW	(4*23)(R1), R23 
	MOVW	(4*22)(R1), R22 
	MOVW	(4*21)(R1), R21 
	MOVW	(4*20)(R1), R20 
	MOVW	(4*19)(R1), R19 
	MOVW	(4*18)(R1), R18 
	MOVW	(4*17)(R1), R17 
	MOVW	(4*16)(R1), R16 
	MOVW	(4*15)(R1), R15 
	MOVW	(4*14)(R1), R14 
	MOVW	(4*13)(R1), R13 
	MOVW	(4*12)(R1), R12 
	MOVW	(4*11)(R1), R11 
	MOVW	(4*10)(R1), R10 
	MOVW	(4*9)(R1), R9 
	MOVW	(4*8)(R1), R8 
1991/0112    
	MOVD	(4*30)(R1), R30 
	MOVD	(4*28)(R1), R28 
	MOVD	(4*26)(R1), R26 
	MOVD	(4*24)(R1), R24 
	MOVD	(4*22)(R1), R22 
	MOVD	(4*20)(R1), R20 
	MOVD	(4*18)(R1), R18 
	MOVD	(4*16)(R1), R16 
	MOVD	(4*14)(R1), R14 
	MOVD	(4*12)(R1), R12 
	MOVD	(4*10)(R1), R10 
	MOVD	(4*8)(R1), R8 
1990/1226    
	SAVE	R0, R0 
	MOVW	(4*7)(R1), R7 
	MOVW	(4*6)(R1), R6 
	MOVW	(4*5)(R1), R5 
	MOVW	(4*4)(R1), R4 
	MOVW	(4*3)(R1), R3 
	MOVW	(4*2)(R1), R2 
1991/0112    
	MOVD	(4*6)(R1), R6 
	MOVD	(4*4)(R1), R4 
	MOVD	(4*2)(R1), R2 
1990/1226    
	MOVW	(4*(32+0))(R1), R20		/* Y */ 
	MOVW	R20, Y 
	MOVW	(4*(32+4))(R1), R17		/* PC */ 
1991/0111/sys/src/9/ss/l.s:230,2411991/0112/sys/src/9/ss/l.s:208,220
1990/1226    
	MOVW	R2, R9 
	MOVW	$setSB(SB), R2 
	MOVW	$(USERADDR+BY2PG), R1 
	MOVW	R8, (0-(4*(32+5))+(4*1))(R1)	/* save R1=SP */ 
	MOVW	R9, (0-(4*(32+5))+(4*2))(R1)	/* save R2=SB */ 
	MOVW	R5, (0-(4*(32+5))+(4*5))(R1)	/* save R5=USER */ 
	MOVW	R6, (0-(4*(32+5))+(4*6))(R1)	/* save R6=MACH */ 
1991/0112    
	MOVW	R8, (0-(4*(32+6))+(4*1))(R1)	/* save R1=SP */ 
	MOVW	R9, (0-(4*(32+6))+(4*2))(R1)	/* save R2=SB */ 
	MOVW	R5, (0-(4*(32+6))+(4*5))(R1)	/* save R5=USER */ 
	MOVW	R6, (0-(4*(32+6))+(4*6))(R1)	/* save R6=MACH */ 
1990/1226    
	MOVW	$USERADDR, R(USER) 
	MOVW	$mach0(SB), R(MACH) 
1991/0112    
	SUB	$(4*(32+6)), R1 
1990/1226    
	JMP	trap1 
 
TEXT	syslink(SB), $-4 
1991/0111/sys/src/9/ss/l.s:248,2611991/0112/sys/src/9/ss/l.s:227,238
1990/1226    
	MOVW	R2, R9 
	MOVW	$setSB(SB), R2 
	MOVW	$(USERADDR+BY2PG), R1 
	MOVW	R8, (0-(4*(32+5))+4)(R1)	/* save R1=SP */ 
	SUB	$(4*(32+5)), R1 
1991/0112    
	MOVW	R8, (0-(4*(32+6))+4)(R1)	/* save R1=SP */ 
	SUB	$(4*(32+6)), R1 
1990/1226    
	MOVW	R9, (4*2)(R1)			/* save R2=SB */ 
	MOVW	R3, (4*3)(R1)			/* global register */ 
	MOVW	R4, (4*4)(R1)			/* global register */ 
	MOVW	R5, (4*5)(R1)			/* save R5=USER */ 
	MOVW	R6, (4*6)(R1)			/* save R6=MACH */ 
	MOVW	R7, (4*7)(R1)			/* system call number */ 
1991/0112    
	MOVD	R4, (4*4)(R1)			/* global register, R5=USER */ 
	MOVD	R6, (4*6)(R1)			/* save R6=MACH, R7=syscall# */ 
1990/1226    
	MOVW	$USERADDR, R(USER) 
	MOVW	$mach0(SB), R(MACH) 
	MOVW	TBR, R20 
1991/0111/sys/src/9/ss/l.s:285,2941991/0112/sys/src/9/ss/l.s:262,269
1990/1226    
	MOVW	(4*15)(R1), R15 
	SAVE	R0, R0 
	MOVW	(4*6)(R1), R6 
	MOVW	(4*5)(R1), R5 
	MOVW	(4*4)(R1), R4 
	MOVW	(4*3)(R1), R3 
	MOVW	(4*2)(R1), R2 
1991/0112    
	MOVD	(4*4)(R1), R4 
	MOVD	(4*2)(R1), R2 
1990/1226    
	MOVW	(4*(32+4))(R1), R17		/* PC */ 
	MOVW	(4*(32+3))(R1), R18		/* nPC */ 
	MOVW	(4*1)(R1), R1	/* restore R1=SP */ 


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