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
This commit is contained in:
grischka 2020-09-11 01:18:21 +02:00
parent 55b4754e84
commit 4cd6298f9d

View file

@ -530,7 +530,7 @@ unsigned long long __fixunssfdi (float a1)
{ {
register union float_long fl1; register union float_long fl1;
register int exp; register int exp;
register unsigned long l; register unsigned long long l;
fl1.f = a1; fl1.f = a1;
@ -538,22 +538,19 @@ unsigned long long __fixunssfdi (float a1)
return (0); return (0);
exp = EXP (fl1.l) - EXCESS - 24; exp = EXP (fl1.l) - EXCESS - 24;
l = MANT(fl1.l); l = MANT(fl1.l);
if (exp >= 41) if (exp >= 41)
return (unsigned long long)-1; return 1ULL << 63;
else if (exp >= 0) else if (exp >= 0)
if(SIGN(fl1.l)) l <<= exp;
return (unsigned long long)-(l << exp);
else
return (unsigned long long)l << exp;
else if (exp >= -23) else if (exp >= -23)
if(SIGN(fl1.l)) l >>= -exp;
return -(l >> -exp);
else
return l >> -exp;
else else
return 0; return 0;
if (SIGN(fl1.l))
l = (unsigned long long)-l;
return l;
} }
long long __fixsfdi (float a1) long long __fixsfdi (float a1)
@ -575,23 +572,19 @@ unsigned long long __fixunsdfdi (double a1)
return (0); return (0);
exp = EXPD (dl1) - EXCESSD - 53; exp = EXPD (dl1) - EXCESSD - 53;
l = MANTD_LL(dl1); l = MANTD_LL(dl1);
if (exp >= 12) if (exp >= 12)
return (unsigned long long)-1; return 1ULL << 63; /* overflow result (like gcc, somewhat) */
else if (exp >= 0) else if (exp >= 0)
if(SIGND(dl1)) l <<= exp;
return -(l >> exp);
else
return l << exp;
else if (exp >= -52) else if (exp >= -52)
if(SIGND(dl1)) l >>= -exp;
return -(l >> -exp);
else
return l >> -exp;
else else
return 0; return 0;
if (SIGND(dl1))
l = (unsigned long long)-l;
return l;
} }
long long __fixdfdi (double a1) long long __fixdfdi (double a1)
@ -614,20 +607,15 @@ unsigned long long __fixunsxfdi (long double a1)
return (0); return (0);
exp = EXPLD (dl1) - EXCESSLD - 64; exp = EXPLD (dl1) - EXCESSLD - 64;
l = dl1.l.lower; l = dl1.l.lower;
if (exp > 0) if (exp > 0)
return (unsigned long long)-1; return 1ULL << 63;
else if (exp >= -63) if (exp < -63)
{
if(SIGNLD(dl1))
return -(l >> -exp);
else
return l >> -exp;
}
else
return 0; return 0;
l >>= -exp;
if (SIGNLD(dl1))
l = (unsigned long long)-l;
return l;
} }
long long __fixxfdi (long double a1) long long __fixxfdi (long double a1)