Annotation of /trunk/glibc/patches/glibc-2.15-rintf-rounding.patch
Parent Directory | Revision Log
Revision 1806 -
(hide annotations)
(download)
Tue Jun 12 12:33:27 2012 UTC (12 years, 3 months ago) by niro
File size: 6897 byte(s)
Tue Jun 12 12:33:27 2012 UTC (12 years, 3 months ago) by niro
File size: 6897 byte(s)
-added patches for 2.15-r1
1 | niro | 1806 | diff --git a/math/libm-test.inc b/math/libm-test.inc |
2 | index 6243e1e..c8186c8 100644 | ||
3 | --- a/math/libm-test.inc | ||
4 | +++ b/math/libm-test.inc | ||
5 | @@ -5037,6 +5037,22 @@ rint_test (void) | ||
6 | TEST_f_f (rint, 262142.75, 262143.0); | ||
7 | TEST_f_f (rint, 524286.75, 524287.0); | ||
8 | TEST_f_f (rint, 524288.75, 524289.0); | ||
9 | + TEST_f_f (rint, 1048576.75, 1048577.0); | ||
10 | + TEST_f_f (rint, 2097152.75, 2097153.0); | ||
11 | + TEST_f_f (rint, -1048576.75, -1048577.0); | ||
12 | + TEST_f_f (rint, -2097152.75, -2097153.0); | ||
13 | +#ifndef TEST_FLOAT | ||
14 | + TEST_f_f (rint, 70368744177664.75, 70368744177665.0); | ||
15 | + TEST_f_f (rint, 140737488355328.75, 140737488355329.0); | ||
16 | + TEST_f_f (rint, 281474976710656.75, 281474976710657.0); | ||
17 | + TEST_f_f (rint, 562949953421312.75, 562949953421313.0); | ||
18 | + TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0); | ||
19 | + TEST_f_f (rint, -70368744177664.75, -70368744177665.0); | ||
20 | + TEST_f_f (rint, -140737488355328.75, -140737488355329.0); | ||
21 | + TEST_f_f (rint, -281474976710656.75, -281474976710657.0); | ||
22 | + TEST_f_f (rint, -562949953421312.75, -562949953421313.0); | ||
23 | + TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0); | ||
24 | +#endif | ||
25 | #ifdef TEST_LDOUBLE | ||
26 | /* The result can only be represented in long double. */ | ||
27 | TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L); | ||
28 | @@ -5137,6 +5153,22 @@ rint_test_tonearest (void) | ||
29 | TEST_f_f (rint, -0.1, -0.0); | ||
30 | TEST_f_f (rint, -0.25, -0.0); | ||
31 | TEST_f_f (rint, -0.625, -1.0); | ||
32 | + TEST_f_f (rint, 1048576.75, 1048577.0); | ||
33 | + TEST_f_f (rint, 2097152.75, 2097153.0); | ||
34 | + TEST_f_f (rint, -1048576.75, -1048577.0); | ||
35 | + TEST_f_f (rint, -2097152.75, -2097153.0); | ||
36 | +#ifndef TEST_FLOAT | ||
37 | + TEST_f_f (rint, 70368744177664.75, 70368744177665.0); | ||
38 | + TEST_f_f (rint, 140737488355328.75, 140737488355329.0); | ||
39 | + TEST_f_f (rint, 281474976710656.75, 281474976710657.0); | ||
40 | + TEST_f_f (rint, 562949953421312.75, 562949953421313.0); | ||
41 | + TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0); | ||
42 | + TEST_f_f (rint, -70368744177664.75, -70368744177665.0); | ||
43 | + TEST_f_f (rint, -140737488355328.75, -140737488355329.0); | ||
44 | + TEST_f_f (rint, -281474976710656.75, -281474976710657.0); | ||
45 | + TEST_f_f (rint, -562949953421312.75, -562949953421313.0); | ||
46 | + TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0); | ||
47 | +#endif | ||
48 | #ifdef TEST_LDOUBLE | ||
49 | /* The result can only be represented in long double. */ | ||
50 | TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L); | ||
51 | @@ -5207,6 +5239,22 @@ rint_test_towardzero (void) | ||
52 | TEST_f_f (rint, -0.1, -0.0); | ||
53 | TEST_f_f (rint, -0.25, -0.0); | ||
54 | TEST_f_f (rint, -0.625, -0.0); | ||
55 | + TEST_f_f (rint, 1048576.75, 1048576.0); | ||
56 | + TEST_f_f (rint, 2097152.75, 2097152.0); | ||
57 | + TEST_f_f (rint, -1048576.75, -1048576.0); | ||
58 | + TEST_f_f (rint, -2097152.75, -2097152.0); | ||
59 | +#ifndef TEST_FLOAT | ||
60 | + TEST_f_f (rint, 70368744177664.75, 70368744177664.0); | ||
61 | + TEST_f_f (rint, 140737488355328.75, 140737488355328.0); | ||
62 | + TEST_f_f (rint, 281474976710656.75, 281474976710656.0); | ||
63 | + TEST_f_f (rint, 562949953421312.75, 562949953421312.0); | ||
64 | + TEST_f_f (rint, 1125899906842624.75, 1125899906842624.0); | ||
65 | + TEST_f_f (rint, -70368744177664.75, -70368744177664.0); | ||
66 | + TEST_f_f (rint, -140737488355328.75, -140737488355328.0); | ||
67 | + TEST_f_f (rint, -281474976710656.75, -281474976710656.0); | ||
68 | + TEST_f_f (rint, -562949953421312.75, -562949953421312.0); | ||
69 | + TEST_f_f (rint, -1125899906842624.75, -1125899906842624.0); | ||
70 | +#endif | ||
71 | #ifdef TEST_LDOUBLE | ||
72 | /* The result can only be represented in long double. */ | ||
73 | TEST_f_f (rint, 4503599627370495.5L, 4503599627370495.0L); | ||
74 | @@ -5277,6 +5325,22 @@ rint_test_downward (void) | ||
75 | TEST_f_f (rint, -0.1, -1.0); | ||
76 | TEST_f_f (rint, -0.25, -1.0); | ||
77 | TEST_f_f (rint, -0.625, -1.0); | ||
78 | + TEST_f_f (rint, 1048576.75, 1048576.0); | ||
79 | + TEST_f_f (rint, 2097152.75, 2097152.0); | ||
80 | + TEST_f_f (rint, -1048576.75, -1048577.0); | ||
81 | + TEST_f_f (rint, -2097152.75, -2097153.0); | ||
82 | +#ifndef TEST_FLOAT | ||
83 | + TEST_f_f (rint, 70368744177664.75, 70368744177664.0); | ||
84 | + TEST_f_f (rint, 140737488355328.75, 140737488355328.0); | ||
85 | + TEST_f_f (rint, 281474976710656.75, 281474976710656.0); | ||
86 | + TEST_f_f (rint, 562949953421312.75, 562949953421312.0); | ||
87 | + TEST_f_f (rint, 1125899906842624.75, 1125899906842624.0); | ||
88 | + TEST_f_f (rint, -70368744177664.75, -70368744177665.0); | ||
89 | + TEST_f_f (rint, -140737488355328.75, -140737488355329.0); | ||
90 | + TEST_f_f (rint, -281474976710656.75, -281474976710657.0); | ||
91 | + TEST_f_f (rint, -562949953421312.75, -562949953421313.0); | ||
92 | + TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0); | ||
93 | +#endif | ||
94 | #ifdef TEST_LDOUBLE | ||
95 | /* The result can only be represented in long double. */ | ||
96 | TEST_f_f (rint, 4503599627370495.5L, 4503599627370495.0L); | ||
97 | @@ -5347,6 +5411,22 @@ rint_test_upward (void) | ||
98 | TEST_f_f (rint, -0.1, -0.0); | ||
99 | TEST_f_f (rint, -0.25, -0.0); | ||
100 | TEST_f_f (rint, -0.625, -0.0); | ||
101 | + TEST_f_f (rint, 1048576.75, 1048577.0); | ||
102 | + TEST_f_f (rint, 2097152.75, 2097153.0); | ||
103 | + TEST_f_f (rint, -1048576.75, -1048576.0); | ||
104 | + TEST_f_f (rint, -2097152.75, -2097152.0); | ||
105 | +#ifndef TEST_FLOAT | ||
106 | + TEST_f_f (rint, 70368744177664.75, 70368744177665.0); | ||
107 | + TEST_f_f (rint, 140737488355328.75, 140737488355329.0); | ||
108 | + TEST_f_f (rint, 281474976710656.75, 281474976710657.0); | ||
109 | + TEST_f_f (rint, 562949953421312.75, 562949953421313.0); | ||
110 | + TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0); | ||
111 | + TEST_f_f (rint, -70368744177664.75, -70368744177664.0); | ||
112 | + TEST_f_f (rint, -140737488355328.75, -140737488355328.0); | ||
113 | + TEST_f_f (rint, -281474976710656.75, -281474976710656.0); | ||
114 | + TEST_f_f (rint, -562949953421312.75, -562949953421312.0); | ||
115 | + TEST_f_f (rint, -1125899906842624.75, -1125899906842624.0); | ||
116 | +#endif | ||
117 | #ifdef TEST_LDOUBLE | ||
118 | /* The result can only be represented in long double. */ | ||
119 | TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L); | ||
120 | diff --git a/sysdeps/ieee754/flt-32/s_rintf.c b/sysdeps/ieee754/flt-32/s_rintf.c | ||
121 | index 9ea9b6f..9ba6b57 100644 | ||
122 | --- a/sysdeps/ieee754/flt-32/s_rintf.c | ||
123 | +++ b/sysdeps/ieee754/flt-32/s_rintf.c | ||
124 | @@ -26,34 +26,22 @@ float | ||
125 | __rintf(float x) | ||
126 | { | ||
127 | int32_t i0,j0,sx; | ||
128 | - u_int32_t i,i1; | ||
129 | float w,t; | ||
130 | GET_FLOAT_WORD(i0,x); | ||
131 | sx = (i0>>31)&1; | ||
132 | j0 = ((i0>>23)&0xff)-0x7f; | ||
133 | if(j0<23) { | ||
134 | if(j0<0) { | ||
135 | - if((i0&0x7fffffff)==0) return x; | ||
136 | - i1 = (i0&0x07fffff); | ||
137 | - i0 &= 0xfff00000; | ||
138 | - i0 |= ((i1|-i1)>>9)&0x400000; | ||
139 | - SET_FLOAT_WORD(x,i0); | ||
140 | w = TWO23[sx]+x; | ||
141 | t = w-TWO23[sx]; | ||
142 | GET_FLOAT_WORD(i0,t); | ||
143 | SET_FLOAT_WORD(t,(i0&0x7fffffff)|(sx<<31)); | ||
144 | return t; | ||
145 | - } else { | ||
146 | - i = (0x007fffff)>>j0; | ||
147 | - if((i0&i)==0) return x; /* x is integral */ | ||
148 | - i>>=1; | ||
149 | - if((i0&i)!=0) i0 = (i0&(~i))|((0x100000)>>j0); | ||
150 | } | ||
151 | } else { | ||
152 | if(j0==0x80) return x+x; /* inf or NaN */ | ||
153 | else return x; /* x is integral */ | ||
154 | } | ||
155 | - SET_FLOAT_WORD(x,i0); | ||
156 | w = TWO23[sx]+x; | ||
157 | return w-TWO23[sx]; | ||
158 | } |