1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-29 11:41:21 +03:00

soft-fp: Support using struct layout attributes on bit-fields.

This commit is contained in:
Kai Tietz
2012-03-01 16:22:09 +00:00
committed by Joseph Myers
parent 9ea559e401
commit f775c276fd
6 changed files with 32 additions and 13 deletions

View File

@ -1,3 +1,12 @@
2012-03-01 Kai Tietz <ktietz@redhat.com>
* 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 <joseph@codesourcery.com> 2012-02-29 Joseph Myers <joseph@codesourcery.com>
[BZ #13786] [BZ #13786]

View File

@ -1,6 +1,6 @@
/* Software floating-point emulation. /* Software floating-point emulation.
Definitions for IEEE Double Precision 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. Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Richard Henderson (rth@cygnus.com), Contributed by Richard Henderson (rth@cygnus.com),
@ -67,7 +67,7 @@ typedef float DFtype __attribute__((mode(DF)));
union _FP_UNION_D union _FP_UNION_D
{ {
DFtype flt; DFtype flt;
struct { struct _FP_STRUCT_LAYOUT {
#if __BYTE_ORDER == __BIG_ENDIAN #if __BYTE_ORDER == __BIG_ENDIAN
unsigned sign : 1; unsigned sign : 1;
unsigned exp : _FP_EXPBITS_D; unsigned exp : _FP_EXPBITS_D;
@ -166,7 +166,7 @@ union _FP_UNION_D
union _FP_UNION_D union _FP_UNION_D
{ {
DFtype flt; DFtype flt;
struct { struct _FP_STRUCT_LAYOUT {
#if __BYTE_ORDER == __BIG_ENDIAN #if __BYTE_ORDER == __BIG_ENDIAN
unsigned sign : 1; unsigned sign : 1;
unsigned exp : _FP_EXPBITS_D; unsigned exp : _FP_EXPBITS_D;

View File

@ -1,6 +1,6 @@
/* Software floating-point emulation. /* Software floating-point emulation.
Definitions for IEEE Extended Precision. 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. This file is part of the GNU C Library.
Contributed by Jakub Jelinek (jj@ultra.linux.cz). Contributed by Jakub Jelinek (jj@ultra.linux.cz).
@ -63,7 +63,7 @@ typedef float XFtype __attribute__((mode(XF)));
union _FP_UNION_E union _FP_UNION_E
{ {
XFtype flt; XFtype flt;
struct struct _FP_STRUCT_LAYOUT
{ {
#if __BYTE_ORDER == __BIG_ENDIAN #if __BYTE_ORDER == __BIG_ENDIAN
unsigned long pad1 : _FP_W_TYPE_SIZE; unsigned long pad1 : _FP_W_TYPE_SIZE;
@ -262,7 +262,7 @@ union _FP_UNION_E
union _FP_UNION_E union _FP_UNION_E
{ {
XFtype flt; XFtype flt;
struct { struct _FP_STRUCT_LAYOUT {
#if __BYTE_ORDER == __BIG_ENDIAN #if __BYTE_ORDER == __BIG_ENDIAN
_FP_W_TYPE pad : (_FP_W_TYPE_SIZE - 1 - _FP_EXPBITS_E); _FP_W_TYPE pad : (_FP_W_TYPE_SIZE - 1 - _FP_EXPBITS_E);
unsigned sign : 1; unsigned sign : 1;

View File

@ -1,6 +1,6 @@
/* Software floating-point emulation. /* Software floating-point emulation.
Definitions for IEEE Quad Precision. 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. This file is part of the GNU C Library.
Contributed by Richard Henderson (rth@cygnus.com), Contributed by Richard Henderson (rth@cygnus.com),
Jakub Jelinek (jj@ultra.linux.cz), Jakub Jelinek (jj@ultra.linux.cz),
@ -66,7 +66,7 @@ typedef float TFtype __attribute__((mode(TF)));
union _FP_UNION_Q union _FP_UNION_Q
{ {
TFtype flt; TFtype flt;
struct struct _FP_STRUCT_LAYOUT
{ {
#if __BYTE_ORDER == __BIG_ENDIAN #if __BYTE_ORDER == __BIG_ENDIAN
unsigned sign : 1; unsigned sign : 1;
@ -170,10 +170,10 @@ union _FP_UNION_Q
union _FP_UNION_Q union _FP_UNION_Q
{ {
TFtype flt /* __attribute__((mode(TF))) */ ; TFtype flt /* __attribute__((mode(TF))) */ ;
struct { struct _FP_STRUCT_LAYOUT {
_FP_W_TYPE a, b; _FP_W_TYPE a, b;
} longs; } longs;
struct { struct _FP_STRUCT_LAYOUT {
#if __BYTE_ORDER == __BIG_ENDIAN #if __BYTE_ORDER == __BIG_ENDIAN
unsigned sign : 1; unsigned sign : 1;
unsigned exp : _FP_EXPBITS_Q; unsigned exp : _FP_EXPBITS_Q;

View File

@ -1,6 +1,6 @@
/* Software floating-point emulation. /* Software floating-point emulation.
Definitions for IEEE Single Precision. 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. This file is part of the GNU C Library.
Contributed by Richard Henderson (rth@cygnus.com), Contributed by Richard Henderson (rth@cygnus.com),
Jakub Jelinek (jj@ultra.linux.cz), Jakub Jelinek (jj@ultra.linux.cz),
@ -57,7 +57,7 @@ typedef float SFtype __attribute__((mode(SF)));
union _FP_UNION_S union _FP_UNION_S
{ {
SFtype flt; SFtype flt;
struct { struct _FP_STRUCT_LAYOUT {
#if __BYTE_ORDER == __BIG_ENDIAN #if __BYTE_ORDER == __BIG_ENDIAN
unsigned sign : 1; unsigned sign : 1;
unsigned exp : _FP_EXPBITS_S; unsigned exp : _FP_EXPBITS_S;

View File

@ -1,5 +1,5 @@
/* Software floating-point emulation. /* 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. Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Richard Henderson (rth@cygnus.com), Contributed by Richard Henderson (rth@cygnus.com),
@ -84,6 +84,16 @@
#define FP_EX_DENORM 0 #define FP_EX_DENORM 0
#endif #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 #ifdef _FP_DECL_EX
#define FP_DECL_EX \ #define FP_DECL_EX \
int _fex = 0; \ int _fex = 0; \