- replace '>>' by '<<' in __fixunsxfdi (typo) - replace 'long' by 'long long' (long may be 32 bits) - return an overflow result more similar to GCC
Unified · Split
| @@ -530,7 +530,7 @@ unsigned long long __fixunssfdi (float a1) · 529 unmodified lines | |||
| 530 | { | 530 | { |
| 531 | register union float_long fl1; | 531 | register union float_long fl1; |
| 532 | register int exp; | 532 | register int exp; |
| 533 | register unsigned long l; | 533 | register unsigned long long l; |
| 534 | 534 | ||
| 535 | fl1.f = a1; | 535 | fl1.f = a1; |
| 536 | 536 | ||
| @@ -538,22 +538,19 @@ unsigned long long __fixunssfdi (float a1) · 1 unmodified line | |||
| 538 | return (0); | 538 | return (0); |
| 539 | 539 | ||
| 540 | exp = EXP (fl1.l) - EXCESS - 24; | 540 | exp = EXP (fl1.l) - EXCESS - 24; |
| 541 | |||
| 542 | l = MANT(fl1.l); | 541 | l = MANT(fl1.l); |
| 542 | |||
| 543 | if (exp >= 41) | 543 | if (exp >= 41) |
| 544 | return (unsigned long long)-1; | 544 | return 1ULL << 63; |
| 545 | else if (exp >= 0) | 545 | else if (exp >= 0) |
| 546 | if(SIGN(fl1.l)) | 546 | l <<= exp; |
| 547 | return (unsigned long long)-(l << exp); | ||
| 548 | else | ||
| 549 | return (unsigned long long)l << exp; | ||
| 550 | else if (exp >= -23) | 547 | else if (exp >= -23) |
| 551 | if(SIGN(fl1.l)) | 548 | l >>= -exp; |
| 552 | return -(l >> -exp); | ||
| 553 | else | ||
| 554 | return l >> -exp; | ||
| 555 | else | 549 | else |
| 556 | return 0; | 550 | return 0; |
| 551 | if (SIGN(fl1.l)) | ||
| 552 | l = (unsigned long long)-l; | ||
| 553 | return l; | ||
| 557 | } | 554 | } |
| 558 | 555 | ||
| 559 | long long __fixsfdi (float a1) | 556 | long long __fixsfdi (float a1) |
| @@ -575,23 +572,19 @@ unsigned long long __fixunsdfdi (double a1) · 15 unmodified lines | |||
| 575 | return (0); | 572 | return (0); |
| 576 | 573 | ||
| 577 | exp = EXPD (dl1) - EXCESSD - 53; | 574 | exp = EXPD (dl1) - EXCESSD - 53; |
| 578 | |||
| 579 | l = MANTD_LL(dl1); | 575 | l = MANTD_LL(dl1); |
| 580 | 576 | ||
| 581 | if (exp >= 12) | 577 | if (exp >= 12) |
| 582 | return (unsigned long long)-1; | 578 | return 1ULL << 63; /* overflow result (like gcc, somewhat) */ |
| 583 | else if (exp >= 0) | 579 | else if (exp >= 0) |
| 584 | if(SIGND(dl1)) | 580 | l <<= exp; |
| 585 | return -(l >> exp); | ||
| 586 | else | ||
| 587 | return l << exp; | ||
| 588 | else if (exp >= -52) | 581 | else if (exp >= -52) |
| 589 | if(SIGND(dl1)) | 582 | l >>= -exp; |
| 590 | return -(l >> -exp); | ||
| 591 | else | ||
| 592 | return l >> -exp; | ||
| 593 | else | 583 | else |
| 594 | return 0; | 584 | return 0; |
| 585 | if (SIGND(dl1)) | ||
| 586 | l = (unsigned long long)-l; | ||
| 587 | return l; | ||
| 595 | } | 588 | } |
| 596 | 589 | ||
| 597 | long long __fixdfdi (double a1) | 590 | long long __fixdfdi (double a1) |
| @@ -614,20 +607,15 @@ unsigned long long __fixunsxfdi (long double a1) · 16 unmodified lines | |||
| 614 | return (0); | 607 | return (0); |
| 615 | 608 | ||
| 616 | exp = EXPLD (dl1) - EXCESSLD - 64; | 609 | exp = EXPLD (dl1) - EXCESSLD - 64; |
| 617 | |||
| 618 | l = dl1.l.lower; | 610 | l = dl1.l.lower; |
| 619 | |||
| 620 | if (exp > 0) | 611 | if (exp > 0) |
| 621 | return (unsigned long long)-1; | 612 | return 1ULL << 63; |
| 622 | else if (exp >= -63) | 613 | if (exp < -63) |
| 623 | { | ||
| 624 | if(SIGNLD(dl1)) | ||
| 625 | return -(l >> -exp); | ||
| 626 | else | ||
| 627 | return l >> -exp; | ||
| 628 | } | ||
| 629 | else | ||
| 630 | return 0; | 614 | return 0; |
| 615 | l >>= -exp; | ||
| 616 | if (SIGNLD(dl1)) | ||
| 617 | l = (unsigned long long)-l; | ||
| 618 | return l; | ||
| 631 | } | 619 | } |
| 632 | 620 | ||
| 633 | long long __fixxfdi (long double a1) | 621 | long long __fixxfdi (long double a1) |