[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