Problem with 64 bit FP under ARM

Martin Sandiford ms@REDACTED
Tue Aug 26 13:21:35 CEST 2003


Hi Bjorn,

On Tue, 26 Aug 2003, Bjorn Gustavsson wrote:

> Martin Sandiford <ms@REDACTED> writes:
> 
> > 1> <<1.0:64/float>>.
> > <<63,240,0,0,0,0,0,0>>
> > (Pretty much as expected for a little endian machine)
> 
> This is the expected result on ANY machine.

Sorry, misspoke myself.  Should be "..as expected for the beam VM"?

> It would be interesting if you could post the result of:
> <<1.0:64/native-float>>

Eshell V5.3  (abort with ^G)
1> <<1.0:64/native-float>>.
<<0,0,240,63,0,0,0,0>>
2> <<1.0:64/float>>.
<<0,0,0,0,63,240,0,0>>

I've since found out (by reading the manuals!) that there is a 
bug/feature in the ARM core < v5 in that it always stores floats in 
big endian quad order.  SA1110 is little endian and v4 core, so this
is where the problem is occurring.

I have a fix for erts/emulator/beam/erl_bits.c that swaps the quads 
in erts_bs_(put|get)_float(), but I'm wondering if there are any other 
interfaces to the outside world that might need attention?

Martin



More information about the erlang-questions mailing list