aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips
diff options
context:
space:
mode:
authorMaciej W. Rozycki <macro@linux-mips.org>2015-04-03 18:25:52 -0400
committerRalf Baechle <ralf@linux-mips.org>2015-04-07 19:09:44 -0400
commitb0c2f8fbdb52b95b969c96994bcab7c084530199 (patch)
treea16085a94a2d5693893a3133147111910a7ae7ae /arch/mips
parent42fa24242182771394ae93361914b7da4099a60d (diff)
MIPS: math-emu: Optimise qNaN handling in `ieee754sp_fdp'
Rewrite qNaN handling in `ieee754sp_fdp' using the `ieee754_class_nan' helper recently added, removing the external call to `ieee754sp_isnan' and reducing the size of code by 16 instructions or 64 bytes. Signed-off-by: Maciej W. Rozycki <macro@linux-mips.org> Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/9692/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips')
-rw-r--r--arch/mips/math-emu/sp_fdp.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/arch/mips/math-emu/sp_fdp.c b/arch/mips/math-emu/sp_fdp.c
index 152637093854..3797148893ad 100644
--- a/arch/mips/math-emu/sp_fdp.c
+++ b/arch/mips/math-emu/sp_fdp.c
@@ -30,10 +30,11 @@ static inline union ieee754sp ieee754sp_nan_fdp(int xs, u64 xm)
30 30
31union ieee754sp ieee754sp_fdp(union ieee754dp x) 31union ieee754sp ieee754sp_fdp(union ieee754dp x)
32{ 32{
33 union ieee754sp y;
33 u32 rm; 34 u32 rm;
34 35
35 COMPXDP; 36 COMPXDP;
36 union ieee754sp nan; 37 COMPYSP;
37 38
38 EXPLODEXDP; 39 EXPLODEXDP;
39 40
@@ -46,10 +47,11 @@ union ieee754sp ieee754sp_fdp(union ieee754dp x)
46 return ieee754sp_nanxcpt(ieee754sp_nan_fdp(xs, xm)); 47 return ieee754sp_nanxcpt(ieee754sp_nan_fdp(xs, xm));
47 48
48 case IEEE754_CLASS_QNAN: 49 case IEEE754_CLASS_QNAN:
49 nan = ieee754sp_nan_fdp(xs, xm); 50 y = ieee754sp_nan_fdp(xs, xm);
50 if (!ieee754sp_isnan(nan)) 51 EXPLODEYSP;
51 nan = ieee754sp_indef(); 52 if (!ieee754_class_nan(yc))
52 return nan; 53 y = ieee754sp_indef();
54 return y;
53 55
54 case IEEE754_CLASS_INF: 56 case IEEE754_CLASS_INF:
55 return ieee754sp_inf(xs); 57 return ieee754sp_inf(xs);