Karim BELABAS on Mon, 10 Dec 2001 14:54:44 +0100 (MET)

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: New 64 Bit Big Endian architecture

On Mon, 10 Dec 2001, Oliver Paukstadt wrote:
> First thing is, that config/endian.c is ugly and wrong.

Ugly, possibly; wrong, I don't think so.

> I'm not sure, what you really want to find out, but ia64 (64 bit
> LittleEndian) and s390x (64 bit BigEndian) have the same output.
> Imho float representation is independent from byteorder of integer values.
> If you have special assumption for floats please put it into another test.

We want to find out "double endianness", i.e one detail about internal
floating point representation, which is not significant for 64bit
architecture (hence the identical answer for ia64 and s390x). The current
development releases, only available through our CVS server, has the
following short "explanation" text in the Configure script:

  For 32-bit architecture, PARI needs to know the format of your 'double' type.
  PARI assumes doubles are stored in IEEE754 format [ (sign, exponent, mantissa
  high) on one word, (mantissa low) on another ]; assuming a
    union { double d; ulong l[2]; } x;
  are the double exponent and sign stored on x.i[0] (0) or on x.i[1] (1) ?

This is (I think and hope) exactly what the endian.c code was testing. It
_used_ to test for ordinary endianness with code analogous to yours, but we
recently noticed that this was not at all what was needed in the PARI code,
which only used "endianness" in the dbltor/rtodbl conversion routines (float
to t_REAL).  As we figured out the hard way (broken binary on ARM), the
internal format of floating point numbers is independant of endianness.
Endianness in the ordinary sense is not needed at all in PARI.

It was a quick change for the 2.1.2 stable update, not properly documented
there.  The current version [bugfix update 2.1.3, soon to be released] is
more satisfactory: output values are simply 0/1, - (not needed), and "not
IEEE" (fail), and do not twist the meaning of the standard endianness
conventions (1234, etc).

Sorry about the misleading name endian.c. It basically is due to the fact
that CVS is very bad at keeping track of filename changes. So I'd rather
stick to the current name.

> I have a test-prg based on det-endian.c of glibc which works correct for
> 32 and 64 bit endian detection.
> s390 requires -fPIC for shared code.
> All test seem to be successful, except nfields.
> If you want the diffs please ask for it.

I'd like the diffs, if you please.

> Here are the inital s390x patches (If the mailer destroys them, ask for a
> attached patch-file).
> -snip---
> diff -Nur pari-2.1.2/Configure pari-2.1.2.work/Configure
> +    linux-s390*) DLCFLAGS=-fPIC;
> +                 OPTFLAGS="$OPTFLAGS -mno-backchain";;

I'll include this. Thanks.

Karim Belabas                    Tel: (+33) (0)1 69 15 57 48
Dép. de Mathematiques, Bat. 425  Fax: (+33) (0)1 69 15 60 19
Université Paris-Sud             Email: Karim.Belabas@math.u-psud.fr
F-91405 Orsay (France)           http://www.math.u-psud.fr/~belabas
PARI/GP Home Page: http://www.parigp-home.de/