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
530530 {
531531 register union float_long fl1;
532532 register int exp;
533− register unsigned long l;
533+ register unsigned long long l;
534534
535535 fl1.f = a1;
536536
@@ -538,22 +538,19 @@ unsigned long long __fixunssfdi (float a1) · 1 unmodified line
538538 return (0);
539539
540540 exp = EXP (fl1.l) - EXCESS - 24;
541−
542541 l = MANT(fl1.l);
542+
543543 if (exp >= 41)
544− return (unsigned long long)-1;
544+ return 1ULL << 63;
545545 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;
550547 else if (exp >= -23)
551− if(SIGN(fl1.l))
552− return -(l >> -exp);
553− else
554− return l >> -exp;
548+ l >>= -exp;
555549 else
556− return 0;
550+ return 0;
551+ if (SIGN(fl1.l))
552+ l = (unsigned long long)-l;
553+ return l;
557554 }
558555
559556 long long __fixsfdi (float a1)
@@ -575,23 +572,19 @@ unsigned long long __fixunsdfdi (double a1) · 15 unmodified lines
575572 return (0);
576573
577574 exp = EXPD (dl1) - EXCESSD - 53;
578−
579575 l = MANTD_LL(dl1);
580576
581577 if (exp >= 12)
582− return (unsigned long long)-1;
578+ return 1ULL << 63; /* overflow result (like gcc, somewhat) */
583579 else if (exp >= 0)
584− if(SIGND(dl1))
585− return -(l >> exp);
586− else
587− return l << exp;
580+ l <<= exp;
588581 else if (exp >= -52)
589− if(SIGND(dl1))
590− return -(l >> -exp);
591− else
592− return l >> -exp;
582+ l >>= -exp;
593583 else
594− return 0;
584+ return 0;
585+ if (SIGND(dl1))
586+ l = (unsigned long long)-l;
587+ return l;
595588 }
596589
597590 long long __fixdfdi (double a1)
@@ -614,20 +607,15 @@ unsigned long long __fixunsxfdi (long double a1) · 16 unmodified lines
614607 return (0);
615608
616609 exp = EXPLD (dl1) - EXCESSLD - 64;
617−
618610 l = dl1.l.lower;
619−
620611 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)
630614 return 0;
615+ l >>= -exp;
616+ if (SIGNLD(dl1))
617+ l = (unsigned long long)-l;
618+ return l;
631619 }
632620
633621 long 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