386BSD 0.0 release
[unix-history] / usr / src / usr.bin / gcc / gnulib / longlong / floatdidf.c
#include "longlong.h"
#define HIGH_HALFWORD_COEFF (((long long) 1) << (BITS_PER_WORD / 2))
#define HIGH_WORD_COEFF (((long long) 1) << BITS_PER_WORD)
double
__floatdidf (u)
long long u;
{
double d;
int negate = 0;
if (u < 0)
u = -u, negate = 1;
d = (unsigned int) (u >> BITS_PER_WORD);
d *= HIGH_HALFWORD_COEFF;
d *= HIGH_HALFWORD_COEFF;
d += (unsigned int) (u & (HIGH_WORD_COEFF - 1));
return (negate ? -d : d);
}