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>
[BZ #13786]

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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; \