[libiberty and gdb] floatformat_is_valid
Andrew Cagney
ac131313@redhat.com
Mon Sep 15 20:54:00 GMT 2003
> +/* Return non-zero iff the data at FROM is a valid number in format FMT. */
> +
> +int
> +floatformat_is_valid (fmt, from)
> + const struct floatformat *fmt;
> + char *from;
> +{
Shouldn't this be a new virtual method in floatformat?
> + if (fmt == &floatformat_i387_ext)
> + {
> + /* In the i387 double-extended format, if the exponent is all
> + ones, then the integer bit must be set. If the exponent
> + is neither 0 nor ~0, the intbit must also be set. Only
> + if the exponent is zero can it be zero, and then it must
> + be zero. */
> + unsigned int exponent, int_bit;
> + unsigned char *ufrom = (unsigned char *) from;
> +
> + exponent = get_field (ufrom, fmt->byteorder, fmt->totalsize,
> + fmt->exp_start, fmt->exp_len);
> + int_bit = get_field (ufrom, fmt->byteorder, fmt->totalsize,
> + fmt->man_start, 1);
> +
> + if ((exponent == 0) != (int_bit == 0))
> + return 0;
> + else
> + return 1;
> + }
> +
> + /* Other formats with invalid representations should be added
> + here. */
> + return 1;
> }
Andrew
More information about the Binutils
mailing list