Module Name: src
Committed By: matt
Date: Fri Aug 21 17:50:35 UTC 2009
Modified Files:
src/sys/arch/mips/mips [matt-nb5-mips64]: locore_mips3.S mipsX_subr.S
mips_mcclock_loop.S
Log Message:
Make ABI agnostic. Move locoresw to .rdata
To generate a diff of this commit:
cvs rdiff -u -r1.93.38.2 -r1.93.38.3 src/sys/arch/mips/mips/locore_mips3.S
cvs rdiff -u -r1.26.36.1 -r1.26.36.1.2.1 src/sys/arch/mips/mips/mipsX_subr.S
cvs rdiff -u -r1.3 -r1.3.18.1 src/sys/arch/mips/mips/mips_mcclock_loop.S
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/mips/mips/locore_mips3.S
diff -u src/sys/arch/mips/mips/locore_mips3.S:1.93.38.2 src/sys/arch/mips/mips/locore_mips3.S:1.93.38.3
--- src/sys/arch/mips/mips/locore_mips3.S:1.93.38.2 Thu Aug 20 22:21:55 2009
+++ src/sys/arch/mips/mips/locore_mips3.S Fri Aug 21 17:50:35 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: locore_mips3.S,v 1.93.38.2 2009/08/20 22:21:55 matt Exp $ */
+/* $NetBSD: locore_mips3.S,v 1.93.38.3 2009/08/21 17:50:35 matt Exp $ */
/*
* Copyright (c) 1997 Jonathan Stone (hereinafter referred to as the author)
@@ -166,7 +166,13 @@
* mips_wait_idle to save power.
*/
LEAF(mips_wait_idle)
- wait
+ mfc0 v0, MIPS_COP_0_STATUS
+ andi v0, v0, MIPS_SR_INT_IE
+ bne v0, zero, 1f
+ nop
+ PANIC("mips_wait_idle: interrupts disabled")
+
+1: wait
nop
nop
nop
Index: src/sys/arch/mips/mips/mipsX_subr.S
diff -u src/sys/arch/mips/mips/mipsX_subr.S:1.26.36.1 src/sys/arch/mips/mips/mipsX_subr.S:1.26.36.1.2.1
--- src/sys/arch/mips/mips/mipsX_subr.S:1.26.36.1 Tue Jun 9 17:48:20 2009
+++ src/sys/arch/mips/mips/mipsX_subr.S Fri Aug 21 17:50:35 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: mipsX_subr.S,v 1.26.36.1 2009/06/09 17:48:20 snj Exp $ */
+/* $NetBSD: mipsX_subr.S,v 1.26.36.1.2.1 2009/08/21 17:50:35 matt Exp $ */
/*
* Copyright 2002 Wasabi Systems, Inc.
@@ -119,6 +119,7 @@
#include "opt_ddb.h"
#include "opt_kgdb.h"
#include "opt_mips3_wired.h"
+#include "opt_vmswap.h"
#include <sys/cdefs.h>
@@ -308,18 +309,18 @@
mfc0 k0, MIPS_COP_0_BAD_VADDR #00: k0=bad address
lui k1, %hi(segbase) #01: k1=hi of segbase
bltz k0, 4f #02: k0<0 -> 4f (kernel fault)
- srl k0, 20 #03: k0=seg offset (almost)
- lw k1, %lo(segbase)(k1) #04: k1=segment tab base
- andi k0, k0, 0xffc #05: k0=seg offset (mask 0x3)
- addu k1, k0, k1 #06: k1=seg entry address
- lw k1, 0(k1) #07: k1=seg entry
+ srl k0, (2*PGSHIFT-2-PTR_SCALESHIFT)#03: k0=seg offset (almost)
+ PTR_L k1, %lo(segbase)(k1) #04: k1=segment tab base
+ andi k0, k0, (NBPG-(1<<PTR_SCALESHIFT))#05: k0=seg offset (mask 0x3)
+ PTR_ADDU k1, k0, k1 #06: k1=seg entry address
+ PTR_L k1, 0(k1) #07: k1=seg entry
mfc0 k0, MIPS_COP_0_BAD_VADDR #08: k0=bad address (again)
beq k1, zero, 5f #09: ==0 -- no page table
- srl k0, 10 #0a: k0=VPN (aka va>>10)
- andi k0, k0, 0xff8 #0b: k0=page tab offset
- addu k1, k1, k0 #0c: k1=pte address
- lw k0, 0(k1) #0d: k0=lo0 pte
- lw k1, 4(k1) #0e: k1=lo1 pte
+ srl k0, (PGSHIFT-2) #0a: k0=VPN (aka va>>10)
+ andi k0, k0, (NBPG-8) #0b: k0=page tab offset
+ PTR_ADDU k1, k1, k0 #0c: k1=pte address
+ INT_L k0, 0(k1) #0d: k0=lo0 pte
+ INT_L k1, 4(k1) #0e: k1=lo1 pte
sll k0, 2 #0f: chop top 2 bits (part 1a)
srl k0, 2 #10: chop top 2 bits (part 1b)
#ifdef MIPS3_5900
@@ -370,18 +371,18 @@
dmfc0 k0, MIPS_COP_0_BAD_VADDR #00: k0=bad address
lui k1, %hi(segbase) #01: k1=hi of segbase
bltz k0, 4f #02: k0<0 -> 4f (kernel fault)
- srl k0, 20 #03: k0=seg offset (almost)
- lw k1, %lo(segbase)(k1) #04: k1=segment tab base
- andi k0, k0, 0xffc #05: k0=seg offset (mask 0x3)
- addu k1, k0, k1 #06: k1=seg entry address
- lw k1, 0(k1) #07: k1=seg entry
+ srl k0, 2*PGSHIFT-2-PTR_SCALESHIFT #03: k0=seg offset (almost)
+ PTR_L k1, %lo(segbase)(k1) #04: k1=segment tab base
+ andi k0, NBPG-(1<<PTR_SCALESHIFT) #05: k0=seg offset (mask 0x3)
+ PTR_ADDU k1, k0, k1 #06: k1=seg entry address
+ PTR_L k1, 0(k1) #07: k1=seg entry
dmfc0 k0, MIPS_COP_0_BAD_VADDR #08: k0=bad address (again)
beq k1, zero, 5f #09: ==0 -- no page table
- srl k0, 10 #0a: k0=VPN (aka va>>10)
- andi k0, k0, 0xff8 #0b: k0=page tab offset
- addu k1, k1, k0 #0c: k1=pte address
- lw k0, 0(k1) #0d: k0=lo0 pte
- lw k1, 4(k1) #0e: k1=lo1 pte
+ srl k0, (PGSHIFT-2) #0a: k0=VPN (aka va>>10)
+ andi k0, k0, (NBPG-8) #0b: k0=page tab offset
+ PTR_ADDU k1, k1, k0 #0c: k1=pte address
+ INT_L k0, 0(k1) #0d: k0=lo0 pte
+ INT_L k1, 4(k1) #0e: k1=lo1 pte
sll k0, 2 #0f: chop top 2 bits (part 1a)
srl k0, 2 #10: chop top 2 bits (part 1b)
mtc0 k0, MIPS_COP_0_TLB_LO0 #11: lo0 is loaded
@@ -407,7 +408,7 @@
* Vector to real handler in KSEG1.
*/
VECTOR(MIPSX(cache), unknown)
- la k0, _C_LABEL(MIPSX(cacheException))
+ PTR_LA k0, _C_LABEL(MIPSX(cacheException))
li k1, MIPS_PHYS_MASK
and k0, k1
li k1, MIPS_KSEG1_START
@@ -420,7 +421,7 @@
* Handle MIPS32/MIPS64 style interrupt exception vector.
*/
VECTOR(MIPSX(intr), unknown)
- la k0, MIPSX(KernIntr)
+ PTR_LA k0, MIPSX(KernIntr)
j k0
nop
_VECTOR_END(MIPSX(intr))
@@ -452,13 +453,13 @@
and k1, k1, MIPS3_CR_EXC_CODE #04: mask out the cause bits.
or k1, k1, k0 #05: change index to user table
1:
- la k0, MIPSX(excpt_sw) #06: get base of the jump table
+ PTR_LA k0, MIPSX(excpt_sw) #06: get base of the jump table
addu k0, k0, k1 #07: get the address of the
# function entry. Note that
# the cause is already
# shifted left by 2 bits so
# we dont have to shift.
- lw k0, 0(k0) #08: get the function address
+ PTR_L k0, 0(k0) #08: get the function address
#nop # -slip-
j k0 #09: jump to the function
@@ -520,7 +521,7 @@
.set noat
.mask 0x80000000, -4
#if defined(DDB) || defined(KGDB)
- la k0, _C_LABEL(kdbaux)
+ PTR_LA k0, _C_LABEL(kdbaux)
REG_S s0, SF_REG_S0(k0)
REG_S s1, SF_REG_S1(k0)
REG_S s2, SF_REG_S2(k0)
@@ -538,7 +539,7 @@
* We don't need to save s0 - s8, sp and gp because
* the compiler does it for us.
*/
- subu sp, sp, KERNFRAME_SIZ
+ PTR_SUBU sp, sp, KERNFRAME_SIZ
REG_S AT, TF_BASE+TF_REG_AST(sp)
REG_S v0, TF_BASE+TF_REG_V0(sp)
REG_S v1, TF_BASE+TF_REG_V1(sp)
@@ -558,21 +559,26 @@
REG_S ta1, TF_BASE+TF_REG_TA1(sp)
REG_S ta2, TF_BASE+TF_REG_TA2(sp)
REG_S ta3, TF_BASE+TF_REG_TA3(sp)
- mfc0 a2, MIPS_COP_0_BAD_VADDR # 3rd arg is fault address
+ _MFC0 a2, MIPS_COP_0_BAD_VADDR # 3rd arg is fault address
REG_S t8, TF_BASE+TF_REG_T8(sp)
REG_S t9, TF_BASE+TF_REG_T9(sp)
REG_S ra, TF_BASE+TF_REG_RA(sp)
REG_S a0, TF_BASE+TF_REG_SR(sp)
- mfc0 a3, MIPS_COP_0_EXC_PC # 4th arg is exception PC
+ _MFC0 a3, MIPS_COP_0_EXC_PC # 4th arg is exception PC
REG_S v0, TF_BASE+TF_REG_MULLO(sp)
REG_S v1, TF_BASE+TF_REG_MULHI(sp)
REG_S a3, TF_BASE+TF_REG_EPC(sp)
- addu v0, sp, TF_BASE
- sw v0, KERNFRAME_ARG5(sp) # 5th arg is p. to trapframe
+#if defined(__mips_o32) || defined(__mips_o64)
+ PTR_ADDU v0, sp, TF_BASE
+ REG_S v0, KERNFRAME_ARG5(sp) # 5th arg is p. to trapframe
+#endif
+#if defined(__mips_n32) || defined(__mips_n64)
+ PTR_ADDU a4, sp, TF_BASE # 5th arg is p. to trapframe
+#endif
#ifdef IPL_ICU_MASK
.set at
- lw v0, _C_LABEL(md_imask)
- sw v0, TF_BASE+TF_PPL(sp)
+ INT_L v0, _C_LABEL(md_imask)
+ INT_S v0, TF_BASE+TF_PPL(sp)
nop
.set noat
#endif
@@ -580,8 +586,8 @@
* Call the trap handler.
*/
#if defined(DDB) || defined(DEBUG) || defined(KGDB)
- addu v0, sp, KERNFRAME_SIZ
- sw v0, KERNFRAME_SP(sp)
+ PTR_ADDU v0, sp, KERNFRAME_SIZ
+ REG_S v0, KERNFRAME_SP(sp)
#endif
mtc0 zero, MIPS_COP_0_STATUS # Set kernel no error level
COP0_SYNC
@@ -589,7 +595,7 @@
nop
nop
jal _C_LABEL(trap) #
- sw a3, KERNFRAME_RA(sp) # for debugging
+ REG_S a3, KERNFRAME_RA(sp) # for debugging
/*
* Restore registers and return from the exception.
@@ -601,8 +607,8 @@
nop
#ifdef IPL_ICU_MASK
.set at
- lw a0, TF_BASE+TF_PPL(sp)
- sw a0, _C_LABEL(md_imask)
+ INT_L a0, TF_BASE+TF_PPL(sp)
+ INT_S a0, _C_LABEL(md_imask)
jal _C_LABEL(md_imask_update)
nop
.set noat
@@ -647,9 +653,9 @@
REG_L t8, TF_BASE+TF_REG_T8(sp)
REG_L t9, TF_BASE+TF_REG_T9(sp)
REG_L ra, TF_BASE+TF_REG_RA(sp)
- addu sp, sp, KERNFRAME_SIZ
+ PTR_ADDU sp, sp, KERNFRAME_SIZ
#ifdef DDBnotyet
- la k0, _C_LABEL(kdbaux)
+ PTR_LA k0, _C_LABEL(kdbaux)
REG_L s0, SF_REG_S0(k0)
REG_L s1, SF_REG_S1(k0)
REG_L s2, SF_REG_S2(k0)
@@ -680,9 +686,9 @@
/*
* Save all of the registers except for the kernel temporaries in u_pcb.
*/
- lw k1, CPUVAR(CURLWP)
- lw k1, L_ADDR(k1)
- addu k1, k1, USPACE - FRAME_SIZ
+ PTR_L k1, CPUVAR(CURLWP)
+ PTR_L k1, L_ADDR(k1)
+ PTR_ADDU k1, k1, USPACE - FRAME_SIZ
REG_S AT, FRAME_AST(k1)
REG_S v0, FRAME_V0(k1)
REG_S v1, FRAME_V1(k1)
@@ -724,13 +730,13 @@
REG_S a3, FRAME_EPC(k1)
#ifdef IPL_ICU_MASK
.set at
- lw t0, _C_LABEL(md_imask)
- sw t0, FRAME_PPL(k1)
+ INT_L t0, _C_LABEL(md_imask)
+ INT_S t0, FRAME_PPL(k1)
.set noat
#endif
- addu sp, k1, -CALLFRAME_SIZ # switch to kernel SP
+ PTR_ADDU sp, k1, -CALLFRAME_SIZ # switch to kernel SP
#ifdef __GP_SUPPORT__
- la gp, _C_LABEL(_gp) # switch to kernel GP
+ PTR_LA gp, _C_LABEL(_gp) # switch to kernel GP
#endif
/*
* Turn off fpu and enter kernel mode
@@ -741,22 +747,22 @@
/*
* Call the trap handler.
*/
- lw MIPS_CURLWP, CPUVAR(CURLWP)
+ PTR_L MIPS_CURLWP, CPUVAR(CURLWP)
mtc0 t0, MIPS_COP_0_STATUS
COP0_SYNC
jal _C_LABEL(trap)
- sw a3, CALLFRAME_SIZ-4(sp) # for debugging
+ REG_S a3, CALLFRAME_RA(sp) # for debugging
/*
* Check pending asynchronous traps.
*/
- lw t0, L_MD_ASTPENDING(MIPS_CURLWP)
+ INT_L t0, L_MD_ASTPENDING(MIPS_CURLWP)
beq t0, zero, 1f
nop
/*
* We have pending asynchronous traps; all the state is already saved.
*/
jal _C_LABEL(ast)
- lw a0, CALLFRAME_SIZ + FRAME_EPC(sp)
+ REG_L a0, CALLFRAME_SIZ + FRAME_EPC(sp)
1:
/*
* Restore user registers and return.
@@ -773,14 +779,14 @@
nop # 3 nop delay
nop
nop
- addu a1, sp, CALLFRAME_SIZ
+ PTR_ADDU a1, sp, CALLFRAME_SIZ
#ifdef IPL_ICU_MASK
.set at
- lw t0, FRAME_PPL(a1)
- sw t0, _C_LABEL(md_imask)
+ INT_L t0, FRAME_PPL(a1)
+ INT_S t0, _C_LABEL(md_imask)
jal _C_LABEL(md_imask_update)
nop
- addu a1, sp, CALLFRAME_SIZ
+ PTR_ADDU a1, sp, CALLFRAME_SIZ
.set noat
#endif
# REG_L a0, FRAME_SR(a1)
@@ -841,10 +847,10 @@
NESTED_NOPROFILE(MIPSX(SystemCall), CALLFRAME_SIZ, ra)
.set noat
.mask 0x80000000, -4
- lw k1, CPUVAR(CURLWP)
- lw k1, L_ADDR(k1)
+ PTR_L k1, CPUVAR(CURLWP)
+ PTR_L k1, L_ADDR(k1)
#nop # -slip-
- addu k1, k1, USPACE - FRAME_SIZ
+ PTR_ADDU k1, k1, USPACE - FRAME_SIZ
#REG_S AT, FRAME_AST(k1)
REG_S v0, FRAME_V0(k1) # syscall #
REG_S v1, FRAME_V1(k1) # used by syscall()
@@ -853,7 +859,7 @@
REG_S a1, FRAME_A1(k1)
REG_S a2, FRAME_A2(k1)
REG_S a3, FRAME_A3(k1)
- lw a0, CPUVAR(CURLWP) # 1st arg is curlwp
+ PTR_L a0, CPUVAR(CURLWP) # 1st arg is curlwp
mfhi v1
#REG_S t0, FRAME_T0(k1) # no need to save temp regs
#REG_S t1, FRAME_T1(k1)
@@ -869,7 +875,7 @@
REG_S s1, FRAME_S1(k1)
REG_S s2, FRAME_S2(k1)
REG_S s3, FRAME_S3(k1)
- mfc0 a3, MIPS_COP_0_EXC_PC # 4th arg is PC
+ _MFC0 a3, MIPS_COP_0_EXC_PC # 4th arg is PC
REG_S s4, FRAME_S4(k1)
REG_S s5, FRAME_S5(k1)
REG_S s6, FRAME_S6(k1)
@@ -886,26 +892,26 @@
REG_S a3, FRAME_EPC(k1)
#ifdef IPL_ICU_MASK
.set at
- lw t0, _C_LABEL(md_imask)
- sw t0, FRAME_PPL(k1)
+ INT_L t0, _C_LABEL(md_imask)
+ INT_S t0, FRAME_PPL(k1)
.set noat
#endif
- lw t0, L_PROC(a0) # curlwp->l_proc (used below)
+ PTR_L t0, L_PROC(a0) # curlwp->l_proc (used below)
move MIPS_CURLWP, a0 # set curlwp reg
- addu sp, k1, -CALLFRAME_SIZ
+ PTR_ADDU sp, k1, -CALLFRAME_SIZ
#ifdef __GP_SUPPORT__
- la gp, _C_LABEL(_gp) # switch to kernel GP
+ PTR_LA gp, _C_LABEL(_gp) # switch to kernel GP
#endif
/*
* Turn off fpu and enter kernel mode
*/
.set at
- lw t1, P_MD_SYSCALL(t0) # t1 = syscall
+ PTR_L t1, P_MD_SYSCALL(t0) # t1 = syscall
and t0, a1, ~(MIPS_SR_COP_1_BIT | MIPS_SR_EXL | MIPS_SR_KSU_MASK)
.set noat
#if defined(DDB) || defined(DEBUG) || defined(KGDB)
move ra, a3
- sw ra, CALLFRAME_RA(sp)
+ REG_S ra, CALLFRAME_RA(sp)
#endif
/*
* Call the system call handler.
@@ -917,14 +923,14 @@
/*
* Check pending asynchronous traps.
*/
- lw t0, L_MD_ASTPENDING(MIPS_CURLWP)
+ INT_L t0, L_MD_ASTPENDING(MIPS_CURLWP)
beq t0, zero, 1f
nop
/*
* We have pending asynchronous traps; all the state is already saved.
*/
jal _C_LABEL(ast)
- lw a0, CALLFRAME_SIZ + FRAME_EPC(sp)
+ PTR_L a0, CALLFRAME_SIZ + FRAME_EPC(sp)
1:
/*
* Restore user registers and return.
@@ -945,14 +951,14 @@
/*
* Restore user registers and return.
*/
- addu a1, sp, CALLFRAME_SIZ
+ PTR_ADDU a1, sp, CALLFRAME_SIZ
#ifdef IPL_ICU_MASK
.set at
- lw t0, FRAME_PPL(a1)
- sw t0, _C_LABEL(md_imask)
+ INT_L t0, FRAME_PPL(a1)
+ INT_S t0, _C_LABEL(md_imask)
jal _C_LABEL(md_imask_update)
nop
- addu a1, sp, CALLFRAME_SIZ
+ PTR_ADDU a1, sp, CALLFRAME_SIZ
.set noat
#endif
# REG_L a0, FRAME_SR(a1)
@@ -1017,8 +1023,8 @@
eret
nop
#endif
- la k0, panic # return to panic
- la a0, 9f # panicstr
+ PTR_LA k0, panic # return to panic
+ PTR_LA a0, 9f # panicstr
_MFC0 a1, MIPS_COP_0_ERROR_PC
mfc0 a2, MIPS_COP_0_ECC
mfc0 a3, MIPS_COP_0_CACHE_ERR
@@ -1052,7 +1058,7 @@
NESTED_NOPROFILE(MIPSX(KernIntr), KERNFRAME_SIZ, ra)
.set noat
.mask 0x80000000, -4
- subu sp, sp, KERNFRAME_SIZ
+ PTR_SUBU sp, sp, KERNFRAME_SIZ
/*
* Save the relevant kernel registers onto the stack.
* We don't need to save s0 - s8, sp and gp because
@@ -1077,7 +1083,7 @@
REG_S ta1, TF_BASE+TF_REG_TA1(sp)
REG_S ta2, TF_BASE+TF_REG_TA2(sp)
REG_S ta3, TF_BASE+TF_REG_TA3(sp)
- mfc0 a2, MIPS_COP_0_EXC_PC # 3rd arg is exception PC
+ _MFC0 a2, MIPS_COP_0_EXC_PC # 3rd arg is exception PC
REG_S t8, TF_BASE+TF_REG_T8(sp)
REG_S t9, TF_BASE+TF_REG_T9(sp)
REG_S ra, TF_BASE+TF_REG_RA(sp)
@@ -1085,23 +1091,23 @@
REG_S v0, TF_BASE+TF_REG_MULLO(sp)
REG_S v1, TF_BASE+TF_REG_MULHI(sp)
REG_S a2, TF_BASE+TF_REG_EPC(sp)
- REG_S MIPS_CURLWP, TF_BASE+TF_PAD(sp) # XXX Atheros HAL
+ REG_S MIPS_CURLWP, TF_BASE+TF_PAD(sp) # XXX Atheros HAL
/*
* Call the interrupt handler.
*/
#if defined(DDB) || defined(DEBUG) || defined(KGDB)
move ra, a2
- sw ra, KERNFRAME_RA(sp) # for debugging
+ REG_S ra, KERNFRAME_RA(sp) # for debugging
#endif
#ifdef IPL_ICU_MASK
.set at
- lw t0, _C_LABEL(md_imask)
- sw t0, TF_BASE+TF_PPL(sp)
+ INT_L t0, _C_LABEL(md_imask)
+ INT_S t0, TF_BASE+TF_PPL(sp)
.set noat
#endif
mtc0 zero, MIPS_COP_0_STATUS # Reset exl, trap possible.
COP0_SYNC
- lw MIPS_CURLWP, CPUVAR(CURLWP) # XXX Atheros HAL
+ PTR_L MIPS_CURLWP, CPUVAR(CURLWP) # XXX Atheros HAL
jal _C_LABEL(cpu_intr)
and a3, a0, a1 # 4th is STATUS & CAUSE
/*
@@ -1114,8 +1120,8 @@
nop
#ifdef IPL_ICU_MASK
.set at
- lw a0, TF_BASE+TF_PPL(sp)
- sw a0, _C_LABEL(md_imask)
+ INT_L a0, TF_BASE+TF_PPL(sp)
+ INT_S a0, _C_LABEL(md_imask)
jal _C_LABEL(md_imask_update)
nop
.set noat
@@ -1165,7 +1171,7 @@
REG_L t8, TF_BASE+TF_REG_T8(sp)
REG_L t9, TF_BASE+TF_REG_T9(sp)
REG_L ra, TF_BASE+TF_REG_RA(sp)
- addu sp, sp, KERNFRAME_SIZ # restore kernel SP
+ PTR_ADDU sp, sp, KERNFRAME_SIZ # restore kernel SP
eret # return to interrupted point
.set at
END(MIPSX(KernIntr))
@@ -1196,9 +1202,9 @@
* Save the relevant user registers into the u_pcb.
* We don't need to save s0 - s8 because the compiler does it for us.
*/
- lw k1, CPUVAR(CURLWP)
- lw k1, L_ADDR(k1)
- addu k1, k1, USPACE - FRAME_SIZ
+ PTR_L k1, CPUVAR(CURLWP)
+ PTR_L k1, L_ADDR(k1)
+ PTR_ADDU k1, k1, USPACE - FRAME_SIZ
REG_S AT, FRAME_AST(k1)
REG_S v0, FRAME_V0(k1)
REG_S v1, FRAME_V1(k1)
@@ -1222,7 +1228,7 @@
REG_S t9, FRAME_T9(k1)
REG_S gp, FRAME_GP(k1)
REG_S sp, FRAME_SP(k1)
- mfc0 a2, MIPS_COP_0_EXC_PC # 3rd arg is PC
+ _MFC0 a2, MIPS_COP_0_EXC_PC # 3rd arg is PC
REG_S ra, FRAME_RA(k1)
REG_S a0, FRAME_SR(k1)
REG_S v0, FRAME_MULLO(k1)
@@ -1230,16 +1236,16 @@
REG_S a2, FRAME_EPC(k1)
#ifdef IPL_ICU_MASK
.set at
- lw t0, _C_LABEL(md_imask)
- sw t0, FRAME_PPL(k1)
+ INT_L t0, _C_LABEL(md_imask)
+ INT_S t0, FRAME_PPL(k1)
.set noat
#endif
- addu sp, k1, -CALLFRAME_SIZ # switch to kernel SP
+ PTR_ADDU sp, k1, -CALLFRAME_SIZ # switch to kernel SP
#ifdef __GP_SUPPORT__
- la gp, _C_LABEL(_gp) # switch to kernel GP
+ PTR_LA gp, _C_LABEL(_gp) # switch to kernel GP
#endif
- sw MIPS_CURLWP, MIPS_CURLWP_FRAME(k1)# save curlwp reg
- lw MIPS_CURLWP, CPUVAR(CURLWP) # set curlwp reg
+ PTR_S MIPS_CURLWP, MIPS_CURLWP_FRAME(k1)# save curlwp reg
+ PTR_L MIPS_CURLWP, CPUVAR(CURLWP) # set curlwp reg
/*
* Turn off fpu and enter kernel mode
*/
@@ -1248,7 +1254,7 @@
.set noat
#if defined(DDB) || defined(DEBUG) || defined(KGDB)
move ra, a2
- sw ra, CALLFRAME_RA(sp)
+ REG_S ra, CALLFRAME_RA(sp)
#endif
/*
* Call the interrupt handler.
@@ -1272,16 +1278,16 @@
nop # 3 nop hazard
nop
nop
- addu a1, sp, CALLFRAME_SIZ
+ PTR_ADDU a1, sp, CALLFRAME_SIZ
# REG_L a0, FRAME_SR(a1)
- lw v0, L_MD_ASTPENDING(MIPS_CURLWP)# any pending ast?
+ INT_L v0, L_MD_ASTPENDING(MIPS_CURLWP)# any pending ast?
# mtc0 a0, MIPS_COP_0_STATUS # restore the SR, disable intrs
nop
/*
* Check pending asynchronous traps.
*/
beq v0, zero, 1f # if no, skip ast processing
- lw MIPS_CURLWP, MIPS_CURLWP_FRAME(a1)# restore curlwp reg
+ PTR_L MIPS_CURLWP, MIPS_CURLWP_FRAME(a1)# restore curlwp reg
/*
* We have pending asynchronous traps; save remaining user state in u_pcb.
*/
@@ -1295,7 +1301,7 @@
REG_S s7, FRAME_S7(a1)
REG_S s8, FRAME_S8(a1)
REG_L a0, FRAME_EPC(a1) # argument is interrupted PC
- lw MIPS_CURLWP, CPUVAR(CURLWP) # set curlwp reg
+ PTR_L MIPS_CURLWP, CPUVAR(CURLWP) # set curlwp reg
#ifdef IPL_ICU_MASK
jal _C_LABEL(spllowersofthigh);
nop
@@ -1322,7 +1328,7 @@
nop
nop
- addu a1, sp, CALLFRAME_SIZ
+ PTR_ADDU a1, sp, CALLFRAME_SIZ
# REG_L a0, FRAME_SR(a1)
REG_L s0, FRAME_S0(a1)
REG_L s1, FRAME_S1(a1)
@@ -1349,8 +1355,8 @@
move k1, a1
#ifdef IPL_ICU_MASK
.set at
- lw t0, FRAME_PPL(k1)
- sw t0, _C_LABEL(md_imask)
+ INT_L t0, FRAME_PPL(k1)
+ INT_S t0, _C_LABEL(md_imask)
jal _C_LABEL(md_imask_update)
nop
.set noat
@@ -1424,12 +1430,12 @@
li k1, VM_MIN_KERNEL_ADDRESS # compute index
bgez k0, _C_LABEL(MIPSX(KernGenException)) # full trap processing
subu k0, k0, k1
- lw k1, _C_LABEL(Sysmapsize) # index within range?
+ INT_L k1, _C_LABEL(Sysmapsize) # index within range?
srl k0, k0, PGSHIFT
sltu k1, k0, k1
beq k1, zero, outofworld # No. Failing beyond. . .
nop # - delay slot -
- lw k1, _C_LABEL(Sysmap)
+ PTR_L k1, _C_LABEL(Sysmap)
sll k0, k0, 2 # compute offset from index
addu k1, k1, k0
@@ -1443,7 +1449,7 @@
mfc0 k0, MIPS_COP_0_TLB_INDEX
nop
bltz k0, outofworld # ASSERT(TLB entry exists)
- lw k0, 0(k1) # get PTE entry
+ INT_L k0, 0(k1) # get PTE entry
_SLL k0, k0, WIRED_SHIFT # get rid of "wired" bit
_SRL k0, k0, WIRED_SHIFT
@@ -1452,7 +1458,7 @@
and k0, k0, MIPS3_PG_V # check for valid entry
nop # required for QED5230
beq k0, zero, _C_LABEL(MIPSX(KernGenException)) # PTE invalid
- lw k0, 4(k1) # get odd PTE entry
+ INT_L k0, 4(k1) # get odd PTE entry
_SLL k0, k0, WIRED_SHIFT
mfc0 k1, MIPS_COP_0_TLB_INDEX
_SRL k0, k0, WIRED_SHIFT
@@ -1475,7 +1481,7 @@
mfc0 k0, MIPS_COP_0_TLB_INDEX
nop
bltz k0, outofworld # assert(TLB Entry exists)
- lw k0, 0(k1) # get PTE entry
+ INT_L k0, 0(k1) # get PTE entry
_SLL k0, k0, WIRED_SHIFT # get rid of wired bit
_SRL k0, k0, WIRED_SHIFT
@@ -1484,7 +1490,7 @@
and k0, k0, MIPS3_PG_V # check for valid entry
nop # required for QED5230
beq k0, zero, _C_LABEL(MIPSX(KernGenException)) # PTE invalid
- lw k0, -4(k1) # get even PTE entry
+ INT_L k0, -4(k1) # get even PTE entry
_SLL k0, k0, WIRED_SHIFT
mfc0 k1, MIPS_COP_0_TLB_INDEX
_SRL k0, k0, WIRED_SHIFT
@@ -1524,9 +1530,9 @@
.set noat
_MFC0 k0, MIPS_COP_0_BAD_VADDR # get the fault address
li k1, VM_MIN_KERNEL_ADDRESS # compute index
- subu k0, k0, k1
- lw k1, _C_LABEL(Sysmapsize) # index within range?
- srl k0, k0, PGSHIFT
+ PTR_SUBU k0, k0, k1
+ INT_L k1, _C_LABEL(Sysmapsize) # index within range?
+ PTR_SRL k0, k0, PGSHIFT
sltu k1, k0, k1
#ifdef newsmips
/* news5000 has ROM work area at 0xfff00000. */
@@ -1539,12 +1545,12 @@
beq k1, zero, outofworld # No. Failing beyond. . .
nop # - delay slot -
#endif
- lw k1, _C_LABEL(Sysmap)
- srl k0, k0, 1
- sll k0, k0, 3 # compute offset from index
- addu k1, k1, k0
- lw k0, 0(k1) # get PTE entry
- lw k1, 4(k1) # get odd PTE entry
+ PTR_L k1, _C_LABEL(Sysmap)
+ PTR_SRL k0, k0, 1
+ PTR_SLL k0, k0, 3 # compute offset from index
+ PTR_ADDU k1, k1, k0
+ INT_L k0, 0(k1) # get PTE entry
+ INT_L k1, 4(k1) # get odd PTE entry
_SLL k0, k0, WIRED_SHIFT # get rid of "wired" bit
_SRL k0, k0, WIRED_SHIFT
_MTC0 k0, MIPS_COP_0_TLB_LO0 # load PTE entry
@@ -1566,20 +1572,20 @@
outofworld:
/* eret to panic so shutdown can use K2. Try to ensure valid $sp. */
- la a0, _C_LABEL(panic)
+ PTR_LA a0, _C_LABEL(panic)
_MFC0 a2, MIPS_COP_0_EXC_PC
move a1, sp
- sll k0, k0, PGSHIFT
+ PTR_SLL k0, k0, PGSHIFT
_MTC0 a0, MIPS_COP_0_EXC_PC # return to panic
COP0_SYNC
li k1, VM_MIN_KERNEL_ADDRESS
- addu a3, k0, k1
+ PTR_ADDU a3, k0, k1
#if defined(DDB)
bltz sp, 1f # for ddb try to keep frame
nop
#endif
- la sp, start # set sp to a valid place
-1: la a0, 9f # string
+ PTR_LA sp, start # set sp to a valid place
+1: PTR_LA a0, 9f # string
eret
.set at
@@ -1855,25 +1861,25 @@
*/
LEAF_NOPROFILE(MIPSX(VCED))
.set noat
- mfc0 k0, MIPS_COP_0_BAD_VADDR # fault addr.
+ _MFC0 k0, MIPS_COP_0_BAD_VADDR # fault addr.
li k1, -16
and k0, k1
cache (CACHE_R4K_SD | CACHEOP_R4K_HIT_WB_INV), 0(k0)
cache (CACHE_R4K_D | CACHEOP_R4K_HIT_INV), 0(k0)
#ifdef DEBUG
- mfc0 k0, MIPS_COP_0_BAD_VADDR
- la k1, VCED_vaddr
- sw k0, 0(k1)
- mfc0 k0, MIPS_COP_0_EXC_PC
- la k1, VCED_epc
- sw k0, 0(k1)
- la k1, VCED_count # count number of exceptions
- srl k0, k0, 26 # position upper 4 bits of VA
+ _MFC0 k0, MIPS_COP_0_BAD_VADDR
+ PTR_LA k1, VCED_vaddr
+ PTR_S k0, 0(k1)
+ _MFC0 k0, MIPS_COP_0_EXC_PC
+ PTR_LA k1, VCED_epc
+ PTR_S k0, 0(k1)
+ PTR_LA k1, VCED_count # count number of exceptions
+ PTR_SRL k0, k0, 26 # position upper 4 bits of VA
and k0, k0, 0x3c # mask it off
add k1, k0 # get address of count table
- lw k0, 0(k1)
- addu k0, 1
- sw k0, 0(k1)
+ LONG_L k0, 0(k1)
+ LONG_ADDU k0, 1
+ LONG_S k0, 0(k1)
#endif
eret
.set at
@@ -1882,33 +1888,33 @@
.data
.globl _C_LABEL(VCED_count)
_C_LABEL(VCED_count):
- .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ LONG_WORD 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
.globl _C_LABEL(VCED_epc)
_C_LABEL(VCED_epc):
- .word 0
+ PTR_WORD 0
.globl _C_LABEL(VCED_vaddr)
_C_LABEL(VCED_vaddr):
- .word 0
+ PTR_WORD 0
.text
#endif
END(MIPSX(VCED))
LEAF_NOPROFILE(MIPSX(VCEI))
.set noat
- mfc0 k0, MIPS_COP_0_BAD_VADDR # fault addr.
+ _MFC0 k0, MIPS_COP_0_BAD_VADDR # fault addr.
cache (CACHE_R4K_SD | CACHEOP_R4K_HIT_WB_INV), 0(k0)
cache (CACHE_R4K_I | CACHEOP_R4K_HIT_INV), 0(k0)
#ifdef DEBUG
- mfc0 k0, MIPS_COP_0_BAD_VADDR
- la k1, VCEI_vaddr
- sw k0, 0(k1)
- la k1, VCEI_count # count number of exceptions
- srl k0, k0, 26 # position upper 4 bits of VA
+ _MFC0 k0, MIPS_COP_0_BAD_VADDR
+ PTR_LA k1, VCEI_vaddr
+ PTR_S k0, 0(k1)
+ PTR_LA k1, VCEI_count # count number of exceptions
+ PTR_SRL k0, k0, 26 # position upper 4 bits of VA
and k0, k0, 0x3c # mask it off
add k1, k0 # get address of count table
- lw k0, 0(k1)
+ LONG_L k0, 0(k1)
addu k0, 1
- sw k0, 0(k1)
+ LONG_S k0, 0(k1)
#endif
eret
.set at
@@ -1917,10 +1923,10 @@
.data
.globl _C_LABEL(VCEI_count)
_C_LABEL(VCEI_count):
- .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ LONG_WORD 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
.globl _C_LABEL(VCEI_vaddr)
_C_LABEL(VCEI_vaddr):
- .word 0
+ PTR_WORD 0
.text
#endif
END(MIPSX(VCEI))
@@ -1934,10 +1940,10 @@
* and s1 respectively. There is no need register save operation.
*/
LEAF(MIPSX(lwp_trampoline))
- addu sp, sp, -CALLFRAME_SIZ
+ PTR_ADDU sp, sp, -CALLFRAME_SIZ
# Call lwp_startup(), with args from cpu_switchto()/cpu_setfunc()
- la t0, _C_LABEL(lwp_startup)
+ PTR_LA t0, _C_LABEL(lwp_startup)
move a0, v0
jal ra, t0
move a1, s7
@@ -1966,7 +1972,7 @@
COP0_SYNC
nop
nop
- addu a1, sp, CALLFRAME_SIZ
+ PTR_ADDU a1, sp, CALLFRAME_SIZ
# REG_L a0, FRAME_SR(a1)
REG_L t0, FRAME_MULLO(a1)
REG_L t1, FRAME_MULHI(a1)
@@ -1979,8 +1985,8 @@
move k1, a1
#ifdef IPL_ICU_MASK
.set at
- lw t0, FRAME_PPL(k1)
- sw t0, _C_LABEL(md_imask)
+ INT_L t0, FRAME_PPL(k1)
+ INT_S t0, _C_LABEL(md_imask)
jal _C_LABEL(md_imask_update)
nop
.set noat
@@ -2028,7 +2034,7 @@
* Like lwp_trampoline, but do not call lwp_startup
*/
LEAF(MIPSX(setfunc_trampoline))
- addu sp, sp, -CALLFRAME_SIZ
+ PTR_ADDU sp, sp, -CALLFRAME_SIZ
# Call the routine specified by cpu_setfunc()
jal ra, s0
@@ -2048,9 +2054,10 @@
* sure TBIS(it) in the case.
*/
LEAF_NOPROFILE(MIPSX(cpu_switch_resume))
- lw a1, L_MD_UPTE_0(a0) # a1 = upte[0]
- lw a2, L_MD_UPTE_1(a0) # a2 = upte[1]
- lw v0, L_ADDR(a0) # va = l->l_addr
+#if !defined(ENABLE_MIPS_16KB_PAGE) || defined(VMSWAP_UAREA)
+ INT_L a1, L_MD_UPTE_0(a0) # a1 = upte[0]
+ INT_L a2, L_MD_UPTE_1(a0) # a2 = upte[1]
+ PTR_L v0, L_ADDR(a0) # va = l->l_addr
li s0, MIPS_KSEG2_START
blt v0, s0, resume
nop
@@ -2073,8 +2080,8 @@
mfc0 s0, MIPS_COP_0_TLB_INDEX
nop
bltz s0, entry0set
- sll s0, s0, 13 # PAGE_SHIFT + 1
- la s0, MIPS_KSEG0_START(s0)
+ sll s0, s0, PGSHIFT + 1 # PAGE_SHIFT + 1
+ PTR_LA s0, MIPS_KSEG0_START(s0)
_MTC0 s0, MIPS_COP_0_TLB_HI
COP0_SYNC
_MTC0 zero, MIPS_COP_0_TLB_LO0
@@ -2106,6 +2113,7 @@
nop
resume:
+#endif /* !ENABLE_MIPS_16KB_PAGE || VMSWAP_UAREA */
j ra
nop
END(MIPSX(cpu_switch_resume))
@@ -2137,7 +2145,7 @@
#nop # -slip-
bltz v0, 1f # index < 0 then skip
li t1, MIPS_KSEG0_START # invalid address
- sll v0, v0, 13 # PAGE_SHIFT + 1
+ sll v0, v0, PGSHIFT + 1 # PAGE_SHIFT + 1
addu t1, t1, v0
_MTC0 t1, MIPS_COP_0_TLB_HI # make entryHi invalid
COP0_SYNC
@@ -2145,10 +2153,15 @@
COP0_SYNC
_MTC0 zero, MIPS_COP_0_TLB_LO1 # zero out entryLo1
COP0_SYNC
+#if 1
+ nop
+#else
mtc0 zero, MIPS_COP_0_TLB_PG_MASK # zero out pageMask
+#endif
COP0_SYNC
nop
nop
+
tlbwi
COP0_SYNC
nop
@@ -2185,7 +2198,7 @@
1:
mtc0 t1, MIPS_COP_0_TLB_INDEX # set index
COP0_SYNC
- sll ta0, t1, 13 # PAGE_SHIFT + 1
+ sll ta0, t1, PGSHIFT + 1 # PAGE_SHIFT + 1
nop
/* XXX simonb: lose this nop for mips32/64? */
nop
@@ -2254,7 +2267,7 @@
1:
mtc0 t1, MIPS_COP_0_TLB_INDEX # set TLBindex
COP0_SYNC
- sll ta0, t1, 13 # PAGE_SHIFT + 1
+ sll ta0, t1, PGSHIFT + 1 # PAGE_SHIFT + 1
add ta0, v0, ta0
_MTC0 ta0, MIPS_COP_0_TLB_HI # make entryHi invalid
COP0_SYNC
@@ -2298,99 +2311,99 @@
END(MIPSX(pagezero))
#endif /* USE_64BIT_INSTRUCTIONS */
- .data
+ .rdata
.globl _C_LABEL(MIPSX(locoresw))
_C_LABEL(MIPSX(locoresw)):
- .word _C_LABEL(MIPSX(cpu_switch_resume))
- .word _C_LABEL(MIPSX(lwp_trampoline))
- .word _C_LABEL(nullop)
- .word _C_LABEL(MIPSX(setfunc_trampoline))
+ PTR_WORD _C_LABEL(MIPSX(cpu_switch_resume))
+ PTR_WORD _C_LABEL(MIPSX(lwp_trampoline))
+ PTR_WORD _C_LABEL(nullop)
+ PTR_WORD _C_LABEL(MIPSX(setfunc_trampoline))
MIPSX(excpt_sw):
####
#### The kernel exception handlers.
####
- .word _C_LABEL(MIPSX(KernIntr)) # 0 external interrupt
- .word _C_LABEL(MIPSX(KernGenException)) # 1 TLB modification
- .word _C_LABEL(MIPSX(TLBInvalidException))# 2 TLB miss (LW/I-fetch)
- .word _C_LABEL(MIPSX(TLBInvalidException))# 3 TLB miss (SW)
- .word _C_LABEL(MIPSX(KernGenException)) # 4 address error (LW/I-fetch)
- .word _C_LABEL(MIPSX(KernGenException)) # 5 address error (SW)
- .word _C_LABEL(MIPSX(KernGenException)) # 6 bus error (I-fetch)
- .word _C_LABEL(MIPSX(KernGenException)) # 7 bus error (load or store)
- .word _C_LABEL(MIPSX(KernGenException)) # 8 system call
- .word _C_LABEL(MIPSX(KernGenException)) # 9 breakpoint
- .word _C_LABEL(MIPSX(KernGenException)) # 10 reserved instruction
- .word _C_LABEL(MIPSX(KernGenException)) # 11 coprocessor unusable
- .word _C_LABEL(MIPSX(KernGenException)) # 12 arithmetic overflow
- .word _C_LABEL(MIPSX(KernGenException)) # 13 r4k trap exception
+ PTR_WORD _C_LABEL(MIPSX(KernIntr)) # 0 external interrupt
+ PTR_WORD _C_LABEL(MIPSX(KernGenException)) # 1 TLB modification
+ PTR_WORD _C_LABEL(MIPSX(TLBInvalidException))# 2 TLB miss (LW/I-fetch)
+ PTR_WORD _C_LABEL(MIPSX(TLBInvalidException))# 3 TLB miss (SW)
+ PTR_WORD _C_LABEL(MIPSX(KernGenException)) # 4 address error (LW/I-fetch)
+ PTR_WORD _C_LABEL(MIPSX(KernGenException)) # 5 address error (SW)
+ PTR_WORD _C_LABEL(MIPSX(KernGenException)) # 6 bus error (I-fetch)
+ PTR_WORD _C_LABEL(MIPSX(KernGenException)) # 7 bus error (load or store)
+ PTR_WORD _C_LABEL(MIPSX(KernGenException)) # 8 system call
+ PTR_WORD _C_LABEL(MIPSX(KernGenException)) # 9 breakpoint
+ PTR_WORD _C_LABEL(MIPSX(KernGenException)) # 10 reserved instruction
+ PTR_WORD _C_LABEL(MIPSX(KernGenException)) # 11 coprocessor unusable
+ PTR_WORD _C_LABEL(MIPSX(KernGenException)) # 12 arithmetic overflow
+ PTR_WORD _C_LABEL(MIPSX(KernGenException)) # 13 r4k trap exception
#if defined(MIPS3) && !defined(MIPS3_5900)
- .word _C_LABEL(mips3_VCEI) # 14 r4k virt coherence
+ PTR_WORD _C_LABEL(mips3_VCEI) # 14 r4k virt coherence
#else
- .word _C_LABEL(MIPSX(KernGenException)) # 14 reserved
+ PTR_WORD _C_LABEL(MIPSX(KernGenException)) # 14 reserved
#endif
- .word _C_LABEL(MIPSX(KernGenException)) # 15 r4k FP exception
- .word _C_LABEL(MIPSX(KernGenException)) # 16 reserved
- .word _C_LABEL(MIPSX(KernGenException)) # 17 reserved
- .word _C_LABEL(MIPSX(KernGenException)) # 18 reserved
- .word _C_LABEL(MIPSX(KernGenException)) # 19 reserved
- .word _C_LABEL(MIPSX(KernGenException)) # 20 reserved
- .word _C_LABEL(MIPSX(KernGenException)) # 21 reserved
- .word _C_LABEL(MIPSX(KernGenException)) # 22 reserved
- .word _C_LABEL(MIPSX(KernGenException)) # 23 watch exception
- .word _C_LABEL(MIPSX(KernGenException)) # 24 reserved
- .word _C_LABEL(MIPSX(KernGenException)) # 25 reserved
- .word _C_LABEL(MIPSX(KernGenException)) # 26 reserved
- .word _C_LABEL(MIPSX(KernGenException)) # 27 reserved
- .word _C_LABEL(MIPSX(KernGenException)) # 28 reserved
- .word _C_LABEL(MIPSX(KernGenException)) # 29 reserved
- .word _C_LABEL(MIPSX(KernGenException)) # 30 reserved
+ PTR_WORD _C_LABEL(MIPSX(KernGenException)) # 15 r4k FP exception
+ PTR_WORD _C_LABEL(MIPSX(KernGenException)) # 16 reserved
+ PTR_WORD _C_LABEL(MIPSX(KernGenException)) # 17 reserved
+ PTR_WORD _C_LABEL(MIPSX(KernGenException)) # 18 reserved
+ PTR_WORD _C_LABEL(MIPSX(KernGenException)) # 19 reserved
+ PTR_WORD _C_LABEL(MIPSX(KernGenException)) # 20 reserved
+ PTR_WORD _C_LABEL(MIPSX(KernGenException)) # 21 reserved
+ PTR_WORD _C_LABEL(MIPSX(KernGenException)) # 22 reserved
+ PTR_WORD _C_LABEL(MIPSX(KernGenException)) # 23 watch exception
+ PTR_WORD _C_LABEL(MIPSX(KernGenException)) # 24 reserved
+ PTR_WORD _C_LABEL(MIPSX(KernGenException)) # 25 reserved
+ PTR_WORD _C_LABEL(MIPSX(KernGenException)) # 26 reserved
+ PTR_WORD _C_LABEL(MIPSX(KernGenException)) # 27 reserved
+ PTR_WORD _C_LABEL(MIPSX(KernGenException)) # 28 reserved
+ PTR_WORD _C_LABEL(MIPSX(KernGenException)) # 29 reserved
+ PTR_WORD _C_LABEL(MIPSX(KernGenException)) # 30 reserved
#if defined(MIPS3) && !defined(MIPS3_5900)
- .word _C_LABEL(mips3_VCED) # 31 v. coherence exception data
+ PTR_WORD _C_LABEL(mips3_VCED) # 31 v. coherence exception data
#else
- .word _C_LABEL(MIPSX(KernGenException)) # 31 reserved
+ PTR_WORD _C_LABEL(MIPSX(KernGenException)) # 31 reserved
#endif
#####
##### The user exception handlers.
#####
- .word _C_LABEL(MIPSX(UserIntr)) # 0
- .word _C_LABEL(MIPSX(UserGenException)) # 1
- .word _C_LABEL(MIPSX(UserGenException)) # 2
- .word _C_LABEL(MIPSX(UserGenException)) # 3
- .word _C_LABEL(MIPSX(UserGenException)) # 4
- .word _C_LABEL(MIPSX(UserGenException)) # 5
- .word _C_LABEL(MIPSX(UserGenException)) # 6
- .word _C_LABEL(MIPSX(UserGenException)) # 7
- .word _C_LABEL(MIPSX(SystemCall)) # 8
- .word _C_LABEL(MIPSX(UserGenException)) # 9
- .word _C_LABEL(MIPSX(UserGenException)) # 10
- .word _C_LABEL(MIPSX(UserGenException)) # 11
- .word _C_LABEL(MIPSX(UserGenException)) # 12
- .word _C_LABEL(MIPSX(UserGenException)) # 13
+ PTR_WORD _C_LABEL(MIPSX(UserIntr)) # 0
+ PTR_WORD _C_LABEL(MIPSX(UserGenException)) # 1
+ PTR_WORD _C_LABEL(MIPSX(UserGenException)) # 2
+ PTR_WORD _C_LABEL(MIPSX(UserGenException)) # 3
+ PTR_WORD _C_LABEL(MIPSX(UserGenException)) # 4
+ PTR_WORD _C_LABEL(MIPSX(UserGenException)) # 5
+ PTR_WORD _C_LABEL(MIPSX(UserGenException)) # 6
+ PTR_WORD _C_LABEL(MIPSX(UserGenException)) # 7
+ PTR_WORD _C_LABEL(MIPSX(SystemCall)) # 8
+ PTR_WORD _C_LABEL(MIPSX(UserGenException)) # 9
+ PTR_WORD _C_LABEL(MIPSX(UserGenException)) # 10
+ PTR_WORD _C_LABEL(MIPSX(UserGenException)) # 11
+ PTR_WORD _C_LABEL(MIPSX(UserGenException)) # 12
+ PTR_WORD _C_LABEL(MIPSX(UserGenException)) # 13
#if defined(MIPS3) && !defined(MIPS3_5900)
- .word _C_LABEL(mips3_VCEI) # 14
+ PTR_WORD _C_LABEL(mips3_VCEI) # 14
#else
- .word _C_LABEL(MIPSX(UserGenException)) # 14
+ PTR_WORD _C_LABEL(MIPSX(UserGenException)) # 14
#endif
- .word _C_LABEL(MIPSX(UserGenException)) # 15
- .word _C_LABEL(MIPSX(UserGenException)) # 16
- .word _C_LABEL(MIPSX(UserGenException)) # 17
- .word _C_LABEL(MIPSX(UserGenException)) # 18
- .word _C_LABEL(MIPSX(UserGenException)) # 19
- .word _C_LABEL(MIPSX(UserGenException)) # 20
- .word _C_LABEL(MIPSX(UserGenException)) # 21
- .word _C_LABEL(MIPSX(UserGenException)) # 22
- .word _C_LABEL(MIPSX(UserGenException)) # 23
- .word _C_LABEL(MIPSX(UserGenException)) # 24
- .word _C_LABEL(MIPSX(UserGenException)) # 25
- .word _C_LABEL(MIPSX(UserGenException)) # 26
- .word _C_LABEL(MIPSX(UserGenException)) # 27
- .word _C_LABEL(MIPSX(UserGenException)) # 28
- .word _C_LABEL(MIPSX(UserGenException)) # 29
- .word _C_LABEL(MIPSX(UserGenException)) # 30
+ PTR_WORD _C_LABEL(MIPSX(UserGenException)) # 15
+ PTR_WORD _C_LABEL(MIPSX(UserGenException)) # 16
+ PTR_WORD _C_LABEL(MIPSX(UserGenException)) # 17
+ PTR_WORD _C_LABEL(MIPSX(UserGenException)) # 18
+ PTR_WORD _C_LABEL(MIPSX(UserGenException)) # 19
+ PTR_WORD _C_LABEL(MIPSX(UserGenException)) # 20
+ PTR_WORD _C_LABEL(MIPSX(UserGenException)) # 21
+ PTR_WORD _C_LABEL(MIPSX(UserGenException)) # 22
+ PTR_WORD _C_LABEL(MIPSX(UserGenException)) # 23
+ PTR_WORD _C_LABEL(MIPSX(UserGenException)) # 24
+ PTR_WORD _C_LABEL(MIPSX(UserGenException)) # 25
+ PTR_WORD _C_LABEL(MIPSX(UserGenException)) # 26
+ PTR_WORD _C_LABEL(MIPSX(UserGenException)) # 27
+ PTR_WORD _C_LABEL(MIPSX(UserGenException)) # 28
+ PTR_WORD _C_LABEL(MIPSX(UserGenException)) # 29
+ PTR_WORD _C_LABEL(MIPSX(UserGenException)) # 30
#if defined(MIPS3) && !defined(MIPS3_5900)
- .word _C_LABEL(mips3_VCED) # 31 v. coherence exception data
+ PTR_WORD _C_LABEL(mips3_VCED) # 31 v. coherence exception data
#else
- .word _C_LABEL(MIPSX(UserGenException)) # 31
+ PTR_WORD _C_LABEL(MIPSX(UserGenException)) # 31
#endif
Index: src/sys/arch/mips/mips/mips_mcclock_loop.S
diff -u src/sys/arch/mips/mips/mips_mcclock_loop.S:1.3 src/sys/arch/mips/mips/mips_mcclock_loop.S:1.3.18.1
--- src/sys/arch/mips/mips/mips_mcclock_loop.S:1.3 Mon Apr 28 20:23:28 2008
+++ src/sys/arch/mips/mips/mips_mcclock_loop.S Fri Aug 21 17:50:35 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: mips_mcclock_loop.S,v 1.3 2008/04/28 20:23:28 martin Exp $ */
+/* $NetBSD: mips_mcclock_loop.S,v 1.3.18.1 2009/08/21 17:50:35 matt Exp $ */
/*
* Copyright (c) 2005 The NetBSD Foundation, Inc.
@@ -43,10 +43,10 @@
LEAF_NOPROFILE(mips_mcclock_loop_with_clock)
- subu sp, CALLFRAME_SIZ
- sw s0, 0(sp)
- sw ra, CALLFRAME_RA(sp)
- j 2f
+ PTR_SUBU sp, CALLFRAME_SIZ
+ REG_S s0, CALLFRAME_S0(sp)
+ REG_S ra, CALLFRAME_RA(sp)
+ j 2f
move s0, zero # iters = 0;
1:
.set push
@@ -57,24 +57,24 @@
ssnop
.set pop
- addu s0, 1 # iters++;
-2: jal mips_cp0_cause_read # v0 = mips_cp0_cause_read();
+ addu s0, 1 # iters++;
+2: jal mips_cp0_cause_read # v0 = mips_cp0_cause_read();
nop
- and v0, a0 # v0 &= clockmask;
- beqz v0, 1b # if zero then repeat
- move v0, s0 # return iters
- lw ra, CALLFRAME_RA(sp)
- lw s0, 0(sp)
- j ra
- addu sp, CALLFRAME_SIZ
+ and v0, a0 # v0 &= clockmask;
+ beqz v0, 1b # if zero then repeat
+ move v0, s0 # return iters
+ REG_L ra, CALLFRAME_RA(sp)
+ REG_S s0, CALLFRAME_S0(sp)
+ j ra
+ PTR_ADDU sp, CALLFRAME_SIZ
END(mips_mcclock_loop_with_clock)
LEAF_NOPROFILE(mips_mcclock_loop_without_clock)
- subu sp, CALLFRAME_SIZ
- sw s0, 0(sp)
- sw ra, CALLFRAME_RA(sp)
- j 2f
- move s0, zero # iters = 0;
+ PTR_SUBU sp, CALLFRAME_SIZ
+ REG_S s0, CALLFRAME_S0(sp)
+ REG_S ra, CALLFRAME_RA(sp)
+ j 2f
+ move s0, zero # iters = 0;
1:
.set push
.set mips32
@@ -82,14 +82,14 @@
ssnop
.set pop
- addu s0, 1 # iters++;
-2: jal mips_cp0_cause_read # v0 = mips_cp0_cause_read();
+ addu s0, 1 # iters++;
+2: jal mips_cp0_cause_read # v0 = mips_cp0_cause_read();
nop
- and v0, a0 # v0 &= clockmask;
- beqz v0, 1b # if zero then repeat
- move v0, s0 # return iters
- lw ra, CALLFRAME_RA(sp)
- lw s0, 0(sp)
- j ra
- addu sp, CALLFRAME_SIZ
+ and v0, a0 # v0 &= clockmask;
+ beqz v0, 1b # if zero then repeat
+ move v0, s0 # return iters
+ REG_L ra, CALLFRAME_RA(sp)
+ REG_L s0, CALLFRAME_S0(sp)
+ j ra
+ PTR_ADDU sp, CALLFRAME_SIZ
END(mips_mcclock_loop_without_clock)