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