mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 03:51:15 +08:00
merge from gcc
This commit is contained in:
parent
e1e3d0f5e6
commit
3b6940c0d1
@ -1,3 +1,14 @@
|
||||
2005-08-17 Mark Kettenis <kettenis@gnu.org>
|
||||
|
||||
* floatformat.h (struct floatformat): Change type of large
|
||||
argument for is_valid member to `const void *'.
|
||||
(floatformat_to_double): Change type of second argument to `const
|
||||
void *'.
|
||||
(floatformat_from_double): Change type of last argument to `void
|
||||
*'.
|
||||
(floatformat_is_valid): Change type of last argument to `const
|
||||
void *'.
|
||||
|
||||
2005-07-14 Jim Blandy <jimb@redhat.com>
|
||||
|
||||
* dis-asm.h (print_insn_m32c): New declaration.
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* IEEE floating point support declarations, for GDB, the GNU Debugger.
|
||||
Copyright 1991, 1994, 1995, 1997, 2000, 2003 Free Software Foundation, Inc.
|
||||
Copyright 1991, 1994, 1995, 1997, 2000, 2003, 2005
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GDB.
|
||||
|
||||
@ -82,7 +83,7 @@ struct floatformat
|
||||
const char *name;
|
||||
|
||||
/* Validator method. */
|
||||
int (*is_valid) (const struct floatformat *fmt, const char *from);
|
||||
int (*is_valid) (const struct floatformat *fmt, const void *from);
|
||||
};
|
||||
|
||||
/* floatformats for IEEE single and double, big and little endian. */
|
||||
@ -116,17 +117,17 @@ extern const struct floatformat floatformat_ia64_quad_little;
|
||||
Store the double in *TO. */
|
||||
|
||||
extern void
|
||||
floatformat_to_double (const struct floatformat *, const char *, double *);
|
||||
floatformat_to_double (const struct floatformat *, const void *, double *);
|
||||
|
||||
/* The converse: convert the double *FROM to FMT
|
||||
and store where TO points. */
|
||||
|
||||
extern void
|
||||
floatformat_from_double (const struct floatformat *, const double *, char *);
|
||||
floatformat_from_double (const struct floatformat *, const double *, void *);
|
||||
|
||||
/* Return non-zero iff the data at FROM is a valid number in format FMT. */
|
||||
|
||||
extern int
|
||||
floatformat_is_valid (const struct floatformat *fmt, const char *from);
|
||||
floatformat_is_valid (const struct floatformat *fmt, const void *from);
|
||||
|
||||
#endif /* defined (FLOATFORMAT_H) */
|
||||
|
@ -1,3 +1,16 @@
|
||||
2005-08-17 Mark Kettenis <kettenis@gnu.org>
|
||||
|
||||
* floatformat.c (floatformat_always_valid): Change type of last
|
||||
argument to `void *'.
|
||||
(floatformat_i387_ext_is_valid): Likewise.
|
||||
(floatformat_to_double): Change type of second argument to `const
|
||||
void *'.
|
||||
(floatformat_from_double): Change type of last argument to `void
|
||||
*'.
|
||||
(floatformat_is_valid): Change type of last argument to `const
|
||||
void *'.
|
||||
(ieee_test): Remove redundant casts.
|
||||
|
||||
2005-08-17 Kelley Cook <kcook@gcc.gnu.org>
|
||||
|
||||
* strverscmp.c: Update FSF address.
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* IEEE floating point support routines, for GDB, the GNU Debugger.
|
||||
Copyright (C) 1991, 1994, 1999, 2000, 2003 Free Software Foundation, Inc.
|
||||
Copyright 1991, 1994, 1999, 2000, 2003, 2005
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GDB.
|
||||
|
||||
@ -52,11 +53,11 @@ static unsigned long get_field (const unsigned char *,
|
||||
unsigned int,
|
||||
unsigned int);
|
||||
static int floatformat_always_valid (const struct floatformat *fmt,
|
||||
const char *from);
|
||||
const void *from);
|
||||
|
||||
static int
|
||||
floatformat_always_valid (const struct floatformat *fmt ATTRIBUTE_UNUSED,
|
||||
const char *from ATTRIBUTE_UNUSED)
|
||||
const void *from ATTRIBUTE_UNUSED)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
@ -107,23 +108,24 @@ const struct floatformat floatformat_ieee_double_littlebyte_bigword =
|
||||
floatformat_always_valid
|
||||
};
|
||||
|
||||
static int floatformat_i387_ext_is_valid (const struct floatformat *fmt, const char *from);
|
||||
static int floatformat_i387_ext_is_valid (const struct floatformat *fmt,
|
||||
const void *from);
|
||||
|
||||
static int
|
||||
floatformat_i387_ext_is_valid (const struct floatformat *fmt, const char *from)
|
||||
floatformat_i387_ext_is_valid (const struct floatformat *fmt, const void *from)
|
||||
{
|
||||
/* 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 long exponent, int_bit;
|
||||
const unsigned char *ufrom = (const unsigned char *) from;
|
||||
|
||||
const unsigned char *ufrom = 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
|
||||
@ -267,9 +269,9 @@ get_field (const unsigned char *data, enum floatformat_byteorders order,
|
||||
|
||||
void
|
||||
floatformat_to_double (const struct floatformat *fmt,
|
||||
const char *from, double *to)
|
||||
const void *from, double *to)
|
||||
{
|
||||
const unsigned char *ufrom = (const unsigned char *)from;
|
||||
const unsigned char *ufrom = from;
|
||||
double dto;
|
||||
long exponent;
|
||||
unsigned long mant;
|
||||
@ -438,14 +440,14 @@ put_field (unsigned char *data, enum floatformat_byteorders order,
|
||||
|
||||
void
|
||||
floatformat_from_double (const struct floatformat *fmt,
|
||||
const double *from, char *to)
|
||||
const double *from, void *to)
|
||||
{
|
||||
double dfrom;
|
||||
int exponent;
|
||||
double mant;
|
||||
unsigned int mant_bits, mant_off;
|
||||
int mant_bits_left;
|
||||
unsigned char *uto = (unsigned char *)to;
|
||||
unsigned char *uto = to;
|
||||
|
||||
dfrom = *from;
|
||||
memset (uto, 0, fmt->totalsize / FLOATFORMAT_CHAR_BIT);
|
||||
@ -533,7 +535,7 @@ floatformat_from_double (const struct floatformat *fmt,
|
||||
/* Return non-zero iff the data at FROM is a valid number in format FMT. */
|
||||
|
||||
int
|
||||
floatformat_is_valid (const struct floatformat *fmt, const char *from)
|
||||
floatformat_is_valid (const struct floatformat *fmt, const void *from)
|
||||
{
|
||||
return fmt->is_valid (fmt, from);
|
||||
}
|
||||
@ -550,15 +552,13 @@ ieee_test (double n)
|
||||
{
|
||||
double result;
|
||||
|
||||
floatformat_to_double (&floatformat_ieee_double_little, (char *) &n,
|
||||
&result);
|
||||
floatformat_to_double (&floatformat_ieee_double_little, &n, &result);
|
||||
if ((n != result && (! isnan (n) || ! isnan (result)))
|
||||
|| (n < 0 && result >= 0)
|
||||
|| (n >= 0 && result < 0))
|
||||
printf ("Differ(to): %.20g -> %.20g\n", n, result);
|
||||
|
||||
floatformat_from_double (&floatformat_ieee_double_little, &n,
|
||||
(char *) &result);
|
||||
floatformat_from_double (&floatformat_ieee_double_little, &n, &result);
|
||||
if ((n != result && (! isnan (n) || ! isnan (result)))
|
||||
|| (n < 0 && result >= 0)
|
||||
|| (n >= 0 && result < 0))
|
||||
|
Loading…
Reference in New Issue
Block a user