| plan 9 kernel history: overview | file list | diff list |
2000/1001/bitsy/l.s (diff list | history)
| 2000/0929/sys/src/9/bitsy/l.s:143,158 – 2000/1001/sys/src/9/bitsy/l.s:143,161 (short | long | prev | next) | ||
| 2000/0904 | MOVW 0x18(R15), R15 /* reserved */ MOVW 0x18(R15), R15 /* IRQ */ MOVW 0x18(R15), R15 /* FIQ */ | |
| 2000/1001 | WORD $_vrst(SB) /* reset, in svc mode already */ | |
| 2000/0904 | WORD $_vund(SB) /* undefined, switch to svc mode */ WORD $_vsvc(SB) /* swi, in svc mode already */ | |
| 2000/1001 | WORD $_vabt(SB) /* prefetch abort, switch to svc mode */ WORD $_vabt(SB) /* data abort, switch to svc mode */ WORD $_vrst(SB) /* reserved, shouldn't happen */ | |
| 2000/0904 | WORD $_virq(SB) /* IRQ, switch to svc mode */ WORD $_vfiq(SB) /* FIQ, switch to svc mode */ | |
| 2000/0831 | ||
| 2000/0904 |
| |
| 2000/1001 | TEXT _vrst(SB), $-4 BL reset TEXT _vsvc(SB), $-4 /* SWI */ | |
| 2000/0904 | SUB $12, R13 /* make room for pc, psr, & type */ MOVW R14, 8(R13) /* ureg->pc = interupted PC */ MOVW SPSR, R14 /* ureg->psr = SPSR */ | |
| 2000/0929/sys/src/9/bitsy/l.s:167,182 – 2000/1001/sys/src/9/bitsy/l.s:170,180 | ||
| 2000/0831 | MOVW $PsrMund, R0 B _vswitch | |
| 2000/0904 |
| |
| 2000/1001 | TEXT _vabt(SB), $-4 /* prefetch abort */ | |
| 2000/0904 | MOVM.IA [R0-R3], (R13) /* free some working space */ MOVW $PsrMabt, R0 /* r0 = type */ | |
| 2000/0831 | B _vswitch | |
| 2000/0904 |
| |
| 2000/0831 |
| |
| 2000/0904 | TEXT _virq(SB), $-4 /* IRQ */ MOVM.IA [R0-R3], (R13) /* free some working space */ MOVW $PsrMirq, R0 /* r0 = type */ | |
| 2000/0929/sys/src/9/bitsy/l.s:204,216 – 2000/1001/sys/src/9/bitsy/l.s:202,214 | ||
| 2000/0904 | * R13 and R14 are no longer accessible. That's why R3 was left to point to where * the old [r0-r3] are stored. */ | |
| 2000/0903 |
| |
| 2000/1001 | MOVM.DB.W [R0-R2], (R13) /* set ureg->{type, psr, pc}; r13 points to ureg->type */ | |
| 2000/0903 | MOVM.IA (R3), [R0-R3] /* restore [R0-R3] from previous mode's stack */ | |
| 2000/0904 | MOVM.DB.W.S [R0-R14], (R13) /* save user level registers, at end r13 points to ureg */ | |
| 2000/0831 | ||
| 2000/0904 | /* | |
| 2000/1001 | * if the original interrupt happened while executing SVC mode, * the User R14 in the Ureg is wrong. We need to save the SVC one there. | |
| 2000/0903 | */ | |
| 2000/0904 | MOVW 0x40(R13), R1 AND.S $0xf, R1 | |
| 2000/0929/sys/src/9/bitsy/l.s:231,237 – 2000/1001/sys/src/9/bitsy/l.s:229,235 | ||
| 2000/0903 | MOVW 8(R13), R14 /* restore link */ MOVW 4(R13), R0 /* restore SPSR */ MOVW R0, SPSR /* ... */ | |
| 2000/1001 | MOVM.DB.W.S (R13), [R0-R14] /* restore registers */ | |
| 2000/0904 | ADD $8, R13 /* pop past ureg->{type+psr} */ | |
| 2000/0831 | RFE /* MOVM.IA.S.W (R13), [R15] */ | |