## diffname ss/l.s 1990/1223 ## diff -e /dev/null /n/bootesdump/1990/1223/sys/src/9/sparc/l.s 0a #include "mem.h" 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) /* now mapped correctly. jmpl to where we want to be */ MOVW $setR30(SB), R30 MOVW $startvirt(SB), R1 JMPL (R1) RETURN /* can't get here */ TEXT startvirt(SB), $-4 MOVW $0x4000, R29 MOVW $mach0(SB), R(MACH) JMPL main(SB) UNIMP RETURN TEXT pc(SB), $0 MOVW R15, R1 RETURN TEXT setlabel(SB), $0 MOVW b+0(FP), R2 MOVW R29, (R2) MOVW R15, 4(R2) MOVW $0, R1 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) RETURN TEXT crash(SB), $0 MOVW 0(FP), R8 /* context */ MOVW 4(FP), R9 /* segment addr */ MOVW 8(FP), R10 /* segment value */ MOVW $0xFFE80118, R1 JMPL (R1) RETURN TEXT putb2(SB), $0 MOVW 0(FP), R1 MOVW 4(FP), R2 MOVB R2, (R1, 2) RETURN TEXT putw3(SB), $0 MOVW 0(FP), R1 MOVW 4(FP), R2 MOVW R2, (R1, 3) RETURN TEXT putpmeg(SB), $0 MOVW 0(FP), R1 MOVW 4(FP), R2 MOVW R2, (R1, 4) RETURN TEXT putwd(SB), $0 MOVW 0(FP), R1 MOVW 4(FP), R2 MOVW R2, (R1, 0xD) RETURN GLOBL mach0+0(SB), $MACHSIZE . ## diffname ss/l.s 1990/1226 ## diff -e /n/bootesdump/1990/1223/sys/src/9/sparc/l.s /n/bootesdump/1990/1226/sys/src/9/sparc/l.s 79d 75,77c MOVW 0(FP), R7 MOVW 4(FP), R8 MOVW R8, (R7, 0xD) . 68,70c MOVW 0(FP), R7 MOVW 4(FP), R8 MOVW R8, (R7, 4) . 65a 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 . 61,63c MOVW 0(FP), R7 MOVB (R7, 2), R7 . 59c TEXT getb2(SB), $0 . 54,56c MOVW 0(FP), R7 MOVW 4(FP), R8 MOVB R8, (R7, 2) . 51a TEXT putcontext(SB), $0 MOVW $CONTEXT, R7 MOVW 0(FP), R8 MOVB R8, (R7, 2) RETURN . 48,49c MOVW $0xFFE80118, R7 JMPL (R7) . 43c TEXT putcxsegm(SB), $0 . 36,40c MOVW r+4(FP), R7 MOVW b+0(FP), R8 MOVW (R8), R1 MOVW 4(R8), R15 MOVW R15, 0(R1) . 29,32c MOVW b+0(FP), R7 MOVW R1, (R7) MOVW R15, 4(R7) MOVW $0, R7 . 27a 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 . 24,25c TEXT getpsr(SB), $0 MOVW PSR, R7 . 19a MOVW $0x8, R7 MOVW R7, WIM . 18c MOVW $BOOTSTACK, R1 . 11,13c MOVW $setSB(SB), R2 MOVW $startvirt(SB), R7 JMPL (R7) . 8,9c MOVW $KZERO, R7 MOVB R0, (R7, 3) . 2a #define SYSPSR (PSREF|SPL(0xF)|PSRSUPER) . ## diffname ss/l.s 1990/1227 ## diff -e /n/bootesdump/1990/1226/sys/src/9/sparc/l.s /n/bootesdump/1990/1227/sys/src/9/sparc/l.s 396c MOVW R8, (R7, 0xE) RETURN TEXT putsegm(SB), $0 MOVW 0(FP), R7 MOVW 4(FP), R8 MOVW R8, (R7, 3) . 392c TEXT putwE(SB), $0 . 389c MOVW R8, (R7, 0xD) . 385c TEXT putwD(SB), $0 . 382c MOVW R8, (R7, 0xC) . 378c TEXT putwC(SB), $0 . 375c MOVW R8, (R7, 4) . 371c TEXT putw4(SB), $0 . 326a MOVW $1, R7 . 322d 3c #define SYSPSR (PSREF|SPL(0x0)|PSRSUPER) . ## diffname ss/l.s 1990/1231 ## diff -e /n/bootesdump/1990/1227/sys/src/9/sparc/l.s /n/bootesdump/1990/1231/sys/src/9/sparc/l.s 338c TEXT putcxreg(SB), $0 . 11a MOVW $(KZERO+BY2SEGM), R7 MOVW $1, R8 MOVB R8, (R7, 3) . 9c /* get virtual by mapping segment(KZERO) to pmeg 0., and next to 1 */ . ## diffname ss/l.s 1991/0109 ## diff -e /n/bootesdump/1990/1231/sys/src/9/sparc/l.s /n/bootesdump/1991/0109/sys/src/9/sparc/l.s 35a /* TEXT swap1_please(SB), $0 MOVW keyaddr+0(FP), R8 LDSTUB (R8), R7 RETURN */ . ## diffname ss/l.s 1991/0110 ## diff -e /n/bootesdump/1991/0109/sys/src/9/sparc/l.s /n/bootesdump/1991/0110/sys/src/9/sparc/l.s 406a 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 . 402a 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 . 103c MOVW $SYSPSR, R7 . 51c TEXT swap1x(SB), $0 . 42d 40c TAS (R8), R7 . 36,37c TEXT swap1(SB), $0 . 3c #define SYSPSR (SPL(0xF)|PSRSUPER) . ## diffname ss/l.s 1991/0111 ## diff -e /n/bootesdump/1991/0110/sys/src/9/sparc/l.s /n/bootesdump/1991/0111/sys/src/9/sparc/l.s 3c #define SYSPSR (SPL(0x0)|PSRSUPER) . ## diffname ss/l.s 1991/0112 ## diff -e /n/bootesdump/1991/0111/sys/src/9/sparc/l.s /n/bootesdump/1991/0112/sys/src/9/sparc/l.s 288,291c MOVD (4*4)(R1), R4 MOVD (4*2)(R1), R2 . 255,258c MOVD R4, (4*4)(R1) /* global register, R5=USER */ MOVD R6, (4*6)(R1) /* save R6=MACH, R7=syscall# */ . 251,252c MOVW R8, (0-(4*(32+6))+4)(R1) /* save R1=SP */ SUB $(4*(32+6)), R1 . 238a SUB $(4*(32+6)), R1 . 233,236c 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 */ . 212,217c MOVD (4*6)(R1), R6 MOVD (4*4)(R1), R4 MOVD (4*2)(R1), R2 . 187,210c 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 . 181,182c restore: MOVW (4*(32+2))(R1), R8 /* PSR */ MOVW R8, PSR . 146,169c /* 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) . 131d 127,129c 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 . 125c ANDN $7, R1, R20 /* dbl aligned */ MOVW R1, (0-(4*(32+6))+(4*1))(R20) /* save R1=SP */ . 112a TEXT rfnote(SB), $0 MOVW 0(FP), R1 /* 1st arg is &uregpointer */ ADD $4, R1 /* point at ureg */ JMP restore . 39c TAS (R8), R7 /* LDSTUB, thank you ken */ . 31,35d 3c #define SYSPSR (SPL(0x0)|PSREF|PSRSUPER) . ## diffname ss/l.s 1991/0115 ## diff -e /n/bootesdump/1991/0112/sys/src/9/sparc/l.s /n/bootesdump/1991/0115/sys/src/9/sparc/l.s 464a GLOBL fpq+0(SB), $(3*BY2WD) GLOBL fpr+0(SB), $BY2WD . 463a 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 . 28c MOVW (R0), R0 . ## diffname ss/l.s 1991/01151 ## diff -e /n/bootesdump/1991/0115/sys/src/9/sparc/l.s /n/bootesdump/1991/01151/sys/src/9/sparc/l.s 484c GLOBL fsr+0(SB), $BY2WD . 477c MOVW $fsr+0(SB), R7 . 467c MOVW $fsr+0(SB), R9 . 463a 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 . 170c JMPL trap(SB) . 96c MOVW $(SYSPSR&~PSREF), R7 . 23a 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 . ## diffname ss/l.s 1991/0712 ## diff -e /n/bootesdump/1991/0201/sys/src/9/sparc/l.s /n/bootesdump/1991/0712/sys/src/9/slc/l.s 334d 126a . 123d 120d ## diffname ss/l.s 1991/1006 ## diff -e /n/bootesdump/1991/0712/sys/src/9/slc/l.s /n/bootesdump/1991/1006/sys/src/9/slc/l.s 116a RETURN TEXT spldone(SB), $0 . 111a MOVW R15, 4(R(MACH)) /* save PC in m->splpc */ . 100a MOVW R15, 4(R(MACH)) /* save PC in m->splpc */ . ## diffname ss/l.s 1991/1105 ## diff -e /n/bootesdump/1991/1006/sys/src/9/slc/l.s /n/bootesdump/1991/1105/sys/src/9/slc/l.s 556a . 529d 495d 488d 451d 444d 407d 400d 393d 386d 379d 373d 367d 360d 353,355c MOVW $CONTEXT, R8 MOVB R7, (R8, 2) . 344c MOVW R7, R8 /* context */ . 336,338c MOVW (R7), R1 MOVW 4(R7), R15 . 328d 304d 140c MOVW R7, R1 /* 1st arg is &uregpointer */ . 132c MOVW R7, R1 . 126,127c MOVW $(SYSPSR&~PSREF), R8 MOVW R8, PSR . 114d 79c MOVW (R7), R7 . 71d 64c MOVW R7, R8 . 58,59c TAS (R7), R7 /* LDSTUB, thank you ken */ . ## diffname ss/l.s 1991/1106 ## diff -e /n/bootesdump/1991/1105/sys/src/9/slc/l.s /n/bootesdump/1991/1106/sys/src/9/slc/l.s 277,278c MOVW $SYSPSR, R8 MOVW R8, PSR . 275c MOVW R1, R7 /* pointer to Ureg */ . 192,193c MOVW $SYSPSR, R8 MOVW R8, PSR . 190c MOVW R1, R7 /* pointer to Ureg */ . 122c TEXT touser(SB), $0 . ## diffname ss/l.s 1991/1113 ## diff -e /n/bootesdump/1991/1106/sys/src/9/slc/l.s /n/bootesdump/1991/1113/sys/src/9/slc/l.s 512,513c MOVW (R7), FSR ADD $4, R7 /* assumes R7 is now MOVD-aligned */ . 510c NOOP . 479,481d 477a ADD $4, R7 /* assumes R7 is now MOVD-aligned */ . 378a TEXT getw4(SB), $0 MOVW (R7, 4), R7 RETURN . 344a TEXT getpsr(SB), $0 MOVW PSR, R7 RETURN . 302,304c NOOP . 285,287c NOOP . 252a . 203,205c NOOP . 194,196c NOOP . 145a . 125,127c NOOP . 113,115c NOOP . 104,106c NOOP . 92,94c NOOP . 74,76c NOOP . 50,51c /* MOVW $0x8, R7 /**/ MOVW R0, WIM . 18a MOVW $_mul(SB), R0 /* touch _mul etc.; doesn't need to execute */ . 3c #define SYSPSR (SPL(0x0)|PSREF|PSRSUPER|0) #define NOOP OR R0, R0; OR R0, R0; OR R0, R0 . ## diffname ss/l.s 1991/1115 ## diff -e /n/bootesdump/1991/1113/sys/src/9/slc/l.s /n/bootesdump/1991/1115/sys/src/9/slc/l.s 506,507c MOVW -4(R7), FSR . 504c ADD $8, R7 ANDN $7, R7 /* now MOVD-aligned */ OR R0, R0 . 473,474c ADD $8, R7 ANDN $7, R7 /* now MOVD-aligned */ MOVW FSR, -4(R7) . 470a /* * in savefpregs and restfpregs, incoming R7 points to doubleword * below where F0 will go; doubleword align in and backfill FSR */ . ## diffname ss/l.s 1992/0222 ## diff -e /n/bootesdump/1991/1115/sys/src/9/slc/l.s /n/bootesdump/1992/0222/sys/src/9/slc/l.s 58c TEXT tas(SB), $0 . ## diffname ss/l.s 1992/0722 ## diff -e /n/bootesdump/1992/0222/sys/src/9/slc/l.s /n/bootesdump/1992/0722/sys/src/9/slc/l.s 419c ADD $VACLINESZ, R7 . 417c ADD $VACLINESZ, R7 . 415c ADD $VACLINESZ, R7 . 413c ADD $VACLINESZ, R7 . 411c ADD $VACLINESZ, R7 . 409c ADD $VACLINESZ, R7 . 407c ADD $VACLINESZ, R7 . 405c ADD $VACLINESZ, R7 . 403c ADD $VACLINESZ, R7 . 401c ADD $VACLINESZ, R7 . 399c ADD $VACLINESZ, R7 . 397c ADD $VACLINESZ, R7 . 395c ADD $VACLINESZ, R7 . 393c ADD $VACLINESZ, R7 . 391c ADD $VACLINESZ, R7 . 327c MOVW $PUTCXSEGM, R7 . ## diffname ss/l.s 1992/0724 ## diff -e /n/bootesdump/1992/0722/sys/src/9/slc/l.s /n/bootesdump/1992/0724/sys/src/9/slc/l.s 461c ADD $VACLINESZ, R7 . 459c ADD $VACLINESZ, R7 . 457c ADD $VACLINESZ, R7 . 455c ADD $VACLINESZ, R7 . 453c ADD $VACLINESZ, R7 . 451c ADD $VACLINESZ, R7 . 449c ADD $VACLINESZ, R7 . 447c ADD $VACLINESZ, R7 . 445c ADD $VACLINESZ, R7 . 443c ADD $VACLINESZ, R7 . 441c ADD $VACLINESZ, R7 . 439c ADD $VACLINESZ, R7 . 437c ADD $VACLINESZ, R7 . 435c ADD $VACLINESZ, R7 . 433c ADD $VACLINESZ, R7 . ## diffname ss/l.s 1992/0726 ## diff -e /n/bootesdump/1992/0724/sys/src/9/slc/l.s /n/bootesdump/1992/0726/sys/src/9/slc/l.s 556d 554a TEXT clearftt(SB), $0 MOVW R7, fsr+0(SB) MOVW $fsr+0(SB), R7 MOVW (R7), FSR FMOVF F0, F0 RETURN . 544,546c MOVW (R9), R10 ANDCC $(1<<13), R10 /* queue not empty? */ BE getfpq2 MOVD FQ, (R8) ADD $1, R7 ADD $8, R8 BA getfpq1 getfpq2: . 541,542c MOVW $0, R7 getfpq1: . 538,539c MOVW R7, R8 /* must be D aligned */ . 536c TEXT getfpq(SB), $0 . 502a 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 . ## diffname ss/l.s 1992/0727 ## diff -e /n/bootesdump/1992/0726/sys/src/9/slc/l.s /n/bootesdump/1992/0727/sys/src/9/slc/l.s 523,527c NOOP /* wait for PSR to quiesce */ MOVW 0(R7), FSR ADD $4, R7 . 477,479c MOVW FSR, 0(R7) ADD $4, R7 . 471,474d ## diffname ss/l.s 1992/0728 ## diff -e /n/bootesdump/1992/0727/sys/src/9/slc/l.s /n/bootesdump/1992/0728/sys/src/9/slc/l.s 4c #define NOOP ORN R0, R0; ORN R0, R0; ORN R0, R0 . ## diffname ss/l.s 1992/0801 ## diff -e /n/bootesdump/1992/0728/sys/src/9/slc/l.s /n/bootesdump/1992/0801/sys/src/9/slc/l.s 384a 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) . 369a 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 . ## diffname ss/l.s 1992/0802 ## diff -e /n/bootesdump/1992/0801/sys/src/9/slc/l.s /n/bootesdump/1992/0802/sys/src/9/slc/l.s 600a MOVW (R8), R0 /* SS2 bug fix */ . ## diffname ss/l.s 1992/0803 ## diff -e /n/bootesdump/1992/0802/sys/src/9/slc/l.s /n/bootesdump/1992/0803/sys/src/9/slc/l.s 30c MOVW $(0x35<<22), R7 /* NVM OFM DZM NS */ . ## diffname ss/l.s 1992/0804 ## diff -e /n/bootesdump/1992/0803/sys/src/9/slc/l.s /n/bootesdump/1992/0804/sys/src/9/slc/l.s 567c MOVW fsr+4(FP), FSR . ## diffname ss/l.s 1992/0806 ## diff -e /n/bootesdump/1992/0804/sys/src/9/slc/l.s /n/bootesdump/1992/0806/sys/src/9/slc/l.s 334,510d 14,15c MOVW $1, R9 MOVB R9, (R7, 3) . ## diffname ss/l.s 1992/0807 ## diff -e /n/bootesdump/1992/0807/sys/src/9/slc/l.s /n/bootesdump/1992/0807/sys/src/9/ss/l.s 328a RETURN TEXT putw4(SB), $0 MOVW 4(FP), R8 MOVW R8, (R7, 4) . 327c MOVW $romputcxsegm(SB), R7 MOVW (R7), R7 . 24a MOVW $romvec(SB), R7 MOVW R8, (R7) /* romvec passed in %i0==R8 */ . ## diffname ss/l.s 1992/0808 ## diff -e /n/bootesdump/1992/0807/sys/src/9/ss/l.s /n/bootesdump/1992/0808/sys/src/9/ss/l.s 455a /* * Interface to ROM. Must save and restore state because * of different calling conventions. */ TEXT call(SB), $16 MOVW R1, R14 /* save my SP in their SP */ MOVW R2, sb-4(SP) MOVW R(MACH), mach-8(SP) MOVW R(USER), user-12(SP) MOVW param1+4(FP), R8 MOVW param2+8(FP), R9 MOVW param3+12(FP), R10 MOVW param4+16(FP), R11 JMPL (R7) MOVW R14, R1 /* restore my SP */ MOVW user-12(SP), R(USER) MOVW mach-8(SP), R(MACH) MOVW sb-4(SP), R2 MOVW R8, R7 /* move their return value into mine */ RETURN . 25c MOVW $rom(SB), R7 . ## diffname ss/l.s 1992/0810 ## diff -e /n/bootesdump/1992/0808/sys/src/9/ss/l.s /n/bootesdump/1992/0810/sys/src/9/ss/l.s 344a TEXT setpsr(SB), $0 MOVW R7, PSR NOOP RETURN . ## diffname ss/l.s 1992/0811 ## diff -e /n/bootesdump/1992/0810/sys/src/9/ss/l.s /n/bootesdump/1992/0811/sys/src/9/ss/l.s 120c MOVW $(SYSPSR&~(PSREF|PSRET|SPL(15))), R8 . 103c OR $SPL(15), R10 . 93c ANDN $SPL(15), R10 . 3c #define SYSPSR (SPL(0x0)|PSREF|PSRET|PSRSUPER|SPL(15)|0) . ## diffname ss/l.s 1992/0812 ## diff -e /n/bootesdump/1992/0811/sys/src/9/ss/l.s /n/bootesdump/1992/0812/sys/src/9/ss/l.s 464,465c * Interface to OPEN BOOT ROM. Must save and restore state because * of different calling conventions. We don't use it, but it's here * for reference.. . 27a /* turn off the cache */ MOVW $ENAB, R7 MOVB (R7, 2), R8 ANDN $ENABCACHE, R8 MOVB R8, (R7, 2) . 17a . ## diffname ss/l.s 1992/0904 ## diff -e /n/bootesdump/1992/0812/sys/src/9/ss/l.s /n/bootesdump/1992/0904/sys/src/9/ss/l.s 42c MOVW $fsr+0(SB), R8 MOVW (R8), FSR . ## diffname ss/l.s 1992/0912 ## diff -e /n/bootesdump/1992/0904/sys/src/9/ss/l.s /n/bootesdump/1992/0912/sys/src/9/ss/l.s 465a RETURN TEXT _getcallerpc(SB), $0 MOVW 0(R1), R7 . 94a NOOP TAS (R7), R7 /* LDSTUB, thank you ken */ MOVW R8, PSR NOOP . 76,93c MOVW PSR, R8 MOVW $SYSPSR, R9 . 74c TEXT tas(SB), $0 /* it seems we must be splhi */ . 69c TEXT oldtas(SB), $0 . 3c #define SYSPSR (PSREF|PSRET|PSRSUPER|SPL(15)) . ## diffname ss/l.s 1992/0913 ## diff -e /n/bootesdump/1992/0912/sys/src/9/ss/l.s /n/bootesdump/1992/0913/sys/src/9/ss/l.s 84a TEXT softtas(SB), $0 /* all software; avoid LDSTUB */ MOVW PSR, R8 MOVW $SYSPSR, R9 MOVW R9, PSR NOOP MOVB (R7), R10 CMP R10, R0 BE gotit #ifdef asdf ANDN $31, R7 /* flush cache line */ MOVW $0, (R7, 0xD) #endif MOVW $0xFF, R7 MOVW R8, PSR NOOP RETURN gotit: MOVW $0xFF, R10 MOVB R10, (R7) #ifdef asdf ANDN $31, R7 /* flush cache line */ MOVW $0, (R7, 0xD) #endif MOVW $0, R7 MOVW R8, PSR NOOP RETURN . ## diffname ss/l.s 1993/0123 ## diff -e /n/bootesdump/1992/0913/sys/src/9/ss/l.s /n/bootesdump/1993/0123/sys/src/9/ss/l.s 14a MOVB R9, (R7, 3) ADD $(BY2SEGM), R7 MOVW $2, R9 MOVB R9, (R7, 3) ADD $(BY2SEGM), R7 MOVW $3, R9 . 13c ADD $(BY2SEGM), R7 . 10c /* get virtual by mapping segment(KZERO) to pmeg 0, and next to 1, etc. */ . ## diffname ss/l.s 1993/0501 # deleted ## diff -e /n/bootesdump/1993/0123/sys/src/9/ss/l.s /n/fornaxdump/1993/0501/sys/src/brazil/ss/l.s 1,520d