Skip to content

Commit

Permalink
MIPS: math-emu: Handle zero accumulator case in MADDF and MSUBF separ…
Browse files Browse the repository at this point in the history
…ately

If accumulator value is zero, just return the value of previously
calculated product. This brings logic in MADDF/MSUBF implementation
closer to the logic in ADD/SUB case.

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>
Cc: James.Hogan@imgtec.com
Cc: Paul.Burton@imgtec.com
Cc: Raghu.Gandham@imgtec.com
Cc: Leonid.Yegoshin@imgtec.com
Cc: Douglas.Leung@imgtec.com
Cc: Petar.Jovanovic@imgtec.com
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/16512/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
  • Loading branch information
Aleksandar Markovic authored and Ralf Baechle committed Jun 28, 2017
1 parent 25d8b92 commit ddbfff7
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 2 deletions.
5 changes: 4 additions & 1 deletion arch/mips/math-emu/dp_maddf.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ static union ieee754dp _dp_maddf(union ieee754dp z, union ieee754dp x,
return ieee754dp_nanxcpt(z);
case IEEE754_CLASS_DNORM:
DPDNORMZ;
/* QNAN is handled separately below */
/* QNAN and ZERO cases are handled separately below */
}

switch (CLPAIR(xc, yc)) {
Expand Down Expand Up @@ -210,6 +210,9 @@ static union ieee754dp _dp_maddf(union ieee754dp z, union ieee754dp x,
}
assert(rm & (DP_HIDDEN_BIT << 3));

if (zc == IEEE754_CLASS_ZERO)
return ieee754dp_format(rs, re, rm);

/* And now the addition */
assert(zm & DP_HIDDEN_BIT);

Expand Down
5 changes: 4 additions & 1 deletion arch/mips/math-emu/sp_maddf.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ static union ieee754sp _sp_maddf(union ieee754sp z, union ieee754sp x,
return ieee754sp_nanxcpt(z);
case IEEE754_CLASS_DNORM:
SPDNORMZ;
/* QNAN is handled separately below */
/* QNAN and ZERO cases are handled separately below */
}

switch (CLPAIR(xc, yc)) {
Expand Down Expand Up @@ -203,6 +203,9 @@ static union ieee754sp _sp_maddf(union ieee754sp z, union ieee754sp x,
}
assert(rm & (SP_HIDDEN_BIT << 3));

if (zc == IEEE754_CLASS_ZERO)
return ieee754sp_format(rs, re, rm);

/* And now the addition */

assert(zm & SP_HIDDEN_BIT);
Expand Down

0 comments on commit ddbfff7

Please sign in to comment.