This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [libiberty and gdb] floatformat_is_valid


+/* 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




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]