This is the mail archive of the gdb@sources.redhat.com mailing list for the GDB 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: ARM float/double conversion


> 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



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