From f775c276fd1f89cc9d561db0890a356e7d6e50b8 Mon Sep 17 00:00:00 2001 From: Kai Tietz Date: Thu, 1 Mar 2012 16:22:09 +0000 Subject: [PATCH] soft-fp: Support using struct layout attributes on bit-fields. --- ChangeLog | 9 +++++++++ soft-fp/double.h | 6 +++--- soft-fp/extended.h | 6 +++--- soft-fp/quad.h | 8 ++++---- soft-fp/single.h | 4 ++-- soft-fp/soft-fp.h | 12 +++++++++++- 6 files changed, 32 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index e2bc926..a2e0d6c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2012-03-01 Kai Tietz + + * soft-fp/soft-fp.h (_FP_STRUCT_LAYOUT): New macro. + * soft-fp/quad.h (_FP_UNION_Q): Use _FP_STRUCT_LAYOUT on struct + containing bit-fields. + * soft-fp/extended.h (_FP_UNION_E): Likewise. + * soft-fp/single.h (_FP_UNION_S): Likewise. + * soft-fp/double.h (_FP_UNION_D): Likewise. + 2012-02-29 Joseph Myers [BZ #13786] diff --git a/soft-fp/double.h b/soft-fp/double.h index e247e6e..5bad49c 100644 --- a/soft-fp/double.h +++ b/soft-fp/double.h @@ -1,6 +1,6 @@ /* Software floating-point emulation. Definitions for IEEE Double Precision - Copyright (C) 1997, 1998, 1999, 2006, 2007, 2008, 2009 + Copyright (C) 1997, 1998, 1999, 2006, 2007, 2008, 2009, 2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson (rth@cygnus.com), @@ -67,7 +67,7 @@ typedef float DFtype __attribute__((mode(DF))); union _FP_UNION_D { DFtype flt; - struct { + struct _FP_STRUCT_LAYOUT { #if __BYTE_ORDER == __BIG_ENDIAN unsigned sign : 1; unsigned exp : _FP_EXPBITS_D; @@ -166,7 +166,7 @@ union _FP_UNION_D union _FP_UNION_D { DFtype flt; - struct { + struct _FP_STRUCT_LAYOUT { #if __BYTE_ORDER == __BIG_ENDIAN unsigned sign : 1; unsigned exp : _FP_EXPBITS_D; diff --git a/soft-fp/extended.h b/soft-fp/extended.h index 3ab6b6a..af9c6e6 100644 --- a/soft-fp/extended.h +++ b/soft-fp/extended.h @@ -1,6 +1,6 @@ /* Software floating-point emulation. Definitions for IEEE Extended Precision. - Copyright (C) 1999,2006,2007 Free Software Foundation, Inc. + Copyright (C) 1999,2006,2007,2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek (jj@ultra.linux.cz). @@ -63,7 +63,7 @@ typedef float XFtype __attribute__((mode(XF))); union _FP_UNION_E { XFtype flt; - struct + struct _FP_STRUCT_LAYOUT { #if __BYTE_ORDER == __BIG_ENDIAN unsigned long pad1 : _FP_W_TYPE_SIZE; @@ -262,7 +262,7 @@ union _FP_UNION_E union _FP_UNION_E { XFtype flt; - struct { + struct _FP_STRUCT_LAYOUT { #if __BYTE_ORDER == __BIG_ENDIAN _FP_W_TYPE pad : (_FP_W_TYPE_SIZE - 1 - _FP_EXPBITS_E); unsigned sign : 1; diff --git a/soft-fp/quad.h b/soft-fp/quad.h index ea70138..b05bd2d 100644 --- a/soft-fp/quad.h +++ b/soft-fp/quad.h @@ -1,6 +1,6 @@ /* Software floating-point emulation. Definitions for IEEE Quad Precision. - Copyright (C) 1997,1998,1999,2006,2007 Free Software Foundation, Inc. + Copyright (C) 1997,1998,1999,2006,2007,2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson (rth@cygnus.com), Jakub Jelinek (jj@ultra.linux.cz), @@ -66,7 +66,7 @@ typedef float TFtype __attribute__((mode(TF))); union _FP_UNION_Q { TFtype flt; - struct + struct _FP_STRUCT_LAYOUT { #if __BYTE_ORDER == __BIG_ENDIAN unsigned sign : 1; @@ -170,10 +170,10 @@ union _FP_UNION_Q union _FP_UNION_Q { TFtype flt /* __attribute__((mode(TF))) */ ; - struct { + struct _FP_STRUCT_LAYOUT { _FP_W_TYPE a, b; } longs; - struct { + struct _FP_STRUCT_LAYOUT { #if __BYTE_ORDER == __BIG_ENDIAN unsigned sign : 1; unsigned exp : _FP_EXPBITS_Q; diff --git a/soft-fp/single.h b/soft-fp/single.h index c10d25a..119d0db 100644 --- a/soft-fp/single.h +++ b/soft-fp/single.h @@ -1,6 +1,6 @@ /* Software floating-point emulation. Definitions for IEEE Single Precision. - Copyright (C) 1997,1998,1999,2006 Free Software Foundation, Inc. + Copyright (C) 1997,1998,1999,2006,2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson (rth@cygnus.com), Jakub Jelinek (jj@ultra.linux.cz), @@ -57,7 +57,7 @@ typedef float SFtype __attribute__((mode(SF))); union _FP_UNION_S { SFtype flt; - struct { + struct _FP_STRUCT_LAYOUT { #if __BYTE_ORDER == __BIG_ENDIAN unsigned sign : 1; unsigned exp : _FP_EXPBITS_S; diff --git a/soft-fp/soft-fp.h b/soft-fp/soft-fp.h index ed4d39d..46cb1cf 100644 --- a/soft-fp/soft-fp.h +++ b/soft-fp/soft-fp.h @@ -1,5 +1,5 @@ /* Software floating-point emulation. - Copyright (C) 1997,1998,1999,2000,2002,2003,2005,2006,2007 + Copyright (C) 1997,1998,1999,2000,2002,2003,2005,2006,2007,2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson (rth@cygnus.com), @@ -84,6 +84,16 @@ #define FP_EX_DENORM 0 #endif +/* _FP_STRUCT_LAYOUT may be defined as an attribute to determine the + struct layout variant used for structures where bit-fields are used + to access specific parts of binary floating-point numbers. This is + required for systems where the default ABI uses struct layout with + differences in how consecutive bit-fields are laid out from the + default expected by soft-fp. */ +#ifndef _FP_STRUCT_LAYOUT +#define _FP_STRUCT_LAYOUT +#endif + #ifdef _FP_DECL_EX #define FP_DECL_EX \ int _fex = 0; \ -- 2.7.4