svn commit: r206834 - in head/sys/mips: include mips

Juli Mallett jmallett at FreeBSD.org
Mon Apr 19 07:34:26 UTC 2010


Author: jmallett
Date: Mon Apr 19 07:34:26 2010
New Revision: 206834
URL: http://svn.freebsd.org/changeset/base/206834

Log:
  o) Eliminate the "stand" frame and its use.  Use CALLFRAME_* everywhere.
  o) Use <machine/asm.h> macros for register-width, etc., rather than doing it
     by hand in a few more assembly files.
  o) Reduce diffs between various bits of TLB refill code in exception.S and
     between interrupt processing code.
  o) Use PTR_* to operate on registers that are pointers (e.g. sp).
  o) Add and use a macro, CLEAR_PTE_SWBITS rather than using the
     mysteriously-named WIRED_SHIFT to select bits to truncate when loading PTEs.
  o) Don't doubly disable interrupts by moving zero to the status register,
     especially since that has the nasty side-effect of taking us out of 64-bit
     mode.
  o) Use CLEAR_STATUS to disable interrupts the first time.
  o) Keep SR_PX set as well as SR_[KSU]X when doing exception processing.  This
     is the bit that determines whether 64-bit operations are allowed.
  o) Don't enable interrupts until configure_final(), like most other ports.

Modified:
  head/sys/mips/include/regnum.h
  head/sys/mips/mips/autoconf.c
  head/sys/mips/mips/exception.S
  head/sys/mips/mips/fp.S
  head/sys/mips/mips/machdep.c
  head/sys/mips/mips/swtch.S
  head/sys/mips/mips/vm_machdep.c

Modified: head/sys/mips/include/regnum.h
==============================================================================
--- head/sys/mips/include/regnum.h	Mon Apr 19 07:16:01 2010	(r206833)
+++ head/sys/mips/include/regnum.h	Mon Apr 19 07:34:26 2010	(r206834)
@@ -42,10 +42,6 @@
 #ifndef _MACHINE_REGNUM_H_
 #define	_MACHINE_REGNUM_H_
 
-#define	STAND_ARG_SIZE		16
-#define	STAND_FRAME_SIZE	24
-#define	STAND_RA_OFFSET		20
-
 /* This must match the numbers
  * in pcb.h and is used by
  * swtch.S

Modified: head/sys/mips/mips/autoconf.c
==============================================================================
--- head/sys/mips/mips/autoconf.c	Mon Apr 19 07:16:01 2010	(r206833)
+++ head/sys/mips/mips/autoconf.c	Mon Apr 19 07:34:26 2010	(r206834)
@@ -102,6 +102,7 @@ static void
 configure_final(dummy)
 	void *dummy;
 {
+	intr_enable();
 
 	cninit_finish(); 
 

Modified: head/sys/mips/mips/exception.S
==============================================================================
--- head/sys/mips/mips/exception.S	Mon Apr 19 07:16:01 2010	(r206833)
+++ head/sys/mips/mips/exception.S	Mon Apr 19 07:34:26 2010	(r206834)
@@ -66,37 +66,14 @@
 
 #include "assym.s"
 
-#if defined(ISA_MIPS32)
-#undef WITH_64BIT_CP0
-#elif defined(ISA_MIPS64)
-#define WITH_64BIT_CP0
-#elif defined(ISA_MIPS3)
-#define WITH_64BIT_CP0
-#else
-#error "Please write the code for this ISA"
-#endif
+/*
+ * Clear the software-managed bits in a PTE in register pr.
+ */
+#define	CLEAR_PTE_SWBITS(pr)							\
+	sll		pr, 2 ;							\
+	srl		pr, 2			# keep bottom 30 bits
 
-#ifdef WITH_64BIT_CP0
-#define _SLL	dsll
-#define	_SRL	dsrl
-#define	_MFC0	dmfc0
-#define	_MTC0	dmtc0
-#define WIRED_SHIFT 34
-#else
-#define _SLL	sll
-#define	_SRL	srl
-#define	_MFC0	mfc0
-#define	_MTC0	mtc0
-#define WIRED_SHIFT 2
-#endif
 	.set	noreorder			# Noreorder is default style!
-#if defined(ISA_MIPS32)
-	.set	mips32
-#elif defined(ISA_MIPS64)
-	.set	mips64
-#elif defined(ISA_MIPS3)
-	.set	mips3
-#endif
 
 /*
  * Reasonable limit
@@ -125,12 +102,12 @@
  *
  *
  */
-
-	.set	noat
 VECTOR(MipsTLBMiss, unknown)
-	j	_C_LABEL(MipsDoTLBMiss)
-	mfc0	k0, COP_0_BAD_VADDR		# get the fault address
-	nop
+	.set push
+	.set noat
+	j	MipsDoTLBMiss
+	MFC0	k0, COP_0_BAD_VADDR		# get the fault address
+	.set pop
 VECTOR_END(MipsTLBMiss)
 
 /*
@@ -145,42 +122,40 @@ VECTOR_END(MipsTLBMiss)
  * let the processor trap to load the correct value after service.
  *----------------------------------------------------------------------------
  */
+ 	.set push
+	.set noat
 MipsDoTLBMiss:
-						#k0 already has BadVA
-	bltz	k0, 1f				#02: k0<0 -> 1f (kernel fault)
-	srl	k0, k0, SEGSHIFT - 2		#03: k0=seg offset (almost)
-	GET_CPU_PCPU(k1)
-	lw	k1, PC_SEGBASE(k1)
-	beqz	k1, 2f			      #05: make sure segbase is not null
-	andi	k0, k0, 0x7fc			#06: k0=seg offset (mask 0x3)
-#xxx mips64 unsafe?
-	addu	k1, k0, k1			#07: k1=seg entry address
-	lw	k1, 0(k1)			#08: k1=seg entry
-	mfc0	k0, COP_0_BAD_VADDR		#09: k0=bad address (again)
-	beq	k1, zero, 2f			#0a: ==0 -- no page table
-	srl	k0, PAGE_SHIFT - 2			#0b: k0=VPN (aka va>>10)
+	bltz		k0, 1f				#02: k0<0 -> 1f (kernel fault)
+	PTR_SRL		k0, k0, SEGSHIFT - 2		#03: k0=seg offset (almost)
 
-	andi	k0, k0, ((NPTEPG/2) - 1) << 3	#0c: k0=page tab offset
-#xxx mips64 unsafe?
-	addu	k1, k1, k0			#0d: k1=pte address
-	lw	k0, 0(k1)			#0e: k0=lo0 pte
-	lw	k1, 4(k1)			#0f: k1=lo1 pte
-	_SLL	k0, k0, WIRED_SHIFT		#10: keep bottom 30 bits
-	_SRL	k0, k0, WIRED_SHIFT		#11: keep bottom 30 bits
-	_MTC0	k0, COP_0_TLB_LO0		#12: lo0 is loaded
-	_SLL	k1, k1, WIRED_SHIFT		#13: keep bottom 30 bits
-	_SRL	k1, k1, WIRED_SHIFT		#14: keep bottom 30 bits
-	_MTC0	k1, COP_0_TLB_LO1		#15: lo1 is loaded
-	HAZARD_DELAY
-	tlbwr					#1a: write to tlb
+	GET_CPU_PCPU(k1)
+	PTR_L		k1, PC_SEGBASE(k1)
+	beqz		k1, 2f				#05: make sure segbase is not null
+	andi		k0, k0, 0xffc			#06: k0=seg offset (mask 0x3)
+	PTR_ADDU	k1, k0, k1			#07: k1=seg entry address
+
+	PTR_L		k1, 0(k1)			#08: k1=seg entry
+	MFC0		k0, COP_0_BAD_VADDR		#09: k0=bad address (again)
+	beq		k1, zero, 2f			#0a: ==0 -- no page table
+	srl		k0, PAGE_SHIFT - 2		#0b: k0=VPN (aka va>>10)
+	andi		k0, k0, 0xff8			#0c: k0=page tab offset
+	PTR_ADDU	k1, k1, k0			#0d: k1=pte address
+	lw		k0, 0(k1)			#0e: k0=lo0 pte
+	lw		k1, 4(k1)			#0f: k1=lo0 pte
+	CLEAR_PTE_SWBITS(k0)
+	MTC0		k0, COP_0_TLB_LO0		#12: lo0 is loaded
+	COP0_SYNC
+	CLEAR_PTE_SWBITS(k1)
+	MTC0		k1, COP_0_TLB_LO1		#15: lo1 is loaded
+	COP0_SYNC
+	tlbwr						#1a: write to tlb
 	HAZARD_DELAY
-	eret					#1f: retUrn from exception
-1:	j _C_LABEL(MipsTLBMissException)	#20: kernel exception
-	nop					#21: branch delay slot
-2:	j	SlowFault			#22: no page table present
-	nop					#23: branch delay slot
-
-	.set	at
+	eret						#1f: retUrn from exception
+1:	j		MipsTLBMissException		#20: kernel exception
+	nop						#21: branch delay slot
+2:	j		SlowFault			#22: no page table present
+	nop						#23: branch delay slot
+	.set pop
 
 /*
  * This code is copied to the general exception vector address to
@@ -207,7 +182,7 @@ VECTOR(MipsException, unknown)
 						#  the cause is already
 						#  shifted left by 2 bits so
 						#  we dont have to shift.
-	lw	k0, 0(k0)			# Get the function address
+	PTR_L	k0, 0(k0)			# Get the function address
 	nop
 	j	k0				# Jump to the function.
 	nop
@@ -244,20 +219,9 @@ SlowFault:
  *
  *----------------------------------------------------------------------------
  */
-#if defined(ISA_MIPS32)
-#define	STORE	sw	/* 32 bit mode regsave instruction */
-#define	LOAD	lw	/* 32 bit mode regload instruction */
-#define	RSIZE	4	/* 32 bit mode register size */
-#elif defined(ISA_MIPS64)
-#define	STORE	sd	/* 64 bit mode regsave instruction */
-#define	LOAD	ld	/* 64 bit mode regload instruction */
-#define	RSIZE	8	/* 64 bit mode register size */
-#else
-#error "Please write code for this isa."	
-#endif
 
 #define	SAVE_REG(reg, offs, base) \
-	STORE	reg, STAND_ARG_SIZE + (RSIZE * offs) (base)
+	REG_S	reg, CALLFRAME_SIZ + (SZREG * offs) (base)
 
 #ifdef TARGET_OCTEON
 #define CLEAR_STATUS \
@@ -274,7 +238,7 @@ SlowFault:
 	and     a0, a0, a2              ; \
 	mtc0	a0, COP_0_STATUS_REG
 #endif
-	
+
 /*
  * Save CPU and CP0 register state.
  *
@@ -317,8 +281,8 @@ SlowFault:
 	mfhi	v1			;\
 	mfc0	a0, COP_0_STATUS_REG	;\
 	mfc0	a1, COP_0_CAUSE_REG	;\
-	mfc0	a2, COP_0_BAD_VADDR	;\
-	mfc0	a3, COP_0_EXC_PC	;\
+	MFC0	a2, COP_0_BAD_VADDR	;\
+	MFC0	a3, COP_0_EXC_PC	;\
 	SAVE_REG(v0, MULLO, sp)		;\
 	SAVE_REG(v1, MULHI, sp)		;\
 	SAVE_REG(a0, SR, sp)		;\
@@ -332,20 +296,20 @@ SlowFault:
 	PTR_ADDU v0, sp, KERN_EXC_FRAME_SIZE ;\
 	SAVE_REG(v0, SP, sp)		;\
 	CLEAR_STATUS			;\
-	PTR_ADDU a0, sp, STAND_ARG_SIZE	;\
+	PTR_ADDU a0, sp, CALLFRAME_SIZ	;\
 	ITLBNOPFIX
 
 #define	RESTORE_REG(reg, offs, base) \
-	LOAD	reg, STAND_ARG_SIZE + (RSIZE * offs) (base)
+	REG_L	reg, CALLFRAME_SIZ + (SZREG * offs) (base)
 
 #define	RESTORE_CPU \
-	mtc0	zero,COP_0_STATUS_REG	;\
+	CLEAR_STATUS			;\
 	RESTORE_REG(k0, SR, sp)		;\
 	RESTORE_REG(t0, MULLO, sp)	;\
 	RESTORE_REG(t1, MULHI, sp)	;\
 	mtlo	t0			;\
 	mthi	t1			;\
-	_MTC0	v0, COP_0_EXC_PC	;\
+	MTC0	v0, COP_0_EXC_PC	;\
 	.set noat		        ;\
 	RESTORE_REG(AT, AST, sp)	;\
 	RESTORE_REG(v0, V0, sp)		;\
@@ -384,13 +348,13 @@ SlowFault:
  * the status register and the multiply lo and high registers.
  * In addition, we set this up for linkage conventions.
  */
-#define	KERN_REG_SIZE		(NUMSAVEREGS * RSIZE)
-#define	KERN_EXC_FRAME_SIZE	(STAND_FRAME_SIZE + KERN_REG_SIZE + 16)
+#define	KERN_REG_SIZE		(NUMSAVEREGS * SZREG)
+#define	KERN_EXC_FRAME_SIZE	(CALLFRAME_SIZ + KERN_REG_SIZE + 16)
 
 NNON_LEAF(MipsKernGenException, KERN_EXC_FRAME_SIZE, ra)
 	.set	noat
-	subu	sp, sp, KERN_EXC_FRAME_SIZE
-	.mask	0x80000000, (STAND_RA_OFFSET - KERN_EXC_FRAME_SIZE)
+	PTR_SUBU	sp, sp, KERN_EXC_FRAME_SIZE
+	.mask	0x80000000, (CALLFRAME_RA - KERN_EXC_FRAME_SIZE)
 /*
  *  Save CPU state, building 'frame'.
  */
@@ -401,7 +365,7 @@ NNON_LEAF(MipsKernGenException, KERN_EXC
 	PTR_LA	gp, _C_LABEL(_gp)
 	PTR_LA	k0, _C_LABEL(trap)
 	jalr	k0
-	sw	a3, STAND_RA_OFFSET + KERN_REG_SIZE(sp)		# for debugging
+	REG_S	a3, CALLFRAME_RA + KERN_REG_SIZE(sp)		# for debugging
 
 	/*
 	 * Update interrupt mask in saved status register
@@ -410,7 +374,6 @@ NNON_LEAF(MipsKernGenException, KERN_EXC
 	 * in trap handler
 	 */
 	mfc0	a0, COP_0_STATUS_REG
-	mtc0	zero, COP_0_STATUS_REG
 	and	a0, a0, SR_INT_MASK
 	RESTORE_REG(a1, SR, sp)
 	and	a1, a1, ~SR_INT_MASK
@@ -424,10 +387,10 @@ END(MipsKernGenException)
 
 
 #define	SAVE_U_PCB_REG(reg, offs, base) \
-	STORE	reg, U_PCB_REGS + (RSIZE * offs) (base)
+	REG_S	reg, U_PCB_REGS + (SZREG * offs) (base)
 
 #define	RESTORE_U_PCB_REG(reg, offs, base) \
-	LOAD	reg, U_PCB_REGS + (RSIZE * offs) (base)
+	REG_L	reg, U_PCB_REGS + (SZREG * offs) (base)
 
 /*----------------------------------------------------------------------------
  *
@@ -443,14 +406,14 @@ END(MipsKernGenException)
  *
  *----------------------------------------------------------------------------
  */
-NNON_LEAF(MipsUserGenException, STAND_FRAME_SIZE, ra)
+NNON_LEAF(MipsUserGenException, CALLFRAME_SIZ, ra)
 	.set	noat
-	.mask	0x80000000, (STAND_RA_OFFSET - STAND_FRAME_SIZE)
+	.mask	0x80000000, (CALLFRAME_RA - CALLFRAME_SIZ)
 /*
  * Save all of the registers except for the kernel temporaries in u.u_pcb.
  */
 	GET_CPU_PCPU(k1)
-	lw	k1, PC_CURPCB(k1)
+	PTR_L	k1, PC_CURPCB(k1)
 	SAVE_U_PCB_REG(AT, AST, k1)
 	.set	at
 	SAVE_U_PCB_REG(v0, V0, k1)
@@ -476,17 +439,17 @@ NNON_LEAF(MipsUserGenException, STAND_FR
 	SAVE_U_PCB_REG(s2, S2, k1)
 	SAVE_U_PCB_REG(s3, S3, k1)
 	SAVE_U_PCB_REG(s4, S4, k1)
-	mfc0	a2, COP_0_BAD_VADDR		# Third arg is the fault addr
+	MFC0	a2, COP_0_BAD_VADDR		# Third arg is the fault addr
 	SAVE_U_PCB_REG(s5, S5, k1)
 	SAVE_U_PCB_REG(s6, S6, k1)
 	SAVE_U_PCB_REG(s7, S7, k1)
 	SAVE_U_PCB_REG(t8, T8, k1)
-	mfc0	a3, COP_0_EXC_PC		# Fourth arg is the pc.
+	MFC0	a3, COP_0_EXC_PC		# Fourth arg is the pc.
 	SAVE_U_PCB_REG(t9, T9, k1)
 	SAVE_U_PCB_REG(gp, GP, k1)
 	SAVE_U_PCB_REG(sp, SP, k1)
 	SAVE_U_PCB_REG(s8, S8, k1)
-	subu	sp, k1, STAND_FRAME_SIZE	 # switch to kernel SP
+	PTR_SUBU	sp, k1, CALLFRAME_SIZ	 # switch to kernel SP
 	SAVE_U_PCB_REG(ra, RA, k1)
 	SAVE_U_PCB_REG(v0, MULLO, k1)
 	SAVE_U_PCB_REG(v1, MULHI, k1)
@@ -494,12 +457,12 @@ NNON_LEAF(MipsUserGenException, STAND_FR
 	SAVE_U_PCB_REG(a1, CAUSE, k1)
 	SAVE_U_PCB_REG(a2, BADVADDR, k1)
 	SAVE_U_PCB_REG(a3, PC, k1)
-	sw	a3, STAND_RA_OFFSET(sp)	# for debugging
+	REG_S	a3, CALLFRAME_RA(sp)	# for debugging
 	PTR_LA	gp, _C_LABEL(_gp)	# switch to kernel GP
 # Turn off fpu and enter kernel mode
 	and	t0, a0, ~(SR_COP_1_BIT | SR_EXL | SR_KSU_MASK | SR_INT_ENAB)
 #ifdef TARGET_OCTEON
-	or      t0, t0, (MIPS_SR_KX | MIPS_SR_SX | MIPS_SR_UX)
+	or      t0, t0, (MIPS_SR_KX | MIPS_SR_SX | MIPS_SR_UX | MIPS32_SR_PX)
 #endif	
 	mtc0	t0, COP_0_STATUS_REG
 	PTR_ADDU a0, k1, U_PCB_REGS
@@ -518,10 +481,7 @@ NNON_LEAF(MipsUserGenException, STAND_FR
  */
 	DO_AST
 
-	mfc0	t0, COP_0_STATUS_REG	# disable int
-	and	t0, t0, ~(MIPS_SR_INT_IE)
-	mtc0	t0, COP_0_STATUS_REG
-	ITLBNOPFIX
+	CLEAR_STATUS
 
 /*
  * The use of k1 for storing the PCB pointer must be done only
@@ -529,7 +489,7 @@ NNON_LEAF(MipsUserGenException, STAND_FR
  * by the interrupt code.
  */
 	GET_CPU_PCPU(k1)
-	lw	k1, PC_CURPCB(k1)
+	PTR_L	k1, PC_CURPCB(k1)
 
 	/*
 	 * Update interrupt mask in saved status register
@@ -549,7 +509,7 @@ NNON_LEAF(MipsUserGenException, STAND_FR
 	mthi	t1
 	RESTORE_U_PCB_REG(a0, PC, k1)
 	RESTORE_U_PCB_REG(v0, V0, k1)
-        _MTC0	a0, COP_0_EXC_PC	# set return address
+        MTC0	a0, COP_0_EXC_PC	# set return address
 	RESTORE_U_PCB_REG(v1, V1, k1)
 	RESTORE_U_PCB_REG(a0, A0, k1)
 	RESTORE_U_PCB_REG(a1, A1, k1)
@@ -578,9 +538,6 @@ NNON_LEAF(MipsUserGenException, STAND_FR
 	RESTORE_U_PCB_REG(k0, SR, k1)
 	RESTORE_U_PCB_REG(s8, S8, k1)
 	RESTORE_U_PCB_REG(ra, RA, k1)
-#ifdef TARGET_OCTEON
-	and k0, k0, ~(MIPS_SR_KX | MIPS_SR_SX | MIPS_SR_UX)
-#endif
 	.set noat
 	RESTORE_U_PCB_REG(AT, AST, k1)
 
@@ -610,27 +567,25 @@ END(MipsUserGenException)
 
 NNON_LEAF(MipsKernIntr, KERN_EXC_FRAME_SIZE, ra)
 	.set	noat
-	subu	sp, sp, KERN_EXC_FRAME_SIZE
-	.mask	0x80000000, (STAND_RA_OFFSET - KERN_EXC_FRAME_SIZE)
+	PTR_SUBU	sp, sp, KERN_EXC_FRAME_SIZE
+	.mask	0x80000000, (CALLFRAME_RA - KERN_EXC_FRAME_SIZE)
 /*
- * Save the relevant kernel registers onto the stack.
+ *  Save CPU state, building 'frame'.
  */
 	SAVE_CPU
-        
 /*
- * Call the interrupt handler.
+ *  Call the interrupt handler. a0 points at the saved frame.
  */
 	PTR_LA	gp, _C_LABEL(_gp)
-	PTR_ADDU a0, sp, STAND_ARG_SIZE
 	PTR_LA	k0, _C_LABEL(cpu_intr)
 	jalr	k0
-	sw	a3, STAND_RA_OFFSET + KERN_REG_SIZE(sp)
-	/* Why no AST processing here? */
+	REG_S	a3, CALLFRAME_RA + KERN_REG_SIZE(sp)		# for debugging
 
 	/*
 	 * Update interrupt mask in saved status register
 	 * Some of interrupts could be disabled by
-	 * intr filters
+	 * intr filters if interrupts are enabled later
+	 * in trap handler
 	 */
 	mfc0	a0, COP_0_STATUS_REG
 	and	a0, a0, SR_INT_MASK
@@ -638,12 +593,8 @@ NNON_LEAF(MipsKernIntr, KERN_EXC_FRAME_S
 	and	a1, a1, ~SR_INT_MASK
 	or	a1, a1, a0
 	SAVE_REG(a1, SR, sp)
-
-/*
- * Restore registers and return from the interrupt.
- */
-	lw	v0, STAND_RA_OFFSET + KERN_REG_SIZE(sp)
-	RESTORE_CPU
+	REG_L	v0, CALLFRAME_RA + KERN_REG_SIZE(sp)
+	RESTORE_CPU			# v0 contains the return address.
 	sync
 	eret
 	.set	at
@@ -668,15 +619,15 @@ END(MipsKernIntr)
  *
  *----------------------------------------------------------------------------
  */
-NNON_LEAF(MipsUserIntr, STAND_FRAME_SIZE, ra)
+NNON_LEAF(MipsUserIntr, CALLFRAME_SIZ, ra)
 	.set	noat
-	.mask	0x80000000, (STAND_RA_OFFSET - STAND_FRAME_SIZE)
+	.mask	0x80000000, (CALLFRAME_RA - CALLFRAME_SIZ)
 /*
  * Save the relevant user registers into the u.u_pcb struct.
  * We don't need to save s0 - s8 because the compiler does it for us.
  */
 	GET_CPU_PCPU(k1)
-	lw	k1, PC_CURPCB(k1)
+	PTR_L	k1, PC_CURPCB(k1)
 	SAVE_U_PCB_REG(AT, AST, k1)
 	.set	at
 	SAVE_U_PCB_REG(v0, V0, k1)
@@ -715,19 +666,19 @@ NNON_LEAF(MipsUserIntr, STAND_FRAME_SIZE
 	mfhi	v1
 	mfc0	a0, COP_0_STATUS_REG
 	mfc0	a1, COP_0_CAUSE_REG
-	mfc0	a3, COP_0_EXC_PC
+	MFC0	a3, COP_0_EXC_PC
 	SAVE_U_PCB_REG(v0, MULLO, k1)
 	SAVE_U_PCB_REG(v1, MULHI, k1)
 	SAVE_U_PCB_REG(a0, SR, k1)
 	SAVE_U_PCB_REG(a1, CAUSE, k1)
 	SAVE_U_PCB_REG(a3, PC, k1)	# PC in a3, note used later!
-	subu	sp, k1, STAND_FRAME_SIZE  # switch to kernel SP
+	PTR_SUBU	sp, k1, CALLFRAME_SIZ  # switch to kernel SP
 	PTR_LA	gp, _C_LABEL(_gp)	# switch to kernel GP
 
 # Turn off fpu, disable interrupts, set kernel mode kernel mode, clear exception level.
 	and	t0, a0, ~(SR_COP_1_BIT | SR_EXL | SR_INT_ENAB | SR_KSU_MASK)
 #ifdef TARGET_OCTEON
-	or      t0, t0, (MIPS_SR_KX | MIPS_SR_SX | MIPS_SR_UX)
+	or      t0, t0, (MIPS_SR_KX | MIPS_SR_SX | MIPS_SR_UX | MIPS32_SR_PX)
 #endif	
 	mtc0	t0, COP_0_STATUS_REG
 	ITLBNOPFIX
@@ -737,7 +688,7 @@ NNON_LEAF(MipsUserIntr, STAND_FRAME_SIZE
  */
 	PTR_LA	k0, _C_LABEL(cpu_intr)
 	jalr	k0
-	sw	a3, STAND_RA_OFFSET(sp)	# for debugging
+	REG_S	a3, CALLFRAME_RA(sp)	# for debugging
 
 /*
  * Enable interrupts before doing ast().
@@ -759,13 +710,10 @@ NNON_LEAF(MipsUserIntr, STAND_FRAME_SIZE
 /*
  * Restore user registers and return. 
  */
-	mfc0	t0, COP_0_STATUS_REG	# disable int
-	and	t0, t0, ~(MIPS_SR_INT_IE)
-	mtc0	t0, COP_0_STATUS_REG
-	ITLBNOPFIX
+ 	CLEAR_STATUS
 
 	GET_CPU_PCPU(k1)
-	lw	k1, PC_CURPCB(k1)
+	PTR_L	k1, PC_CURPCB(k1)
 
 	/*
 	 * Update interrupt mask in saved status register
@@ -793,7 +741,7 @@ NNON_LEAF(MipsUserIntr, STAND_FRAME_SIZE
 	RESTORE_U_PCB_REG(t2, PC, k1)
 	mtlo	t0
 	mthi	t1
-	_MTC0	t2, COP_0_EXC_PC	# set return address
+	MTC0	t2, COP_0_EXC_PC	# set return address
 	RESTORE_U_PCB_REG(v0, V0, k1)
 	RESTORE_U_PCB_REG(v1, V1, k1)
 	RESTORE_U_PCB_REG(a0, A0, k1)
@@ -814,9 +762,6 @@ NNON_LEAF(MipsUserIntr, STAND_FRAME_SIZE
 	RESTORE_U_PCB_REG(k0, SR, k1)
 	RESTORE_U_PCB_REG(sp, SP, k1)
 	RESTORE_U_PCB_REG(ra, RA, k1)
-#ifdef TARGET_OCTEON
-	and k0, k0, ~(MIPS_SR_KX | MIPS_SR_SX | MIPS_SR_UX)
-#endif
 	.set	noat
 	RESTORE_U_PCB_REG(AT, AST, k1)
 
@@ -832,78 +777,78 @@ NLEAF(MipsTLBInvalidException)
 	.set noat
 	.set noreorder
 
-	mfc0	k0, COP_0_BAD_VADDR
-	li	k1, VM_MAXUSER_ADDRESS
-	sltu	k1, k0, k1
-	bnez	k1, 1f
+	MFC0		k0, COP_0_BAD_VADDR
+	PTR_LI		k1, VM_MAXUSER_ADDRESS
+	sltu		k1, k0, k1
+	bnez		k1, 1f
 	nop
 
-	/* badvaddr = kernel address */
-	lui	k1, %hi(_C_LABEL(kernel_segmap))
-	b	2f
-	lw	k1, %lo(_C_LABEL(kernel_segmap))(k1)
+	/* Kernel address.  */
+	lui		k1, %hi(kernel_segmap)		# k1=hi of segbase
+	b		2f
+	PTR_L		k1, %lo(kernel_segmap)(k1)	# k1=segment tab base
 
-1:
-	/* badvaddr = user address */
+1:	/* User address.  */
 	GET_CPU_PCPU(k1)
-	lw	k1, PC_SEGBASE(k1)
+	PTR_L		k1, PC_SEGBASE(k1)
 
-2:
-	beqz	k1, 3f			/* invalid page directory pointer */
+2:	/* Validate page directory pointer.  */
+	beqz		k1, 3f
 	nop
 
-	srl	k0, SEGSHIFT - 2
-	andi	k0, 0xffc
-	addu	k1, k1, k0
-	lw	k1, 0(k1)
-	beqz	k1, 3f			/* invalid page table page pointer */
+	PTR_SRL		k0, SEGSHIFT - 2		# k0=seg offset (almost)
+	beq		k1, zero, MipsKernGenException	# ==0 -- no seg tab
+	andi		k0, k0, 0xffc			# k0=seg offset (mask 0x3)
+	PTR_ADDU	k1, k0, k1			# k1=seg entry address
+	PTR_L		k1, 0(k1)			# k1=seg entry
+
+	/* Validate page table pointer.  */
+	beqz		k1, 3f
 	nop
 
-	mfc0	k0, COP_0_BAD_VADDR
-	srl	k0, PAGE_SHIFT - 2
-	andi	k0, 0xffc
-	addu	k1, k1, k0
+	MFC0		k0, COP_0_BAD_VADDR		# k0=bad address (again)
+	PTR_SRL		k0, PAGE_SHIFT - 2		# k0=VPN
+	andi		k0, k0, 0xffc			# k0=page tab offset
+	PTR_ADDU	k1, k1, k0			# k1=pte address
+	lw		k0, 0(k1)			# k0=this PTE
 
-	lw	k0, 0(k1)
-	andi	k0, PTE_V
-	beqz	k0, 3f			/* invalid page table entry */
+	/* Validate page table entry.  */
+	andi		k0, PTE_V
+	beqz		k0, 3f
 	nop
 
-	andi	k0, k1, 4
-	bnez	k0, odd_page
+	/* Check whether this is an even or odd entry.  */
+	andi		k0, k1, 4
+	bnez		k0, odd_page
 	nop
 
-even_page:
-	lw	k0, 0(k1)
-	_SLL	k0, k0, WIRED_SHIFT
-	_SRL	k0, k0, WIRED_SHIFT
-	_MTC0	k0, COP_0_TLB_LO0
-
-	lw	k0, 4(k1)
-	_SLL	k0, k0, WIRED_SHIFT
-	_SRL	k0, k0, WIRED_SHIFT
-	_MTC0	k0, COP_0_TLB_LO1
+	lw		k0, 0(k1)
+	lw		k1, 4(k1)
+	CLEAR_PTE_SWBITS(k0)
+	MTC0		k0, COP_0_TLB_LO0
+	COP0_SYNC
+	CLEAR_PTE_SWBITS(k1)
+	MTC0		k1, COP_0_TLB_LO1
+	COP0_SYNC
 
-	b	tlb_insert_entry
+	b		tlb_insert_entry
 	nop
 
 odd_page:
-	lw	k0, 0(k1)
-	_SLL	k0, k0, WIRED_SHIFT
-	_SRL	k0, k0, WIRED_SHIFT
-	_MTC0	k0, COP_0_TLB_LO1
-
-	lw	k0, -4(k1)
-	_SLL	k0, k0, WIRED_SHIFT
-	_SRL	k0, k0, WIRED_SHIFT
-	_MTC0	k0, COP_0_TLB_LO0
+	lw		k0, -4(k1)
+	lw		k1, 0(k1)
+	CLEAR_PTE_SWBITS(k0)
+	MTC0		k0, COP_0_TLB_LO0
+	COP0_SYNC
+	CLEAR_PTE_SWBITS(k1)
+	MTC0		k1, COP_0_TLB_LO1
+	COP0_SYNC
 
 tlb_insert_entry:
 	tlbp
 	HAZARD_DELAY
-	mfc0	k0, COP_0_TLB_INDEX
-	HAZARD_DELAY
-	bltz	k0, tlb_insert_random
+	mfc0		k0, COP_0_TLB_INDEX
+	bltz		k0, tlb_insert_random
 	nop
 	tlbwi
 	eret
@@ -927,8 +872,8 @@ tlb_insert_random:
 	 * Check for kernel stack overflow.
 	 */
 	GET_CPU_PCPU(k1)
-	lw	k0, PC_CURTHREAD(k1)
-	lw	k0, TD_KSTACK(k0)
+	PTR_L	k0, PC_CURTHREAD(k1)
+	PTR_L	k0, TD_KSTACK(k0)
 	sltu	k0, k0, sp
 	bnez	k0, _C_LABEL(MipsKernGenException)
 	nop
@@ -944,8 +889,8 @@ tlb_insert_random:
 	sll	k1, k1, PAGE_SHIFT + 1
 
 	PTR_LA	k0, _C_LABEL(pcpu_space)
-	addiu	k0, (PAGE_SIZE * 2)
-	addu	k0, k0, k1
+	PTR_ADDU	k0, PAGE_SIZE * 2
+	PTR_ADDU	k0, k0, k1
 
 	/*
 	 * Stash the original value of 'sp' so we can update trapframe later.
@@ -954,12 +899,12 @@ tlb_insert_random:
 	move	k1, sp
 
 	move	sp, k0
-	subu	sp, sp, KERN_EXC_FRAME_SIZE
+	PTR_SUBU	sp, sp, KERN_EXC_FRAME_SIZE
 
 	move	k0, ra
 	move	ra, zero
-	sw	ra, CALLFRAME_RA(sp)	/* stop the ddb backtrace right here */
-	sw	zero, CALLFRAME_SP(sp)
+	REG_S	ra, CALLFRAME_RA(sp)	/* stop the ddb backtrace right here */
+	REG_S	zero, CALLFRAME_SP(sp)
 	move	ra, k0
 
 	SAVE_CPU
@@ -974,8 +919,8 @@ tlb_insert_random:
 	 * Squelch any more overflow checks by setting the stack base to 0.
 	 */
 	GET_CPU_PCPU(k1)
-	lw	k0, PC_CURTHREAD(k1)
-	sw	zero, TD_KSTACK(k0)
+	PTR_L	k0, PC_CURTHREAD(k1)
+	PTR_S	zero, TD_KSTACK(k0)
 
 	move	a1, a0
 	PANIC("kernel stack overflow - trapframe at %p")
@@ -1008,34 +953,30 @@ END(MipsTLBInvalidException)
  */
 NLEAF(MipsTLBMissException)
 	.set	noat
-	mfc0	k0, COP_0_BAD_VADDR		# k0=bad address
-	li	k1, (VM_MAX_KERNEL_ADDRESS)	# check fault address against
-	sltu	k1, k1, k0			# upper bound of kernel_segmap
-	bnez	k1, _C_LABEL(MipsKernGenException)  # out of bound
-	lui	k1, %hi(_C_LABEL(kernel_segmap))  # k1=hi of segbase
-	srl	k0, 20				# k0=seg offset (almost)
-	lw	k1, %lo(_C_LABEL(kernel_segmap))(k1)  # k1=segment tab base
-	beq	k1, zero, _C_LABEL(MipsKernGenException)  # ==0 -- no seg tab
-	andi	k0, k0, 0xffc			# k0=seg offset (mask 0x3)
-#xxx mips64 unsafe
-	addu	k1, k0, k1			# k1=seg entry address
-	lw	k1, 0(k1)			# k1=seg entry
-	mfc0	k0, COP_0_BAD_VADDR		# k0=bad address (again)
-	beq	k1, zero, _C_LABEL(MipsKernGenException)  # ==0 -- no page table
-	srl	k0, 10				# k0=VPN (aka va>>10)
-	andi	k0, k0, 0xff8			# k0=page tab offset
-#xxx mips64 unsafe
-	addu	k1, k1, k0			# k1=pte address
-	lw	k0, 0(k1)			# k0=lo0 pte
-	lw	k1, 4(k1)			# k1=lo1 pte
-	_SLL	k0, WIRED_SHIFT			# chop bits [31..30]
-	_SRL	k0, WIRED_SHIFT			# chop bits [31..30]
-	_MTC0	k0, COP_0_TLB_LO0		# lo0 is loaded
-	_SLL	k1, WIRED_SHIFT			# chop bits [31..30]
-	_SRL	k1, WIRED_SHIFT			# chop bits [31..30]
-	_MTC0	k1, COP_0_TLB_LO1		# lo1 is loaded
-
-	HAZARD_DELAY
+	MFC0		k0, COP_0_BAD_VADDR		# k0=bad address
+	PTR_LI		k1, VM_MAX_KERNEL_ADDRESS	# check fault address against
+	sltu		k1, k1, k0			# upper bound of kernel_segmap
+	bnez		k1, MipsKernGenException	# out of bound
+	lui		k1, %hi(kernel_segmap)		# k1=hi of segbase
+	PTR_SRL		k0, SEGSHIFT - 2		# k0=seg offset (almost)
+	PTR_L		k1, %lo(kernel_segmap)(k1)	# k1=segment tab base
+	beq		k1, zero, MipsKernGenException	# ==0 -- no seg tab
+	andi		k0, k0, 0xffc			# k0=seg offset (mask 0x3)
+	PTR_ADDU	k1, k0, k1			# k1=seg entry address
+	PTR_L		k1, 0(k1)			# k1=seg entry
+	MFC0		k0, COP_0_BAD_VADDR		# k0=bad address (again)
+	beq		k1, zero, MipsKernGenException	# ==0 -- no page table
+	PTR_SRL		k0, PAGE_SHIFT - 2		# k0=VPN
+	andi		k0, k0, 0xff8			# k0=page tab offset
+	PTR_ADDU	k1, k1, k0			# k1=pte address
+	lw		k0, 0(k1)			# k0=lo0 pte
+	lw		k1, 4(k1)			# k1=lo1 pte
+	CLEAR_PTE_SWBITS(k0)
+	MTC0		k0, COP_0_TLB_LO0		# lo0 is loaded
+	COP0_SYNC
+	CLEAR_PTE_SWBITS(k1)
+	MTC0		k1, COP_0_TLB_LO1		# lo1 is loaded
+	COP0_SYNC
 	tlbwr					# write to tlb
 	HAZARD_DELAY
 	eret					# return from exception
@@ -1061,11 +1002,11 @@ END(MipsTLBMissException)
  *
  *----------------------------------------------------------------------------
  */
-NON_LEAF(MipsFPTrap, STAND_FRAME_SIZE, ra)
-	subu	sp, sp, STAND_FRAME_SIZE
+NON_LEAF(MipsFPTrap, CALLFRAME_SIZ, ra)
+	PTR_SUBU	sp, sp, CALLFRAME_SIZ
 	mfc0	t0, COP_0_STATUS_REG
-	sw	ra, STAND_RA_OFFSET(sp)
-	.mask	0x80000000, (STAND_RA_OFFSET - STAND_FRAME_SIZE)
+	REG_S	ra, CALLFRAME_RA(sp)
+	.mask	0x80000000, (CALLFRAME_RA - CALLFRAME_SIZ)
 
 	or	t1, t0, SR_COP_1_BIT
 	mtc0	t1, COP_0_STATUS_REG
@@ -1086,10 +1027,10 @@ NON_LEAF(MipsFPTrap, STAND_FRAME_SIZE, r
  * The instruction is in the branch delay slot so the branch will have to
  * be emulated to get the resulting PC.
  */
-	sw	a2, STAND_FRAME_SIZE + 8(sp)
+	PTR_S	a2, CALLFRAME_SIZ + 8(sp)
 	GET_CPU_PCPU(a0)
 #mips64 unsafe?
-	lw	a0, PC_CURPCB(a0)
+	PTR_L	a0, PC_CURPCB(a0)
 	PTR_ADDU a0, a0, U_PCB_REGS		# first arg is ptr to CPU registers
 	move	a1, a2				# second arg is instruction PC
 	move	a2, t1				# third arg is floating point CSR
@@ -1100,7 +1041,7 @@ NON_LEAF(MipsFPTrap, STAND_FRAME_SIZE, r
  * Now load the floating-point instruction in the branch delay slot
  * to be emulated.
  */
-	lw	a2, STAND_FRAME_SIZE + 8(sp)	# restore EXC pc
+	PTR_L	a2, CALLFRAME_SIZ + 8(sp)	# restore EXC pc
 	b	2f
 	lw	a0, 4(a2)			# a0 = coproc instruction
 /*
@@ -1110,10 +1051,10 @@ NON_LEAF(MipsFPTrap, STAND_FRAME_SIZE, r
 1:
 	lw	a0, 0(a2)			# a0 = coproc instruction
 #xxx mips64 unsafe?
-	addu	v0, a2, 4			# v0 = next pc
+	PTR_ADDU	v0, a2, 4			# v0 = next pc
 2:
 	GET_CPU_PCPU(t2)
-	lw	t2, PC_CURPCB(t2)
+	PTR_L	t2, PC_CURPCB(t2)
 	SAVE_U_PCB_REG(v0, PC, t2)		# save new pc
 /*
  * Check to see if the instruction to be emulated is a floating-point
@@ -1127,7 +1068,7 @@ NON_LEAF(MipsFPTrap, STAND_FRAME_SIZE, r
  */
 3:
 	GET_CPU_PCPU(a0)
-	lw	a0, PC_CURTHREAD(a0)		# get current thread
+	PTR_L	a0, PC_CURTHREAD(a0)		# get current thread
 	cfc1	a2, FPC_CSR			# code = FP execptions
 	ctc1	zero, FPC_CSR			# Clear exceptions
 	PTR_LA	t3, _C_LABEL(trapsignal)
@@ -1149,12 +1090,12 @@ NON_LEAF(MipsFPTrap, STAND_FRAME_SIZE, r
  */
 FPReturn:
 	mfc0	t0, COP_0_STATUS_REG
-	lw	ra, STAND_RA_OFFSET(sp)
+	PTR_L	ra, CALLFRAME_RA(sp)
 	and	t0, t0, ~SR_COP_1_BIT
 	mtc0	t0, COP_0_STATUS_REG
 	ITLBNOPFIX
 	j	ra
-	PTR_ADDU sp, sp, STAND_FRAME_SIZE
+	PTR_ADDU sp, sp, CALLFRAME_SIZ
 END(MipsFPTrap)
 
 /*
@@ -1182,7 +1123,7 @@ VECTOR(MipsCache, unknown)
 	PTR_LA	k0, _C_LABEL(MipsCacheException)
 	li	k1, MIPS_PHYS_MASK
 	and	k0, k1
-	li	k1, MIPS_KSEG1_START
+	PTR_LI	k1, MIPS_KSEG1_START
 	or	k0, k1
 	j	k0
 	nop
@@ -1200,16 +1141,16 @@ NESTED_NOPROFILE(MipsCacheException, KER
 	.mask	0x80000000, -4
 	PTR_LA	k0, _C_LABEL(panic)		# return to panic
 	PTR_LA	a0, 9f				# panicstr
-	_MFC0	a1, COP_0_ERROR_PC
+	MFC0	a1, COP_0_ERROR_PC
 	mfc0	a2, COP_0_CACHE_ERR		# 3rd arg cache error
 
-	_MTC0	k0, COP_0_ERROR_PC		# set return address
+	MTC0	k0, COP_0_ERROR_PC		# set return address
 
 	mfc0	k0, COP_0_STATUS_REG		# restore status
 	li	k1, SR_DIAG_DE			# ignore further errors
 	or	k0, k1
 	mtc0	k0, COP_0_STATUS_REG		# restore status
-	HAZARD_DELAY
+	COP0_SYNC
 
 	eret
 

Modified: head/sys/mips/mips/fp.S
==============================================================================
--- head/sys/mips/mips/fp.S	Mon Apr 19 07:16:01 2010	(r206833)
+++ head/sys/mips/mips/fp.S	Mon Apr 19 07:34:26 2010	(r206834)
@@ -94,9 +94,9 @@
  *
  *----------------------------------------------------------------------------
  */
-NON_LEAF(MipsEmulateFP, STAND_FRAME_SIZE, ra)
-	subu	sp, sp, STAND_FRAME_SIZE
-	sw	ra, STAND_RA_OFFSET(sp)
+NON_LEAF(MipsEmulateFP, CALLFRAME_SIZ, ra)
+	subu	sp, sp, CALLFRAME_SIZ
+	sw	ra, CALLFRAME_RA(sp)
 /*
  * Decode the FMT field (bits 24-21) and FUNCTION field (bits 5-0).
  */
@@ -2247,8 +2247,8 @@ result_fs_d:					# result is FS
 	jal	set_fd_d			# save result (in t0,t1,t2,t3)
 
 done:
-	lw	ra, STAND_RA_OFFSET(sp)
-	addu	sp, sp, STAND_FRAME_SIZE
+	lw	ra, CALLFRAME_RA(sp)
+	addu	sp, sp, CALLFRAME_SIZ
 	j	ra
 END(MipsEmulateFP)
 

Modified: head/sys/mips/mips/machdep.c
==============================================================================
--- head/sys/mips/mips/machdep.c	Mon Apr 19 07:16:01 2010	(r206833)
+++ head/sys/mips/mips/machdep.c	Mon Apr 19 07:34:26 2010	(r206834)
@@ -369,7 +369,6 @@ mips_vector_init(void)
 	 * when handler is installed for it
 	 */
 	set_intr_mask(ALL_INT_MASK);
-	intr_enable();
 
 	/* Clear BEV in SR so we start handling our own exceptions */
 	mips_wr_status(mips_rd_status() & ~SR_BOOT_EXC_VEC);

Modified: head/sys/mips/mips/swtch.S
==============================================================================
--- head/sys/mips/mips/swtch.S	Mon Apr 19 07:16:01 2010	(r206833)
+++ head/sys/mips/mips/swtch.S	Mon Apr 19 07:34:26 2010	(r206834)
@@ -65,53 +65,7 @@
 
 #include "assym.s"
 
-#if defined(ISA_MIPS32)
-#undef WITH_64BIT_CP0
-#elif defined(ISA_MIPS64)
-#define WITH_64BIT_CP0
-#elif defined(ISA_MIPS3)
-#define WITH_64BIT_CP0
-#else
-#error "Please write the code for this ISA"
-#endif
-
-#ifdef WITH_64BIT_CP0
-#define _SLL	dsll
-#define	_SRL	dsrl
-#define	_MFC0	dmfc0
-#define	_MTC0	dmtc0
-#define WIRED_SHIFT 34
-#else
-#define _SLL	sll
-#define	_SRL	srl
-#define	_MFC0	mfc0
-#define	_MTC0	mtc0
-#define WIRED_SHIFT 2
-#endif
 	.set	noreorder			# Noreorder is default style!
-#if defined(ISA_MIPS32)
-	.set	mips32
-#elif defined(ISA_MIPS64)
-	.set	mips64
-#elif defined(ISA_MIPS3)
-	.set	mips3
-#endif
-
-#if defined(ISA_MIPS32)
-#define	STORE		sw		/* 32 bit mode regsave instruction */
-#define	LOAD		lw		/* 32 bit mode regload instruction */
-#define	RSIZE		4		/* 32 bit mode register size */
-#define	STORE_FP	swc1		/* 32 bit mode fp regsave instruction */
-#define	LOAD_FP		lwc1		/* 32 bit mode fp regload instruction */
-#define	FP_RSIZE	4		/* 32 bit mode fp register size */
-#else
-#define	STORE		sd		/* 64 bit mode regsave instruction */
-#define	LOAD		ld		/* 64 bit mode regload instruction */
-#define	RSIZE		8		/* 64 bit mode register size */
-#define	STORE_FP	sdc1		/* 64 bit mode fp regsave instruction */
-#define	LOAD_FP		ldc1		/* 64 bit mode fp regload instruction */
-#define	FP_RSIZE	8		/* 64 bit mode fp register size */
-#endif
 
 /*
  * FREEBSD_DEVELOPERS_FIXME
@@ -125,28 +79,28 @@
 #endif
 
 #define	SAVE_U_PCB_REG(reg, offs, base) \
-	STORE	reg, U_PCB_REGS + (RSIZE * offs) (base)
+	REG_S	reg, U_PCB_REGS + (SZREG * offs) (base)
 
 #define	RESTORE_U_PCB_REG(reg, offs, base) \
-	LOAD	reg, U_PCB_REGS + (RSIZE * offs) (base)
+	REG_L	reg, U_PCB_REGS + (SZREG * offs) (base)
 
 #define	SAVE_U_PCB_FPREG(reg, offs, base) \
-	STORE_FP reg, U_PCB_FPREGS + (FP_RSIZE * offs) (base)
+	FP_S	reg, U_PCB_FPREGS + (SZFPREG * offs) (base)
 
 #define	RESTORE_U_PCB_FPREG(reg, offs, base) \
-	LOAD_FP	reg, U_PCB_FPREGS + (FP_RSIZE * offs) (base)
+	FP_L	reg, U_PCB_FPREGS + (SZFPREG * offs) (base)
 
 #define	SAVE_U_PCB_FPSR(reg, offs, base) \
-	STORE	reg, U_PCB_FPREGS + (FP_RSIZE * offs) (base)
+	REG_S	reg, U_PCB_FPREGS + (SZFPREG * offs) (base)
 
 #define	RESTORE_U_PCB_FPSR(reg, offs, base) \
-	LOAD	reg, U_PCB_FPREGS + (FP_RSIZE * offs) (base)
+	REG_L	reg, U_PCB_FPREGS + (SZFPREG * offs) (base)
 
 #define	SAVE_U_PCB_CONTEXT(reg, offs, base) \
-	STORE	reg, U_PCB_CONTEXT + (RSIZE * offs) (base)
+	REG_S	reg, U_PCB_CONTEXT + (SZREG * offs) (base)
 
 #define	RESTORE_U_PCB_CONTEXT(reg, offs, base) \
-	LOAD	reg, U_PCB_CONTEXT + (RSIZE * offs) (base)
+	REG_L	reg, U_PCB_CONTEXT + (SZREG * offs) (base)
 
 #define	ITLBNOPFIX	nop;nop;nop;nop;nop;nop;nop;nop;nop;nop;
 
@@ -172,7 +126,7 @@ LEAF(fork_trampoline)
  */
 	.set	noat
 	GET_CPU_PCPU(k1)
-	lw	k1, PC_CURPCB(k1)
+	PTR_L	k1, PC_CURPCB(k1)
 
 	RESTORE_U_PCB_REG(t0, MULLO, k1)
 	RESTORE_U_PCB_REG(t1, MULHI, k1)
@@ -181,7 +135,7 @@ LEAF(fork_trampoline)
 	RESTORE_U_PCB_REG(a0, PC, k1)
 	RESTORE_U_PCB_REG(AT, AST, k1)
 	RESTORE_U_PCB_REG(v0, V0, k1)
-	_MTC0	a0, COP_0_EXC_PC	# set return address
+	MTC0	a0, COP_0_EXC_PC	# set return address

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-src-all mailing list