History

libtcc1.c: cleanup fp2ull

- replace '>>' by '<<' in __fixunsxfdi (typo) - replace 'long' by 'long long' (long may be 32 bits) - return an overflow result more similar to GCC

grischka committed 6 years ago

Commit 4cd62981 parent 55b47541 file · +22 −34Browse files

Unified · Split

lib/libtcc1.c+22−34
@@ -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 else549 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
559long long __fixsfdi (float a1)556long 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 else583 else
594 return 0;584 return 0;
585 if (SIGND(dl1))
586 l = (unsigned long long)-l;
587 return l;
595}588}
596 589
597long long __fixdfdi (double a1)590long 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
633long long __fixxfdi (long double a1)621long long __fixxfdi (long double a1)

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t