| plan 9 kernel history: overview | file list | diff list |
1993/0501/ss/l.s (diff list | history)
| 1990/1223/sys/src/9/ss/l.s:1,81 – 1990/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. */ | |
| 1990/1226 | MOVW $KZERO, R7 MOVB R0, (R7, 3) | |
| 1990/1223 | /* now mapped correctly. jmpl to where we want to be */ | |
| 1990/1226 | MOVW $setSB(SB), R2 MOVW $startvirt(SB), R7 JMPL (R7) | |
| 1990/1223 | RETURN /* can't get here */ TEXT startvirt(SB), $-4 | |
| 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 | |
| 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 | |
| 1990/1226 | MOVW b+0(FP), R7 MOVW R1, (R7) MOVW R15, 4(R7) MOVW $0, R7 | |
| 1990/1223 | RETURN 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/1223 | RETURN | |
| 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 */ | |
| 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 | |
| 1990/1226 | MOVW 0(FP), R7 MOVW 4(FP), R8 MOVB R8, (R7, 2) | |
| 1990/1223 | RETURN | |
| 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 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 | |
| 1990/1226 | MOVW 0(FP), R7 MOVW 4(FP), R8 MOVW R8, (R7, 4) | |
| 1990/1223 | RETURN TEXT putwd(SB), $0 | |
| 1990/1226 | MOVW 0(FP), R7 MOVW 4(FP), R8 MOVW R8, (R7, 0xD) | |
| 1990/1223 | RETURN | |
| 1990/1226/sys/src/9/ss/l.s:1,6 – 1990/1227/sys/src/9/ss/l.s:1,6 (short | long) | ||
| 1990/1223 | #include "mem.h" | |
| 1990/1226 |
| |
| 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,329 – 1990/1227/sys/src/9/ss/l.s:319,329 | ||
| 1990/1223 | TEXT gotolabel(SB), $0 | |
| 1990/1226 |
| |
| 1990/1227 | MOVW $1, R7 | |
| 1990/1223 | RETURN | |
| 1990/1226 | TEXT putcxsegm(SB), $0 | |
| 1990/1226/sys/src/9/ss/l.s:368,399 – 1990/1227/sys/src/9/ss/l.s:368,406 | ||
| 1990/1226 | MOVW R8, (R7, 2) RETURN | |
| 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 | |
| 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 | |
| 1990/1223 |
| |
| 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 | |
| 1990/1227 | TEXT putwE(SB), $0 | |
| 1990/1223 | ||
| 1990/1226 | MOVW 0(FP), R7 MOVW 4(FP), R8 | |
| 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,14 – 1990/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 */ | |
| 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,341 – 1990/1231/sys/src/9/ss/l.s:338,344 | ||
| 1990/1226 | JMPL (R7) | |
| 1990/1223 | RETURN | |
| 1990/1226 |
| |
| 1990/1231 | TEXT putcxreg(SB), $0 | |
| 1990/1226 | MOVW $CONTEXT, R7 MOVW 0(FP), R8 | |
| 1990/1231/sys/src/9/ss/l.s:33,38 – 1991/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,6 – 1991/0110/sys/src/9/ss/l.s:1,6 (short | long) | ||
| 1990/1223 | #include "mem.h" | |
| 1990/1227 |
| |
| 1991/0110 | #define SYSPSR (SPL(0xF)|PSRSUPER) | |
| 1990/1226 | ||
| 1990/1223 | TEXT start(SB), $-4 | |
| 1991/0109/sys/src/9/ss/l.s:33,45 – 1991/0110/sys/src/9/ss/l.s:33,43 | ||
| 1990/1226 | MOVW PSR, R7 | |
| 1990/1223 | RETURN | |
| 1991/0109 |
| |
| 1991/0110 | TEXT swap1(SB), $0 | |
| 1991/0109 | MOVW keyaddr+0(FP), R8 | |
| 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,54 – 1991/0110/sys/src/9/ss/l.s:46,52 | ||
| 1990/1226 | SWAP (R8), R7 RETURN | |
| 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,106 – 1991/0110/sys/src/9/ss/l.s:98,104 | ||
| 1990/1226 | TEXT touser(SB), $-4 | |
| 1991/0110 | MOVW $SYSPSR, R7 | |
| 1990/1226 | MOVW R7, PSR OR R0, R0 | |
| 1991/0109/sys/src/9/ss/l.s:400,409 – 1991/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,6 – 1991/0111/sys/src/9/ss/l.s:1,6 (short | long) | ||
| 1990/1223 | #include "mem.h" | |
| 1991/0110 |
| |
| 1991/0111 | #define SYSPSR (SPL(0x0)|PSRSUPER) | |
| 1990/1226 | ||
| 1990/1223 | TEXT start(SB), $-4 | |
| 1991/0111/sys/src/9/ss/l.s:1,6 – 1991/0112/sys/src/9/ss/l.s:1,6 (short | long) | ||
| 1990/1223 | #include "mem.h" | |
| 1991/0111 |
| |
| 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,42 – 1991/0112/sys/src/9/ss/l.s:28,37 | ||
| 1990/1223 | UNIMP RETURN | |
| 1990/1226 |
| |
| 1990/1223 |
| |
| 1991/0110 | TEXT swap1(SB), $0 | |
| 1991/0109 | MOVW keyaddr+0(FP), R8 | |
| 1991/0110 |
| |
| 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,115 – 1991/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,134 – 1991/0112/sys/src/9/ss/l.s:123,137 | ||
| 1990/1226 | /* * Interrupt or fault from kernel */ | |
| 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 */ | |
| 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: | |
| 1991/0111/sys/src/9/ss/l.s:143,172 – 1991/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 */ | |
| 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,220 – 1991/0112/sys/src/9/ss/l.s:170,198 | ||
| 1990/1226 | JMPL faultsparc(SB) ADD $8, R1 | |
| 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/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 | |
| 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,241 – 1991/0112/sys/src/9/ss/l.s:208,220 | ||
| 1990/1226 | MOVW R2, R9 MOVW $setSB(SB), R2 MOVW $(USERADDR+BY2PG), R1 | |
| 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,261 – 1991/0112/sys/src/9/ss/l.s:227,238 | ||
| 1990/1226 | MOVW R2, R9 MOVW $setSB(SB), R2 MOVW $(USERADDR+BY2PG), 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 */ | |
| 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,294 – 1991/0112/sys/src/9/ss/l.s:262,269 | ||
| 1990/1226 | MOVW (4*15)(R1), R15 SAVE R0, R0 MOVW (4*6)(R1), R6 | |
| 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,31 – 1991/0115/sys/src/9/ss/l.s:25,31 (short | long) | ||
| 1990/1226 | MOVW $0x8, R7 MOVW R7, WIM | |
| 1990/1223 | JMPL main(SB) | |
| 1991/0115 | MOVW (R0), R0 | |
| 1990/1223 | RETURN | |
| 1991/0110 | TEXT swap1(SB), $0 | |
| 1991/0112/sys/src/9/ss/l.s:461,464 – 1991/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,26 – 1991/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,99 – 1991/01151/sys/src/9/ss/l.s:118,124 | ||
| 1990/1226 | TEXT touser(SB), $-4 | |
| 1991/0110 |
| |
| 1991/01151 | MOVW $(SYSPSR&~PSREF), R7 | |
| 1990/1226 | MOVW R7, PSR OR R0, R0 | |
| 1991/0115/sys/src/9/ss/l.s:167,173 – 1991/01151/sys/src/9/ss/l.s:192,198 | ||
| 1990/1226 | OR R0, R0 OR R0, R0 OR R0, R0 | |
| 1991/01151 | JMPL trap(SB) | |
| 1990/1226 | ADD $8, R1 | |
| 1991/0112 | restore: | |
| 1991/0115/sys/src/9/ss/l.s:461,470 – 1991/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 */ | |
| 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,480 – 1991/01151/sys/src/9/ss/l.s:562,568 | ||
| 1991/0115 | RETURN TEXT getfsr(SB), $0 | |
| 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,484 – 1991/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) | |
| 1991/01151 | GLOBL fsr+0(SB), $BY2WD | |
| 1991/01151/sys/src/9/ss/l.s:117,129 – 1991/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 | |
| 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,337 – 1991/0712/sys/src/9/ss/l.s:330,335 | ||
| 1990/1226 | MOVW b+0(FP), R8 MOVW (R8), R1 MOVW 4(R8), R15 | |
| 1990/1227 | MOVW $1, R7 | |
| 1990/1223 | RETURN | |
| 1991/0712/sys/src/9/ss/l.s:98,103 – 1991/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,119 – 1991/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,67 – 1991/1105/sys/src/9/ss/l.s:55,66 (short | long) | ||
| 1990/1223 | ||
| 1991/0110 | TEXT swap1(SB), $0 | |
| 1991/0109 |
| |
| 1991/0112 |
| |
| 1991/1105 | TAS (R7), R7 /* LDSTUB, thank you ken */ | |
| 1991/0109 | RETURN | |
| 1990/1226 | TEXT swap1_should_work(SB), $0 | |
| 1991/1105 | MOVW R7, R8 | |
| 1990/1226 | MOVW $1, R7 SWAP (R8), R7 RETURN | |
| 1991/1006/sys/src/9/ss/l.s:68,74 – 1991/1105/sys/src/9/ss/l.s:67,72 | ||
| 1990/1226 | ||
| 1991/0110 | TEXT swap1x(SB), $0 | |
| 1990/1226 |
| |
| 1991/1006/sys/src/9/ss/l.s:76,82 – 1991/1105/sys/src/9/ss/l.s:74,80 | ||
| 1990/1226 | OR R0, R0 OR R0, R0 OR R0, R0 | |
| 1991/1105 | MOVW (R7), R7 | |
| 1990/1226 | CMP R7, R0 BNE was1 MOVW $1, R10 | |
| 1991/1006/sys/src/9/ss/l.s:111,117 – 1991/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 |
| |
| 1991/1006/sys/src/9/ss/l.s:123,135 – 1991/1105/sys/src/9/ss/l.s:120,132 | ||
| 1990/1226 | RETURN TEXT touser(SB), $-4 | |
| 1991/01151 |
| |
| 1990/1226 |
| |
| 1991/1105 | MOVW $(SYSPSR&~PSREF), R8 MOVW R8, PSR | |
| 1990/1226 | OR R0, R0 OR R0, R0 OR R0, R0 | |
| 1991/0712 | ||
| 1990/1226 |
| |
| 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,143 – 1991/1105/sys/src/9/ss/l.s:134,140 | ||
| 1990/1226 | ||
| 1991/0112 | TEXT rfnote(SB), $0 | |
| 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,307 – 1991/1105/sys/src/9/ss/l.s:298,303 | ||
| 1990/1226 | TEXT puttbr(SB), $0 | |
| 1991/1006/sys/src/9/ss/l.s:325,331 – 1991/1105/sys/src/9/ss/l.s:321,326 | ||
| 1990/1226 | ||
| 1990/1223 | TEXT setlabel(SB), $0 | |
| 1990/1226 |
| |
| 1991/1006/sys/src/9/ss/l.s:333,347 – 1991/1105/sys/src/9/ss/l.s:328,341 | ||
| 1990/1223 | TEXT gotolabel(SB), $0 | |
| 1990/1226 |
| |
| 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 |
| |
| 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,363 – 1991/1105/sys/src/9/ss/l.s:344,355 | ||
| 1990/1223 | ||
| 1990/1231 | TEXT putcxreg(SB), $0 | |
| 1990/1226 |
| |
| 1991/1105 | MOVW $CONTEXT, R8 MOVB R7, (R8, 2) | |
| 1990/1226 | RETURN | |
| 1990/1223 | TEXT putb2(SB), $0 | |
| 1990/1226 |
| |
| 1990/1223 | RETURN | |
| 1991/1006/sys/src/9/ss/l.s:364,382 – 1991/1105/sys/src/9/ss/l.s:356,371 | ||
| 1990/1223 | ||
| 1990/1226 | TEXT getb2(SB), $0 | |
| 1990/1223 | ||
| 1990/1226 |
| |
| 1990/1223 | RETURN | |
| 1990/1226 | TEXT getw2(SB), $0 | |
| 1991/1006/sys/src/9/ss/l.s:383,389 – 1991/1105/sys/src/9/ss/l.s:372,377 | ||
| 1990/1226 | ||
| 1990/1227 | TEXT putw4(SB), $0 | |
| 1990/1226 |
| |
| 1990/1227 | MOVW R8, (R7, 4) | |
| 1990/1226 | RETURN | |
| 1991/1006/sys/src/9/ss/l.s:390,396 – 1991/1105/sys/src/9/ss/l.s:378,383 | ||
| 1990/1226 | ||
| 1990/1227 | TEXT putwC(SB), $0 | |
| 1990/1226 |
| |
| 1990/1227 | MOVW R8, (R7, 0xC) | |
| 1990/1226 | RETURN | |
| 1991/1006/sys/src/9/ss/l.s:397,403 – 1991/1105/sys/src/9/ss/l.s:384,389 | ||
| 1990/1226 | ||
| 1990/1227 | TEXT putwD(SB), $0 | |
| 1990/1223 | ||
| 1990/1226 |
| |
| 1990/1227 | MOVW R8, (R7, 0xD) | |
| 1990/1223 | RETURN | |
| 1991/1006/sys/src/9/ss/l.s:404,410 – 1991/1105/sys/src/9/ss/l.s:390,395 | ||
| 1990/1223 | ||
| 1991/0110 | TEXT putwD16(SB), $0 | |
| 1991/1006/sys/src/9/ss/l.s:441,447 – 1991/1105/sys/src/9/ss/l.s:426,431 | ||
| 1991/0110 | ||
| 1990/1227 | TEXT putwE(SB), $0 | |
| 1990/1223 | ||
| 1990/1226 |
| |
| 1991/0110 | MOVW R8, (R7, 0xE) RETURN | |
| 1991/1006/sys/src/9/ss/l.s:448,454 – 1991/1105/sys/src/9/ss/l.s:432,437 | ||
| 1991/0110 | TEXT putwE16(SB), $0 | |
| 1991/1006/sys/src/9/ss/l.s:485,491 – 1991/1105/sys/src/9/ss/l.s:468,473 | ||
| 1990/1227 | TEXT putsegm(SB), $0 | |
| 1990/1223 | RETURN | |
| 1991/1006/sys/src/9/ss/l.s:492,498 – 1991/1105/sys/src/9/ss/l.s:474,479 | ||
| 1990/1223 | ||
| 1991/01151 | TEXT savefpregs(SB), $0 | |
| 1991/1006/sys/src/9/ss/l.s:526,532 – 1991/1105/sys/src/9/ss/l.s:507,512 | ||
| 1991/01151 | OR $PSREF, R8 MOVW R8, PSR | |
| 1991/1006/sys/src/9/ss/l.s:554,559 – 1991/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,125 – 1991/1106/sys/src/9/ss/l.s:119,125 (short | long) | ||
| 1991/1006 | ||
| 1990/1226 | RETURN | |
| 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,196 – 1991/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 */ | |
| 1991/1106 | MOVW R1, R7 /* pointer to Ureg */ | |
| 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/1105/sys/src/9/ss/l.s:272,281 – 1991/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 */ | |
| 1991/1106 | MOVW R1, R7 /* pointer to Ureg */ | |
| 1990/1226 | SUB $8, R1 | |
| 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,6 – 1991/1113/sys/src/9/ss/l.s:1,7 (short | long) | ||
| 1990/1223 | #include "mem.h" | |
| 1991/0112 |
| |
| 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,21 – 1991/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,54 – 1991/1113/sys/src/9/ss/l.s:49,56 | ||
| 1991/01151 | FMOVD F24, F22 | |
| 1990/1223 | MOVW $mach0(SB), R(MACH) | |
| 1990/1226 |
| |
| 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,79 – 1991/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 | |
| 1991/1113 | NOOP | |
| 1991/1105 | MOVW (R7), R7 | |
| 1990/1226 | CMP R7, R0 BNE was1 | |
| 1991/1106/sys/src/9/ss/l.s:89,97 – 1991/1113/sys/src/9/ss/l.s:89,95 | ||
| 1990/1226 | MOVW R7, R10 OR $PSRET, R10 MOVW R10, PSR | |
| 1991/1113 | NOOP | |
| 1990/1226 | RETURN TEXT splhi(SB), $0 | |
| 1991/1106/sys/src/9/ss/l.s:101,109 – 1991/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 | |
| 1991/1113 | NOOP | |
| 1990/1226 | RETURN TEXT splx(SB), $0 | |
| 1991/1106/sys/src/9/ss/l.s:110,118 – 1991/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 */ | |
| 1991/1113 | NOOP | |
| 1991/1006 | RETURN TEXT spldone(SB), $0 | |
| 1991/1106/sys/src/9/ss/l.s:122,130 – 1991/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 |
| |
| 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,148 – 1991/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,199 – 1991/1113/sys/src/9/ss/l.s:184,190 | ||
| 1990/1226 | SUB $8, R1 | |
| 1991/1106 | MOVW $SYSPSR, R8 MOVW R8, PSR | |
| 1990/1226 |
| |
| 1991/1113 | NOOP | |
| 1991/01151 | JMPL trap(SB) | |
| 1990/1226 | ADD $8, R1 | |
| 1991/1106/sys/src/9/ss/l.s:200,208 – 1991/1113/sys/src/9/ss/l.s:191,197 | ||
| 1991/0112 | restore: MOVW (4*(32+2))(R1), R8 /* PSR */ MOVW R8, PSR | |
| 1990/1226 |
| |
| 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,255 – 1991/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,290 – 1991/1113/sys/src/9/ss/l.s:272,278 | ||
| 1990/1226 | ADD $8, R1 MOVW (4*(32+2))(R1), R8 /* PSR */ MOVW R8, PSR | |
| 1991/1113 | NOOP | |
| 1990/1226 | MOVW (4*15)(R1), R15 SAVE R0, R0 | |
| 1991/1106/sys/src/9/ss/l.s:299,307 – 1991/1113/sys/src/9/ss/l.s:287,293 | ||
| 1990/1226 | TEXT puttbr(SB), $0 MOVW R7, TBR | |
| 1991/1113 | NOOP | |
| 1990/1226 | RETURN TEXT gettbr(SB), $0 | |
| 1991/1106/sys/src/9/ss/l.s:342,347 – 1991/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,381 – 1991/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,484 – 1991/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 |
| |
| 1991/1106/sys/src/9/ss/l.s:507,516 – 1991/1113/sys/src/9/ss/l.s:501,510 | ||
| 1991/01151 | OR $PSREF, R8 MOVW R8, PSR | |
| 1991/1113 | NOOP | |
| 1991/01151 |
| |
| 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,477 – 1991/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 | |
| 1991/1113 |
| |
| 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,510 – 1991/1115/sys/src/9/ss/l.s:506,516 | ||
| 1991/01151 | OR $PSREF, R8 MOVW R8, PSR | |
| 1991/1113 |
| |
| 1991/1115 | ADD $8, R7 ANDN $7, R7 /* now MOVD-aligned */ OR R0, R0 | |
| 1991/01151 | ||
| 1991/1113 |
| |
| 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,61 – 1992/0222/sys/src/9/ss/l.s:55,61 (short | long) | ||
| 1991/0115 | MOVW (R0), R0 | |
| 1990/1223 | RETURN | |
| 1991/0110 |
| |
| 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,330 – 1992/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 |
| |
| 1992/0722 | MOVW $PUTCXSEGM, R7 | |
| 1990/1226 | JMPL (R7) | |
| 1990/1223 | RETURN | |
| 1992/0222/sys/src/9/ss/l.s:388,422 – 1992/0722/sys/src/9/ss/l.s:388,422 | ||
| 1991/0110 | MOVW 4(FP), R8 MOVW R8, (R7, 0xD) | |
| 1992/0722 | ADD $VACLINESZ, R7 | |
| 1991/0110 | MOVW R8, (R7, 0xD) | |
| 1992/0722 | ADD $VACLINESZ, R7 | |
| 1991/0110 | MOVW R8, (R7, 0xD) | |
| 1992/0722 | ADD $VACLINESZ, R7 | |
| 1991/0110 | MOVW R8, (R7, 0xD) | |
| 1992/0722 | ADD $VACLINESZ, R7 | |
| 1991/0110 | MOVW R8, (R7, 0xD) | |
| 1992/0722 | ADD $VACLINESZ, R7 | |
| 1991/0110 | MOVW R8, (R7, 0xD) | |
| 1992/0722 | ADD $VACLINESZ, R7 | |
| 1991/0110 | MOVW R8, (R7, 0xD) | |
| 1992/0722 | ADD $VACLINESZ, R7 | |
| 1991/0110 | MOVW R8, (R7, 0xD) | |
| 1992/0722 | ADD $VACLINESZ, R7 | |
| 1991/0110 | MOVW R8, (R7, 0xD) | |
| 1992/0722 | ADD $VACLINESZ, R7 | |
| 1991/0110 | MOVW R8, (R7, 0xD) | |
| 1992/0722 | ADD $VACLINESZ, R7 | |
| 1991/0110 | MOVW R8, (R7, 0xD) | |
| 1992/0722 | ADD $VACLINESZ, R7 | |
| 1991/0110 | MOVW R8, (R7, 0xD) | |
| 1992/0722 | ADD $VACLINESZ, R7 | |
| 1991/0110 | MOVW R8, (R7, 0xD) | |
| 1992/0722 | ADD $VACLINESZ, R7 | |
| 1991/0110 | MOVW R8, (R7, 0xD) | |
| 1992/0722 | ADD $VACLINESZ, R7 | |
| 1991/0110 | MOVW R8, (R7, 0xD) | |
| 1992/0722 | ADD $VACLINESZ, R7 | |
| 1991/0110 | MOVW R8, (R7, 0xD) RETURN | |
| 1992/0722/sys/src/9/ss/l.s:430,464 – 1992/0724/sys/src/9/ss/l.s:430,464 (short | long) | ||
| 1991/0110 | MOVW 4(FP), R8 MOVW R8, (R7, 0xE) | |
| 1992/0724 | ADD $VACLINESZ, R7 | |
| 1991/0110 | MOVW R8, (R7, 0xE) | |
| 1992/0724 | ADD $VACLINESZ, R7 | |
| 1991/0110 | MOVW R8, (R7, 0xE) | |
| 1992/0724 | ADD $VACLINESZ, R7 | |
| 1991/0110 | MOVW R8, (R7, 0xE) | |
| 1992/0724 | ADD $VACLINESZ, R7 | |
| 1991/0110 | MOVW R8, (R7, 0xE) | |
| 1992/0724 | ADD $VACLINESZ, R7 | |
| 1991/0110 | MOVW R8, (R7, 0xE) | |
| 1992/0724 | ADD $VACLINESZ, R7 | |
| 1991/0110 | MOVW R8, (R7, 0xE) | |
| 1992/0724 | ADD $VACLINESZ, R7 | |
| 1991/0110 | MOVW R8, (R7, 0xE) | |
| 1992/0724 | ADD $VACLINESZ, R7 | |
| 1991/0110 | MOVW R8, (R7, 0xE) | |
| 1992/0724 | ADD $VACLINESZ, R7 | |
| 1991/0110 | MOVW R8, (R7, 0xE) | |
| 1992/0724 | ADD $VACLINESZ, R7 | |
| 1991/0110 | MOVW R8, (R7, 0xE) | |
| 1992/0724 | ADD $VACLINESZ, R7 | |
| 1991/0110 | MOVW R8, (R7, 0xE) | |
| 1992/0724 | ADD $VACLINESZ, R7 | |
| 1991/0110 | MOVW R8, (R7, 0xE) | |
| 1992/0724 | ADD $VACLINESZ, R7 | |
| 1991/0110 | MOVW R8, (R7, 0xE) | |
| 1992/0724 | ADD $VACLINESZ, R7 | |
| 1991/0110 | MOVW R8, (R7, 0xE) | |
| 1992/0724 | ADD $VACLINESZ, R7 | |
| 1990/1227 | MOVW R8, (R7, 0xE) RETURN | |
| 1992/0724/sys/src/9/ss/l.s:500,505 – 1992/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,549 – 1992/0726/sys/src/9/ss/l.s:547,567 | ||
| 1991/01151 | MOVW R8, PSR RETURN | |
| 1991/0115 |
| |
| 1992/0726 | TEXT getfpq(SB), $0 | |
| 1991/1105 | ||
| 1991/0115 |
| |
| 1992/0726 | MOVW R7, R8 /* must be D aligned */ | |
| 1991/01151 | MOVW $fsr+0(SB), R9 | |
| 1991/0115 |
| |
| 1992/0726 | MOVW $0, R7 getfpq1: | |
| 1991/0115 | MOVW FSR, (R9) | |
| 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,557 – 1992/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 |
| |
| 1991/01151 | GLOBL fsr+0(SB), $BY2WD | |
| 1992/0726/sys/src/9/ss/l.s:468,482 – 1992/0727/sys/src/9/ss/l.s:468,477 (short | long) | ||
| 1990/1227 | MOVW R8, (R7, 3) | |
| 1990/1223 | RETURN | |
| 1991/1115 |
| |
| 1991/01151 | TEXT savefpregs(SB), $0 | |
| 1991/1115 |
| |
| 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,530 – 1992/0727/sys/src/9/ss/l.s:515,523 | ||
| 1991/01151 | OR $PSREF, R8 MOVW R8, PSR | |
| 1991/1115 |
| |
| 1991/01151 | ||
| 1991/1115 |
| |
| 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,7 – 1992/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) | |
| 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,372 – 1992/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,387 – 1992/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,603 – 1992/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,33 – 1992/0803/sys/src/9/ss/l.s:27,33 (short | long) | ||
| 1991/01151 | MOVW $(SPL(0xF)|PSREF|PSRSUPER), R7 MOVW R7, PSR | |
| 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,570 – 1992/0804/sys/src/9/ss/l.s:564,570 (short | long) | ||
| 1991/01151 | MOVW R8, PSR | |
| 1992/0727 | NOOP /* wait for PSR to quiesce */ | |
| 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. | ||