| plan 9 kernel history: overview | file list | diff list |
1991/0112/ss/l.s (diff list | history)
| 1991/0111/sys/src/9/ss/l.s:1,6 – 1991/0112/sys/src/9/ss/l.s:1,6 (short | long | prev | next) | ||
| 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 */ | |