Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/mips/math-emu/dp_fsp.c
26424 views
1
// SPDX-License-Identifier: GPL-2.0-only
2
/* IEEE754 floating point arithmetic
3
* double precision: common utilities
4
*/
5
/*
6
* MIPS floating point support
7
* Copyright (C) 1994-2000 Algorithmics Ltd.
8
*/
9
10
#include "ieee754sp.h"
11
#include "ieee754dp.h"
12
13
static inline union ieee754dp ieee754dp_nan_fsp(int xs, u64 xm)
14
{
15
return builddp(xs, DP_EMAX + 1 + DP_EBIAS,
16
xm << (DP_FBITS - SP_FBITS));
17
}
18
19
union ieee754dp ieee754dp_fsp(union ieee754sp x)
20
{
21
COMPXSP;
22
23
EXPLODEXSP;
24
25
ieee754_clearcx();
26
27
FLUSHXSP;
28
29
switch (xc) {
30
case IEEE754_CLASS_SNAN:
31
return ieee754dp_nanxcpt(ieee754dp_nan_fsp(xs, xm));
32
33
case IEEE754_CLASS_QNAN:
34
return ieee754dp_nan_fsp(xs, xm);
35
36
case IEEE754_CLASS_INF:
37
return ieee754dp_inf(xs);
38
39
case IEEE754_CLASS_ZERO:
40
return ieee754dp_zero(xs);
41
42
case IEEE754_CLASS_DNORM:
43
/* normalize */
44
while ((xm >> SP_FBITS) == 0) {
45
xm <<= 1;
46
xe--;
47
}
48
break;
49
50
case IEEE754_CLASS_NORM:
51
break;
52
}
53
54
/*
55
* Can't possibly overflow,underflow, or need rounding
56
*/
57
58
/* drop the hidden bit */
59
xm &= ~SP_HIDDEN_BIT;
60
61
return builddp(xs, xe + DP_EBIAS,
62
(u64) xm << (DP_FBITS - SP_FBITS));
63
}
64
65