This is the mail archive of the
gdb@sources.redhat.com
mailing list for the GDB project.
Re: ARM float/double conversion
- From: Andrew Cagney <ac131313 at cygnus dot com>
- To: twall at oculustech dot com
- Cc: gdb at sources dot redhat dot com
- Date: Wed, 05 Dec 2001 11:05:08 -0500
- Subject: Re: ARM float/double conversion
- References: <3C0E3509.7EAF89EF@oculustech.com>
> In gdb/doublest.c, there is some conversion done for
> floatformat_littlebyte_bigword (currently only used by ARM):
>
> longswaps = fmt->totalsize / FLOATFORMAT_CHAR_BIT;
> longswaps >>= 3;
>
> while (longswaps-- > 0)
> {
> /* This is ugly, but efficient */
> *swapout++ = swapin[4];
> *swapout++ = swapin[5];
> *swapout++ = swapin[6];
> *swapout++ = swapin[7];
> *swapout++ = swapin[0];
> *swapout++ = swapin[1];
> *swapout++ = swapin[2];
> *swapout++ = swapin[3];
> swapin += 8;
> }
>
> What's odd is that fmt->totalsize can be either 64 or 96, based on the formats
> defined in libiberty/floatformat.c. For either case, longswaps will be 1, so
> I don't understand why
> this code was "generalized". I assume that the extended double on the ARM has
> just the
> first two 32-bit words swapped.
No. I'm pretty sure the hardware engineers wouldn't have done that. I
suspect instead that this is a long standing problem with cross
debugging the Arm. Anyone got an Arm spec available - my Arm book
suggests the above is wrong but isn't 100% clear?
Andrew