MIPS: math-emu: Fix m{add,sub}.s shifts
The code in _sp_maddf (formerly ieee754sp_madd) appears to have been
copied verbatim from ieee754sp_add, and although it's adding the
unpacked "r" & "z" floats it kept using macros that operate on "x" &
"y". This led to the addition being carried out incorrectly on some
mismash of the product, accumulator & multiplicand fields. Typically
this would lead to the assertions "ze == re" & "ze <= SP_EMAX" failing
since ze & re hadn't been operated upon.
Signed-off-by: Paul Burton <paul.burton@imgtec.com>
Fixes: e24c3bec3e ("MIPS: math-emu: Add support for the MIPS R6 MADDF FPU instruction")
Cc: Adam Buchbinder <adam.buchbinder@gmail.com>
Cc: Maciej W. Rozycki <macro@imgtec.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/13159/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
committed by
Ralf Baechle
parent
5c18c936b5
commit
db57f29d50
@@ -132,13 +132,15 @@ union ieee754sp ieee754sp_add(union ieee754sp x, union ieee754sp y)
|
||||
* Have to shift y fraction right to align.
|
||||
*/
|
||||
s = xe - ye;
|
||||
SPXSRSYn(s);
|
||||
ym = XSPSRS(ym, s);
|
||||
ye += s;
|
||||
} else if (ye > xe) {
|
||||
/*
|
||||
* Have to shift x fraction right to align.
|
||||
*/
|
||||
s = ye - xe;
|
||||
SPXSRSXn(s);
|
||||
xm = XSPSRS(xm, s);
|
||||
xe += s;
|
||||
}
|
||||
assert(xe == ye);
|
||||
assert(xe <= SP_EMAX);
|
||||
|
||||
Reference in New Issue
Block a user