From 3bdeb53ad653d964ab7569c3468ac9ee6f33b593 Mon Sep 17 00:00:00 2001 From: Phil Blundell Date: Mon, 13 Jun 2005 10:11:47 +0000 Subject: [PATCH] 2005-06-13 Philip Blundell Patch from addsub@eyou.com: * sysdeps/arm/ieee754.h: Deleted. * sysdeps/arm/gmp-mparam.h: Support VFP and big endian. * sysdeps/arm/bits/endian.h: Likewise. --- ChangeLog.arm | 7 +++ sysdeps/arm/bits/endian.h | 11 ++++- sysdeps/arm/gmp-mparam.h | 14 ++++-- sysdeps/arm/ieee754.h | 115 ---------------------------------------------- 4 files changed, 27 insertions(+), 120 deletions(-) delete mode 100644 sysdeps/arm/ieee754.h diff --git a/ChangeLog.arm b/ChangeLog.arm index 7383cb3..1148fae 100644 --- a/ChangeLog.arm +++ b/ChangeLog.arm @@ -1,3 +1,10 @@ +2005-06-13 Philip Blundell + + Patch from addsub@eyou.com: + * sysdeps/arm/ieee754.h: Deleted. + * sysdeps/arm/gmp-mparam.h: Support VFP and big endian. + * sysdeps/arm/bits/endian.h: Likewise. + 2005-06-11 Phil Blundell * sysdeps/arm/init-first.c: Deleted. diff --git a/sysdeps/arm/bits/endian.h b/sysdeps/arm/bits/endian.h index 5e54cc7..dc909c3 100644 --- a/sysdeps/arm/bits/endian.h +++ b/sysdeps/arm/bits/endian.h @@ -1,12 +1,19 @@ -/* ARM is (usually) little-endian but with a big-endian FPU. */ - #ifndef _ENDIAN_H # error "Never use directly; include instead." #endif +/* ARM can be either big or little endian. */ #ifdef __ARMEB__ #define __BYTE_ORDER __BIG_ENDIAN #else #define __BYTE_ORDER __LITTLE_ENDIAN #endif + +/* FPA floating point units are always big-endian, irrespective of the + CPU endianness. VFP floating point units use the same endianness + as the rest of the system. */ +#ifdef __VFP_FP__ +#define __FLOAT_WORD_ORDER __BYTE_ORDER +#else #define __FLOAT_WORD_ORDER __BIG_ENDIAN +#endif diff --git a/sysdeps/arm/gmp-mparam.h b/sysdeps/arm/gmp-mparam.h index c880be3..57ad7e2 100644 --- a/sysdeps/arm/gmp-mparam.h +++ b/sysdeps/arm/gmp-mparam.h @@ -1,6 +1,6 @@ /* gmp-mparam.h -- Compiler/machine parameter header file. -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. +Copyright (C) 1991, 1993, 1994, 1995, 2005 Free Software Foundation, Inc. This file is part of the GNU MP Library. @@ -26,5 +26,13 @@ MA 02111-1307, USA. */ #define BITS_PER_SHORTINT 16 #define BITS_PER_CHAR 8 -#define IEEE_DOUBLE_BIG_ENDIAN 0 -#define IEEE_DOUBLE_MIXED_ENDIAN 1 +#if defined(__ARMEB__) +# define IEEE_DOUBLE_MIXED_ENDIAN 0 +# define IEEE_DOUBLE_BIG_ENDIAN 1 +#elif defined(__VFP_FP__) +# define IEEE_DOUBLE_MIXED_ENDIAN 0 +# define IEEE_DOUBLE_BIG_ENDIAN 0 +#else +# define IEEE_DOUBLE_BIG_ENDIAN 0 +# define IEEE_DOUBLE_MIXED_ENDIAN 1 +#endif diff --git a/sysdeps/arm/ieee754.h b/sysdeps/arm/ieee754.h deleted file mode 100644 index 629b97f..0000000 --- a/sysdeps/arm/ieee754.h +++ /dev/null @@ -1,115 +0,0 @@ -/* Copyright (C) 1992, 1995, 1996, 1998 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _IEEE754_H - -#define _IEEE754_H 1 -#include - -#include - -__BEGIN_DECLS - -union ieee754_float - { - float f; - - /* This is the IEEE 754 single-precision format. */ - struct - { - unsigned int mantissa:23; - unsigned int exponent:8; - unsigned int negative:1; - } ieee; - - /* This format makes it easier to see if a NaN is a signalling NaN. */ - struct - { - unsigned int mantissa:22; - unsigned int quiet_nan:1; - unsigned int exponent:8; - unsigned int negative:1; - } ieee_nan; - }; - -#define IEEE754_FLOAT_BIAS 0x7f /* Added to exponent. */ - - -union ieee754_double - { - double d; - - /* This is the IEEE 754 double-precision format. */ - struct - { - unsigned int mantissa0:20; - unsigned int exponent:11; - unsigned int negative:1; - unsigned int mantissa1:32; - } ieee; - - /* This format makes it easier to see if a NaN is a signalling NaN. */ - struct - { - unsigned int mantissa0:19; - unsigned int quiet_nan:1; - unsigned int exponent:11; - unsigned int negative:1; - unsigned int mantissa1:32; - } ieee_nan; - }; - -#define IEEE754_DOUBLE_BIAS 0x3ff /* Added to exponent. */ - - -/* The following two structures are correct for `new' floating point systems but - wrong for the old FPPC. The only solution seems to be to avoid their use on - old hardware. */ - -union ieee854_long_double - { - long double d; - - /* This is the IEEE 854 double-extended-precision format. */ - struct - { - unsigned int exponent:15; - unsigned int empty:16; - unsigned int negative:1; - unsigned int mantissa1:32; - unsigned int mantissa0:32; - } ieee; - - /* This is for NaNs in the IEEE 854 double-extended-precision format. */ - struct - { - unsigned int exponent:15; - unsigned int empty:16; - unsigned int negative:1; - unsigned int mantissa1:32; - unsigned int mantissa0:30; - unsigned int quiet_nan:1; - unsigned int one:1; - } ieee_nan; - }; - -#define IEEE854_LONG_DOUBLE_BIAS 0x3fff - -__END_DECLS - -#endif /* ieee754.h */ -- 2.7.4