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

1992/0807/ss/l.s (diff list | history)

1990/1223/sys/src/9/ss/l.s:1,811990/1226/sys/src/9/ss/l.s:1,399 (short | long)
1990/1223    
#include "mem.h" 
 
1990/1226    
#define	SYSPSR	(PSREF|SPL(0xF)|PSRSUPER) 
 
1990/1223    
TEXT	start(SB), $-4 
 
	/* get virtual, fast */ 
	/* we are executing in segment 0, mapped to pmeg 0. stack is there too */ 
	/* get virtual by mapping segment(KZERO) to pmeg 0. */ 
	MOVW	$KZERO, R1 
	MOVB	R0, (R1, 3) 
1990/1226    
	MOVW	$KZERO, R7 
	MOVB	R0, (R7, 3) 
1990/1223    
	/* now mapped correctly.  jmpl to where we want to be */ 
	MOVW	$setR30(SB), R30 
	MOVW	$startvirt(SB), R1 
	JMPL	(R1) 
1990/1226    
	MOVW	$setSB(SB), R2 
	MOVW	$startvirt(SB), R7 
	JMPL	(R7) 
1990/1223    
	RETURN			/* can't get here */ 
 
TEXT	startvirt(SB), $-4 
 
	MOVW	$0x4000, R29 
1990/1226    
	MOVW	$BOOTSTACK, R1 
1990/1223    
	MOVW	$mach0(SB), R(MACH) 
1990/1226    
	MOVW	$0x8, R7 
	MOVW	R7, WIM 
1990/1223    
	JMPL	main(SB) 
	UNIMP 
	RETURN 
 
TEXT	pc(SB), $0 
	MOVW	R15, R1 
1990/1226    
TEXT	getpsr(SB), $0 
 
	MOVW	PSR, R7 
1990/1223    
	RETURN 
 
1990/1226    
TEXT	swap1_should_work(SB), $0 
 
	MOVW	keyaddr+0(FP), R8 
	MOVW	$1, R7 
	SWAP	(R8), R7 
	RETURN 
 
TEXT	swap1(SB), $0 
 
	MOVW	keyaddr+0(FP), R8 
	MOVW	PSR, R9 
	MOVW	R9, R10 
	AND	$~PSRET, R10		/* BUG: book says this is buggy */ 
	MOVW	R10, PSR 
	OR	R0, R0 
	OR	R0, R0 
	OR	R0, R0 
	MOVW	(R8), R7 
	CMP	R7, R0 
	BNE	was1 
	MOVW	$1, R10 
	MOVW	R10, (R8) 
was1: 
	MOVW	R9, PSR 
	RETURN 
 
TEXT	spllo(SB), $0 
 
	MOVW	PSR, R7 
	MOVW	R7, R10 
	OR	$PSRET, R10 
	MOVW	R10, PSR 
	OR	R0, R0 
	OR	R0, R0 
	OR	R0, R0 
	RETURN 
 
TEXT	splhi(SB), $0 
 
	MOVW	PSR, R7 
	MOVW	R7, R10 
	AND	$~PSRET, R10	/* BUG: book says this is buggy */ 
	MOVW	R10, PSR 
	OR	R0, R0 
	OR	R0, R0 
	OR	R0, R0 
	RETURN 
 
TEXT	splx(SB), $0 
 
	MOVW	psr+0(FP), R7 
	MOVW	R7, PSR		/* BUG: book says this is buggy */ 
	OR	R0, R0 
	OR	R0, R0 
	OR	R0, R0 
	RETURN 
 
TEXT	touser(SB), $-4 
 
	MOVW	$SYSPSR, R7	/* BUG SPL(0xF) for now */ 
	MOVW	R7, PSR 
 
	OR	R0, R0 
	OR	R0, R0 
	OR	R0, R0 
	MOVW	sp+0(FP), R1 
	SAVE	R0, R0			/* RETT is implicit RESTORE */ 
	MOVW	$(UTZERO+32), R7	/* PC; header appears in text */ 
	MOVW	$(UTZERO+32+4), R8	/* nPC */ 
	RETT	R7, R8 
 
TEXT	traplink(SB), $-4 
 
	/* R8 to R23 are free to play with */ 
	/* R17 contains PC, R18 contains nPC */ 
	/* R19 has PSR loaded from vector code */ 
	ANDCC	$PSRPSUPER, R19, R0 
	BE	usertrap 
 
kerneltrap: 
	/* 
	 * Interrupt or fault from kernel 
	 */ 
	MOVW	R1, (0-(4*(32+5))+(4*1))(R1)	/* save R1=SP */ 
	/* 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 */ 
trap1: 
	SUB	$(4*(32+5)), R1 
	MOVW	Y, R20 
	MOVW	R20, (4*(32+0))(R1)		/* Y */ 
	MOVW	TBR, R20 
	MOVW	R20, (4*(32+1))(R1)		/* TBR */ 
	AND	$~0x1F, R19			/* force CWP=0 */ 
	MOVW	R19, (4*(32+2))(R1)		/* PSR */ 
	MOVW	R18, (4*(32+3))(R1)		/* nPC */ 
	MOVW	R17, (4*(32+4))(R1)		/* PC */ 
	MOVW	R0, (4*0)(R1) 
	MOVW	R3, (4*3)(R1) 
	MOVW	R4, (4*4)(R1) 
	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) 
	/* SP and SB and u and m are already set; away we go */ 
	MOVW	R1, -4(R1)		/* pointer to Ureg */ 
	SUB	$8, R1 
	MOVW	$SYSPSR, R7 
	MOVW	R7, PSR 
	OR	R0, R0 
	OR	R0, R0 
	OR	R0, R0 
	JMPL	faultsparc(SB) 
 
	ADD	$8, R1 
	MOVW	(4*(32+2))(R1), R7		/* PSR */ 
	MOVW	R7, PSR 
	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 
	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 
	MOVW	(4*(32+0))(R1), R20		/* Y */ 
	MOVW	R20, Y 
	MOVW	(4*(32+4))(R1), R17		/* PC */ 
	MOVW	(4*(32+3))(R1), R18		/* nPC */ 
	MOVW	(4*1)(R1), R1	/* restore R1=SP */ 
	RETT	R17, R18 
	 
usertrap: 
	/* 
	 * Interrupt or fault from user 
	 */ 
	MOVW	R1, R8 
	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 */ 
	MOVW	$USERADDR, R(USER) 
	MOVW	$mach0(SB), R(MACH) 
	JMP	trap1 
 
TEXT	syslink(SB), $-4 
 
	/* R8 to R23 are free to play with */ 
	/* R17 contains PC, R18 contains nPC */ 
	/* R19 has PSR loaded from vector code */ 
	/* assume user did it; syscall checks */ 
	MOVW	R1, R8 
	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 
	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 */ 
	MOVW	$USERADDR, R(USER) 
	MOVW	$mach0(SB), R(MACH) 
	MOVW	TBR, R20 
	MOVW	R20, (4*(32+1))(R1)		/* TBR */ 
	AND	$~0x1F, R19 
	MOVW	R19, (4*(32+2))(R1)		/* PSR */ 
	MOVW	R18, (4*(32+3))(R1)		/* nPC */ 
	MOVW	R17, (4*(32+4))(R1)		/* PC */ 
	RESTORE	R0, R0 
	/* now our registers R8-R31 are same as before trap */ 
	MOVW	R15, (4*15)(R1) 
	/* SP and SB and u and m are already set; away we go */ 
	MOVW	R1, -4(R1)		/* pointer to Ureg */ 
	SUB	$8, R1 
	MOVW	$SYSPSR, R7 
	MOVW	R7, PSR 
	JMPL	syscall(SB) 
	/* R7 contains return value from syscall */ 
 
	ADD	$8, R1 
	MOVW	(4*(32+2))(R1), R8		/* PSR */ 
	MOVW	R8, PSR 
	OR	R0, R0 
	OR	R0, R0 
	OR	R0, R0 
 
	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 
	MOVW	(4*(32+4))(R1), R17		/* PC */ 
	MOVW	(4*(32+3))(R1), R18		/* nPC */ 
	MOVW	(4*1)(R1), R1	/* restore R1=SP */ 
	RETT	R17, R18 
 
TEXT	puttbr(SB), $0 
 
	MOVW	tbr+0(FP), R7 
	MOVW	R7, TBR 
	OR	R0, R0 
	OR	R0, R0 
	OR	R0, R0 
	RETURN 
 
TEXT	gettbr(SB), $0 
 
	MOVW	TBR, R7 
	RETURN 
 
TEXT	r1(SB), $0 
 
	MOVW	R1, R7 
	RETURN 
 
TEXT	getwim(SB), $0 
 
	MOVW	WIM, R7 
	RETURN 
 
1990/1223    
TEXT	setlabel(SB), $0 
	MOVW	b+0(FP), R2 
	MOVW	R29, (R2) 
	MOVW	R15, 4(R2) 
	MOVW	$0, R1 
1990/1226    
 
	MOVW	b+0(FP), R7 
	MOVW	R1, (R7) 
	MOVW	R15, 4(R7) 
	MOVW	$0, R7 
1990/1223    
	RETURN 
 
TEXT	gotolabel(SB), $0 
	MOVW	r+4(FP), R1 
	MOVW	b+0(FP), R2 
	MOVW	(R2), R29 
	MOVW	4(R2), R15 
	MOVW	R15, 0(R29) 
1990/1226    
 
	MOVW	r+4(FP), R7 
	MOVW	b+0(FP), R8 
	MOVW	(R8), R1 
	MOVW	4(R8), R15 
	MOVW	R15, 0(R1) 
1990/1223    
	RETURN 
 
TEXT	crash(SB), $0 
1990/1226    
TEXT	putcxsegm(SB), $0 
1990/1223    
 
	MOVW	0(FP), R8		/* context */ 
	MOVW	4(FP), R9		/* segment addr */ 
	MOVW	8(FP), R10		/* segment value */ 
	MOVW	$0xFFE80118, R1 
	JMPL	(R1) 
1990/1226    
	MOVW	$0xFFE80118, R7 
	JMPL	(R7) 
1990/1223    
	RETURN 
 
1990/1226    
TEXT	putcontext(SB), $0 
 
	MOVW	$CONTEXT, R7 
	MOVW	0(FP), R8 
	MOVB	R8, (R7, 2) 
	RETURN 
 
1990/1223    
TEXT	putb2(SB), $0 
 
	MOVW	0(FP), R1 
	MOVW	4(FP), R2 
	MOVB	R2, (R1, 2) 
1990/1226    
	MOVW	0(FP), R7 
	MOVW	4(FP), R8 
	MOVB	R8, (R7, 2) 
1990/1223    
	RETURN 
 
TEXT	putw3(SB), $0 
1990/1226    
TEXT	getb2(SB), $0 
1990/1223    
 
	MOVW	0(FP), R1 
	MOVW	4(FP), R2 
	MOVW	R2, (R1, 3) 
1990/1226    
	MOVW	0(FP), R7 
	MOVB	(R7, 2), R7 
1990/1223    
	RETURN 
 
1990/1226    
TEXT	getw2(SB), $0 
 
	MOVW	0(FP), R7 
	MOVW	(R7, 2), R7 
	RETURN 
 
TEXT	putw2(SB), $0 
 
	MOVW	0(FP), R7 
	MOVW	4(FP), R8 
	MOVW	R8, (R7, 2) 
	RETURN 
 
TEXT	putwE(SB), $0 
 
	MOVW	0(FP), R7 
	MOVW	4(FP), R8 
	MOVW	R8, (R7, 0xE) 
	RETURN 
 
TEXT	putsegm(SB), $0 
 
	MOVW	0(FP), R7 
	MOVW	4(FP), R8 
	MOVW	R8, (R7, 3) 
	RETURN 
 
1990/1223    
TEXT	putpmeg(SB), $0 
 
	MOVW	0(FP), R1 
	MOVW	4(FP), R2 
	MOVW	R2, (R1, 4) 
1990/1226    
	MOVW	0(FP), R7 
	MOVW	4(FP), R8 
	MOVW	R8, (R7, 4) 
1990/1223    
	RETURN 
 
TEXT	putwd(SB), $0 
 
	MOVW	0(FP), R1 
	MOVW	4(FP), R2 
	MOVW	R2, (R1, 0xD) 
1990/1226    
	MOVW	0(FP), R7 
	MOVW	4(FP), R8 
	MOVW	R8, (R7, 0xD) 
1990/1223    
	RETURN 
                 
 
GLOBL	mach0+0(SB), $MACHSIZE 
1990/1226/sys/src/9/ss/l.s:1,61990/1227/sys/src/9/ss/l.s:1,6 (short | long)
1990/1223    
#include "mem.h" 
 
1990/1226    
#define	SYSPSR	(PSREF|SPL(0xF)|PSRSUPER) 
1990/1227    
#define	SYSPSR	(PSREF|SPL(0x0)|PSRSUPER) 
1990/1226    
 
1990/1223    
TEXT	start(SB), $-4 
 
1990/1226/sys/src/9/ss/l.s:319,3291990/1227/sys/src/9/ss/l.s:319,329
1990/1223    
 
TEXT	gotolabel(SB), $0 
1990/1226    
 
	MOVW	r+4(FP), R7 
	MOVW	b+0(FP), R8 
	MOVW	(R8), R1 
	MOVW	4(R8), R15 
	MOVW	R15, 0(R1) 
1990/1227    
	MOVW	$1, R7 
1990/1223    
	RETURN 
 
1990/1226    
TEXT	putcxsegm(SB), $0 
1990/1226/sys/src/9/ss/l.s:368,3991990/1227/sys/src/9/ss/l.s:368,406
1990/1226    
	MOVW	R8, (R7, 2) 
	RETURN 
 
TEXT	putwE(SB), $0 
1990/1227    
TEXT	putw4(SB), $0 
1990/1226    
 
	MOVW	0(FP), R7 
	MOVW	4(FP), R8 
	MOVW	R8, (R7, 0xE) 
1990/1227    
	MOVW	R8, (R7, 4) 
1990/1226    
	RETURN 
 
TEXT	putsegm(SB), $0 
1990/1227    
TEXT	putwC(SB), $0 
1990/1226    
 
	MOVW	0(FP), R7 
	MOVW	4(FP), R8 
	MOVW	R8, (R7, 3) 
1990/1227    
	MOVW	R8, (R7, 0xC) 
1990/1226    
	RETURN 
 
1990/1223    
TEXT	putpmeg(SB), $0 
1990/1227    
TEXT	putwD(SB), $0 
1990/1223    
 
1990/1226    
	MOVW	0(FP), R7 
	MOVW	4(FP), R8 
	MOVW	R8, (R7, 4) 
1990/1227    
	MOVW	R8, (R7, 0xD) 
1990/1223    
	RETURN 
 
TEXT	putwd(SB), $0 
1990/1227    
TEXT	putwE(SB), $0 
1990/1223    
 
1990/1226    
	MOVW	0(FP), R7 
	MOVW	4(FP), R8 
	MOVW	R8, (R7, 0xD) 
1990/1227    
	MOVW	R8, (R7, 0xE) 
	RETURN 
 
TEXT	putsegm(SB), $0 
 
	MOVW	0(FP), R7 
	MOVW	4(FP), R8 
	MOVW	R8, (R7, 3) 
1990/1223    
	RETURN 
 
GLOBL	mach0+0(SB), $MACHSIZE 
1990/1227/sys/src/9/ss/l.s:6,141990/1231/sys/src/9/ss/l.s:6,17 (short | long)
1990/1223    
 
	/* get virtual, fast */ 
	/* we are executing in segment 0, mapped to pmeg 0. stack is there too */ 
	/* get virtual by mapping segment(KZERO) to pmeg 0. */ 
1990/1231    
	/* get virtual by mapping segment(KZERO) to pmeg 0., and next to 1 */ 
1990/1226    
	MOVW	$KZERO, R7 
	MOVB	R0, (R7, 3) 
1990/1231    
	MOVW	$(KZERO+BY2SEGM), R7 
	MOVW	$1, R8 
	MOVB	R8, (R7, 3) 
1990/1223    
	/* now mapped correctly.  jmpl to where we want to be */ 
1990/1226    
	MOVW	$setSB(SB), R2 
	MOVW	$startvirt(SB), R7 
1990/1227/sys/src/9/ss/l.s:335,3411990/1231/sys/src/9/ss/l.s:338,344
1990/1226    
	JMPL	(R7) 
1990/1223    
	RETURN 
 
1990/1226    
TEXT	putcontext(SB), $0 
1990/1231    
TEXT	putcxreg(SB), $0 
1990/1226    
 
	MOVW	$CONTEXT, R7 
	MOVW	0(FP), R8 
1990/1231/sys/src/9/ss/l.s:33,381991/0109/sys/src/9/ss/l.s:33,46 (short | long)
1990/1226    
	MOVW	PSR, R7 
1990/1223    
	RETURN 
 
1991/0109    
/* 
TEXT	swap1_please(SB), $0 
 
	MOVW	keyaddr+0(FP), R8 
	LDSTUB	(R8), R7 
	RETURN 
*/ 
 
1990/1226    
TEXT	swap1_should_work(SB), $0 
 
	MOVW	keyaddr+0(FP), R8 
1991/0109/sys/src/9/ss/l.s:1,61991/0110/sys/src/9/ss/l.s:1,6 (short | long)
1990/1223    
#include "mem.h" 
 
1990/1227    
#define	SYSPSR	(PSREF|SPL(0x0)|PSRSUPER) 
1991/0110    
#define	SYSPSR	(SPL(0xF)|PSRSUPER) 
1990/1226    
 
1990/1223    
TEXT	start(SB), $-4 
 
1991/0109/sys/src/9/ss/l.s:33,451991/0110/sys/src/9/ss/l.s:33,43
1990/1226    
	MOVW	PSR, R7 
1990/1223    
	RETURN 
 
1991/0109    
/* 
TEXT	swap1_please(SB), $0 
1991/0110    
TEXT	swap1(SB), $0 
1991/0109    
 
	MOVW	keyaddr+0(FP), R8 
	LDSTUB	(R8), R7 
1991/0110    
	TAS	(R8), R7 
1991/0109    
	RETURN 
*/ 
 
1990/1226    
TEXT	swap1_should_work(SB), $0 
 
1991/0109/sys/src/9/ss/l.s:48,541991/0110/sys/src/9/ss/l.s:46,52
1990/1226    
	SWAP	(R8), R7 
	RETURN 
 
TEXT	swap1(SB), $0 
1991/0110    
TEXT	swap1x(SB), $0 
1990/1226    
 
	MOVW	keyaddr+0(FP), R8 
	MOVW	PSR, R9 
1991/0109/sys/src/9/ss/l.s:100,1061991/0110/sys/src/9/ss/l.s:98,104
1990/1226    
 
TEXT	touser(SB), $-4 
 
	MOVW	$SYSPSR, R7	/* BUG SPL(0xF) for now */ 
1991/0110    
	MOVW	$SYSPSR, R7 
1990/1226    
	MOVW	R7, PSR 
 
	OR	R0, R0 
1991/0109/sys/src/9/ss/l.s:400,4091991/0110/sys/src/9/ss/l.s:398,481
1990/1227    
	MOVW	R8, (R7, 0xD) 
1990/1223    
	RETURN 
 
1991/0110    
TEXT	putwD16(SB), $0 
 
	MOVW	0(FP), R7 
	MOVW	4(FP), R8 
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
	MOVW	R8, (R7, 0xD) 
	RETURN 
 
1990/1227    
TEXT	putwE(SB), $0 
1990/1223    
 
1990/1226    
	MOVW	0(FP), R7 
	MOVW	4(FP), R8 
1991/0110    
	MOVW	R8, (R7, 0xE) 
	RETURN 
 
TEXT	putwE16(SB), $0 
 
	MOVW	0(FP), R7 
	MOVW	4(FP), R8 
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
1990/1227    
	MOVW	R8, (R7, 0xE) 
	RETURN 
 
1991/0110/sys/src/9/ss/l.s:1,61991/0111/sys/src/9/ss/l.s:1,6 (short | long)
1990/1223    
#include "mem.h" 
 
1991/0110    
#define	SYSPSR	(SPL(0xF)|PSRSUPER) 
1991/0111    
#define	SYSPSR	(SPL(0x0)|PSRSUPER) 
1990/1226    
 
1990/1223    
TEXT	start(SB), $-4 
 
1991/0111/sys/src/9/ss/l.s:1,61991/0112/sys/src/9/ss/l.s:1,6 (short | long)
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 */ 
1991/0112/sys/src/9/ss/l.s:25,311991/0115/sys/src/9/ss/l.s:25,31 (short | long)
1990/1226    
	MOVW	$0x8, R7 
	MOVW	R7, WIM 
1990/1223    
	JMPL	main(SB) 
	UNIMP 
1991/0115    
	MOVW	(R0), R0 
1990/1223    
	RETURN 
 
1991/0110    
TEXT	swap1(SB), $0 
1991/0112/sys/src/9/ss/l.s:461,4641991/0115/sys/src/9/ss/l.s:461,484
1990/1227    
	MOVW	R8, (R7, 3) 
1990/1223    
	RETURN 
 
1991/0115    
TEXT	clearfpintr(SB), $0 
	MOVW	$fpq+BY2WD(SB), R7 
	ANDN	$0x7, R7		/* must be D aligned */ 
	MOVW	$fpr+0(SB), R9 
clrq: 
	MOVD	FQ, (R7) 
	MOVW	FSR, (R9) 
	MOVW	(R9), R8 
	AND	$(1<<13), R8		/* queue not empty? */ 
	BNE	clrq 
	RETURN 
 
TEXT	getfsr(SB), $0 
	MOVW	$fpr+0(SB), R7 
	MOVW	FSR, (R7) 
	MOVW	(R7), R7 
	RETURN 
 
1990/1223    
GLOBL	mach0+0(SB), $MACHSIZE 
1991/0115    
GLOBL	fpq+0(SB), $(3*BY2WD) 
GLOBL	fpr+0(SB), $BY2WD 
1991/0115/sys/src/9/ss/l.s:21,261991/01151/sys/src/9/ss/l.s:21,51 (short | long)
1990/1223    
TEXT	startvirt(SB), $-4 
 
1990/1226    
	MOVW	$BOOTSTACK, R1 
1991/01151    
 
	MOVW	$(SPL(0xF)|PSREF|PSRSUPER), R7 
	MOVW	R7, PSR 
 
	MOVW	$(0x35<<22), R7		/* NVM OFM DZM AU */ 
	MOVW	R7, fsr+0(SB) 
	MOVW	fsr+0(SB), FSR 
	FMOVD	$0.5, F26		/* 0.5 -> F26 */ 
	FSUBD	F26, F26, F24		/* 0.0 -> F24 */ 
	FADDD	F26, F26, F28		/* 1.0 -> F28 */ 
	FADDD	F28, F28, F30		/* 2.0 -> F30 */ 
 
	FMOVD	F24, F0 
	FMOVD	F24, F2 
	FMOVD	F24, F4 
	FMOVD	F24, F6 
	FMOVD	F24, F8 
	FMOVD	F24, F10 
	FMOVD	F24, F12 
	FMOVD	F24, F14 
	FMOVD	F24, F16 
	FMOVD	F24, F18 
	FMOVD	F24, F20 
	FMOVD	F24, F22 
 
1990/1223    
	MOVW	$mach0(SB), R(MACH) 
1990/1226    
	MOVW	$0x8, R7 
	MOVW	R7, WIM 
1991/0115/sys/src/9/ss/l.s:93,991991/01151/sys/src/9/ss/l.s:118,124
1990/1226    
 
TEXT	touser(SB), $-4 
 
1991/0110    
	MOVW	$SYSPSR, R7 
1991/01151    
	MOVW	$(SYSPSR&~PSREF), R7 
1990/1226    
	MOVW	R7, PSR 
 
	OR	R0, R0 
1991/0115/sys/src/9/ss/l.s:167,1731991/01151/sys/src/9/ss/l.s:192,198
1990/1226    
	OR	R0, R0 
	OR	R0, R0 
	OR	R0, R0 
	JMPL	faultsparc(SB) 
1991/01151    
	JMPL	trap(SB) 
1990/1226    
 
	ADD	$8, R1 
1991/0112    
restore: 
1991/0115/sys/src/9/ss/l.s:461,4701991/01151/sys/src/9/ss/l.s:486,558
1990/1227    
	MOVW	R8, (R7, 3) 
1990/1223    
	RETURN 
 
1991/01151    
TEXT	savefpregs(SB), $0 
 
	MOVW	0(FP), R7 
	MOVW	FSR, 0(R7) 
 
	ADD	$(4+7), R7		/* double-align so can MOVD */ 
	ANDN	$7, R7 
 
	MOVD	F0, (0*4)(R7) 
	MOVD	F2, (2*4)(R7) 
	MOVD	F4, (4*4)(R7) 
	MOVD	F6, (6*4)(R7) 
	MOVD	F8, (8*4)(R7) 
	MOVD	F10, (10*4)(R7) 
	MOVD	F12, (12*4)(R7) 
	MOVD	F14, (14*4)(R7) 
	MOVD	F16, (16*4)(R7) 
	MOVD	F18, (18*4)(R7) 
	MOVD	F20, (20*4)(R7) 
	MOVD	F22, (22*4)(R7) 
	MOVD	F24, (24*4)(R7) 
	MOVD	F26, (26*4)(R7) 
	MOVD	F28, (28*4)(R7) 
	MOVD	F30, (30*4)(R7) 
 
	MOVW	PSR, R8 
	ANDN	$PSREF, R8 
	MOVW	R8, PSR 
	RETURN 
 
TEXT	restfpregs(SB), $0 
 
	MOVW	PSR, R8 
	OR	$PSREF, R8 
	MOVW	R8, PSR 
 
	MOVW	0(FP), R7 
	MOVW	(R7), FSR 
 
	ADD	$(4+7), R7		/* double-align so can MOVD */ 
	ANDN	$7, R7 
 
	MOVD	(0*4)(R7), F0 
	MOVD	(2*4)(R7), F2 
	MOVD	(4*4)(R7), F4 
	MOVD	(6*4)(R7), F6 
	MOVD	(8*4)(R7), F8 
	MOVD	(10*4)(R7), F10 
	MOVD	(12*4)(R7), F12 
	MOVD	(14*4)(R7), F14 
	MOVD	(16*4)(R7), F16 
	MOVD	(18*4)(R7), F18 
	MOVD	(20*4)(R7), F20 
	MOVD	(22*4)(R7), F22 
	MOVD	(24*4)(R7), F24 
	MOVD	(26*4)(R7), F26 
	MOVD	(28*4)(R7), F28 
	MOVD	(30*4)(R7), F30 
 
	ANDN	$PSREF, R8 
	MOVW	R8, PSR 
	RETURN 
 
1991/0115    
TEXT	clearfpintr(SB), $0 
	MOVW	$fpq+BY2WD(SB), R7 
	ANDN	$0x7, R7		/* must be D aligned */ 
	MOVW	$fpr+0(SB), R9 
1991/01151    
	MOVW	$fsr+0(SB), R9 
1991/0115    
clrq: 
	MOVD	FQ, (R7) 
	MOVW	FSR, (R9) 
1991/0115/sys/src/9/ss/l.s:474,4801991/01151/sys/src/9/ss/l.s:562,568
1991/0115    
	RETURN 
 
TEXT	getfsr(SB), $0 
	MOVW	$fpr+0(SB), R7 
1991/01151    
	MOVW	$fsr+0(SB), R7 
1991/0115    
	MOVW	FSR, (R7) 
	MOVW	(R7), R7 
	RETURN 
1991/0115/sys/src/9/ss/l.s:481,4841991/01151/sys/src/9/ss/l.s:569,572
1991/0115    
 
1990/1223    
GLOBL	mach0+0(SB), $MACHSIZE 
1991/0115    
GLOBL	fpq+0(SB), $(3*BY2WD) 
GLOBL	fpr+0(SB), $BY2WD 
1991/01151    
GLOBL	fsr+0(SB), $BY2WD 
1991/01151/sys/src/9/ss/l.s:117,1291991/0712/sys/src/9/ss/l.s:117,128 (short | long)
1990/1226    
	RETURN 
 
TEXT	touser(SB), $-4 
                 
1991/01151    
	MOVW	$(SYSPSR&~PSREF), R7 
1990/1226    
	MOVW	R7, PSR 
                 
	OR	R0, R0 
	OR	R0, R0 
	OR	R0, R0 
1991/0712    
 
1990/1226    
	MOVW	sp+0(FP), R1 
	SAVE	R0, R0			/* RETT is implicit RESTORE */ 
	MOVW	$(UTZERO+32), R7	/* PC; header appears in text */ 
1991/01151/sys/src/9/ss/l.s:331,3371991/0712/sys/src/9/ss/l.s:330,335
1990/1226    
	MOVW	b+0(FP), R8 
	MOVW	(R8), R1 
	MOVW	4(R8), R15 
	MOVW	R15, 0(R1) 
1990/1227    
	MOVW	$1, R7 
1990/1223    
	RETURN 
 
1991/0712/sys/src/9/ss/l.s:98,1031991/1006/sys/src/9/ss/l.s:98,104 (short | long)
1990/1226    
 
TEXT	splhi(SB), $0 
 
1991/1006    
	MOVW	R15, 4(R(MACH))	/* save PC in m->splpc */ 
1990/1226    
	MOVW	PSR, R7 
	MOVW	R7, R10 
	AND	$~PSRET, R10	/* BUG: book says this is buggy */ 
1991/0712/sys/src/9/ss/l.s:109,1191991/1006/sys/src/9/ss/l.s:110,125
1990/1226    
 
TEXT	splx(SB), $0 
 
1991/1006    
	MOVW	R15, 4(R(MACH))	/* save PC in m->splpc */ 
1990/1226    
	MOVW	psr+0(FP), R7 
	MOVW	R7, PSR		/* BUG: book says this is buggy */ 
	OR	R0, R0 
	OR	R0, R0 
	OR	R0, R0 
1991/1006    
	RETURN 
 
TEXT	spldone(SB), $0 
 
1990/1226    
	RETURN 
 
TEXT	touser(SB), $-4 
1991/1006/sys/src/9/ss/l.s:55,671991/1105/sys/src/9/ss/l.s:55,66 (short | long)
1990/1223    
 
1991/0110    
TEXT	swap1(SB), $0 
1991/0109    
 
	MOVW	keyaddr+0(FP), R8 
1991/0112    
	TAS	(R8), R7		/* LDSTUB, thank you ken */ 
1991/1105    
	TAS	(R7), R7		/* LDSTUB, thank you ken */ 
1991/0109    
	RETURN 
 
1990/1226    
TEXT	swap1_should_work(SB), $0 
 
	MOVW	keyaddr+0(FP), R8 
1991/1105    
	MOVW	R7, R8 
1990/1226    
	MOVW	$1, R7 
	SWAP	(R8), R7 
	RETURN 
1991/1006/sys/src/9/ss/l.s:68,741991/1105/sys/src/9/ss/l.s:67,72
1990/1226    
 
1991/0110    
TEXT	swap1x(SB), $0 
1990/1226    
 
	MOVW	keyaddr+0(FP), R8 
	MOVW	PSR, R9 
	MOVW	R9, R10 
	AND	$~PSRET, R10		/* BUG: book says this is buggy */ 
1991/1006/sys/src/9/ss/l.s:76,821991/1105/sys/src/9/ss/l.s:74,80
1990/1226    
	OR	R0, R0 
	OR	R0, R0 
	OR	R0, R0 
	MOVW	(R8), R7 
1991/1105    
	MOVW	(R7), R7 
1990/1226    
	CMP	R7, R0 
	BNE	was1 
	MOVW	$1, R10 
1991/1006/sys/src/9/ss/l.s:111,1171991/1105/sys/src/9/ss/l.s:109,114
1990/1226    
TEXT	splx(SB), $0 
 
1991/1006    
	MOVW	R15, 4(R(MACH))	/* save PC in m->splpc */ 
1990/1226    
	MOVW	psr+0(FP), R7 
	MOVW	R7, PSR		/* BUG: book says this is buggy */ 
	OR	R0, R0 
	OR	R0, R0 
1991/1006/sys/src/9/ss/l.s:123,1351991/1105/sys/src/9/ss/l.s:120,132
1990/1226    
	RETURN 
 
TEXT	touser(SB), $-4 
1991/01151    
	MOVW	$(SYSPSR&~PSREF), R7 
1990/1226    
	MOVW	R7, PSR 
1991/1105    
	MOVW	$(SYSPSR&~PSREF), R8 
	MOVW	R8, PSR 
1990/1226    
	OR	R0, R0 
	OR	R0, R0 
	OR	R0, R0 
1991/0712    
 
1990/1226    
	MOVW	sp+0(FP), R1 
1991/1105    
	MOVW	R7, R1 
1990/1226    
	SAVE	R0, R0			/* RETT is implicit RESTORE */ 
	MOVW	$(UTZERO+32), R7	/* PC; header appears in text */ 
	MOVW	$(UTZERO+32+4), R8	/* nPC */ 
1991/1006/sys/src/9/ss/l.s:137,1431991/1105/sys/src/9/ss/l.s:134,140
1990/1226    
 
1991/0112    
TEXT	rfnote(SB), $0 
 
	MOVW	0(FP), R1		/* 1st arg is &uregpointer */ 
1991/1105    
	MOVW	R7, R1			/* 1st arg is &uregpointer */ 
1991/0112    
	ADD	$4, R1			/* point at ureg */ 
	JMP	restore 
 
1991/1006/sys/src/9/ss/l.s:301,3071991/1105/sys/src/9/ss/l.s:298,303
1990/1226    
 
TEXT	puttbr(SB), $0 
 
	MOVW	tbr+0(FP), R7 
	MOVW	R7, TBR 
	OR	R0, R0 
	OR	R0, R0 
1991/1006/sys/src/9/ss/l.s:325,3311991/1105/sys/src/9/ss/l.s:321,326
1990/1226    
 
1990/1223    
TEXT	setlabel(SB), $0 
1990/1226    
 
	MOVW	b+0(FP), R7 
	MOVW	R1, (R7) 
	MOVW	R15, 4(R7) 
	MOVW	$0, R7 
1991/1006/sys/src/9/ss/l.s:333,3471991/1105/sys/src/9/ss/l.s:328,341
1990/1223    
 
TEXT	gotolabel(SB), $0 
1990/1226    
 
	MOVW	b+0(FP), R8 
	MOVW	(R8), R1 
	MOVW	4(R8), R15 
1991/1105    
	MOVW	(R7), R1 
	MOVW	4(R7), R15 
1990/1227    
	MOVW	$1, R7 
1990/1223    
	RETURN 
 
1990/1226    
TEXT	putcxsegm(SB), $0 
1990/1223    
 
	MOVW	0(FP), R8		/* context */ 
1991/1105    
	MOVW	R7, R8			/* context */ 
1990/1223    
	MOVW	4(FP), R9		/* segment addr */ 
	MOVW	8(FP), R10		/* segment value */ 
1990/1226    
	MOVW	$0xFFE80118, R7 
1991/1006/sys/src/9/ss/l.s:350,3631991/1105/sys/src/9/ss/l.s:344,355
1990/1223    
 
1990/1231    
TEXT	putcxreg(SB), $0 
1990/1226    
 
	MOVW	$CONTEXT, R7 
	MOVW	0(FP), R8 
	MOVB	R8, (R7, 2) 
1991/1105    
	MOVW	$CONTEXT, R8 
	MOVB	R7, (R8, 2) 
1990/1226    
	RETURN 
 
1990/1223    
TEXT	putb2(SB), $0 
 
1990/1226    
	MOVW	0(FP), R7 
	MOVW	4(FP), R8 
	MOVB	R8, (R7, 2) 
1990/1223    
	RETURN 
1991/1006/sys/src/9/ss/l.s:364,3821991/1105/sys/src/9/ss/l.s:356,371
1990/1223    
 
1990/1226    
TEXT	getb2(SB), $0 
1990/1223    
 
1990/1226    
	MOVW	0(FP), R7 
	MOVB	(R7, 2), R7 
1990/1223    
	RETURN 
 
1990/1226    
TEXT	getw2(SB), $0 
 
	MOVW	0(FP), R7 
	MOVW	(R7, 2), R7 
	RETURN 
 
TEXT	putw2(SB), $0 
 
	MOVW	0(FP), R7 
	MOVW	4(FP), R8 
	MOVW	R8, (R7, 2) 
	RETURN 
1991/1006/sys/src/9/ss/l.s:383,3891991/1105/sys/src/9/ss/l.s:372,377
1990/1226    
 
1990/1227    
TEXT	putw4(SB), $0 
1990/1226    
 
	MOVW	0(FP), R7 
	MOVW	4(FP), R8 
1990/1227    
	MOVW	R8, (R7, 4) 
1990/1226    
	RETURN 
1991/1006/sys/src/9/ss/l.s:390,3961991/1105/sys/src/9/ss/l.s:378,383
1990/1226    
 
1990/1227    
TEXT	putwC(SB), $0 
1990/1226    
 
	MOVW	0(FP), R7 
	MOVW	4(FP), R8 
1990/1227    
	MOVW	R8, (R7, 0xC) 
1990/1226    
	RETURN 
1991/1006/sys/src/9/ss/l.s:397,4031991/1105/sys/src/9/ss/l.s:384,389
1990/1226    
 
1990/1227    
TEXT	putwD(SB), $0 
1990/1223    
 
1990/1226    
	MOVW	0(FP), R7 
	MOVW	4(FP), R8 
1990/1227    
	MOVW	R8, (R7, 0xD) 
1990/1223    
	RETURN 
1991/1006/sys/src/9/ss/l.s:404,4101991/1105/sys/src/9/ss/l.s:390,395
1990/1223    
 
1991/0110    
TEXT	putwD16(SB), $0 
 
	MOVW	0(FP), R7 
	MOVW	4(FP), R8 
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
1991/1006/sys/src/9/ss/l.s:441,4471991/1105/sys/src/9/ss/l.s:426,431
1991/0110    
 
1990/1227    
TEXT	putwE(SB), $0 
1990/1223    
 
1990/1226    
	MOVW	0(FP), R7 
	MOVW	4(FP), R8 
1991/0110    
	MOVW	R8, (R7, 0xE) 
	RETURN 
1991/1006/sys/src/9/ss/l.s:448,4541991/1105/sys/src/9/ss/l.s:432,437
1991/0110    
 
TEXT	putwE16(SB), $0 
 
	MOVW	0(FP), R7 
	MOVW	4(FP), R8 
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
1991/1006/sys/src/9/ss/l.s:485,4911991/1105/sys/src/9/ss/l.s:468,473
1990/1227    
 
TEXT	putsegm(SB), $0 
 
	MOVW	0(FP), R7 
	MOVW	4(FP), R8 
	MOVW	R8, (R7, 3) 
1990/1223    
	RETURN 
1991/1006/sys/src/9/ss/l.s:492,4981991/1105/sys/src/9/ss/l.s:474,479
1990/1223    
 
1991/01151    
TEXT	savefpregs(SB), $0 
 
	MOVW	0(FP), R7 
	MOVW	FSR, 0(R7) 
 
	ADD	$(4+7), R7		/* double-align so can MOVD */ 
1991/1006/sys/src/9/ss/l.s:526,5321991/1105/sys/src/9/ss/l.s:507,512
1991/01151    
	OR	$PSREF, R8 
	MOVW	R8, PSR 
 
	MOVW	0(FP), R7 
	MOVW	(R7), FSR 
 
	ADD	$(4+7), R7		/* double-align so can MOVD */ 
1991/1006/sys/src/9/ss/l.s:554,5591991/1105/sys/src/9/ss/l.s:534,540
1991/01151    
	RETURN 
 
1991/0115    
TEXT	clearfpintr(SB), $0 
1991/1105    
 
1991/0115    
	MOVW	$fpq+BY2WD(SB), R7 
	ANDN	$0x7, R7		/* must be D aligned */ 
1991/01151    
	MOVW	$fsr+0(SB), R9 
1991/1105/sys/src/9/ss/l.s:119,1251991/1106/sys/src/9/ss/l.s:119,125 (short | long)
1991/1006    
 
1990/1226    
	RETURN 
 
TEXT	touser(SB), $-4 
1991/1106    
TEXT	touser(SB), $0 
1991/1105    
	MOVW	$(SYSPSR&~PSREF), R8 
	MOVW	R8, PSR 
1990/1226    
	OR	R0, R0 
1991/1105/sys/src/9/ss/l.s:187,1961991/1106/sys/src/9/ss/l.s:187,196
1991/0112    
	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 */ 
1991/1106    
	MOVW	R1, R7		/* pointer to Ureg */ 
1990/1226    
	SUB	$8, R1 
	MOVW	$SYSPSR, R7 
	MOVW	R7, PSR 
1991/1106    
	MOVW	$SYSPSR, R8 
	MOVW	R8, PSR 
1990/1226    
	OR	R0, R0 
	OR	R0, R0 
	OR	R0, R0 
1991/1105/sys/src/9/ss/l.s:272,2811991/1106/sys/src/9/ss/l.s:272,281
1990/1226    
	/* now our registers R8-R31 are same as before trap */ 
	MOVW	R15, (4*15)(R1) 
	/* SP and SB and u and m are already set; away we go */ 
	MOVW	R1, -4(R1)		/* pointer to Ureg */ 
1991/1106    
	MOVW	R1, R7			/* pointer to Ureg */ 
1990/1226    
	SUB	$8, R1 
	MOVW	$SYSPSR, R7 
	MOVW	R7, PSR 
1991/1106    
	MOVW	$SYSPSR, R8 
	MOVW	R8, PSR 
1990/1226    
	JMPL	syscall(SB) 
	/* R7 contains return value from syscall */ 
 
1991/1106/sys/src/9/ss/l.s:1,61991/1113/sys/src/9/ss/l.s:1,7 (short | long)
1990/1223    
#include "mem.h" 
 
1991/0112    
#define	SYSPSR	(SPL(0x0)|PSREF|PSRSUPER) 
1991/1113    
#define	SYSPSR	(SPL(0x0)|PSREF|PSRSUPER|0) 
#define	NOOP	OR R0, R0; OR R0, R0; OR R0, R0 
1990/1226    
 
1990/1223    
TEXT	start(SB), $-4 
 
1991/1106/sys/src/9/ss/l.s:16,211991/1113/sys/src/9/ss/l.s:17,23
1990/1226    
	MOVW	$setSB(SB), R2 
	MOVW	$startvirt(SB), R7 
	JMPL	(R7) 
1991/1113    
	MOVW	$_mul(SB), R0	/* touch _mul etc.; doesn't need to execute */ 
1990/1223    
	RETURN			/* can't get here */ 
 
TEXT	startvirt(SB), $-4 
1991/1106/sys/src/9/ss/l.s:47,541991/1113/sys/src/9/ss/l.s:49,56
1991/01151    
	FMOVD	F24, F22 
 
1990/1223    
	MOVW	$mach0(SB), R(MACH) 
1990/1226    
	MOVW	$0x8, R7 
	MOVW	R7, WIM 
1991/1113    
/*	MOVW	$0x8, R7 /**/ 
	MOVW	R0, WIM 
1990/1223    
	JMPL	main(SB) 
1991/0115    
	MOVW	(R0), R0 
1990/1223    
	RETURN 
1991/1106/sys/src/9/ss/l.s:71,791991/1113/sys/src/9/ss/l.s:73,79
1990/1226    
	MOVW	R9, R10 
	AND	$~PSRET, R10		/* BUG: book says this is buggy */ 
	MOVW	R10, PSR 
	OR	R0, R0 
	OR	R0, R0 
	OR	R0, R0 
1991/1113    
	NOOP 
1991/1105    
	MOVW	(R7), R7 
1990/1226    
	CMP	R7, R0 
	BNE	was1 
1991/1106/sys/src/9/ss/l.s:89,971991/1113/sys/src/9/ss/l.s:89,95
1990/1226    
	MOVW	R7, R10 
	OR	$PSRET, R10 
	MOVW	R10, PSR 
	OR	R0, R0 
	OR	R0, R0 
	OR	R0, R0 
1991/1113    
	NOOP 
1990/1226    
	RETURN 
 
TEXT	splhi(SB), $0 
1991/1106/sys/src/9/ss/l.s:101,1091991/1113/sys/src/9/ss/l.s:99,105
1990/1226    
	MOVW	R7, R10 
	AND	$~PSRET, R10	/* BUG: book says this is buggy */ 
	MOVW	R10, PSR 
	OR	R0, R0 
	OR	R0, R0 
	OR	R0, R0 
1991/1113    
	NOOP 
1990/1226    
	RETURN 
 
TEXT	splx(SB), $0 
1991/1106/sys/src/9/ss/l.s:110,1181991/1113/sys/src/9/ss/l.s:106,112
1990/1226    
 
1991/1006    
	MOVW	R15, 4(R(MACH))	/* save PC in m->splpc */ 
1990/1226    
	MOVW	R7, PSR		/* BUG: book says this is buggy */ 
	OR	R0, R0 
	OR	R0, R0 
	OR	R0, R0 
1991/1113    
	NOOP 
1991/1006    
	RETURN 
 
TEXT	spldone(SB), $0 
1991/1106/sys/src/9/ss/l.s:122,1301991/1113/sys/src/9/ss/l.s:116,122
1991/1106    
TEXT	touser(SB), $0 
1991/1105    
	MOVW	$(SYSPSR&~PSREF), R8 
	MOVW	R8, PSR 
1990/1226    
	OR	R0, R0 
	OR	R0, R0 
	OR	R0, R0 
1991/1113    
	NOOP 
1991/0712    
 
1991/1105    
	MOVW	R7, R1 
1990/1226    
	SAVE	R0, R0			/* RETT is implicit RESTORE */ 
1991/1106/sys/src/9/ss/l.s:143,1481991/1113/sys/src/9/ss/l.s:135,141
1990/1226    
	/* R8 to R23 are free to play with */ 
	/* R17 contains PC, R18 contains nPC */ 
	/* R19 has PSR loaded from vector code */ 
1991/1113    
 
1990/1226    
	ANDCC	$PSRPSUPER, R19, R0 
	BE	usertrap 
 
1991/1106/sys/src/9/ss/l.s:191,1991991/1113/sys/src/9/ss/l.s:184,190
1990/1226    
	SUB	$8, R1 
1991/1106    
	MOVW	$SYSPSR, R8 
	MOVW	R8, PSR 
1990/1226    
	OR	R0, R0 
	OR	R0, R0 
	OR	R0, R0 
1991/1113    
	NOOP 
1991/01151    
	JMPL	trap(SB) 
1990/1226    
 
	ADD	$8, R1 
1991/1106/sys/src/9/ss/l.s:200,2081991/1113/sys/src/9/ss/l.s:191,197
1991/0112    
restore: 
	MOVW	(4*(32+2))(R1), R8		/* PSR */ 
	MOVW	R8, PSR 
1990/1226    
	OR	R0, R0 
	OR	R0, R0 
	OR	R0, R0 
1991/1113    
	NOOP 
1990/1226    
 
1991/0112    
	MOVD	(4*30)(R1), R30 
	MOVD	(4*28)(R1), R28 
1991/1106/sys/src/9/ss/l.s:250,2551991/1113/sys/src/9/ss/l.s:239,245
1990/1226    
	/* R17 contains PC, R18 contains nPC */ 
	/* R19 has PSR loaded from vector code */ 
	/* assume user did it; syscall checks */ 
1991/1113    
 
1990/1226    
	MOVW	R1, R8 
	MOVW	R2, R9 
	MOVW	$setSB(SB), R2 
1991/1106/sys/src/9/ss/l.s:282,2901991/1113/sys/src/9/ss/l.s:272,278
1990/1226    
	ADD	$8, R1 
	MOVW	(4*(32+2))(R1), R8		/* PSR */ 
	MOVW	R8, PSR 
	OR	R0, R0 
	OR	R0, R0 
	OR	R0, R0 
1991/1113    
	NOOP 
1990/1226    
 
	MOVW	(4*15)(R1), R15 
	SAVE	R0, R0 
1991/1106/sys/src/9/ss/l.s:299,3071991/1113/sys/src/9/ss/l.s:287,293
1990/1226    
TEXT	puttbr(SB), $0 
 
	MOVW	R7, TBR 
	OR	R0, R0 
	OR	R0, R0 
	OR	R0, R0 
1991/1113    
	NOOP 
1990/1226    
	RETURN 
 
TEXT	gettbr(SB), $0 
1991/1106/sys/src/9/ss/l.s:342,3471991/1113/sys/src/9/ss/l.s:328,338
1990/1226    
	JMPL	(R7) 
1990/1223    
	RETURN 
 
1991/1113    
TEXT	getpsr(SB), $0 
 
	MOVW	PSR, R7 
	RETURN 
 
1990/1231    
TEXT	putcxreg(SB), $0 
1990/1226    
 
1991/1105    
	MOVW	$CONTEXT, R8 
1991/1106/sys/src/9/ss/l.s:376,3811991/1113/sys/src/9/ss/l.s:367,377
1990/1227    
	MOVW	R8, (R7, 4) 
1990/1226    
	RETURN 
 
1991/1113    
TEXT	getw4(SB), $0 
 
	MOVW	(R7, 4), R7 
	RETURN 
 
1990/1227    
TEXT	putwC(SB), $0 
1990/1226    
 
	MOVW	4(FP), R8 
1991/1106/sys/src/9/ss/l.s:475,4841991/1113/sys/src/9/ss/l.s:471,478
1991/01151    
TEXT	savefpregs(SB), $0 
 
	MOVW	FSR, 0(R7) 
1991/1113    
	ADD	$4, R7		/* assumes R7 is now MOVD-aligned */ 
1991/01151    
 
	ADD	$(4+7), R7		/* double-align so can MOVD */ 
	ANDN	$7, R7 
                 
	MOVD	F0, (0*4)(R7) 
	MOVD	F2, (2*4)(R7) 
	MOVD	F4, (4*4)(R7) 
1991/1106/sys/src/9/ss/l.s:507,5161991/1113/sys/src/9/ss/l.s:501,510
1991/01151    
	OR	$PSREF, R8 
	MOVW	R8, PSR 
 
	MOVW	(R7), FSR 
1991/1113    
	NOOP 
1991/01151    
 
	ADD	$(4+7), R7		/* double-align so can MOVD */ 
	ANDN	$7, R7 
1991/1113    
	MOVW	(R7), FSR 
	ADD	$4, R7		/* assumes R7 is now MOVD-aligned */ 
1991/01151    
 
	MOVD	(0*4)(R7), F0 
	MOVD	(2*4)(R7), F2 
1991/1113/sys/src/9/ss/l.s:468,4771991/1115/sys/src/9/ss/l.s:468,482 (short | long)
1990/1227    
	MOVW	R8, (R7, 3) 
1990/1223    
	RETURN 
 
1991/1115    
/* 
 * in savefpregs and restfpregs, incoming R7 points to doubleword 
 * below where F0 will go; doubleword align in and backfill FSR 
 */ 
1991/01151    
TEXT	savefpregs(SB), $0 
 
	MOVW	FSR, 0(R7) 
1991/1113    
	ADD	$4, R7		/* assumes R7 is now MOVD-aligned */ 
1991/1115    
	ADD	$8, R7 
	ANDN	$7, R7		/* now MOVD-aligned */ 
	MOVW	FSR, -4(R7) 
1991/01151    
 
	MOVD	F0, (0*4)(R7) 
	MOVD	F2, (2*4)(R7) 
1991/1113/sys/src/9/ss/l.s:501,5101991/1115/sys/src/9/ss/l.s:506,516
1991/01151    
	OR	$PSREF, R8 
	MOVW	R8, PSR 
 
1991/1113    
	NOOP 
1991/1115    
	ADD	$8, R7 
	ANDN	$7, R7		/* now MOVD-aligned */ 
	OR	R0, R0 
1991/01151    
 
1991/1113    
	MOVW	(R7), FSR 
	ADD	$4, R7		/* assumes R7 is now MOVD-aligned */ 
1991/1115    
	MOVW	-4(R7), FSR 
1991/01151    
 
	MOVD	(0*4)(R7), F0 
	MOVD	(2*4)(R7), F2 
1991/1115/sys/src/9/ss/l.s:55,611992/0222/sys/src/9/ss/l.s:55,61 (short | long)
1991/0115    
	MOVW	(R0), R0 
1990/1223    
	RETURN 
 
1991/0110    
TEXT	swap1(SB), $0 
1992/0222    
TEXT	tas(SB), $0 
1991/0109    
 
1991/1105    
	TAS	(R7), R7		/* LDSTUB, thank you ken */ 
1991/0109    
	RETURN 
1992/0222/sys/src/9/ss/l.s:324,3301992/0722/sys/src/9/ss/l.s:324,330 (short | long)
1991/1105    
	MOVW	R7, R8			/* context */ 
1990/1223    
	MOVW	4(FP), R9		/* segment addr */ 
	MOVW	8(FP), R10		/* segment value */ 
1990/1226    
	MOVW	$0xFFE80118, R7 
1992/0722    
	MOVW	$PUTCXSEGM, R7 
1990/1226    
	JMPL	(R7) 
1990/1223    
	RETURN 
 
1992/0222/sys/src/9/ss/l.s:388,4221992/0722/sys/src/9/ss/l.s:388,422
1991/0110    
 
	MOVW	4(FP), R8 
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
1992/0722    
	ADD	$VACLINESZ, R7 
1991/0110    
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
1992/0722    
	ADD	$VACLINESZ, R7 
1991/0110    
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
1992/0722    
	ADD	$VACLINESZ, R7 
1991/0110    
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
1992/0722    
	ADD	$VACLINESZ, R7 
1991/0110    
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
1992/0722    
	ADD	$VACLINESZ, R7 
1991/0110    
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
1992/0722    
	ADD	$VACLINESZ, R7 
1991/0110    
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
1992/0722    
	ADD	$VACLINESZ, R7 
1991/0110    
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
1992/0722    
	ADD	$VACLINESZ, R7 
1991/0110    
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
1992/0722    
	ADD	$VACLINESZ, R7 
1991/0110    
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
1992/0722    
	ADD	$VACLINESZ, R7 
1991/0110    
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
1992/0722    
	ADD	$VACLINESZ, R7 
1991/0110    
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
1992/0722    
	ADD	$VACLINESZ, R7 
1991/0110    
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
1992/0722    
	ADD	$VACLINESZ, R7 
1991/0110    
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
1992/0722    
	ADD	$VACLINESZ, R7 
1991/0110    
	MOVW	R8, (R7, 0xD) 
	ADD	$(1<<4), R7 
1992/0722    
	ADD	$VACLINESZ, R7 
1991/0110    
	MOVW	R8, (R7, 0xD) 
	RETURN 
 
1992/0722/sys/src/9/ss/l.s:430,4641992/0724/sys/src/9/ss/l.s:430,464 (short | long)
1991/0110    
 
	MOVW	4(FP), R8 
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
1992/0724    
	ADD	$VACLINESZ, R7 
1991/0110    
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
1992/0724    
	ADD	$VACLINESZ, R7 
1991/0110    
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
1992/0724    
	ADD	$VACLINESZ, R7 
1991/0110    
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
1992/0724    
	ADD	$VACLINESZ, R7 
1991/0110    
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
1992/0724    
	ADD	$VACLINESZ, R7 
1991/0110    
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
1992/0724    
	ADD	$VACLINESZ, R7 
1991/0110    
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
1992/0724    
	ADD	$VACLINESZ, R7 
1991/0110    
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
1992/0724    
	ADD	$VACLINESZ, R7 
1991/0110    
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
1992/0724    
	ADD	$VACLINESZ, R7 
1991/0110    
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
1992/0724    
	ADD	$VACLINESZ, R7 
1991/0110    
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
1992/0724    
	ADD	$VACLINESZ, R7 
1991/0110    
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
1992/0724    
	ADD	$VACLINESZ, R7 
1991/0110    
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
1992/0724    
	ADD	$VACLINESZ, R7 
1991/0110    
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
1992/0724    
	ADD	$VACLINESZ, R7 
1991/0110    
	MOVW	R8, (R7, 0xE) 
	ADD	$(1<<4), R7 
1992/0724    
	ADD	$VACLINESZ, R7 
1990/1227    
	MOVW	R8, (R7, 0xE) 
	RETURN 
 
1992/0724/sys/src/9/ss/l.s:500,5051992/0726/sys/src/9/ss/l.s:500,519 (short | long)
1991/01151    
	MOVW	R8, PSR 
	RETURN 
 
1992/0726    
TEXT	enabfp(SB), $0 
 
	MOVW	PSR, R8 
	OR	$PSREF, R8 
	MOVW	R8, PSR 
	RETURN 
 
TEXT	disabfp(SB), $0 
 
	MOVW	PSR, R8 
	ANDN	$PSREF, R8 
	MOVW	R8, PSR 
	RETURN 
 
1991/01151    
TEXT	restfpregs(SB), $0 
 
	MOVW	PSR, R8 
1992/0724/sys/src/9/ss/l.s:533,5491992/0726/sys/src/9/ss/l.s:547,567
1991/01151    
	MOVW	R8, PSR 
	RETURN 
 
1991/0115    
TEXT	clearfpintr(SB), $0 
1992/0726    
TEXT	getfpq(SB), $0 
1991/1105    
 
1991/0115    
	MOVW	$fpq+BY2WD(SB), R7 
	ANDN	$0x7, R7		/* must be D aligned */ 
1992/0726    
	MOVW	R7, R8	/* must be D aligned */ 
1991/01151    
	MOVW	$fsr+0(SB), R9 
1991/0115    
clrq: 
	MOVD	FQ, (R7) 
1992/0726    
	MOVW	$0, R7 
getfpq1: 
1991/0115    
	MOVW	FSR, (R9) 
	MOVW	(R9), R8 
	AND	$(1<<13), R8		/* queue not empty? */ 
	BNE	clrq 
1992/0726    
	MOVW	(R9), R10 
	ANDCC	$(1<<13), R10		/* queue not empty? */ 
	BE	getfpq2 
	MOVD	FQ, (R8) 
	ADD	$1, R7 
	ADD	$8, R8 
	BA	getfpq1 
getfpq2: 
1991/0115    
	RETURN 
 
TEXT	getfsr(SB), $0 
1992/0724/sys/src/9/ss/l.s:552,5571992/0726/sys/src/9/ss/l.s:570,581
1991/0115    
	MOVW	(R7), R7 
	RETURN 
 
1992/0726    
TEXT	clearftt(SB), $0 
	MOVW	R7, fsr+0(SB) 
	MOVW	$fsr+0(SB), R7 
	MOVW	(R7), FSR 
	FMOVF	F0, F0 
	RETURN 
 
1990/1223    
GLOBL	mach0+0(SB), $MACHSIZE 
1991/0115    
GLOBL	fpq+0(SB), $(3*BY2WD) 
1991/01151    
GLOBL	fsr+0(SB), $BY2WD 
1992/0726/sys/src/9/ss/l.s:468,4821992/0727/sys/src/9/ss/l.s:468,477 (short | long)
1990/1227    
	MOVW	R8, (R7, 3) 
1990/1223    
	RETURN 
 
1991/1115    
/* 
 * in savefpregs and restfpregs, incoming R7 points to doubleword 
 * below where F0 will go; doubleword align in and backfill FSR 
 */ 
1991/01151    
TEXT	savefpregs(SB), $0 
 
1991/1115    
	ADD	$8, R7 
	ANDN	$7, R7		/* now MOVD-aligned */ 
	MOVW	FSR, -4(R7) 
1992/0727    
	MOVW	FSR, 0(R7) 
	ADD	$4, R7 
1991/01151    
 
	MOVD	F0, (0*4)(R7) 
	MOVD	F2, (2*4)(R7) 
1992/0726/sys/src/9/ss/l.s:520,5301992/0727/sys/src/9/ss/l.s:515,523
1991/01151    
	OR	$PSREF, R8 
	MOVW	R8, PSR 
 
1991/1115    
	ADD	$8, R7 
	ANDN	$7, R7		/* now MOVD-aligned */ 
	OR	R0, R0 
1991/01151    
                 
1991/1115    
	MOVW	-4(R7), FSR 
1992/0727    
	NOOP			/* wait for PSR to quiesce */ 
	MOVW	0(R7), FSR 
	ADD	$4, R7 
1991/01151    
 
	MOVD	(0*4)(R7), F0 
	MOVD	(2*4)(R7), F2 
1992/0727/sys/src/9/ss/l.s:1,71992/0728/sys/src/9/ss/l.s:1,7 (short | long)
1990/1223    
#include "mem.h" 
 
1991/1113    
#define	SYSPSR	(SPL(0x0)|PSREF|PSRSUPER|0) 
#define	NOOP	OR R0, R0; OR R0, R0; OR R0, R0 
1992/0728    
#define	NOOP	ORN R0, R0; ORN R0, R0; ORN R0, R0 
1990/1226    
 
1990/1223    
TEXT	start(SB), $-4 
 
1992/0728/sys/src/9/ss/l.s:367,3721992/0801/sys/src/9/ss/l.s:367,384 (short | long)
1990/1227    
	MOVW	R8, (R7, 4) 
1990/1226    
	RETURN 
 
1992/0801    
TEXT	putw6(SB), $0 
 
	MOVW	4(FP), R8 
	MOVW	R8, (R7, 6) 
	RETURN 
 
TEXT	putw8(SB), $0 
 
	MOVW	4(FP), R8 
	MOVW	R8, (R7, 8) 
	RETURN 
 
1991/1113    
TEXT	getw4(SB), $0 
 
	MOVW	(R7, 4), R7 
1992/0728/sys/src/9/ss/l.s:382,3871992/0801/sys/src/9/ss/l.s:394,435
1990/1223    
 
1990/1226    
	MOVW	4(FP), R8 
1990/1227    
	MOVW	R8, (R7, 0xD) 
1992/0801    
	RETURN 
 
TEXT	putw716(SB), $0 
 
	MOVW	4(FP), R8 
	MOVW	R8, (R7, 0x7) 
	ADD	$BY2PG, R7 
	MOVW	R8, (R7, 0x7) 
	ADD	$BY2PG, R7 
	MOVW	R8, (R7, 0x7) 
	ADD	$BY2PG, R7 
	MOVW	R8, (R7, 0x7) 
	ADD	$BY2PG, R7 
	MOVW	R8, (R7, 0x7) 
	ADD	$BY2PG, R7 
	MOVW	R8, (R7, 0x7) 
	ADD	$BY2PG, R7 
	MOVW	R8, (R7, 0x7) 
	ADD	$BY2PG, R7 
	MOVW	R8, (R7, 0x7) 
	ADD	$BY2PG, R7 
	MOVW	R8, (R7, 0x7) 
	ADD	$BY2PG, R7 
	MOVW	R8, (R7, 0x7) 
	ADD	$BY2PG, R7 
	MOVW	R8, (R7, 0x7) 
	ADD	$BY2PG, R7 
	MOVW	R8, (R7, 0x7) 
	ADD	$BY2PG, R7 
	MOVW	R8, (R7, 0x7) 
	ADD	$BY2PG, R7 
	MOVW	R8, (R7, 0x7) 
	ADD	$BY2PG, R7 
	MOVW	R8, (R7, 0x7) 
	ADD	$BY2PG, R7 
	MOVW	R8, (R7, 0x7) 
1990/1223    
	RETURN 
 
1991/0110    
TEXT	putwD16(SB), $0 
1992/0801/sys/src/9/ss/l.s:598,6031992/0802/sys/src/9/ss/l.s:598,604 (short | long)
1992/0726    
	MOVW	(R9), R10 
	ANDCC	$(1<<13), R10		/* queue not empty? */ 
	BE	getfpq2 
1992/0802    
	MOVW	(R8), R0		/* SS2 bug fix */ 
1992/0726    
	MOVD	FQ, (R8) 
	ADD	$1, R7 
	ADD	$8, R8 
1992/0802/sys/src/9/ss/l.s:27,331992/0803/sys/src/9/ss/l.s:27,33 (short | long)
1991/01151    
	MOVW	$(SPL(0xF)|PSREF|PSRSUPER), R7 
	MOVW	R7, PSR 
 
	MOVW	$(0x35<<22), R7		/* NVM OFM DZM AU */ 
1992/0803    
	MOVW	$(0x35<<22), R7		/* NVM OFM DZM NS */ 
1991/01151    
	MOVW	R7, fsr+0(SB) 
	MOVW	fsr+0(SB), FSR 
	FMOVD	$0.5, F26		/* 0.5 -> F26 */ 
1992/0803/sys/src/9/ss/l.s:564,5701992/0804/sys/src/9/ss/l.s:564,570 (short | long)
1991/01151    
	MOVW	R8, PSR 
 
1992/0727    
	NOOP			/* wait for PSR to quiesce */ 
	MOVW	0(R7), FSR 
1992/0804    
	MOVW	fsr+4(FP), FSR 
1992/0727    
	ADD	$4, R7 
1991/01151    
 
	MOVD	(0*4)(R7), F0 
Too many diffs (26 > 25). Stopping.


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