Print this page
11210 libm should be cstyle(1ONBLD) clean
Split |
Close |
Expand all |
Collapse all |
--- old/usr/src/lib/libm/common/C/scalbn.c
+++ new/usr/src/lib/libm/common/C/scalbn.c
1 1 /*
2 2 * CDDL HEADER START
3 3 *
4 4 * The contents of this file are subject to the terms of the
5 5 * Common Development and Distribution License (the "License").
6 6 * You may not use this file except in compliance with the License.
7 7 *
8 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 9 * or http://www.opensolaris.org/os/licensing.
10 10 * See the License for the specific language governing permissions
↓ open down ↓ |
10 lines elided |
↑ open up ↑ |
11 11 * and limitations under the License.
12 12 *
13 13 * When distributing Covered Code, include this CDDL HEADER in each
14 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 15 * If applicable, add the following below this CDDL HEADER, with the
16 16 * fields enclosed by brackets "[]" replaced with your own identifying
17 17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 18 *
19 19 * CDDL HEADER END
20 20 */
21 +
21 22 /*
22 23 * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
23 24 */
25 +
24 26 /*
25 27 * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
26 28 * Use is subject to license terms.
27 29 */
28 30
29 31 #pragma weak __scalbn = scalbn
30 32
31 33 #include "libm.h"
32 34
33 -static const double
34 - one = 1.0,
35 - huge = 1.0e300,
36 - tiny = 1.0e-300,
37 - twom54 = 5.5511151231257827021181583404541015625e-17;
35 +static const double one = 1.0,
36 + huge = 1.0e300,
37 + tiny = 1.0e-300,
38 + twom54 = 5.5511151231257827021181583404541015625e-17;
38 39
39 40 #if defined(__x86)
40 41 static const double two52 = 4503599627370496.0;
41 42 #else
42 43 /*
43 44 * Normalize non-zero subnormal x and return biased exponent of x in [-51,0]
44 45 */
45 46 static int
46 -ilogb_biased(unsigned *px) {
47 +ilogb_biased(unsigned *px)
48 +{
47 49 int s = 52;
48 50 unsigned v = px[HIWORD] & ~0x80000000, w = px[LOWORD], t = v;
49 51
50 52 if (t)
51 53 s -= 32;
52 54 else
53 55 t = w;
56 +
54 57 if (t & 0xffff0000)
55 58 s -= 16, t >>= 16;
59 +
56 60 if (t & 0xff00)
57 61 s -= 8, t >>= 8;
62 +
58 63 if (t & 0xf0)
59 64 s -= 4, t >>= 4;
65 +
60 66 t <<= 1;
61 67 s -= (0xffffaa50 >> t) & 0x3;
68 +
62 69 if (s < 32) {
63 70 v = (v << s) | w >> (32 - s);
64 71 w <<= s;
65 72 } else {
66 73 v = w << (s - 32);
67 74 w = 0;
68 75 }
76 +
69 77 px[HIWORD] = (px[HIWORD] & 0x80000000) | v;
70 78 px[LOWORD] = w;
71 79 return (1 - s);
72 80 }
73 -#endif /* defined(__x86) */
81 +#endif /* defined(__x86) */
74 82
75 83 double
76 -scalbn(double x, int n) {
77 - int *px, ix, hx, k;
84 +scalbn(double x, int n)
85 +{
86 + int *px, ix, hx, k;
78 87
79 88 px = (int *)&x;
80 89 ix = px[HIWORD];
81 90 hx = ix & ~0x80000000;
82 91 k = hx >> 20;
83 92
84 - if (k == 0x7ff) /* x is inf or NaN */
93 + if (k == 0x7ff) /* x is inf or NaN */
85 94 return (x * one);
86 95
87 96 if (k == 0) {
88 97 if ((hx | px[LOWORD]) == 0 || n == 0)
89 98 return (x);
99 +
90 100 #if defined(__x86)
91 101 x *= two52;
92 102 ix = px[HIWORD];
93 103 k = ((ix & ~0x80000000) >> 20) - 52;
94 104 #else
95 105 k = ilogb_biased((unsigned *)px);
96 106 ix = px[HIWORD];
97 107 #endif
98 108 /* now k is in the range -51..0 */
99 109 k += n;
100 - if (k > n) /* integer overflow occurred */
110 +
111 + if (k > n) /* integer overflow occurred */
101 112 k = -100;
102 113 } else {
103 114 /* k is in the range 1..1023 */
104 115 k += n;
105 - if (k < n) /* integer overflow occurred */
116 +
117 + if (k < n) /* integer overflow occurred */
106 118 k = 0x7ff;
107 119 }
108 120
109 121 if (k > 0x7fe)
110 - return (huge * ((ix < 0)? -huge : huge));
122 + return (huge * ((ix < 0) ? -huge : huge));
123 +
111 124 if (k < 1) {
112 125 if (k <= -54)
113 - return (tiny * ((ix < 0)? -tiny : tiny));
126 + return (tiny * ((ix < 0) ? -tiny : tiny));
127 +
114 128 k += 54;
115 129 px[HIWORD] = (ix & ~0x7ff00000) | (k << 20);
116 130 return (x * twom54);
117 131 }
132 +
118 133 px[HIWORD] = (ix & ~0x7ff00000) | (k << 20);
119 134 return (x);
120 135 }
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX