Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1693728 > unrolled thread
| Started by | Aleksandar Markovic <aleksandar.markovic@rt-rk.com> |
|---|---|
| First post | 2017-07-21 16:20 +0200 |
| Last post | 2017-07-24 14:50 +0200 |
| Articles | 3 — 3 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[PATCH v3 12/16] MIPS: math-emu: <MADDF|MSUBF>.<D|S>: Fix some cases of infinite inputs Aleksandar Markovic <aleksandar.markovic@rt-rk.com> - 2017-07-21 16:20 +0200
Re: [PATCH v3 12/16] MIPS: math-emu: <MADDF|MSUBF>.<D|S>: Fix some cases of infinite inputs James Hogan <james.hogan@imgtec.com> - 2017-07-24 12:40 +0200
RE: [PATCH v3 12/16] MIPS: math-emu: <MADDF|MSUBF>.<D|S>: Fix some cases of infinite inputs Aleksandar Markovic <Aleksandar.Markovic@imgtec.com> - 2017-07-24 14:50 +0200
| From | Aleksandar Markovic <aleksandar.markovic@rt-rk.com> |
|---|---|
| Date | 2017-07-21 16:20 +0200 |
| Subject | [PATCH v3 12/16] MIPS: math-emu: <MADDF|MSUBF>.<D|S>: Fix some cases of infinite inputs |
| Message-ID | <u5GWC-5Tl-21@gated-at.bofh.it> |
From: Aleksandar Markovic <aleksandar.markovic@imgtec.com>
Fix the cases of <MADDF|MSUBF>.<D|S> when any of two multiplicands is
infinity. The correct behavior in such cases is affected by the nature
of third input. Cases of addition of infinities with opposite signs
and subtraction of infinities with same signs may arise and must be
handles separately. Also, the value od flags argument (that determines
whether the instruction is MADDF or MSUBF) affects the outcome.
The relevant examples:
MADDF.S fd,fs,ft:
If fs contains +inf, ft contains +inf, and fd contains -inf, fd is
going to contain indef (without this patch, it used to contain
-inf).
MSUBF.S fd,fs,ft:
If fs contains +inf, ft contains 1.0, and fd contains +0.0, fd is
going to contain -inf (without this patch, it used to contain +inf).
Signed-off-by: Douglas Leung <douglas.leung@imgtec.com>
Signed-off-by: Miodrag Dinic <miodrag.dinic@imgtec.com>
Signed-off-by: Goran Ferenc <goran.ferenc@imgtec.com>
Signed-off-by: Aleksandar Markovic <aleksandar.markovic@imgtec.com>
---
arch/mips/math-emu/dp_maddf.c | 21 ++++++++++++++++++++-
arch/mips/math-emu/sp_maddf.c | 21 ++++++++++++++++++++-
2 files changed, 40 insertions(+), 2 deletions(-)
diff --git a/arch/mips/math-emu/dp_maddf.c b/arch/mips/math-emu/dp_maddf.c
index 4f2e783..45f815d 100644
--- a/arch/mips/math-emu/dp_maddf.c
+++ b/arch/mips/math-emu/dp_maddf.c
@@ -85,7 +85,26 @@ static union ieee754dp _dp_maddf(union ieee754dp z, union ieee754dp x,
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_NORM):
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_DNORM):
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_INF):
- return ieee754dp_inf(xs ^ ys);
+ if ((zc == IEEE754_CLASS_INF) &&
+ ((!(flags & maddf_negate_product) && (zs != (xs ^ ys))) ||
+ ((flags & maddf_negate_product) && (zs == (xs ^ ys))))) {
+ /*
+ * Cases of addition of infinities with opposite signs
+ * or subtraction of infinities with same signs.
+ */
+ ieee754_setcx(IEEE754_INVALID_OPERATION);
+ return ieee754dp_indef();
+ }
+ /*
+ * z is here either not infinity, or infinity of the same sign
+ * as maddf_negate_product * x * y. So, the result must be
+ * infinity, and its sign is determined only by the value of
+ * (flags & maddf_negate_product) and the signs of x and y.
+ */
+ if (flags & maddf_negate_product)
+ return ieee754dp_inf(1 ^ (xs ^ ys));
+ else
+ return ieee754dp_inf(xs ^ ys);
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_ZERO):
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_NORM):
diff --git a/arch/mips/math-emu/sp_maddf.c b/arch/mips/math-emu/sp_maddf.c
index 9fd2035..76856d7 100644
--- a/arch/mips/math-emu/sp_maddf.c
+++ b/arch/mips/math-emu/sp_maddf.c
@@ -86,7 +86,26 @@ static union ieee754sp _sp_maddf(union ieee754sp z, union ieee754sp x,
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_NORM):
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_DNORM):
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_INF):
- return ieee754sp_inf(xs ^ ys);
+ if ((zc == IEEE754_CLASS_INF) &&
+ ((!(flags & maddf_negate_product) && (zs != (xs ^ ys))) ||
+ ((flags & maddf_negate_product) && (zs == (xs ^ ys))))) {
+ /*
+ * Cases of addition of infinities with opposite signs
+ * or subtraction of infinities with same signs.
+ */
+ ieee754_setcx(IEEE754_INVALID_OPERATION);
+ return ieee754sp_indef();
+ }
+ /*
+ * z is here either not infinity, or infinity of the same sign
+ * as maddf_negate_product * x * y. So, the result must be
+ * infinity, and its sign is determined only by the value of
+ * (flags & maddf_negate_product) and the signs of x and y.
+ */
+ if (flags & maddf_negate_product)
+ return ieee754sp_inf(1 ^ (xs ^ ys));
+ else
+ return ieee754sp_inf(xs ^ ys);
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_ZERO):
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_NORM):
--
2.7.4
[toc] | [next] | [standalone]
| From | James Hogan <james.hogan@imgtec.com> |
|---|---|
| Date | 2017-07-24 12:40 +0200 |
| Subject | Re: [PATCH v3 12/16] MIPS: math-emu: <MADDF|MSUBF>.<D|S>: Fix some cases of infinite inputs |
| Message-ID | <u6IWm-3vE-15@gated-at.bofh.it> |
| In reply to | #1693728 |
[Multipart message — attachments visible in raw view] — view raw
On Fri, Jul 21, 2017 at 04:09:10PM +0200, Aleksandar Markovic wrote:
> From: Aleksandar Markovic <aleksandar.markovic@imgtec.com>
>
> Fix the cases of <MADDF|MSUBF>.<D|S> when any of two multiplicands is
> infinity. The correct behavior in such cases is affected by the nature
> of third input. Cases of addition of infinities with opposite signs
> and subtraction of infinities with same signs may arise and must be
> handles separately. Also, the value od flags argument (that determines
s/handles/handled/?
s/od/of/
> whether the instruction is MADDF or MSUBF) affects the outcome.
>
> The relevant examples:
>
> MADDF.S fd,fs,ft:
> If fs contains +inf, ft contains +inf, and fd contains -inf, fd is
> going to contain indef (without this patch, it used to contain
> -inf).
>
> MSUBF.S fd,fs,ft:
> If fs contains +inf, ft contains 1.0, and fd contains +0.0, fd is
> going to contain -inf (without this patch, it used to contain +inf).
>
Same fixes/stable notes as previous patch.
> Signed-off-by: Douglas Leung <douglas.leung@imgtec.com>
> Signed-off-by: Miodrag Dinic <miodrag.dinic@imgtec.com>
> Signed-off-by: Goran Ferenc <goran.ferenc@imgtec.com>
> Signed-off-by: Aleksandar Markovic <aleksandar.markovic@imgtec.com>
Reviewed-by: James Hogan <james.hogan@imgtec.com>
Cheers
James
> ---
> arch/mips/math-emu/dp_maddf.c | 21 ++++++++++++++++++++-
> arch/mips/math-emu/sp_maddf.c | 21 ++++++++++++++++++++-
> 2 files changed, 40 insertions(+), 2 deletions(-)
>
> diff --git a/arch/mips/math-emu/dp_maddf.c b/arch/mips/math-emu/dp_maddf.c
> index 4f2e783..45f815d 100644
> --- a/arch/mips/math-emu/dp_maddf.c
> +++ b/arch/mips/math-emu/dp_maddf.c
> @@ -85,7 +85,26 @@ static union ieee754dp _dp_maddf(union ieee754dp z, union ieee754dp x,
> case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_NORM):
> case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_DNORM):
> case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_INF):
> - return ieee754dp_inf(xs ^ ys);
> + if ((zc == IEEE754_CLASS_INF) &&
> + ((!(flags & maddf_negate_product) && (zs != (xs ^ ys))) ||
> + ((flags & maddf_negate_product) && (zs == (xs ^ ys))))) {
> + /*
> + * Cases of addition of infinities with opposite signs
> + * or subtraction of infinities with same signs.
> + */
> + ieee754_setcx(IEEE754_INVALID_OPERATION);
> + return ieee754dp_indef();
> + }
> + /*
> + * z is here either not infinity, or infinity of the same sign
> + * as maddf_negate_product * x * y. So, the result must be
> + * infinity, and its sign is determined only by the value of
> + * (flags & maddf_negate_product) and the signs of x and y.
> + */
> + if (flags & maddf_negate_product)
> + return ieee754dp_inf(1 ^ (xs ^ ys));
> + else
> + return ieee754dp_inf(xs ^ ys);
>
> case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_ZERO):
> case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_NORM):
> diff --git a/arch/mips/math-emu/sp_maddf.c b/arch/mips/math-emu/sp_maddf.c
> index 9fd2035..76856d7 100644
> --- a/arch/mips/math-emu/sp_maddf.c
> +++ b/arch/mips/math-emu/sp_maddf.c
> @@ -86,7 +86,26 @@ static union ieee754sp _sp_maddf(union ieee754sp z, union ieee754sp x,
> case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_NORM):
> case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_DNORM):
> case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_INF):
> - return ieee754sp_inf(xs ^ ys);
> + if ((zc == IEEE754_CLASS_INF) &&
> + ((!(flags & maddf_negate_product) && (zs != (xs ^ ys))) ||
> + ((flags & maddf_negate_product) && (zs == (xs ^ ys))))) {
> + /*
> + * Cases of addition of infinities with opposite signs
> + * or subtraction of infinities with same signs.
> + */
> + ieee754_setcx(IEEE754_INVALID_OPERATION);
> + return ieee754sp_indef();
> + }
> + /*
> + * z is here either not infinity, or infinity of the same sign
> + * as maddf_negate_product * x * y. So, the result must be
> + * infinity, and its sign is determined only by the value of
> + * (flags & maddf_negate_product) and the signs of x and y.
> + */
> + if (flags & maddf_negate_product)
> + return ieee754sp_inf(1 ^ (xs ^ ys));
> + else
> + return ieee754sp_inf(xs ^ ys);
>
> case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_ZERO):
> case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_NORM):
> --
> 2.7.4
>
[toc] | [prev] | [next] | [standalone]
| From | Aleksandar Markovic <Aleksandar.Markovic@imgtec.com> |
|---|---|
| Date | 2017-07-24 14:50 +0200 |
| Subject | RE: [PATCH v3 12/16] MIPS: math-emu: <MADDF|MSUBF>.<D|S>: Fix some cases of infinite inputs |
| Message-ID | <u6KYa-4Ul-23@gated-at.bofh.it> |
| In reply to | #1694612 |
> > ________________________________________ > From: James Hogan > Sent: Monday, July 24, 2017 3:39 AM > To: Aleksandar Markovic > Cc: linux-mips@linux-mips.org; Aleksandar Markovic; Douglas Leung; Miodrag Dinic; Goran Ferenc; linux-kernel@vger.kernel.org; Paul Burton; Petar Jovanovic; Raghu Gandham; Ralf > Baechle > Subject: Re: [PATCH v3 12/16] MIPS: math-emu: <MADDF|MSUBF>.<D|S>: Fix some cases of infinite inputs > > On Fri, Jul 21, 2017 at 04:09:10PM +0200, Aleksandar Markovic wrote: > > From: Aleksandar Markovic <aleksandar.markovic@imgtec.com> > > > > Fix the cases of <MADDF|MSUBF>.<D|S> when any of two multiplicands is > > infinity. The correct behavior in such cases is affected by the nature > > of third input. Cases of addition of infinities with opposite signs > > and subtraction of infinities with same signs may arise and must be > > handles separately. Also, the value od flags argument (that determines > > s/handles/handled/? > s/od/of/ In v4, I am going to fix these typos and also other typos and spelling mistakes in commit messages of all patches in this series. Thanks, Aleksandar
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web