Module Name:    src
Committed By:   simonb
Date:           Sat May 29 12:35:27 UTC 2021

Modified Files:
        src/sys/arch/mips/include: cpuregs.h
        src/sys/arch/mips/mips: fp.S locore.S mips_emul.c mips_fpu.c
            mips_fputrap.c

Log Message:
Update the FPU register names and bit definitions to something somewhat
modern (MIPS32/MIPS64) and convert to __BIT/__BITS.


To generate a diff of this commit:
cvs rdiff -u -r1.110 -r1.111 src/sys/arch/mips/include/cpuregs.h
cvs rdiff -u -r1.57 -r1.58 src/sys/arch/mips/mips/fp.S
cvs rdiff -u -r1.227 -r1.228 src/sys/arch/mips/mips/locore.S
cvs rdiff -u -r1.29 -r1.30 src/sys/arch/mips/mips/mips_emul.c
cvs rdiff -u -r1.16 -r1.17 src/sys/arch/mips/mips/mips_fpu.c
cvs rdiff -u -r1.11 -r1.12 src/sys/arch/mips/mips/mips_fputrap.c

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/include/cpuregs.h
diff -u src/sys/arch/mips/include/cpuregs.h:1.110 src/sys/arch/mips/include/cpuregs.h:1.111
--- src/sys/arch/mips/include/cpuregs.h:1.110	Wed Mar 17 11:05:37 2021
+++ src/sys/arch/mips/include/cpuregs.h	Sat May 29 12:35:27 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpuregs.h,v 1.110 2021/03/17 11:05:37 simonb Exp $	*/
+/*	$NetBSD: cpuregs.h,v 1.111 2021/05/29 12:35:27 simonb Exp $	*/
 
 /*
  * Copyright (c) 2009 Miodrag Vallat.
@@ -704,40 +704,41 @@
 /*
  * The floating point version and status registers.
  */
-#define	MIPS_FPU_ID	$0
-#define	MIPS_FPU_CSR	$31
+#define	MIPS_FIR	$0	/* FP Implementation and Revision Register */
+#define	MIPS_FCSR	$31	/* FP Control/Status Register */
 
 /*
  * The floating point coprocessor status register bits.
  */
-#define	MIPS_FPU_ROUNDING_BITS		0x00000003
-#define	MIPS_FPU_ROUND_RN		0x00000000
-#define	MIPS_FPU_ROUND_RZ		0x00000001
-#define	MIPS_FPU_ROUND_RP		0x00000002
-#define	MIPS_FPU_ROUND_RM		0x00000003
-#define	MIPS_FPU_STICKY_BITS		0x0000007c
-#define	MIPS_FPU_STICKY_INEXACT		0x00000004
-#define	MIPS_FPU_STICKY_UNDERFLOW	0x00000008
-#define	MIPS_FPU_STICKY_OVERFLOW	0x00000010
-#define	MIPS_FPU_STICKY_DIV0		0x00000020
-#define	MIPS_FPU_STICKY_INVALID		0x00000040
-#define	MIPS_FPU_ENABLE_BITS		0x00000f80
-#define	MIPS_FPU_ENABLE_INEXACT		0x00000080
-#define	MIPS_FPU_ENABLE_UNDERFLOW	0x00000100
-#define	MIPS_FPU_ENABLE_OVERFLOW	0x00000200
-#define	MIPS_FPU_ENABLE_DIV0		0x00000400
-#define	MIPS_FPU_ENABLE_INVALID		0x00000800
-#define	MIPS_FPU_EXCEPTION_BITS		0x0003f000
-#define	MIPS_FPU_EXCEPTION_INEXACT	0x00001000
-#define	MIPS_FPU_EXCEPTION_UNDERFLOW	0x00002000
-#define	MIPS_FPU_EXCEPTION_OVERFLOW	0x00004000
-#define	MIPS_FPU_EXCEPTION_DIV0		0x00008000
-#define	MIPS_FPU_EXCEPTION_INVALID	0x00010000
-#define	MIPS_FPU_EXCEPTION_UNIMPL	0x00020000
-#define	MIPS_FPU_COND_BIT		0x00800000
-#define	MIPS_FPU_FLUSH_BIT		0x01000000	/* r4k,	 MBZ on r3k */
-#define	MIPS1_FPC_MBZ_BITS		0xff7c0000
-#define	MIPS3_FPC_MBZ_BITS		0xfe7c0000
+#define	MIPS_FCSR_RM		__BITS(1,0)
+#define	  MIPS_FCSR_RM_RN	  0	/* round to nearest */
+#define	  MIPS_FCSR_RM_RZ	  1	/* round toward zerO */
+#define	  MIPS_FCSR_RM_RP	  2	/* round towards +infinity */
+#define	  MIPS_FCSR_RM_RM	  3	/* round towards -infinity */
+#define	MIPS_FCSR_FLAGS		__BITS(6,2)
+#define	  MIPS_FCSR_FLAGS_I	  __BIT(2)	/* inexact */
+#define	  MIPS_FCSR_FLAGS_U	  __BIT(3)	/* underflow */
+#define	  MIPS_FCSR_FLAGS_O	  __BIT(4)	/* overflow */
+#define	  MIPS_FCSR_FLAGS_Z	  __BIT(5)	/* divide by zero */
+#define	  MIPS_FCSR_FLAGS_V	  __BIT(6)	/* invalid operation */
+#define	MIPS_FCSR_ENABLES	__BITS(11,7)
+#define	  MIPS_FCSR_ENABLES_I	  __BIT(7)	/* inexact */
+#define	  MIPS_FCSR_ENABLES_U	  __BIT(8)	/* underflow */
+#define	  MIPS_FCSR_ENABLES_O	  __BIT(9)	/* overflow */
+#define	  MIPS_FCSR_ENABLES_Z	  __BIT(10)	/* divide by zero */
+#define	  MIPS_FCSR_ENABLES_V	  __BIT(11)	/* invalid operation */
+#define	MIPS_FCSR_CAUSE		__BITS(17,12)
+#define	  MIPS_FCSR_CAUSE_I	  __BIT(12)	/* inexact */
+#define	  MIPS_FCSR_CAUSE_U	  __BIT(13)	/* underflow */
+#define	  MIPS_FCSR_CAUSE_O	  __BIT(14)	/* overflow */
+#define	  MIPS_FCSR_CAUSE_Z	  __BIT(15)	/* divide by zero */
+#define	  MIPS_FCSR_CAUSE_V	  __BIT(16)	/* invalid operation */
+#define	  MIPS_FCSR_CAUSE_E	  __BIT(17)	/* unimplemented operation */
+#define	MIPS_FCSR_NAN_2008	__BIT(18)
+#define	MIPS_FCSR_ABS_2008	__BIT(19)
+#define	MIPS_FCSR_FCC0		__BIT(23)
+#define	MIPS_FCSR_FCC		(MIPS_FPU_COND_BIT | __BITS(31,25))
+#define	MIPS_FCSR_FS		__BIT(24)	/* r4k+ */
 
 
 /*

Index: src/sys/arch/mips/mips/fp.S
diff -u src/sys/arch/mips/mips/fp.S:1.57 src/sys/arch/mips/mips/fp.S:1.58
--- src/sys/arch/mips/mips/fp.S:1.57	Mon May 24 07:27:39 2021
+++ src/sys/arch/mips/mips/fp.S	Sat May 29 12:35:27 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: fp.S,v 1.57 2021/05/24 07:27:39 simonb Exp $	*/
+/*	$NetBSD: fp.S,v 1.58 2021/05/29 12:35:27 simonb Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -143,10 +143,10 @@ NESTED(mips_emul_fp, CALLFRAME_SIZ, ra)
 	PTR_L	a3, fmt_tbl(v0)			# switch on FUNC & FMT
 	INT_L	a2, PCB_FPREGS+FRAME_FSR(t0)
 #else
-	cfc1	a2, MIPS_FPU_CSR		# get exception register
+	cfc1	a2, MIPS_FCSR			# get exception register
 	PTR_L	a3, fmt_tbl(v0)			# switch on FUNC & FMT
-	and	a2, a2, ~MIPS_FPU_EXCEPTION_BITS	# clear exception
-	ctc1	a2, MIPS_FPU_CSR
+	and	a2, a2, ~MIPS_FCSR_CAUSE	# clear exception
+	ctc1	a2, MIPS_FCSR
 #endif
 	j	a3
 
@@ -809,17 +809,17 @@ branchc1_tbl:
 	.text
 
 bcfalse:
-	li	v0, MIPS_FPU_COND_BIT
+	li	v0, MIPS_FCSR_FCC0
 	and	v0, v0, a2
 	beq	v0, zero, bcemul_branch
 	b	done
 bctrue:
-	li	v0, MIPS_FPU_COND_BIT
+	li	v0, MIPS_FCSR_FCC0
 	and	v0, v0, a2
 	bne	v0, zero, bcemul_branch
 	b	done
 bcfalse_l:
-	li	v0, MIPS_FPU_COND_BIT
+	li	v0, MIPS_FCSR_FCC0
 	and	v0, v0, a2
 	beq	v0, zero, bcemul_branch
 	REG_PROLOGUE
@@ -829,7 +829,7 @@ bcfalse_l:
 	REG_EPILOGUE
 	b	done
 bctrue_l:
-	li	v0, MIPS_FPU_COND_BIT
+	li	v0, MIPS_FCSR_FCC0
 	and	v0, v0, a2
 	bne	v0, zero, bcemul_branch
 	REG_PROLOGUE
@@ -899,8 +899,8 @@ add_sub_s:
 3:
 	bne	ta1, zero, result_ft_s		# if FT != 0, result=FT
 	bne	ta2, zero, result_ft_s
-	and	v0, a2, MIPS_FPU_ROUNDING_BITS	# get rounding mode
-	bne	v0, MIPS_FPU_ROUND_RM, 1f	# round to -infinity?
+	and	v0, a2, MIPS_FCSR_RM		# get rounding mode
+	bne	v0, MIPS_FCSR_RM_RM, 1f		# round to -infinity?
 	or	t0, t0, ta0			# compute result sign
 	b	result_fs_s
 1:
@@ -958,8 +958,8 @@ add_sub_s:
 	bne	t2, ta2, 2f			# if same, result=0
 	move	t1, zero			# result=0
 	move	t2, zero
-	and	v0, a2, MIPS_FPU_ROUNDING_BITS	# get rounding mode
-	bne	v0, MIPS_FPU_ROUND_RM, 1f	# round to -infinity?
+	and	v0, a2, MIPS_FCSR_RM		# get rounding mode
+	bne	v0, MIPS_FCSR_RM_RM, 1f		# round to -infinity?
 	or	t0, t0, ta0			# compute result sign
 	b	result_fs_s
 1:
@@ -1022,8 +1022,8 @@ add_sub_d:
 	bne	ta1, zero, result_ft_d		# if FT != 0, result=FT
 	bne	ta2, zero, result_ft_d
 	bne	ta3, zero, result_ft_d
-	and	v0, a2, MIPS_FPU_ROUNDING_BITS	# get rounding mode
-	bne	v0, MIPS_FPU_ROUND_RM, 1f	# round to -infinity?
+	and	v0, a2, MIPS_FCSR_RM		# get rounding mode
+	bne	v0, MIPS_FCSR_RM_RM, 1f		# round to -infinity?
 	or	t0, t0, ta0			# compute result sign
 	b	result_fs_d
 1:
@@ -1116,8 +1116,8 @@ add_sub_d:
 	move	t1, zero			# result=0
 	move	t2, zero
 	move	t3, zero
-	and	v0, a2, MIPS_FPU_ROUNDING_BITS	# get rounding mode
-	bne	v0, MIPS_FPU_ROUND_RM, 1f	# round to -infinity?
+	and	v0, a2, MIPS_FCSR_RM		# get rounding mode
+	bne	v0, MIPS_FCSR_RM_RM, 1f		# round to -infinity?
 	or	t0, t0, ta0			# compute result sign
 	b	result_fs_d
 1:
@@ -1312,15 +1312,15 @@ div_s:
 3:
 	bne	ta1, zero, 2f			# is FT zero?
 	bne	ta2, zero, 1f
-	or	a2, a2, MIPS_FPU_EXCEPTION_DIV0 | MIPS_FPU_STICKY_DIV0
-	and	v0, a2, MIPS_FPU_ENABLE_DIV0	# trap enabled?
+	or	a2, a2, MIPS_FCSR_CAUSE_Z | MIPS_FCSR_FLAGS_Z
+	and	v0, a2, MIPS_FCSR_ENABLES_Z	# trap enabled?
 	bne	v0, zero, fpe_trap
 #ifdef FPEMUL
 	PTR_L	t1, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	#nop
 	INT_S	a2, PCB_FPREGS+FRAME_FSR(t1)
 #else
-	ctc1	a2, MIPS_FPU_CSR		# save exceptions
+	ctc1	a2, MIPS_FCSR			# save exceptions
 #endif
 	li	t1, SEXP_INF			# result is infinity
 	move	t2, zero
@@ -1392,15 +1392,15 @@ div_d:
 	bne	ta1, zero, 2f			# is FT zero?
 	bne	ta2, zero, 1f
 	bne	ta3, zero, 1f
-	or	a2, a2, MIPS_FPU_EXCEPTION_DIV0 | MIPS_FPU_STICKY_DIV0
-	and	v0, a2, MIPS_FPU_ENABLE_DIV0	# trap enabled?
+	or	a2, a2, MIPS_FCSR_CAUSE_Z | MIPS_FCSR_FLAGS_Z
+	and	v0, a2, MIPS_FCSR_ENABLES_Z	# trap enabled?
 	bne	v0, zero, fpe_trap
 #ifdef FPEMUL
 	PTR_L	t1, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	#nop
 	INT_S	a2, PCB_FPREGS+FRAME_FSR(t1)
 #else
-	ctc1	a2, MIPS_FPU_CSR		# save exceptions
+	ctc1	a2, MIPS_FCSR			# save exceptions
 #endif
 	li	t1, DEXP_INF			# result is infinity
 	move	t2, zero
@@ -1912,7 +1912,7 @@ cvt_d_w:
  * Convert single to integer.
  */
 cvt_w_s:
-	and	v1, a2, MIPS_FPU_ROUNDING_BITS	# get rounding mode
+	and	v1, a2, MIPS_FCSR_RM		# get rounding mode
 _cvt_w_s:
 	jal	_C_LABEL(get_fs_s)
 	bne	t1, SEXP_INF, 1f		# is FS an infinity?
@@ -1933,7 +1933,7 @@ _cvt_w_s:
  * Convert double to integer.
  */
 cvt_w_d:
-	and	v1, a2, MIPS_FPU_ROUNDING_BITS	# get rounding mode
+	and	v1, a2, MIPS_FCSR_RM		# get rounding mode
 _cvt_w_d:
 	jal	_C_LABEL(get_fs_d)
 	bne	t1, DEXP_INF, 1f		# is FS an infinity?
@@ -1954,8 +1954,8 @@ cvt_w:
 	blt	t1, WEXP_MIN, underflow_w	# is exponent too small?
 #else
 	bge	t1, WEXP_MIN, 3f		# is exponent too small?
-	beq	v1, MIPS_FPU_ROUND_RP, 1f	# round to +infinity
-	beq	v1, MIPS_FPU_ROUND_RM, 2f	# round to -infinity
+	beq	v1, MIPS_FCSR_RM_RP, 1f		# round to +infinity
+	beq	v1, MIPS_FCSR_RM_RM, 2f		# round to -infinity
 
 	move	t2, zero
 	b	result_fs_w
@@ -2002,10 +2002,10 @@ cvt_w:
  * round result (t0 is sign, t2 is integer part, t3 is fractional part).
  */
 2:
-	and	v0, a2, MIPS_FPU_ROUNDING_BITS	# get rounding mode
-	beq	v0, MIPS_FPU_ROUND_RN, 3f	# round to nearest
-	beq	v0, MIPS_FPU_ROUND_RZ, 5f	# round to zero (truncate)
-	beq	v0, MIPS_FPU_ROUND_RP, 1f	# round to +infinity
+	and	v0, a2, MIPS_FCSR_RM		# get rounding mode
+	beq	v0, MIPS_FCSR_RM_RN, 3f		# round to nearest
+	beq	v0, MIPS_FCSR_RM_RZ, 5f		# round to zero (truncate)
+	beq	v0, MIPS_FCSR_RM_RP, 1f		# round to +infinity
 	beq	t0, zero, 5f			# if sign is positive, truncate
 	b	2f
 1:
@@ -2034,15 +2034,15 @@ cvt_w:
  * Handle inexact exception.
  */
 inexact_w:
-	or	a2, a2, MIPS_FPU_EXCEPTION_INEXACT | MIPS_FPU_STICKY_INEXACT
-	and	v0, a2, MIPS_FPU_ENABLE_INEXACT
+	or	a2, a2, MIPS_FCSR_CAUSE_I | MIPS_FCSR_FLAGS_I
+	and	v0, a2, MIPS_FCSR_ENABLES_I
 	bne	v0, zero, fpe_trap
 #ifdef FPEMUL
 	PTR_L	v0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	#nop
 	INT_S	a2, PCB_FPREGS+FRAME_FSR(v0)
 #else
-	ctc1	a2, MIPS_FPU_CSR		# save exceptions
+	ctc1	a2, MIPS_FCSR			# save exceptions
 #endif
 	b	result_fs_w
 
@@ -2052,10 +2052,10 @@ inexact_w:
  * or generate an invalid exception.
  */
 overflow_w:
-	or	a2, a2, MIPS_FPU_EXCEPTION_OVERFLOW | MIPS_FPU_STICKY_OVERFLOW
-	and	v0, a2, MIPS_FPU_ENABLE_OVERFLOW
+	or	a2, a2, MIPS_FCSR_CAUSE_O | MIPS_FCSR_FLAGS_O
+	and	v0, a2, MIPS_FCSR_ENABLES_O
 	bne	v0, zero, fpe_trap
-	and	v0, a2, MIPS_FPU_ENABLE_INEXACT
+	and	v0, a2, MIPS_FCSR_ENABLES_I
 	bne	v0, zero, inexact_w		# inexact traps enabled?
 	b	invalid_w
 
@@ -2065,10 +2065,10 @@ overflow_w:
  * or generate an invalid exception.
  */
 underflow_w:
-	or	a2, a2, MIPS_FPU_EXCEPTION_UNDERFLOW | MIPS_FPU_STICKY_UNDERFLOW
-	and	v0, a2, MIPS_FPU_ENABLE_UNDERFLOW
+	or	a2, a2, MIPS_FCSR_CAUSE_U | MIPS_FCSR_FLAGS_U
+	and	v0, a2, MIPS_FCSR_ENABLES_U
 	bne	v0, zero, fpe_trap
-	and	v0, a2, MIPS_FPU_ENABLE_INEXACT
+	and	v0, a2, MIPS_FCSR_ENABLES_I
 	bne	v0, zero, inexact_w		# inexact traps enabled?
 	b	invalid_w
 
@@ -2144,32 +2144,32 @@ test_cond:
 	and	v0, v0, a0			# condition match instruction?
 set_cond:
 	bne	v0, zero, 1f
-	and	a2, a2, ~MIPS_FPU_COND_BIT	# clear condition bit
+	and	a2, a2, ~MIPS_FCSR_FCC0		# clear condition bit
 	b	2f
 1:
-	or	a2, a2, MIPS_FPU_COND_BIT	# set condition bit
+	or	a2, a2, MIPS_FCSR_FCC0		# set condition bit
 2:
 #ifdef FPEMUL
 	PTR_L	v0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	#nop
 	INT_S	a2, PCB_FPREGS+FRAME_FSR(v0)
 #else
-	ctc1	a2, MIPS_FPU_CSR		# save condition bit
+	ctc1	a2, MIPS_FCSR			# save condition bit
 #endif
 	b	done
 
 unordered:
 	and	v0, a0, COND_UNORDERED		# this cmp match unordered?
 	bne	v0, zero, 1f
-	and	a2, a2, ~MIPS_FPU_COND_BIT	# clear condition bit
+	and	a2, a2, ~MIPS_FCSR_FCC0		# clear condition bit
 	b	2f
 1:
-	or	a2, a2, MIPS_FPU_COND_BIT	# set condition bit
+	or	a2, a2, MIPS_FCSR_FCC0		# set condition bit
 2:
 	and	v0, a0, COND_SIGNAL
 	beq	v0, zero, 1f			# is this a signaling cmp?
-	or	a2, a2, MIPS_FPU_EXCEPTION_INVALID | MIPS_FPU_STICKY_INVALID
-	and	v0, a2, MIPS_FPU_ENABLE_INVALID
+	or	a2, a2, MIPS_FCSR_CAUSE_V | MIPS_FCSR_FLAGS_V
+	and	v0, a2, MIPS_FCSR_ENABLES_V
 	bne	v0, zero, fpe_trap
 1:
 #ifdef FPEMUL
@@ -2177,7 +2177,7 @@ unordered:
 	#nop
 	INT_S	a2, PCB_FPREGS+FRAME_FSR(v0)
 #else
-	ctc1	a2, MIPS_FPU_CSR		# save condition bit
+	ctc1	a2, MIPS_FCSR			# save condition bit
 #endif
 	b	done
 
@@ -2267,10 +2267,10 @@ norm_s:
 norm_noshift_s:
 	move	ta1, t1				# save unrounded exponent
 	move	ta2, t2				# save unrounded fraction
-	and	v0, a2, MIPS_FPU_ROUNDING_BITS	# get rounding mode
-	beq	v0, MIPS_FPU_ROUND_RN, 3f	# round to nearest
-	beq	v0, MIPS_FPU_ROUND_RZ, 5f	# round to zero (truncate)
-	beq	v0, MIPS_FPU_ROUND_RP, 1f	# round to +infinity
+	and	v0, a2, MIPS_FCSR_RM		# get rounding mode
+	beq	v0, MIPS_FCSR_RM_RN, 3f		# round to nearest
+	beq	v0, MIPS_FCSR_RM_RZ, 5f		# round to zero (truncate)
+	beq	v0, MIPS_FCSR_RM_RP, 1f		# round to +infinity
 	beq	t0, zero, 5f			# if sign is positive, truncate
 	b	2f
 1:
@@ -2310,15 +2310,15 @@ inexact_s:
 	and	t2, t2, ~SIMPL_ONE		# clear implied one bit
 inexact_nobias_s:
 	jal	_C_LABEL(set_fd_s)		# save result
-	or	a2, a2, MIPS_FPU_EXCEPTION_INEXACT | MIPS_FPU_STICKY_INEXACT
-	and	v0, a2, MIPS_FPU_ENABLE_INEXACT
+	or	a2, a2, MIPS_FCSR_CAUSE_I | MIPS_FCSR_FLAGS_I
+	and	v0, a2, MIPS_FCSR_ENABLES_I
 	bne	v0, zero, fpe_trap
 #ifdef FPEMUL
 	PTR_L	v0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	#nop
 	INT_S	a2, PCB_FPREGS+FRAME_FSR(v0)
 #else
-	ctc1	a2, MIPS_FPU_CSR		# save exceptions
+	ctc1	a2, MIPS_FCSR			# save exceptions
 #endif
 	b	done
 
@@ -2328,18 +2328,18 @@ inexact_nobias_s:
  * or generate an infinity.
  */
 overflow_s:
-	or	a2, a2, MIPS_FPU_EXCEPTION_OVERFLOW | MIPS_FPU_STICKY_OVERFLOW
-	and	v0, a2, MIPS_FPU_ENABLE_OVERFLOW
+	or	a2, a2, MIPS_FCSR_CAUSE_O | MIPS_FCSR_FLAGS_O
+	and	v0, a2, MIPS_FCSR_ENABLES_O
 	beq	v0, zero, 1f
 	subu	t1, t1, 192			# bias exponent
 	and	t2, t2, ~SIMPL_ONE		# clear implied one bit
 	jal	_C_LABEL(set_fd_s)		# save result
 	b	fpe_trap
 1:
-	and	v0, a2, MIPS_FPU_ROUNDING_BITS	# get rounding mode
-	beq	v0, MIPS_FPU_ROUND_RN, 3f	# round to nearest
-	beq	v0, MIPS_FPU_ROUND_RZ, 1f	# round to zero (truncate)
-	beq	v0, MIPS_FPU_ROUND_RP, 2f	# round to +infinity
+	and	v0, a2, MIPS_FCSR_RM		# get rounding mode
+	beq	v0, MIPS_FCSR_RM_RN, 3f		# round to nearest
+	beq	v0, MIPS_FCSR_RM_RZ, 1f		# round to zero (truncate)
+	beq	v0, MIPS_FCSR_RM_RP, 2f		# round to +infinity
 	bne	t0, zero, 3f
 1:
 	li	t1, SEXP_MAX			# result is max finite
@@ -2357,7 +2357,7 @@ overflow_s:
  * "loss of accuracy" is detected as "an inexact result".
  */
 underflow_s:
-	and	v0, a2, MIPS_FPU_ENABLE_UNDERFLOW
+	and	v0, a2, MIPS_FCSR_ENABLES_U
 	beq	v0, zero, 1f
 /*
  * Underflow is enabled so compute the result and trap.
@@ -2365,7 +2365,7 @@ underflow_s:
 	addu	t1, t1, 192			# bias exponent
 	and	t2, t2, ~SIMPL_ONE		# clear implied one bit
 	jal	_C_LABEL(set_fd_s)		# save result
-	or	a2, a2, MIPS_FPU_EXCEPTION_UNDERFLOW | MIPS_FPU_STICKY_UNDERFLOW
+	or	a2, a2, MIPS_FCSR_CAUSE_U | MIPS_FCSR_FLAGS_U
 	b	fpe_trap
 /*
  * Underflow is not enabled so compute the result,
@@ -2379,15 +2379,15 @@ underflow_s:
 	blt	v0, SFRAC_BITS+2, 3f		# shift all the bits out?
 	move	t1, zero			# result is inexact zero
 	move	t2, zero
-	or	a2, a2, MIPS_FPU_EXCEPTION_UNDERFLOW | MIPS_FPU_STICKY_UNDERFLOW
+	or	a2, a2, MIPS_FCSR_CAUSE_U | MIPS_FCSR_FLAGS_U
 /*
  * Now round the zero result.
  * Only need to worry about rounding to +- infinity when the sign matches.
  */
-	and	v0, a2, MIPS_FPU_ROUNDING_BITS	# get rounding mode
-	beq	v0, MIPS_FPU_ROUND_RN, inexact_nobias_s	# round to nearest
-	beq	v0, MIPS_FPU_ROUND_RZ, inexact_nobias_s	# round to zero
-	beq	v0, MIPS_FPU_ROUND_RP, 1f	# round to +infinity
+	and	v0, a2, MIPS_FCSR_RM		# get rounding mode
+	beq	v0, MIPS_FCSR_RM_RN, inexact_nobias_s	# round to nearest
+	beq	v0, MIPS_FCSR_RM_RZ, inexact_nobias_s	# round to zero
+	beq	v0, MIPS_FCSR_RM_RP, 1f		# round to +infinity
 	beq	t0, zero, inexact_nobias_s	# if sign is positive, truncate
 	b	2f
 1:
@@ -2407,10 +2407,10 @@ underflow_s:
 /*
  * Now round the denormalized result.
  */
-	and	v0, a2, MIPS_FPU_ROUNDING_BITS	# get rounding mode
-	beq	v0, MIPS_FPU_ROUND_RN, 3f	# round to nearest
-	beq	v0, MIPS_FPU_ROUND_RZ, 5f	# round to zero (truncate)
-	beq	v0, MIPS_FPU_ROUND_RP, 1f	# round to +infinity
+	and	v0, a2, MIPS_FCSR_RM		# get rounding mode
+	beq	v0, MIPS_FCSR_RM_RN, 3f		# round to nearest
+	beq	v0, MIPS_FCSR_RM_RZ, 5f		# round to zero (truncate)
+	beq	v0, MIPS_FCSR_RM_RP, 1f		# round to +infinity
 	beq	t0, zero, 5f			# if sign is positive, truncate
 	b	2f
 1:
@@ -2432,16 +2432,16 @@ underflow_s:
 	move	t1, zero			# denorm or zero exponent
 	jal	_C_LABEL(set_fd_s)		# save result
 	beq	t9, zero, done			# check for exact result
-	or	a2, a2, MIPS_FPU_EXCEPTION_UNDERFLOW | MIPS_FPU_STICKY_UNDERFLOW
-	or	a2, a2, MIPS_FPU_EXCEPTION_INEXACT | MIPS_FPU_STICKY_INEXACT
-	and	v0, a2, MIPS_FPU_ENABLE_INEXACT
+	or	a2, a2, MIPS_FCSR_CAUSE_U | MIPS_FCSR_FLAGS_U
+	or	a2, a2, MIPS_FCSR_CAUSE_I | MIPS_FCSR_FLAGS_I
+	and	v0, a2, MIPS_FCSR_ENABLES_I
 	bne	v0, zero, fpe_trap
 #ifdef FPEMUL
 	PTR_L	v0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	#nop
 	INT_S	a2, PCB_FPREGS+FRAME_FSR(v0)
 #else
-	ctc1	a2, MIPS_FPU_CSR		# save exceptions
+	ctc1	a2, MIPS_FCSR			# save exceptions
 #endif
 	b	done
 
@@ -2545,10 +2545,10 @@ norm_noshift_d:
 	move	ta1, t1				# save unrounded exponent
 	move	ta2, t2				# save unrounded fraction (MS)
 	move	ta3, t3				# save unrounded fraction (LS)
-	and	v0, a2, MIPS_FPU_ROUNDING_BITS	# get rounding mode
-	beq	v0, MIPS_FPU_ROUND_RN, 3f	# round to nearest
-	beq	v0, MIPS_FPU_ROUND_RZ, 5f	# round to zero (truncate)
-	beq	v0, MIPS_FPU_ROUND_RP, 1f	# round to +infinity
+	and	v0, a2, MIPS_FCSR_RM		# get rounding mode
+	beq	v0, MIPS_FCSR_RM_RN, 3f		# round to nearest
+	beq	v0, MIPS_FCSR_RM_RZ, 5f		# round to zero (truncate)
+	beq	v0, MIPS_FCSR_RM_RP, 1f		# round to +infinity
 	beq	t0, zero, 5f			# if sign is positive, truncate
 	b	2f
 1:
@@ -2592,15 +2592,15 @@ inexact_d:
 	and	t2, t2, ~DIMPL_ONE		# clear implied one bit
 inexact_nobias_d:
 	jal	_C_LABEL(set_fd_d)		# save result
-	or	a2, a2, MIPS_FPU_EXCEPTION_INEXACT | MIPS_FPU_STICKY_INEXACT
-	and	v0, a2, MIPS_FPU_ENABLE_INEXACT
+	or	a2, a2, MIPS_FCSR_CAUSE_I | MIPS_FCSR_FLAGS_I
+	and	v0, a2, MIPS_FCSR_ENABLES_I
 	bne	v0, zero, fpe_trap
 #ifdef FPEMUL
 	PTR_L	v0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	#nop
 	INT_S	a2, PCB_FPREGS+FRAME_FSR(v0)
 #else
-	ctc1	a2, MIPS_FPU_CSR		# save exceptions
+	ctc1	a2, MIPS_FCSR			# save exceptions
 #endif
 	b	done
 
@@ -2610,18 +2610,18 @@ inexact_nobias_d:
  * or generate an infinity.
  */
 overflow_d:
-	or	a2, a2, MIPS_FPU_EXCEPTION_OVERFLOW | MIPS_FPU_STICKY_OVERFLOW
-	and	v0, a2, MIPS_FPU_ENABLE_OVERFLOW
+	or	a2, a2, MIPS_FCSR_CAUSE_O | MIPS_FCSR_FLAGS_O
+	and	v0, a2, MIPS_FCSR_ENABLES_O
 	beq	v0, zero, 1f
 	subu	t1, t1, 1536			# bias exponent
 	and	t2, t2, ~DIMPL_ONE		# clear implied one bit
 	jal	_C_LABEL(set_fd_d)		# save result
 	b	fpe_trap
 1:
-	and	v0, a2, MIPS_FPU_ROUNDING_BITS	# get rounding mode
-	beq	v0, MIPS_FPU_ROUND_RN, 3f	# round to nearest
-	beq	v0, MIPS_FPU_ROUND_RZ, 1f	# round to zero (truncate)
-	beq	v0, MIPS_FPU_ROUND_RP, 2f	# round to +infinity
+	and	v0, a2, MIPS_FCSR_RM		# get rounding mode
+	beq	v0, MIPS_FCSR_RM_RN, 3f		# round to nearest
+	beq	v0, MIPS_FCSR_RM_RZ, 1f		# round to zero (truncate)
+	beq	v0, MIPS_FCSR_RM_RP, 2f		# round to +infinity
 	bne	t0, zero, 3f
 1:
 	li	t1, DEXP_MAX			# result is max finite
@@ -2641,7 +2641,7 @@ overflow_d:
  * "loss of accuracy" is detected as "an inexact result".
  */
 underflow_d:
-	and	v0, a2, MIPS_FPU_ENABLE_UNDERFLOW
+	and	v0, a2, MIPS_FCSR_ENABLES_U
 	beq	v0, zero, 1f
 /*
  * Underflow is enabled so compute the result and trap.
@@ -2649,7 +2649,7 @@ underflow_d:
 	addu	t1, t1, 1536			# bias exponent
 	and	t2, t2, ~DIMPL_ONE		# clear implied one bit
 	jal	_C_LABEL(set_fd_d)		# save result
-	or	a2, a2, MIPS_FPU_EXCEPTION_UNDERFLOW | MIPS_FPU_STICKY_UNDERFLOW
+	or	a2, a2, MIPS_FCSR_CAUSE_U | MIPS_FCSR_FLAGS_U
 	b	fpe_trap
 /*
  * Underflow is not enabled so compute the result,
@@ -2665,15 +2665,15 @@ underflow_d:
 	move	t1, zero			# result is inexact zero
 	move	t2, zero
 	move	t3, zero
-	or	a2, a2, MIPS_FPU_EXCEPTION_UNDERFLOW | MIPS_FPU_STICKY_UNDERFLOW
+	or	a2, a2, MIPS_FCSR_CAUSE_U | MIPS_FCSR_FLAGS_U
 /*
  * Now round the zero result.
  * Only need to worry about rounding to +- infinity when the sign matches.
  */
-	and	v0, a2, MIPS_FPU_ROUNDING_BITS	# get rounding mode
-	beq	v0, MIPS_FPU_ROUND_RN, inexact_nobias_d	# round to nearest
-	beq	v0, MIPS_FPU_ROUND_RZ, inexact_nobias_d	# round to zero
-	beq	v0, MIPS_FPU_ROUND_RP, 1f	# round to +infinity
+	and	v0, a2, MIPS_FCSR_RM		# get rounding mode
+	beq	v0, MIPS_FCSR_RM_RN, inexact_nobias_d	# round to nearest
+	beq	v0, MIPS_FCSR_RM_RZ, inexact_nobias_d	# round to zero
+	beq	v0, MIPS_FCSR_RM_RP, 1f		# round to +infinity
 	beq	t0, zero, inexact_nobias_d	# if sign is positive, truncate
 	b	2f
 1:
@@ -2709,10 +2709,10 @@ underflow_d:
  * Now round the denormalized result.
  */
 2:
-	and	v0, a2, MIPS_FPU_ROUNDING_BITS	# get rounding mode
-	beq	v0, MIPS_FPU_ROUND_RN, 3f	# round to nearest
-	beq	v0, MIPS_FPU_ROUND_RZ, 5f	# round to zero (truncate)
-	beq	v0, MIPS_FPU_ROUND_RP, 1f	# round to +infinity
+	and	v0, a2, MIPS_FCSR_RM		# get rounding mode
+	beq	v0, MIPS_FCSR_RM_RN, 3f		# round to nearest
+	beq	v0, MIPS_FCSR_RM_RZ, 5f		# round to zero (truncate)
+	beq	v0, MIPS_FCSR_RM_RP, 1f		# round to +infinity
 	beq	t0, zero, 5f			# if sign is positive, truncate
 	b	2f
 1:
@@ -2738,16 +2738,16 @@ underflow_d:
 	move	t1, zero			# denorm or zero exponent
 	jal	_C_LABEL(set_fd_d)		# save result
 	beq	t9, zero, done			# check for exact result
-	or	a2, a2, MIPS_FPU_EXCEPTION_UNDERFLOW | MIPS_FPU_STICKY_UNDERFLOW
-	or	a2, a2, MIPS_FPU_EXCEPTION_INEXACT | MIPS_FPU_STICKY_INEXACT
-	and	v0, a2, MIPS_FPU_ENABLE_INEXACT
+	or	a2, a2, MIPS_FCSR_CAUSE_U | MIPS_FCSR_FLAGS_U
+	or	a2, a2, MIPS_FCSR_CAUSE_I | MIPS_FCSR_FLAGS_I
+	and	v0, a2, MIPS_FCSR_ENABLES_I
 	bne	v0, zero, fpe_trap
 #ifdef FPEMUL
 	PTR_L	v0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	#nop
 	INT_S	a2, PCB_FPREGS+FRAME_FSR(v0)
 #else
-	ctc1	a2, MIPS_FPU_CSR		# save exceptions
+	ctc1	a2, MIPS_FCSR			# save exceptions
 #endif
 	b	done
 
@@ -2756,15 +2756,15 @@ underflow_d:
  * the result is a quiet NAN.
  */
 invalid_s:					# trap invalid operation
-	or	a2, a2, MIPS_FPU_EXCEPTION_INVALID | MIPS_FPU_STICKY_INVALID
-	and	v0, a2, MIPS_FPU_ENABLE_INVALID
+	or	a2, a2, MIPS_FCSR_CAUSE_V | MIPS_FCSR_FLAGS_V
+	and	v0, a2, MIPS_FCSR_ENABLES_V
 	bne	v0, zero, fpe_trap
 #ifdef FPEMUL
 	PTR_L	v0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	#nop
 	INT_S	a2, PCB_FPREGS+FRAME_FSR(v0)
 #else
-	ctc1	a2, MIPS_FPU_CSR		# save exceptions
+	ctc1	a2, MIPS_FCSR			# save exceptions
 #endif
 	move	t0, zero			# result is a quiet NAN
 	li	t1, SEXP_INF
@@ -2777,15 +2777,15 @@ invalid_s:					# trap invalid operation
  * the result is a quiet NAN.
  */
 invalid_d:					# trap invalid operation
-	or	a2, a2, MIPS_FPU_EXCEPTION_INVALID | MIPS_FPU_STICKY_INVALID
-	and	v0, a2, MIPS_FPU_ENABLE_INVALID
+	or	a2, a2, MIPS_FCSR_CAUSE_V | MIPS_FCSR_FLAGS_V
+	and	v0, a2, MIPS_FCSR_ENABLES_V
 	bne	v0, zero, fpe_trap
 #ifdef FPEMUL
 	PTR_L	v0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	#nop
 	INT_S	a2, PCB_FPREGS+FRAME_FSR(v0)
 #else
-	ctc1	a2, MIPS_FPU_CSR		# save exceptions
+	ctc1	a2, MIPS_FCSR			# save exceptions
 #endif
 	move	t0, zero			# result is a quiet NAN
 	li	t1, DEXP_INF
@@ -2799,15 +2799,15 @@ invalid_d:					# trap invalid operation
  * the result is INT_MAX or INT_MIN.
  */
 invalid_w:					# trap invalid operation
-	or	a2, a2, MIPS_FPU_EXCEPTION_INVALID | MIPS_FPU_STICKY_INVALID
-	and	v0, a2, MIPS_FPU_ENABLE_INVALID
+	or	a2, a2, MIPS_FCSR_CAUSE_V | MIPS_FCSR_FLAGS_V
+	and	v0, a2, MIPS_FCSR_ENABLES_V
 	bne	v0, zero, fpe_trap
 #ifdef FPEMUL
 	PTR_L	v0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	#nop
 	INT_S	a2, PCB_FPREGS+FRAME_FSR(v0)
 #else
-	ctc1	a2, MIPS_FPU_CSR		# save exceptions
+	ctc1	a2, MIPS_FCSR			# save exceptions
 #endif
 	bne	t0, zero, 1f
 	li	t2, INT_MAX			# result is INT_MAX
@@ -2854,7 +2854,7 @@ ill:
 	#nop
 	INT_S	a2, PCB_FPREGS+FRAME_FSR(v0)
 #else
-	ctc1	a2, MIPS_FPU_CSR		# save exceptions
+	ctc1	a2, MIPS_FCSR			# save exceptions
 #endif
 	REG_L	a1, CALLFRAME_FRAME(sp)		# frame
 	REG_L	a2, CALLFRAME_CAUSE(sp)		# cause

Index: src/sys/arch/mips/mips/locore.S
diff -u src/sys/arch/mips/mips/locore.S:1.227 src/sys/arch/mips/mips/locore.S:1.228
--- src/sys/arch/mips/mips/locore.S:1.227	Sun Apr 18 10:40:34 2021
+++ src/sys/arch/mips/mips/locore.S	Sat May 29 12:35:27 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: locore.S,v 1.227 2021/04/18 10:40:34 mrg Exp $	*/
+/*	$NetBSD: locore.S,v 1.228 2021/05/29 12:35:27 simonb Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -63,7 +63,7 @@
 #include <mips/trap.h>
 #include <mips/locore.h>
 
-RCSID("$NetBSD: locore.S,v 1.227 2021/04/18 10:40:34 mrg Exp $")
+RCSID("$NetBSD: locore.S,v 1.228 2021/05/29 12:35:27 simonb Exp $")
 
 #include "assym.h"
 
@@ -162,7 +162,7 @@ EXPORT_OBJECT(kernel_text)			# libkvm re
 	mtc0	k0, MIPS_COP_0_STATUS
 	COP0_HAZARD_FPUENABLE
 
-	cfc1	t1, MIPS_FPU_ID
+	cfc1	t1, MIPS_FIR
 
 	/* Disable again, we don't want it on in the kernel */
 	and	k0, ~MIPS_SR_COP_1_BIT
@@ -665,8 +665,8 @@ XNESTED(mips_fpu_trap)
 	REG_L		a2, TF_REG_CAUSE(a1)
 	REG_EPILOGUE
 
-	cfc1		t0, MIPS_FPU_CSR	# stall til FP done
-	cfc1		t0, MIPS_FPU_CSR	# now get status
+	cfc1		t0, MIPS_FCSR		# stall til FP done
+	cfc1		t0, MIPS_FCSR		# now get status
 	nop
 	sll		t2, t0, (31 - 17)	# unimplemented operation?
 	bgez		t2, 3f			# no, normal trap
@@ -703,8 +703,8 @@ XNESTED(mips_fpu_trap)
 	REG_S		a2, TF_REG_CAUSE(a1)
 	REG_EPILOGUE
 
-	and		t2, t0, ~MIPS_FPU_EXCEPTION_BITS
-	ctc1		t2, MIPS_FPU_CSR
+	and		t2, t0, ~MIPS_FCSR_CAUSE
+	ctc1		t2, MIPS_FCSR
 
 	move		a1, a0				# code = instruction
 	jal		_C_LABEL(mips_fpuillinst)
@@ -722,8 +722,8 @@ XNESTED(mips_fpu_trap)
 	REG_S		a2, TF_REG_CAUSE(a1)
 	REG_EPILOGUE
 
-	and		a0, t0, ~MIPS_FPU_EXCEPTION_BITS
-	ctc1		a0, MIPS_FPU_CSR
+	and		a0, t0, ~MIPS_FCSR_CAUSE
+	ctc1		a0, MIPS_FCSR
 
 	move		a1, t0			# FPU status
 	jal		_C_LABEL(mips_fpuexcept)

Index: src/sys/arch/mips/mips/mips_emul.c
diff -u src/sys/arch/mips/mips/mips_emul.c:1.29 src/sys/arch/mips/mips/mips_emul.c:1.30
--- src/sys/arch/mips/mips/mips_emul.c:1.29	Thu May 27 15:00:02 2021
+++ src/sys/arch/mips/mips/mips_emul.c	Sat May 29 12:35:27 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: mips_emul.c,v 1.29 2021/05/27 15:00:02 simonb Exp $ */
+/*	$NetBSD: mips_emul.c,v 1.30 2021/05/29 12:35:27 simonb Exp $ */
 
 /*
  * Copyright (c) 1999 Shuichiro URATA.  All rights reserved.
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mips_emul.c,v 1.29 2021/05/27 15:00:02 simonb Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mips_emul.c,v 1.30 2021/05/29 12:35:27 simonb Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -155,7 +155,7 @@ mips_emul_branch(struct trapframe *tf, v
 
 	case OP_COP1:
 		if (inst.RType.rs == OP_BCx || inst.RType.rs == OP_BCy) {
-			int condition = (fpuCSR & MIPS_FPU_COND_BIT) != 0;
+			int condition = (fpuCSR & MIPS_FCSR_FCC0) != 0;
 			if ((inst.RType.rt & COPz_BC_TF_MASK) != COPz_BC_TRUE)
 				condition = !condition;
 			if (condition)

Index: src/sys/arch/mips/mips/mips_fpu.c
diff -u src/sys/arch/mips/mips/mips_fpu.c:1.16 src/sys/arch/mips/mips/mips_fpu.c:1.17
--- src/sys/arch/mips/mips/mips_fpu.c:1.16	Tue May 11 14:41:08 2021
+++ src/sys/arch/mips/mips/mips_fpu.c	Sat May 29 12:35:27 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: mips_fpu.c,v 1.16 2021/05/11 14:41:08 simonb Exp $	*/
+/*	$NetBSD: mips_fpu.c,v 1.17 2021/05/29 12:35:27 simonb Exp $	*/
 
 /*-
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mips_fpu.c,v 1.16 2021/05/11 14:41:08 simonb Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mips_fpu.c,v 1.17 2021/05/29 12:35:27 simonb Exp $");
 
 #include <sys/param.h>
 #include <sys/mutex.h>
@@ -336,8 +336,10 @@ mips_fpu_state_load(lwp_t *l, u_int flag
 #endif
 
 	/*
-	 * load FPCSR and stop COP1 again
+	 * Mask off the exception bits in the FPCSR, load the FPCSR
+	 * and stop COP1 again
 	 */
+	fpcsr &= ~MIPS_FCSR_CAUSE;
 	__asm volatile(
 		".set noreorder"	"\n\t"
 		".set noat"		"\n\t"
@@ -346,7 +348,7 @@ mips_fpu_state_load(lwp_t *l, u_int flag
 		"mtc0	%1, $%2"	"\n\t"
 		".set at"		"\n\t"
 		".set reorder"		"\n\t"
-	    ::	"r"(fpcsr &~ MIPS_FPU_EXCEPTION_BITS), "r"(status),
+	    ::	"r"(fpcsr), "r"(status),
 		"n"(MIPS_COP_0_STATUS));
 }
 

Index: src/sys/arch/mips/mips/mips_fputrap.c
diff -u src/sys/arch/mips/mips/mips_fputrap.c:1.11 src/sys/arch/mips/mips/mips_fputrap.c:1.12
--- src/sys/arch/mips/mips/mips_fputrap.c:1.11	Thu May 13 03:41:46 2021
+++ src/sys/arch/mips/mips/mips_fputrap.c	Sat May 29 12:35:27 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: mips_fputrap.c,v 1.11 2021/05/13 03:41:46 simonb Exp $ */
+/* $NetBSD: mips_fputrap.c,v 1.12 2021/05/29 12:35:27 simonb Exp $ */
 
 /*
  * Copyright (c) 2004
@@ -80,12 +80,12 @@ static const struct {
 	unsigned int bit;
 	int code;
 } fpecodes[] = {
-	{ MIPS_FPU_EXCEPTION_UNDERFLOW, FPE_FLTUND },
-	{ MIPS_FPU_EXCEPTION_OVERFLOW, FPE_FLTOVF },
-	{ MIPS_FPU_EXCEPTION_INEXACT, FPE_FLTRES },
-	{ MIPS_FPU_EXCEPTION_DIV0, FPE_FLTDIV },
-	{ MIPS_FPU_EXCEPTION_INVALID, FPE_FLTINV },
-	{ MIPS_FPU_EXCEPTION_UNIMPL, FPE_FLTINV }
+	{ MIPS_FCSR_CAUSE_I, FPE_FLTRES },
+	{ MIPS_FCSR_CAUSE_U, FPE_FLTUND },
+	{ MIPS_FCSR_CAUSE_O, FPE_FLTOVF },
+	{ MIPS_FCSR_CAUSE_Z, FPE_FLTDIV },
+	{ MIPS_FCSR_CAUSE_V, FPE_FLTINV },
+	{ MIPS_FCSR_CAUSE_E, FPE_FLTINV }
 };
 
 static int

Reply via email to