Module Name: src Committed By: rin Date: Thu Sep 15 14:25:28 UTC 2022
Modified Files: src/sys/arch/powerpc/fpu: fpu_emu.c Log Message: fnm{add,sub}{,s}: Do not negate NaN. To generate a diff of this commit: cvs rdiff -u -r1.57 -r1.58 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.57 src/sys/arch/powerpc/fpu/fpu_emu.c:1.58 --- src/sys/arch/powerpc/fpu/fpu_emu.c:1.57 Thu Sep 15 14:24:00 2022 +++ src/sys/arch/powerpc/fpu/fpu_emu.c Thu Sep 15 14:25:28 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: fpu_emu.c,v 1.57 2022/09/15 14:24:00 rin Exp $ */ +/* $NetBSD: fpu_emu.c,v 1.58 2022/09/15 14:25:28 rin Exp $ */ /* * Copyright 2001 Wasabi Systems, Inc. @@ -76,7 +76,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.57 2022/09/15 14:24:00 rin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.58 2022/09/15 14:25:28 rin Exp $"); #ifdef _KERNEL_OPT #include "opt_ddb.h" @@ -738,7 +738,8 @@ fpu_execute(struct trapframe *tf, struct fpu_explode(fe, &fe->fe_f2, type, FR(rb)); fp = fpu_sub(fe); /* Negate */ - fp->fp_sign ^= 1; + if (!ISNAN(fp)) + fp->fp_sign ^= 1; break; case OPC59_FNMADDS: FPU_EMU_EVCNT_INCR(fnmadd); @@ -750,7 +751,8 @@ fpu_execute(struct trapframe *tf, struct fpu_explode(fe, &fe->fe_f2, type, FR(rb)); fp = fpu_add(fe); /* Negate */ - fp->fp_sign ^= 1; + if (!ISNAN(fp)) + fp->fp_sign ^= 1; break; default: return (NOTFPU);