Module Name: src Committed By: rin Date: Tue Aug 30 10:48:31 UTC 2022
Modified Files: src/sys/arch/powerpc/fpu: fpu_emu.c Log Message: Fix logic for FPSCR[FEX]. It is logical OR (similar to FPSCR[VX]) of raised exception bits for enabled exceptions. To generate a diff of this commit: cvs rdiff -u -r1.37 -r1.38 src/sys/arch/powerpc/fpu/fpu_emu.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/powerpc/fpu/fpu_emu.c diff -u src/sys/arch/powerpc/fpu/fpu_emu.c:1.37 src/sys/arch/powerpc/fpu/fpu_emu.c:1.38 --- src/sys/arch/powerpc/fpu/fpu_emu.c:1.37 Tue Aug 30 10:43:38 2022 +++ src/sys/arch/powerpc/fpu/fpu_emu.c Tue Aug 30 10:48:31 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: fpu_emu.c,v 1.37 2022/08/30 10:43:38 rin Exp $ */ +/* $NetBSD: fpu_emu.c,v 1.38 2022/08/30 10:48:31 rin Exp $ */ /* * Copyright 2001 Wasabi Systems, Inc. @@ -76,7 +76,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.37 2022/08/30 10:43:38 rin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.38 2022/08/30 10:48:31 rin Exp $"); #ifdef _KERNEL_OPT #include "opt_ddb.h" @@ -783,12 +783,6 @@ fpu_execute(struct trapframe *tf, struct cx = fe->fe_cx; fsr = fe->fe_fpscr & ~(FPSCR_FEX|FPSCR_VX); if (cx != 0) { - if (cx & FPSR_INV) - cx |= FPSCR_VX; - mask = fsr & FPSR_EX; - mask <<= (25-3); - if (cx & mask) - fsr |= FPSCR_FEX; if (cx & FPSCR_FPRF) { /* Need to replace CC */ fsr &= ~FPSCR_FPRF; @@ -798,6 +792,9 @@ fpu_execute(struct trapframe *tf, struct } if (fsr & FPSR_INV) fsr |= FPSCR_VX; + mask = (fsr & FPSR_EX) << (25 - 3); + if (fsr & mask) + fsr |= FPSCR_FEX; if (mtfsf == 0 && ((fsr ^ fe->fe_fpscr) & FPSR_EX_MSK)) fsr |= FPSCR_FX;