Magellan Linux

Annotation of /trunk/glibc/patches/glibc-2.15-rintf-rounding.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1806 - (hide annotations) (download)
Tue Jun 12 12:33:27 2012 UTC (11 years, 11 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     }