]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - releases/4.9.52/mips-math-emu-maxa-mina-.-d-s-fix-cases-of-both-infinite-inputs.patch
4.9-stable patches
[thirdparty/kernel/stable-queue.git] / releases / 4.9.52 / mips-math-emu-maxa-mina-.-d-s-fix-cases-of-both-infinite-inputs.patch
CommitLineData
dbfa5f4f
GKH
1From 3444c4eb534c20e44f0d6670b34263efaf8b531f Mon Sep 17 00:00:00 2001
2From: Aleksandar Markovic <aleksandar.markovic@imgtec.com>
3Date: Thu, 27 Jul 2017 18:08:52 +0200
4Subject: MIPS: math-emu: <MAXA|MINA>.<D|S>: Fix cases of both infinite inputs
5
6From: Aleksandar Markovic <aleksandar.markovic@imgtec.com>
7
8commit 3444c4eb534c20e44f0d6670b34263efaf8b531f upstream.
9
10Fix the value returned by <MAXA|MINA>.<D|S> fd,fs,ft, if both inputs
11are infinite. The previous implementation returned always the value
12contained in ft in such cases. The correct behavior is specified
13in Mips instruction set manual and is as follows:
14
15 fs ft MAXA MINA
16 ---------------------------------
17 inf inf inf inf
18 inf -inf inf -inf
19 -inf inf inf -inf
20 -inf -inf -inf -inf
21
22A relevant example:
23
24MAXA.S fd,fs,ft:
25 If fs contains +inf, and ft contains -inf, fd is going to contain
26 +inf (without this patch, it used to contain -inf).
27
28Fixes: a79f5f9ba508 ("MIPS: math-emu: Add support for the MIPS R6 MAX{, A} FPU instruction")
29Fixes: 4e9561b20e2f ("MIPS: math-emu: Add support for the MIPS R6 MIN{, A} FPU instruction")
30
31Signed-off-by: Miodrag Dinic <miodrag.dinic@imgtec.com>
32Signed-off-by: Goran Ferenc <goran.ferenc@imgtec.com>
33Signed-off-by: Aleksandar Markovic <aleksandar.markovic@imgtec.com>
34Reviewed-by: James Hogan <james.hogan@imgtec.com>
35Cc: Bo Hu <bohu@google.com>
36Cc: Douglas Leung <douglas.leung@imgtec.com>
37Cc: Jin Qian <jinqian@google.com>
38Cc: Paul Burton <paul.burton@imgtec.com>
39Cc: Petar Jovanovic <petar.jovanovic@imgtec.com>
40Cc: Raghu Gandham <raghu.gandham@imgtec.com>
41Cc: linux-mips@linux-mips.org
42Cc: linux-kernel@vger.kernel.org
43Patchwork: https://patchwork.linux-mips.org/patch/16884/
44Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
45Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
46
47---
48 arch/mips/math-emu/dp_fmax.c | 4 +++-
49 arch/mips/math-emu/dp_fmin.c | 4 +++-
50 arch/mips/math-emu/sp_fmax.c | 4 +++-
51 arch/mips/math-emu/sp_fmin.c | 4 +++-
52 4 files changed, 12 insertions(+), 4 deletions(-)
53
54--- a/arch/mips/math-emu/dp_fmax.c
55+++ b/arch/mips/math-emu/dp_fmax.c
56@@ -202,6 +202,9 @@ union ieee754dp ieee754dp_fmaxa(union ie
57 /*
58 * Infinity and zero handling
59 */
60+ case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_INF):
61+ return ieee754dp_inf(xs & ys);
62+
63 case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_ZERO):
64 case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_NORM):
65 case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_DNORM):
66@@ -209,7 +212,6 @@ union ieee754dp ieee754dp_fmaxa(union ie
67 case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_ZERO):
68 return x;
69
70- case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_INF):
71 case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_INF):
72 case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_INF):
73 case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_INF):
74--- a/arch/mips/math-emu/dp_fmin.c
75+++ b/arch/mips/math-emu/dp_fmin.c
76@@ -202,6 +202,9 @@ union ieee754dp ieee754dp_fmina(union ie
77 /*
78 * Infinity and zero handling
79 */
80+ case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_INF):
81+ return ieee754dp_inf(xs | ys);
82+
83 case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_ZERO):
84 case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_NORM):
85 case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_DNORM):
86@@ -209,7 +212,6 @@ union ieee754dp ieee754dp_fmina(union ie
87 case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_ZERO):
88 return x;
89
90- case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_INF):
91 case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_INF):
92 case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_INF):
93 case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_INF):
94--- a/arch/mips/math-emu/sp_fmax.c
95+++ b/arch/mips/math-emu/sp_fmax.c
96@@ -202,6 +202,9 @@ union ieee754sp ieee754sp_fmaxa(union ie
97 /*
98 * Infinity and zero handling
99 */
100+ case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_INF):
101+ return ieee754sp_inf(xs & ys);
102+
103 case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_ZERO):
104 case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_NORM):
105 case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_DNORM):
106@@ -209,7 +212,6 @@ union ieee754sp ieee754sp_fmaxa(union ie
107 case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_ZERO):
108 return x;
109
110- case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_INF):
111 case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_INF):
112 case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_INF):
113 case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_INF):
114--- a/arch/mips/math-emu/sp_fmin.c
115+++ b/arch/mips/math-emu/sp_fmin.c
116@@ -202,6 +202,9 @@ union ieee754sp ieee754sp_fmina(union ie
117 /*
118 * Infinity and zero handling
119 */
120+ case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_INF):
121+ return ieee754sp_inf(xs | ys);
122+
123 case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_ZERO):
124 case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_NORM):
125 case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_DNORM):
126@@ -209,7 +212,6 @@ union ieee754sp ieee754sp_fmina(union ie
127 case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_ZERO):
128 return x;
129
130- case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_INF):
131 case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_INF):
132 case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_INF):
133 case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_INF):