## diffname power/l.s 1990/0227
## diff -e /dev/null /n/bootesdump/1990/0227/sys/src/9/mips/l.s
0a
#include "mem.h"
#define SP R29
#define PROM (KSEG1+0x1FC00000)
#define NOOP NOR R0,R0
#define WAIT NOOP; NOOP
/*
* Boot first processor
*/
TEXT start(SB), $-4
MOVW $setR30(SB), R30
MOVW $(CU1|INTR5|INTR4|INTR3|INTR2|INTR1|SW1|SW0), R1
MOVW R1, M(STATUS)
WAIT
MOVW $(0x1C<<7), R1
MOVW R1, FCR31 /* permit only inexact and underflow */
NOOP
MOVD $0.5, F26
SUBD F26, F26, F24
ADDD F26, F26, F28
ADDD F28, F28, F30
MOVD F24, F0
MOVD F24, F2
MOVD F24, F4
MOVD F24, F6
MOVD F24, F8
MOVD F24, F10
MOVD F24, F12
MOVD F24, F14
MOVD F24, F16
MOVD F24, F18
MOVD F24, F20
MOVD F24, F22
MOVW $MACHADDR, R(MACH)
ADDU $(BY2PG-4), R(MACH), SP
MOVW $0, R(USER)
MOVW R0, 0(R(MACH))
MOVW $edata(SB), R1
MOVW $end(SB), R2
clrbss:
MOVB $0, (R1)
ADDU $1, R1
BNE R1, R2, clrbss
JAL main(SB)
JMP (R0)
/*
* Take first processor into user mode
*/
TEXT touser(SB), $-4
MOVW M(STATUS), R1
OR $(KUP|IEP), R1
MOVW R1, M(STATUS)
NOOP
MOVW $(USTKTOP-20), SP
MOVW $(UTZERO+32), R26 /* header appears in text */
RFE (R26)
/*
* Bring subsequent processors on line
*/
TEXT newstart(SB), $0
MOVW $setR30(SB), R30
MOVW $(INTR5|INTR4|INTR3|INTR2|INTR1|SW1|SW0), R1
MOVW R1, M(STATUS)
NOOP
MOVW $MACHADDR, R(MACH)
MOVB (MPID+3), R1
AND $7, R1
SLL $PGSHIFT, R1, R2
ADDU R2, R(MACH)
ADDU $(BY2PG-4), R(MACH), SP
MOVW $0, R(USER)
MOVW R1, 0(R(MACH))
JAL online(SB)
JMP (R0)
TEXT firmware(SB), $0
MOVW $(PROM+0x18), R1 /**/
/* MOVW $(PROM+0x00), R1 /**/
JMP (R1)
TEXT splhi(SB), $0
MOVW M(STATUS), R1
AND $~IEC, R1, R2
MOVW R2, M(STATUS)
NOOP
RET
TEXT spllo(SB), $0
MOVW M(STATUS), R1
OR $IEC, R1, R2
MOVW R2, M(STATUS)
NOOP
RET
TEXT splx(SB), $0
MOVW 0(FP), R1
MOVW M(STATUS), R2
AND $IEC, R1
AND $~IEC, R2
OR R2, R1
MOVW R1, M(STATUS)
NOOP
RET
TEXT wbflush(SB), $-4
MOVW $WBFLUSH, R1
MOVW 0(R1), R1
RET
TEXT setlabel(SB), $0
MOVW 0(FP), R2
MOVW $0, R1
MOVW R31, 0(R2)
MOVW R29, 4(R2)
RET
TEXT gotolabel(SB), $0
MOVW 0(FP), R2
MOVW $1, R1
MOVW 0(R2), R31
MOVW 4(R2), R29
RET
TEXT puttlb(SB), $4
JAL splhi(SB)
MOVW 0(FP), R2
MOVW 4(FP), R3
MOVW R1, 4(SP)
MOVW R2, M(TLBVIRT)
MOVW R3, M(TLBPHYS)
NOOP
TLBP
NOOP
MOVW M(INDEX), R4
BGEZ R4, index
TLBWR
NOOP
JAL splx(SB)
RET
index:
TLBWI
NOOP
JAL splx(SB)
RET
TEXT puttlbx(SB), $0
MOVW 0(FP), R4
MOVW 4(FP), R2
MOVW 8(FP), R3
SLL $8, R4
MOVW R2, M(TLBVIRT)
MOVW R3, M(TLBPHYS)
MOVW R4, M(INDEX)
NOOP
TLBWI
NOOP
RET
TEXT tlbp(SB), $0
TLBP
NOOP
MOVW M(INDEX), R1
RET
TEXT tlbvirt(SB), $0
TLBP
NOOP
MOVW M(TLBVIRT), R1
RET
TEXT gettlb(SB), $0
MOVW 0(FP), R3
MOVW 4(FP), R4
SLL $8, R3
MOVW R3, M(INDEX)
NOOP
TLBR
NOOP
MOVW M(TLBVIRT), R1
MOVW M(TLBPHYS), R2
NOOP
MOVW R1, 0(R4)
MOVW R2, 4(R4)
RET
TEXT gettlbvirt(SB), $0
MOVW 0(FP), R3
SLL $8, R3
MOVW R3, M(INDEX)
NOOP
TLBR
NOOP
MOVW M(TLBVIRT), R1
NOOP
RET
TEXT vector80(SB), $-4
MOVW $exception(SB), R26
JMP (R26)
TEXT exception(SB), $-4
MOVW M(STATUS), R26
AND $KUP, R26
BEQ R26, waskernel
wasuser:
MOVW SP, R26
/*
* set kernel sp: ureg - ureg* - pc
* done in 2 steps because R30 is not set
* and the loader will make a literal
*/
MOVW $((UREGADDR-2*BY2WD) & 0xffff0000), SP
OR $((UREGADDR-2*BY2WD) & 0xffff), SP
MOVW R26, 0x10(SP) /* user SP */
MOVW R31, 0x28(SP)
MOVW R30, 0x2C(SP)
MOVW M(CAUSE), R26
MOVW R(MACH), 0x3C(SP)
MOVW R(USER), 0x40(SP)
AND $(0xF<<2), R26
SUB $(CSYS<<2), R26
JAL saveregs(SB)
MOVW $setR30(SB), R30
SUBU $(UREGADDR-2*BY2WD-USERADDR), SP, R(USER)
MOVW $MPID, R1
MOVB 3(R1), R1
MOVW $MACHADDR, R(MACH) /* locn of mach 0 */
AND $7, R1
SLL $PGSHIFT, R1
ADDU R1, R(MACH) /* add offset for mach # */
BNE R26, notsys
JAL syscall(SB)
MOVW 0x28(SP), R31
MOVW 0x08(SP), R26
MOVW 0x2C(SP), R30
MOVW R26, M(STATUS)
NOOP
MOVW 0x0C(SP), R26 /* old pc */
MOVW 0x10(SP), SP
RFE (R26)
notsys:
JAL trap(SB)
restore:
JAL restregs(SB)
MOVW 0x28(SP), R31
MOVW 0x2C(SP), R30
MOVW 0x3C(SP), R(MACH)
MOVW 0x40(SP), R(USER)
MOVW 0x10(SP), SP
RFE (R26)
waskernel:
MOVW $1, R26 /* not sys call */
MOVW SP, -0x90(SP) /* drop this if possible */
SUB $0xA0, SP
MOVW R31, 0x28(SP)
JAL saveregs(SB)
JAL trap(SB)
JAL restregs(SB)
MOVW 0x28(SP), R31
ADD $0xA0, SP
RFE (R26)
TEXT saveregs(SB), $-4
MOVW R1, 0x9C(SP)
MOVW R2, 0x98(SP)
ADDU $8, SP, R1
MOVW R1, 0x04(SP) /* arg to base of regs */
MOVW M(STATUS), R1
MOVW M(EPC), R2
MOVW R1, 0x08(SP)
MOVW R2, 0x0C(SP)
BEQ R26, return /* sys call, don't save */
MOVW M(CAUSE), R1
MOVW M(BADVADDR), R2
MOVW R1, 0x14(SP)
MOVW M(TLBVIRT), R1
MOVW R2, 0x18(SP)
MOVW R1, 0x1C(SP)
MOVW HI, R1
MOVW LO, R2
MOVW R1, 0x20(SP)
MOVW R2, 0x24(SP)
/* LINK,SB,SP missing */
MOVW R28, 0x30(SP)
/* R27, R26 not saved */
/* R25, R24 missing */
MOVW R23, 0x44(SP)
MOVW R22, 0x48(SP)
MOVW R21, 0x4C(SP)
MOVW R20, 0x50(SP)
MOVW R19, 0x54(SP)
MOVW R18, 0x58(SP)
MOVW R17, 0x5C(SP)
MOVW R16, 0x60(SP)
MOVW R15, 0x64(SP)
MOVW R14, 0x68(SP)
MOVW R13, 0x6C(SP)
MOVW R12, 0x70(SP)
MOVW R11, 0x74(SP)
MOVW R10, 0x78(SP)
MOVW R9, 0x7C(SP)
MOVW R8, 0x80(SP)
MOVW R7, 0x84(SP)
MOVW R6, 0x88(SP)
MOVW R5, 0x8C(SP)
MOVW R4, 0x90(SP)
MOVW R3, 0x94(SP)
return:
RET
TEXT restregs(SB), $-4
/* LINK,SB,SP missing */
MOVW 0x30(SP), R28
/* R27, R26 not saved */
/* R25, R24 missing */
MOVW 0x44(SP), R23
MOVW 0x48(SP), R22
MOVW 0x4C(SP), R21
MOVW 0x50(SP), R20
MOVW 0x54(SP), R19
MOVW 0x58(SP), R18
MOVW 0x5C(SP), R17
MOVW 0x60(SP), R16
MOVW 0x64(SP), R15
MOVW 0x68(SP), R14
MOVW 0x6C(SP), R13
MOVW 0x70(SP), R12
MOVW 0x74(SP), R11
MOVW 0x78(SP), R10
MOVW 0x7C(SP), R9
MOVW 0x80(SP), R8
MOVW 0x84(SP), R7
MOVW 0x88(SP), R6
MOVW 0x8C(SP), R5
MOVW 0x90(SP), R4
MOVW 0x94(SP), R3
MOVW 0x24(SP), R2
MOVW 0x20(SP), R1
MOVW R2, LO
MOVW R1, HI
MOVW 0x08(SP), R1
MOVW 0x98(SP), R2
MOVW R1, M(STATUS)
NOOP
MOVW 0x9C(SP), R1
MOVW 0x0C(SP), R26 /* old pc */
RET
TEXT rfnote(SB), $0
MOVW 0(FP), R26 /* 1st arg is &uregpointer */
SUBU $(BY2WD), R26, SP /* pc hole */
BNE R26, restore
TEXT clrfpintr(SB), $0
MOVW FCR31, R1
MOVW R1, R2
AND $~(0x3F<<12), R2
MOVW R2, FCR31
RET
TEXT savefpregs(SB), $0
MOVW M(STATUS), R3
MOVW 0(FP), R1
MOVW FCR31, R2
MOVD F0, 0x00(R1)
MOVD F2, 0x08(R1)
MOVD F4, 0x10(R1)
MOVD F6, 0x18(R1)
MOVD F8, 0x20(R1)
MOVD F10, 0x28(R1)
MOVD F12, 0x30(R1)
MOVD F14, 0x38(R1)
MOVD F16, 0x40(R1)
MOVD F18, 0x48(R1)
MOVD F20, 0x50(R1)
MOVD F22, 0x58(R1)
MOVD F24, 0x60(R1)
MOVD F26, 0x68(R1)
MOVD F28, 0x70(R1)
MOVD F30, 0x78(R1)
MOVW R2, 0x80(R1)
AND $~CU1, R3
MOVW R3, M(STATUS)
RET
TEXT restfpregs(SB), $0
MOVW M(STATUS), R3
MOVW 0(FP), R1
OR $CU1, R3
MOVW R3, M(STATUS)
MOVW 0x80(R1), R2
MOVD 0x00(R1), F0
MOVD 0x08(R1), F2
MOVD 0x10(R1), F4
MOVD 0x18(R1), F6
MOVD 0x20(R1), F8
MOVD 0x28(R1), F10
MOVD 0x30(R1), F12
MOVD 0x38(R1), F14
MOVD 0x40(R1), F16
MOVD 0x48(R1), F18
MOVD 0x50(R1), F20
MOVD 0x58(R1), F22
MOVD 0x60(R1), F24
MOVD 0x68(R1), F26
MOVD 0x70(R1), F28
MOVD 0x78(R1), F30
MOVW R2, FCR31
AND $~CU1, R3
MOVW R3, M(STATUS)
RET
.
## diffname power/l.s 1990/0419
## diff -e /n/bootesdump/1990/0227/sys/src/9/mips/l.s /n/bootesdump/1990/0419/sys/src/9/mips/l.s
143a
TEXT gotopc(SB), $0
MOVW 0(FP), R2
JAL (R2)
RET /* shouldn't get here */
.
## diffname power/l.s 1990/0424
## diff -e /n/bootesdump/1990/0419/sys/src/9/mips/l.s /n/bootesdump/1990/0424/sys/src/9/mips/l.s
52a
MOVW R4, _argc(SB)
MOVW R5, _argv(SB)
MOVW R6, _env(SB)
.
## diffname power/l.s 1990/0427
## diff -e /n/bootesdump/1990/0424/sys/src/9/mips/l.s /n/bootesdump/1990/0427/sys/src/9/mips/l.s
149a
MOVW _argc(SB), R4
MOVW _argv(SB), R5
.
148a
MOVW $0, R0
.
68c
MOVW 0(FP), SP
.
63a
.
## diffname power/l.s 1990/0430
## diff -e /n/bootesdump/1990/0427/sys/src/9/mips/l.s /n/bootesdump/1990/0430/sys/src/9/mips/l.s
466a
RET
TEXT icflush(SB), $-4 /* icflush(physaddr, nbytes) */
MOVW M(STATUS), R6
MOVW 0(FP), R4
MOVW 4(FP), R5
MOVW $KSEG0, R3
OR R3, R4
MOVW $0, M(STATUS)
MOVW $WBFLUSH, R1 /* wbflush */
MOVW 0(R1), R1
NOOP
MOVW $KSEG1, R3
MOVW $icflush0(SB), R2 /* make sure PC is in uncached address space */
MOVW $(SWC|ISC), R1
OR R3, R2
JMP (R2)
TEXT icflush0(SB), $-4
MOVW R1, M(STATUS) /* swap and isolate cache, splhi */
MOVW $icflush1(SB), R2
JMP (R2)
TEXT icflush1(SB), $-4
_icflush1:
MOVBU R0, 0x00(R4)
MOVBU R0, 0x04(R4)
MOVBU R0, 0x08(R4)
MOVBU R0, 0x0C(R4)
MOVBU R0, 0x10(R4)
MOVBU R0, 0x14(R4)
MOVBU R0, 0x18(R4)
MOVBU R0, 0x1C(R4)
MOVBU R0, 0x20(R4)
MOVBU R0, 0x24(R4)
MOVBU R0, 0x28(R4)
MOVBU R0, 0x2C(R4)
MOVBU R0, 0x30(R4)
MOVBU R0, 0x34(R4)
MOVBU R0, 0x38(R4)
MOVBU R0, 0x3C(R4)
SUB $0x40, R5
ADD $0x40, R4
BGTZ R5, _icflush1
MOVW $icflush2(SB), R2 /* make sure PC is in uncached address space */
OR R3, R2
JMP (R2)
TEXT icflush2(SB), $-4
MOVW $0, M(STATUS) /* swap back caches, de-isolate them, and stay splhi */
NOOP /* +++ */
MOVW R6, M(STATUS)
RET
TEXT dcflush(SB), $-4 /* dcflush(physaddr, nbytes) */
MOVW M(STATUS), R6
MOVW 0(FP), R4
MOVW 4(FP), R5
MOVW $KSEG0, R3
OR R3, R4
MOVW $0, M(STATUS)
MOVW $WBFLUSH, R1
MOVW 0(R1), R1
NOOP
MOVW $ISC, R1
MOVW R1, M(STATUS)
_dcflush0:
MOVBU R0, 0x00(R4)
MOVBU R0, 0x04(R4)
MOVBU R0, 0x08(R4)
MOVBU R0, 0x0C(R4)
MOVBU R0, 0x10(R4)
MOVBU R0, 0x14(R4)
MOVBU R0, 0x18(R4)
MOVBU R0, 0x1C(R4)
MOVBU R0, 0x20(R4)
MOVBU R0, 0x24(R4)
MOVBU R0, 0x28(R4)
MOVBU R0, 0x2C(R4)
MOVBU R0, 0x30(R4)
MOVBU R0, 0x34(R4)
MOVBU R0, 0x38(R4)
MOVBU R0, 0x3C(R4)
SUB $0x40, R5
ADD $0x40, R4
BGTZ R5, _dcflush0
MOVW $0, M(STATUS)
NOOP /* +++ */
MOVW R6, M(STATUS)
.
440a
.
156a
MOVW $WBFLUSH, R1 /* flush write buffer */
MOVW 0(R1), R1
NOOP
MOVW $KSEG1, R3 /* change to uncached address space */
MOVW $gotopc0(SB), R2
OR R3, R2
JMP (R2)
TEXT gotopc0(SB), $-4
MOVW $(SWC|ISC), R1 /* swap and isolate cache, stay splhi */
MOVW R1, M(STATUS)
NOOP
MOVW $gotopc1(SB), R2 /* change back to cached address space */
JMP (R2)
TEXT gotopc1(SB), $-4
MOVW $KSEG0, R6 /* init loop variables */
MOVW $(64*1024), R8
_gotopc1:
MOVBU R0, 0x00(R6)
SUB $0x4, R8
ADD $0x4, R6
BGTZ R8, _gotopc1
MOVW $gotopc2(SB), R2 /* change to uncached address space */
OR R3, R2
JMP (R2)
TEXT gotopc2(SB), $-4
MOVW R0, M(STATUS) /* put caches back, still splhi */
NOOP
JMP (R7)
.
154,155d
150,151c
MOVW 0(FP), R7 /* save arguments for later */
.
148c
TEXT gotopc(SB), $-4
.
60a
* - argument is stack pointer to user
.
10a
* - why is the processor number loaded from R0 ?????
.
## diffname power/l.s 1990/0504
## diff -e /n/bootesdump/1990/0430/sys/src/9/mips/l.s /n/bootesdump/1990/0504/sys/src/9/mips/l.s
559c
MOVW R10, M(STATUS)
.
532,550c
MOVBU R0, 0x00(R8)
MOVBU R0, 0x04(R8)
MOVBU R0, 0x08(R8)
MOVBU R0, 0x0C(R8)
MOVBU R0, 0x10(R8)
MOVBU R0, 0x14(R8)
MOVBU R0, 0x18(R8)
MOVBU R0, 0x1C(R8)
MOVBU R0, 0x20(R8)
MOVBU R0, 0x24(R8)
MOVBU R0, 0x28(R8)
MOVBU R0, 0x2C(R8)
MOVBU R0, 0x30(R8)
MOVBU R0, 0x34(R8)
MOVBU R0, 0x38(R8)
MOVBU R0, 0x3C(R8)
SUB $0x40, R9
ADD $0x40, R8
BGTZ R9, _icflush1
.
512c
OR R3, R8
.
508,510c
MOVW M(STATUS), R10
MOVW 0(FP), R8
MOVW 4(FP), R9
.
505c
/*
* we avoid using R4, R5, R6, and R7 so gotopc can call us without saving them
*/
.
155,189c
MOVW _env(SB), R6
MOVW R0, 4(SP)
MOVW $(64*1024), R1
MOVW R1, 8(SP)
JAL icflush(SB)
.
150c
TEXT gotopc(SB), $8
.
## diffname power/l.s 1990/1113
## diff -e /n/bootesdump/1990/0504/sys/src/9/mips/l.s /n/bootesdump/1990/1113/sys/src/9/mips/l.s
408c
JMP restore
.
## diffname power/l.s 1991/01151
## diff -e /n/bootesdump/1990/1113/sys/src/9/mips/l.s /n/bootesdump/1991/01151/sys/src/9/mips/l.s
11d
## diffname power/l.s 1991/0118
## diff -e /n/bootesdump/1991/01151/sys/src/9/mips/l.s /n/bootesdump/1991/0118/sys/src/9/mips/l.s
450a
NOOP
.
## diffname power/l.s 1991/0126
## diff -e /n/bootesdump/1991/0118/sys/src/9/mips/l.s /n/bootesdump/1991/0126/sys/src/9/mips/l.s
141c
TEXT gotolabel(SB), $-4
.
133c
TEXT setlabel(SB), $-4
.
## diffname power/l.s 1991/0314
## diff -e /n/bootesdump/1991/0201/sys/src/9/mips/l.s /n/bootesdump/1991/0314/sys/src/9/power/l.s
472a
RET
TEXT fcr31(SB), $0
MOVW FCR31, R1
.
450c
MOVW fpstat+4(FP), R2
.
## diffname power/l.s 1991/0425
## diff -e /n/bootesdump/1991/0314/sys/src/9/power/l.s /n/bootesdump/1991/0425/sys/src/9/power/l.s
240a
MOVW $exception(SB), R26
JMP (R26)
TEXT vector0(SB), $-4
MOVW $utlbmiss(SB), R26
MOVW M(TLBVIRT), R27
SLL $(STLBLOG-9), R27 /* delay slot fodder */
JMP (R26)
TEXT utlbmiss(SB), $-4
SRL $(STLBLOG), R27, R26
XOR R26, R27
AND $((STLBSIZE-1)<<3), R27
MOVW R27, M(TLBPHYS) /* scratch register, store */
MOVW $((MACHADDR+4) & 0xffff0000), R26
MOVW $MPID, R27
MOVB 3(R27), R27
AND $7, R27
SLL $PGSHIFT, R27
ADDU R27, R26
MOVW M(TLBPHYS), R27 /* scratch register, load */
MOVW ((MACHADDR+4) & 0xffff)(R26), R26
ADDU R26, R27
MOVW 4(R27), R26
MOVW R26, M(TLBPHYS)
MOVW M(TLBVIRT), R26
MOVW (R27), R27
BNE R26, R27, stlbm
TLBP
MOVW M(EPC), R27
MOVW M(INDEX), R26
BGEZ R26, uind
TLBWR
NOOP
RFE (R27)
uind:
TLBWI
NOOP
RFE (R27)
stlbm:
.
177a
.
## diffname power/l.s 1991/0426
## diff -e /n/bootesdump/1991/0425/sys/src/9/power/l.s /n/bootesdump/1991/0426/sys/src/9/power/l.s
283,286c
.
281c
MOVW M(EPC), R27
.
276,279d
254c
SRL $6, R27, R26 /* right adjusted vpn */
SLL $(STLBLOG-6), R27 /* left adjusted pid */
.
249c
SRL $(6-3), R27 /* delay slot fodder, right adjust */
.
## diffname power/l.s 1991/0607
## diff -e /n/bootesdump/1991/0426/sys/src/9/power/l.s /n/bootesdump/1991/0607/sys/src/9/power/l.s
176d
166d
163d
## diffname power/l.s 1991/0705
## diff -e /n/bootesdump/1991/0607/sys/src/9/power/l.s /n/bootesdump/1991/0705/sys/src/9/power/l.s
582,612c
MOVW $dcflush0(SB), R2 /* Jump to uncache space */
MOVW $0xA0000000, R1
OR R1, R2
JMP (R2)
NOP
TEXT dcflush0(SB), $-4
MOVW $833, R12 /* cache_pass magdc */
MOVW $0x10000, R9 /* dcache size */
MOVW $0, R13
MOVW M(STATUS), R11
BEQ R9, R0, _dcflush3
MOVW $0x10000, R2 /* isolate data cache */
NOP
NOP
NOP
NOP
NOP
MOVW R2, M(STATUS)
NOP
NOP
NOP
NOP
NOP
MOVW R4, R8
MOVW R5, R9
AND $0xFFFC, R8
MOVW $0x9F200000, R1
OR R1, R8
MOVW $dcflush1(SB), R2
JMP (R2)
NOP
TEXT dcflush1(SB), $-4
_dcflush1:
SGT R12, R13, R1
BNE R1, _dcflush2
MOVW $0, R13
MOVW R11, M(STATUS)
MOVW $0x10000, R2 /* isolate data cache */
NOP
NOP
NOP
NOP
NOP
MOVW R2, M(STATUS)
NOP
NOP
NOP
NOP
NOP
_dcflush2:
MOVW R0, 0(R8)
MOVW R0, 4(R8)
MOVW R0, 8(R8)
MOVW R0, 12(R8)
MOVW R0, 16(R8)
MOVW R0, 20(R8)
MOVW R0, 24(R8)
MOVW R0, 28(R8)
ADDU $-32, R9
ADDU $1, R13
ADDU $32, R8
BGTZ R9, _dcflush1
MOVW $dcflush3(SB), R2 /* Jump to uncache space */
MOVW $0xA0000000, R1
OR R1, R2
JMP (R2)
NOP
TEXT dcflush3(SB), $-4
_dcflush3:
NOP
NOP
NOP
NOP
NOP
MOVW R11, M(STATUS)
NOP
NOP
NOP
NOP
NOP
MOVW $dcflush4(SB), R2
JMP (R2)
NOP
TEXT dcflush4(SB), $-4
.
577,579c
TEXT dcflush(SB), $-4
.
572,574c
MOVW $icflush4(SB), R2
JMP (R2)
NOP
TEXT icflush4(SB), $-4
.
570c
TEXT icflush3(SB), $-4
_icflush3:
NOP
NOP
NOP
NOP
NOP
MOVW R11, M(STATUS)
NOP
NOP
NOP
NOP
NOP
.
568a
NOP
.
566,567c
MOVW $icflush3(SB), R2 /* Jump to uncache space */
MOVW $0xA0000000, R1
OR R1, R2
.
547,564c
SGT R12, R13, R1
BNE R1, _icflush2
MOVW $0, R13
MOVW R11, M(STATUS)
MOVW $0x30000, R2 /* swap and isolate */
NOP
NOP
NOP
NOP
NOP
MOVW R2, M(STATUS)
NOP
NOP
NOP
NOP
NOP
_icflush2:
MOVW R0, 0(R8)
MOVW R0, 4(R8)
MOVW R0, 8(R8)
MOVW R0, 12(R8)
MOVW R0, 16(R8)
MOVW R0, 20(R8)
MOVW R0, 24(R8)
MOVW R0, 28(R8)
ADDU $-32, R9
ADDU $1, R13
ADDU $32, R8
.
545d
542a
NOP
.
540c
MOVW $833, R12 /* cache_pass magic */
MOVW $0x10000, R9 /* icache size */
MOVW $0, R13
MOVW M(STATUS), R11
BEQ R9, R0, _icflush3
MOVW $0x30000, R2 /* swap and isolate */
NOP
NOP
NOP
NOP
NOP
MOVW R2, M(STATUS)
NOP
NOP
NOP
NOP
NOP
MOVW R4, R8
MOVW R5, R9
AND $0xFFFC, R8
MOVW $0x9F200000, R1
OR R1, R8
.
536a
NOP
.
523,535c
TEXT icflush(SB), $-4
MOVW 0(FP), R4
MOVW 4(FP), R5
MOVW $icflush0(SB), R2 /* Jump to uncache space */
MOVW $0xA0000000, R1
OR R1, R2
.
518,521c
#define NOP WORD $0x0
.
156,158d
150a
MOVW $(64*1024), R1
MOVW R1, 8(SP)
JAL icflush(SB)
.
## diffname power/l.s 1991/0711
## diff -e /n/bootesdump/1991/0705/sys/src/9/power/l.s /n/bootesdump/1991/0711/sys/src/9/power/l.s
280a
.
265c
MOVW (R26), R26
SRL $5, R27 /* R27 is now index * 8 */
.
257,258c
MOVW $((MACHADDR+4) & 0xffff0000), R26 /* get &mach[0].stb BUG */
OR $((MACHADDR+4) & 0xffff), R26
MOVW $MPID, R27 /* add BY2PG*machno */
.
254c
AND $(STLBSIZE-1), R27
SLL $8, R27
/* R27 = (((tlbvirt<<1)^(tlbvirt>>12)) & (STLBSIZE-1)) << 8 (8 to clear zero in TLBPHYS) */
.
251,252c
MOVW R27, R26
SLL $1, R26
SRL $12, R27
.
246d
## diffname power/l.s 1991/0726
## diff -e /n/bootesdump/1991/0711/sys/src/9/power/l.s /n/bootesdump/1991/0726/sys/src/9/power/l.s
148a
TEXT getcallerpc(SB), $0
MOVW (SP), R1
RET
.
## diffname power/l.s 1991/1011
## diff -e /n/bootesdump/1991/0726/sys/src/9/power/l.s /n/bootesdump/1991/1011/sys/src/9/power/l.s
124a
RET
TEXT spllo(SB), $0
MOVW M(STATUS), R1
OR $IEC, R1, R2
MOVW R2, M(STATUS)
NOOP
RET
TEXT spldone(SB), $0
.
117a
MOVW R31, 8(R(MACH)) /* save PC in m->splpc */
.
108,115d
101a
MOVW R31, 8(R(MACH)) /* save PC in m->splpc */
.
## diffname power/l.s 1991/1208
## diff -e /n/bootesdump/1991/1011/sys/src/9/power/l.s /n/bootesdump/1991/1208/sys/src/9/power/l.s
641c
MOVW R1, R4
.
537c
MOVW R1, R4
.
501d
473d
463d
459c
MOVW R1, R26 /* 1st arg is &uregpointer */
.
363a
MOVW 4(SP), R1 /* first arg for trap */
.
331a
MOVW 4(SP), R1 /* first arg for syscall, trap */
.
238,240c
SLL $8, R1
MOVW R1, M(INDEX)
.
224,225c
SLL $8, R1
MOVW R1, M(INDEX)
.
222d
201c
MOVW R1, M(INDEX)
.
198c
SLL $8, R1
.
195d
190d
181,182c
MOVW M(INDEX), R3
BGEZ R3, index
.
174,177c
MOVW 4(FP), R2
MOVW R1, M(TLBVIRT)
MOVW R2, M(TLBPHYS)
.
165c
MOVW 0(FP), R7
.
162,163c
MOVW R1, 0(FP) /* save arguments for later */
MOVW $(64*1024), R7
MOVW R7, 8(SP)
.
151,152d
149c
MOVW 0(R1), R31
MOVW 4(R1), R29
.
143,144d
141c
MOVW R31, 0(R1)
MOVW R29, 4(R1)
.
112d
70d
65a
MOVW R1, SP
.
## diffname power/l.s 1992/0222
## diff -e /n/bootesdump/1991/1208/sys/src/9/power/l.s /n/bootesdump/1992/0222/sys/src/9/power/l.s
154c
MOVW 4(SP), R1
.
## diffname power/l.s 1992/0318
## diff -e /n/bootesdump/1992/0222/sys/src/9/power/l.s /n/bootesdump/1992/0318/sys/src/9/power/l.s
66c
MOVW R1, SP /* user stack pointer */
.
## diffname power/l.s 1992/0319
## diff -e /n/bootesdump/1992/0318/sys/src/9/power/l.s /n/bootesdump/1992/0319/sys/src/9/power/l.s
154c
MOVW 0(SP), R1
.
## diffname power/l.s 1992/0610
## diff -e /n/bootesdump/1992/0319/sys/src/9/power/l.s /n/bootesdump/1992/0610/sys/src/9/power/l.s
96,97c
SLL $3, R1
ADD $PROM, R1
.
## diffname power/l.s 1992/0629
## diff -e /n/bootesdump/1992/0610/sys/src/9/power/l.s /n/bootesdump/1992/0629/sys/src/9/power/l.s
127a
TEXT muxlock(SB),$0
MOVW R1, R2 /* sbsem */
MOVW 4(FP), R3 /* lk->val */
MOVW M(STATUS), R5 /* splhi */
AND $~IEC, R5, R4
MOVW R4, M(STATUS)
MOVW 0(R2),R4 /* grab sbsem */
AND $1, R4
BNE R4, f1
MOVW 0(R3),R4
BNE R4, f0
MOVW $1, R1
MOVW R1, 0(R3) /* lk->val = 1 */
MOVW R0, 0(R2) /* *sbsem = 0 */
MOVW R5, M(STATUS) /* splx */
RET
f0: MOVW R0, 0(R2) /* *sbsem = 0 */
f1: MOVW R5, M(STATUS) /* splx */
MOVW R0, R1 /* return 0 */
RET
.
## diffname power/l.s 1992/0819
## diff -e /n/bootesdump/1992/0629/sys/src/9/power/l.s /n/bootesdump/1992/0819/sys/src/9/power/l.s
173,174c
MOVW 0(R1), R29
MOVW 4(R1), R31
.
166,167c
MOVW R29, 0(R1)
MOVW R31, 4(R1)
.
## diffname power/l.s 1992/0907
## diff -e /n/bootesdump/1992/0819/sys/src/9/power/l.s /n/bootesdump/1992/0907/sys/src/9/power/l.s
273a
MOVW $((MACHADDR+368) & 0xffff0000), R26 /* get m->tlbfault BUG */
OR $((MACHADDR+368) & 0xffff), R26
MOVW (R26), R27
ADD $1, R27
MOVW R27, (R26)
.
## diffname power/l.s 1992/1129
## diff -e /n/bootesdump/1992/0907/sys/src/9/power/l.s /n/bootesdump/1992/1129/sys/src/9/power/l.s
494a
AND $~CU1, R3
MOVW R3, M(STATUS)
.
490a
MOVW M(STATUS), R3
OR $CU1, R3
MOVW R3, M(STATUS)
WAIT
.
353c
MOVW $MACHADDR, R(MACH) /* locn of &mach[0] */
.
## diffname power/l.s 1993/0106
## diff -e /n/bootesdump/1992/1129/sys/src/9/power/l.s /n/bootesdump/1993/0106/sys/src/9/power/l.s
525a
WAIT
.
508c
MOVW FCR31, R2 /* Read stalls the fpu until inst. complete. */
WAIT
.
496,501c
MOVW FCR31, R1 /* Read it to stall the fpu */
WAIT
MOVW R0, FCR31
WAIT
.
## diffname power/l.s 1993/0205
## diff -e /n/bootesdump/1993/0106/sys/src/9/power/l.s /n/bootesdump/1993/0205/sys/src/9/power/l.s
135a
NOOP
.
131c
MOVW 4(FP), R3 /* &lk->val */
.
## diffname power/l.s 1993/0206
## diff -e /n/bootesdump/1993/0205/sys/src/9/power/l.s /n/bootesdump/1993/0206/sys/src/9/power/l.s
195c
JMP (R1)
.
186,190d
184c
TEXT gotopc(SB), $-4
.
## diffname power/l.s 1993/0219
## diff -e /n/bootesdump/1993/0206/sys/src/9/power/l.s /n/bootesdump/1993/0219/sys/src/9/power/l.s
184c
TEXT gotopc(SB), $8
MOVW R1, 0(FP)
MOVW $(64*1024), R1
MOVW R1, 8(SP)
MOVW R0, R1
JAL icflush(SB)
MOVW 0(FP), R1
.
## diffname power/l.s 1993/0403
## diff -e /n/bootesdump/1993/0219/sys/src/9/power/l.s /n/bootesdump/1993/0403/sys/src/9/power/l.s
234c
MOVW M(INDEX), R2
MOVW R0, R1
BLTZ R2, bad
MOVW $1, R1
bad:
.
231a
MOVW M(TLBVIRT), R2
AND $(~(BY2PG-1)), R1, R4 /* get the VPN */
AND $((NTLBPID-1)<<6), R2 /* get the pid */
OR R4, R2
MOVW R2, M(TLBVIRT)
NOOP
.
## diffname power/l.s 1993/0501
## diff -e /n/bootesdump/1993/0403/sys/src/9/power/l.s /n/fornaxdump/1993/0501/sys/src/brazil/power/l.s
519c
MOVW FCR31, R2 /* Read stalls the fpu until inst. complete. */
.
509c
MOVW FCR31, R1 /* Read it to stall the fpu */
.
420c
BEQ R26, return /* syscall, don't save */
.
409a
TEXT forkret(SB), $0
MOVW R0, R1 /* Fake out system call return */
JMP sysrestore
.
398c
MOVW $1, R26 /* not syscall */
.
375a
sysrestore:
.
370,371c
MOVW 8(R(MACH)), R(USER) /* set up to mach->p */
MOVW 4(SP), R1 /* first arg for syscall/trap */
.
363d
343,350c
MOVW $(MACHADDR&0xffff0000), R27
OR $(MACHADDR&0xffff), R27
MOVW $MPID, R26
MOVB 3(R26), R26
AND $7, R26
SLL $PGSHIFT, R26
ADDU R26,R27 /* R27->current mach */
MOVW 8(R27), R26 /* R27 = mach->proc */
MOVW 8(R26), R27 /* mach->proc->kstack */
MOVW SP, R26 /* save user sp */
ADDU $(KSTACK-UREGSIZE-2*BY2WD), R27, SP
.
337d
308,310c
MOVW $((MACHADDR+4)&0xffff0000), R26 /* get &mach[0].stb BUG */
OR $((MACHADDR+4)&0xffff), R26
MOVW $MPID, R27 /* add BY2PG*machno */
.
305,306c
/*
* R27 = (((tlbvirt<<1)^(tlbvirt>>12)) & (STLBSIZE-1)) << 8
* (8 to clear zero in TLBPHYS)
*/
MOVW R27, M(TLBPHYS)
.
292c
*/
.
286,287c
/* get m->tlbfault BUG
MOVW $((MACHADDR+368) & 0xffff0000), R26
.
281a
TEXT vector80(SB), $-4
.
280c
TEXT getcause(SB), $0
MOVW M(CAUSE), R1
RET
.
270d
255d
240,244c
MOVW M(INDEX), R1
.
232,237d
198a
TEXT putcontext(SB), $4
SLL $6, R1
MOVW R1, M(TLBVIRT)
RET
.
197c
JMP (R7)
.
191,192c
MOVW 0(FP), R7
.
186,189c
MOVW R1, 0(FP) /* save arguments for later */
MOVW $(64*1024), R7
MOVW R7, 8(SP)
.
136d
131c
MOVW 4(FP), R3 /* lk->val */
.
111c
MOVW R31, 0xC(R(MACH)) /* save PC in m->splpc */
.
102c
MOVW R31, 0xC(R(MACH)) /* save PC in m->splpc */
.
## diffname power/l.s 1994/0406
## diff -e /n/fornaxdump/1993/0501/sys/src/brazil/power/l.s /n/fornaxdump/1994/0406/sys/src/brazil/power/l.s
791a
RET
TEXT getstatus(SB), $0
MOVW M(STATUS), R1
.
305,307c
MOVW $((MACHADDR+4) & 0xffff0000), R26 /* get &mach[0].stb BUG */
OR $((MACHADDR+4) & 0xffff), R26
MOVW $MPID, R27 /* add BY2PG*machno */
.
299,303c
/* R27 = (((tlbvirt<<1)^(tlbvirt>>12)) & (STLBSIZE-1)) << 8 (8 to clear zero in TLBPHYS) */
MOVW R27, M(TLBPHYS) /* scratch register, store */
.
280c
/*
get m->tlbfault BUG
.
241,242d
## diffname power/l.s 1995/0108
## diff -e /n/fornaxdump/1994/0406/sys/src/brazil/power/l.s /n/fornaxdump/1995/0108/sys/src/brazil/power/l.s
134c
AND $~IE, R5, R4
.
123c
OR $IE, R1, R2
.
113,114c
AND $IE, R1
AND $~IE, R2
.
104c
AND $~IE, R1, R2
.
## diffname power/l.s 1997/0327 # deleted
## diff -e /n/fornaxdump/1995/0108/sys/src/brazil/power/l.s /n/emeliedump/1997/0327/sys/src/brazil/power/l.s
1,792d
|