Patch "MIPS: math-emu: <MAX|MAXA|MIN|MINA>.<D|S>: Fix cases of both inputs zero" has been added to the 4.13-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
MIPS: math-emu: <MAX|MAXA|MIN|MINA>.<D|S>: Fix cases of both inputs zero
to the 4.13-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
mips-math-emu-max-maxa-min-mina-.-d-s-fix-cases-of-both-inputs-zero.patch
and it can be found in the queue-4.13 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
15560a58bfd4ff82cdd16b2270d4ef9b06d2cc4dMon Sep 17 00:00:00 2001
From: Aleksandar Markovic <[email protected]>
Date: Thu, 27 Jul 2017 18:08:49 +0200
Subject: MIPS: math-emu: <MAX|MAXA|MIN|MINA>.<D|S>: Fix cases of both inputs zero
From: Aleksandar Markovic <[email protected]>
commit 15560a58bfd4ff82cdd16b2270d4ef9b06d2cc4d upstream.
Fix the value returned by <MAX|MAXA|MIN|MINA>.<D|S>, if both inputs are zeros. The right behavior in such cases is stated in instruction reference manual and is as follows:
fs ft MAX MIN MAXA MINA
---------------------------------------------
0 0 0 0 0 0
0 -0 0 -0 0 -0
-0 0 0 -0 0 -0-0 -0 -0 -0 -0 -0
Prior to this patch, some of the above cases were yielding correct results. However, for the sake of code consistency, all such cases are rewritten in this patch.
A relevant example:
MAX.S fd,fs,ft:
If fs contains +0.0, and ft contains -0.0, fd is going to contain +0.0 (without this patch, it used to contain -0.0).
Patchwork: https://patchwork.linux-mips.org/patch/16881/
--- arch/mips/math-emu/dp_fmax.c | 8 ++------ arch/mips/math-emu/dp_fmin.c | 8 ++------ arch/mips/math-emu/sp_fmax.c | 8 ++------ arch/mips/math-emu/sp_fmin.c | 8 ++------ 4 files changed, 8 insertions(+), 24 deletions(-)
arch/mips/math-emu/dp_fmax.c +2 -6
@@ -92,9 +92,7 @@ union ieee754dp ieee754dp_fmax(union ieereturn ys ? x : y;case CLPAIR (IEEE754_CLASS_ZERO ,IEEE754_CLASS_ZERO ): -if (xs == ys) -return x; -return ieee754dp_zero (1 ); +return ieee754dp_zero (xs & ys);case CLPAIR (IEEE754_CLASS_DNORM ,IEEE754_CLASS_DNORM ):DPDNORMX ;
@@ -204,9 +202,7 @@ union ieee754dp ieee754dp_fmaxa(union iereturn y;case CLPAIR (IEEE754_CLASS_ZERO ,IEEE754_CLASS_ZERO ): -if (xs == ys) -return x; -return ieee754dp_zero (1 ); +return ieee754dp_zero (xs & ys);case CLPAIR (IEEE754_CLASS_DNORM ,IEEE754_CLASS_DNORM ):DPDNORMX ;
arch/mips/math-emu/dp_fmin.c +2 -6
@@ -92,9 +92,7 @@ union ieee754dp ieee754dp_fmin(union ieereturn ys ? y : x;case CLPAIR (IEEE754_CLASS_ZERO ,IEEE754_CLASS_ZERO ): -if (xs == ys) -return x; -return ieee754dp_zero (1 ); +return ieee754dp_zero (xs | ys);case CLPAIR (IEEE754_CLASS_DNORM ,IEEE754_CLASS_DNORM ):DPDNORMX ;
@@ -204,9 +202,7 @@ union ieee754dp ieee754dp_fmina(union iereturn y;case CLPAIR (IEEE754_CLASS_ZERO ,IEEE754_CLASS_ZERO ): -if (xs == ys) -return x; -return ieee754dp_zero (1 ); +return ieee754dp_zero (xs | ys);case CLPAIR (IEEE754_CLASS_DNORM ,IEEE754_CLASS_DNORM ):DPDNORMX ;
arch/mips/math-emu/sp_fmax.c +2 -6
@@ -92,9 +92,7 @@ union ieee754sp ieee754sp_fmax(union ieereturn ys ? x : y;case CLPAIR (IEEE754_CLASS_ZERO ,IEEE754_CLASS_ZERO ): -if (xs == ys) -return x; -return ieee754sp_zero (1 ); +return ieee754sp_zero (xs & ys);case CLPAIR (IEEE754_CLASS_DNORM ,IEEE754_CLASS_DNORM ):SPDNORMX ;
@@ -204,9 +202,7 @@ union ieee754sp ieee754sp_fmaxa(union iereturn y;case CLPAIR (IEEE754_CLASS_ZERO ,IEEE754_CLASS_ZERO ): -if (xs == ys) -return x; -return ieee754sp_zero (1 ); +return ieee754sp_zero (xs & ys);case CLPAIR (IEEE754_CLASS_DNORM ,IEEE754_CLASS_DNORM ):SPDNORMX ;
arch/mips/math-emu/sp_fmin.c +2 -6
@@ -92,9 +92,7 @@ union ieee754sp ieee754sp_fmin(union ieereturn ys ? y : x;case CLPAIR (IEEE754_CLASS_ZERO ,IEEE754_CLASS_ZERO ): -if (xs == ys) -return x; -return ieee754sp_zero (1 ); +return ieee754sp_zero (xs | ys);case CLPAIR (IEEE754_CLASS_DNORM ,IEEE754_CLASS_DNORM ):SPDNORMX ;
@@ -204,9 +202,7 @@ union ieee754sp ieee754sp_fmina(union iereturn y;case CLPAIR (IEEE754_CLASS_ZERO ,IEEE754_CLASS_ZERO ): -if (xs == ys) -return x; -return ieee754sp_zero (1 ); +return ieee754sp_zero (xs | ys);case CLPAIR (IEEE754_CLASS_DNORM ,IEEE754_CLASS_DNORM ):SPDNORMX ;
Patches currently in stable-queue which might be from [email protected] are
queue-4.13/mips-math-emu-maddf-msubf-.-d-s-fix-nan-propagation.patch queue-4.13/mips-math-emu-max-maxa-min-mina-.-d-s-fix-cases-of-both-inputs-zero.patch queue-4.13/mips-math-emu-max-min-.-d-s-fix-cases-of-both-inputs-negative.patch queue-4.13/mips-math-emu-max-maxa-min-mina-.-d-s-fix-quiet-nan-propagation.patch queue-4.13/mips-math-emu-maddf-msubf-.d-fix-accuracy-64-bit-case.patch queue-4.13/mips-math-emu-maddf-msubf-.s-fix-accuracy-32-bit-case.patch queue-4.13/mips-math-emu-maxa-mina-.-d-s-fix-cases-of-input-values-with-opposite-signs.patch queue-4.13/mips-math-emu-maxa-mina-.-d-s-fix-cases-of-both-infinite-inputs.patch queue-4.13/mips-math-emu-mina.-d-s-fix-some-cases-of-infinity-and-zero-inputs.patch queue-4.13/mips-math-emu-maddf-msubf-.-d-s-fix-some-cases-of-zero-inputs.patch queue-4.13/mips-math-emu-maddf-msubf-.-d-s-clean-up-maddf_flags-enumeration.patch queue-4.13/mips-math-emu-maddf-msubf-.-d-s-fix-some-cases-of-infinite-inputs.patch