[PATCH v2] Use long for mantissa for generic mp code
Richard Henderson
rth@twiddle.net
Wed Mar 13 16:46:00 GMT 2013
On 03/08/2013 04:38 AM, Siddhesh Poyarekar wrote:
> +typedef long mantissa_t;
> +typedef int64_t mantissa_store_t;
> +
> +#define TWOPOW(i) (1L << i)
> +
> +#define RADIX TWOPOW (24) /* 2^24 */
> +
> +/* Divide D by RADIX and put the remainder in R. D must be a non-negative
> + integral value. */
> +#define DIV_RADIX(d, r) \
> + ({ \
> + r = ((uint64_t) d) % RADIX; \
> + d /= RADIX; \
> + })
One unsigned divide and one signed divide is even worse than two signed
divides, surely. Perhaps it would be easier to just write
r = d & (RADIX - 1);
d >>= LG2_RADIX;
or whatever? Or just give up on being able to avoid the signed divide?
> +
> +/* Put the integer component of a double X in R and retain the fraction in
> + X. */
> +#define INTEGER_OF(x, i) \
> + ({ \
> + i = (mantissa_t) x; \
> + x -= i; \
> + })
We need a better comment here, since we're no longer talking about doubles.
Otherwise the patch looks good to me.
r~
More information about the Libc-alpha
mailing list