Rev 829 | Rev 1657 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 829 | Rev 835 | ||
---|---|---|---|
Line 189... | Line 189... | ||
189 | } |
189 | } |
190 | 190 | ||
191 | float64 divFloat64(float64 a, float64 b) |
191 | float64 divFloat64(float64 a, float64 b) |
192 | { |
192 | { |
193 | float64 result; |
193 | float64 result; |
194 | __s32 aexp, bexp, cexp; |
194 | __s64 aexp, bexp, cexp; |
195 | __u64 afrac, bfrac, cfrac; |
195 | __u64 afrac, bfrac, cfrac; |
196 | __u64 remlo, remhi; |
196 | __u64 remlo, remhi; |
197 | 197 | ||
198 | result.parts.sign = a.parts.sign ^ b.parts.sign; |
198 | result.parts.sign = a.parts.sign ^ b.parts.sign; |
199 | 199 | ||
200 | if (isFloat64NaN(a)) { |
200 | if (isFloat64NaN(a)) { |
- | 201 | ||
- | 202 | if (isFloat64SigNaN(b)) { |
|
- | 203 | /*FIXME: SigNaN*/ |
|
- | 204 | return b; |
|
- | 205 | } |
|
- | 206 | ||
201 | if (isFloat64SigNaN(a)) { |
207 | if (isFloat64SigNaN(a)) { |
202 | /*FIXME: SigNaN*/ |
208 | /*FIXME: SigNaN*/ |
203 | } |
209 | } |
204 | /*NaN*/ |
210 | /*NaN*/ |
205 | return a; |
211 | return a; |
Line 212... | Line 218... | ||
212 | /*NaN*/ |
218 | /*NaN*/ |
213 | return b; |
219 | return b; |
214 | } |
220 | } |
215 | 221 | ||
216 | if (isFloat64Infinity(a)) { |
222 | if (isFloat64Infinity(a)) { |
217 | if (isFloat64Infinity(b)) { |
223 | if (isFloat64Infinity(b) || isFloat64Zero(b)) { |
218 | /*FIXME: inf / inf */ |
224 | /*FIXME: inf / inf */ |
219 | result.binary = FLOAT64_NAN; |
225 | result.binary = FLOAT64_NAN; |
220 | return result; |
226 | return result; |
221 | } |
227 | } |
222 | /* inf / num */ |
228 | /* inf / num */ |
Line 257... | Line 263... | ||
257 | bexp = b.parts.exp; |
263 | bexp = b.parts.exp; |
258 | 264 | ||
259 | /* denormalized numbers */ |
265 | /* denormalized numbers */ |
260 | if (aexp == 0) { |
266 | if (aexp == 0) { |
261 | if (afrac == 0) { |
267 | if (afrac == 0) { |
262 | result.parts.exp = 0; |
268 | result.parts.exp = 0; |
263 | result.parts.fraction = 0; |
269 | result.parts.fraction = 0; |
264 | return result; |
270 | return result; |
265 | } |
271 | } |
266 | /* normalize it*/ |
272 | /* normalize it*/ |
267 | 273 | ||
268 | afrac <<= 1; |
274 | aexp++; |
269 | /* afrac is nonzero => it must stop */ |
275 | /* afrac is nonzero => it must stop */ |
270 | while (! (afrac & FLOAT64_HIDDEN_BIT_MASK) ) { |
276 | while (! (afrac & FLOAT64_HIDDEN_BIT_MASK) ) { |
271 | afrac <<= 1; |
277 | afrac <<= 1; |
272 | aexp--; |
278 | aexp--; |
273 | } |
279 | } |
274 | } |
280 | } |
275 | 281 | ||
276 | if (bexp == 0) { |
282 | if (bexp == 0) { |
277 | bfrac <<= 1; |
283 | bexp++; |
278 | /* bfrac is nonzero => it must stop */ |
284 | /* bfrac is nonzero => it must stop */ |
279 | while (! (bfrac & FLOAT64_HIDDEN_BIT_MASK) ) { |
285 | while (! (bfrac & FLOAT64_HIDDEN_BIT_MASK) ) { |
280 | bfrac <<= 1; |
286 | bfrac <<= 1; |
281 | bexp--; |
287 | bexp--; |
282 | } |
288 | } |