diff options
author | Joseph Myers <joseph@codesourcery.com> | 2013-09-18 14:47:49 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2013-09-18 14:47:49 +0000 |
commit | 24d22e65b39765bb9060f5a99974696171be1da9 (patch) | |
tree | 86acd7b15785045ed0841bc2ff4982b88356301a | |
parent | 2e071de0f7f75564bea9d216096c2e3366d06250 (diff) | |
download | glibc-24d22e65b39765bb9060f5a99974696171be1da9.zip glibc-24d22e65b39765bb9060f5a99974696171be1da9.tar.gz glibc-24d22e65b39765bb9060f5a99974696171be1da9.tar.bz2 |
e500 port: fpu_control.h.
-rw-r--r-- | ChangeLog | 23 | ||||
-rw-r--r-- | sysdeps/powerpc/fpu_control.h | 39 |
2 files changed, 61 insertions, 1 deletions
@@ -1,4 +1,27 @@ 2013-09-18 Joseph Myers <joseph@codesourcery.com> + Aldy Hernandez <aldyh@redhat.com> + + * sysdeps/powerpc/fpu_control.h [_SOFT_FLOAT || __NO_FPRS__]: + Change condition to [_SOFT_FLOAT]. + [__NO_FPRS__ && !_SOFT_FLOAT] (_FPU_RC_NEAREST): New macro. + [__NO_FPRS__ && !_SOFT_FLOAT] (_FPU_RC_DOWN): Likewise. + [__NO_FPRS__ && !_SOFT_FLOAT] (_FPU_RC_UP): Likewise. + [__NO_FPRS__ && !_SOFT_FLOAT] (_FPU_RC_ZERO): Likewise. + [__NO_FPRS__ && !_SOFT_FLOAT] (_FPU_MASK_ZM): Likewise. + [__NO_FPRS__ && !_SOFT_FLOAT] (_FPU_MASK_OM): Likewise. + [__NO_FPRS__ && !_SOFT_FLOAT] (_FPU_MASK_UM): Likewise. + [__NO_FPRS__ && !_SOFT_FLOAT] (_FPU_MASK_XM): Likewise. + [__NO_FPRS__ && !_SOFT_FLOAT] (_FPU_MASK_IM): Likewise. + [__NO_FPRS__ && !_SOFT_FLOAT] (_FPU_RESERVED): Likewise. + [__NO_FPRS__ && !_SOFT_FLOAT] (_FPU_DEFAULT): Likewise. + [__NO_FPRS__ && !_SOFT_FLOAT] (_FPU_IEEE): Likewise. + [__NO_FPRS__ && !_SOFT_FLOAT] (fpu_control_t): New typedef. + [__NO_FPRS__ && !_SOFT_FLOAT] (_FPU_GETCW): New macro. + [__NO_FPRS__ && !_SOFT_FLOAT] (_FPU_SETCW): Likewise. + [__NO_FPRS__ && !_SOFT_FLOAT] (__fpu_control): New variable + declaration. + +2013-09-18 Joseph Myers <joseph@codesourcery.com> * sysdeps/powerpc/powerpc32/__longjmp-common.S (LOAD_GP): Define macro conditional on [__SPE__ || (__NO_FPRS__ && !_SOFT_FLOAT)]. diff --git a/sysdeps/powerpc/fpu_control.h b/sysdeps/powerpc/fpu_control.h index 1a6d395..c61a2e1 100644 --- a/sysdeps/powerpc/fpu_control.h +++ b/sysdeps/powerpc/fpu_control.h @@ -19,7 +19,7 @@ #ifndef _FPU_CONTROL_H #define _FPU_CONTROL_H -#if defined _SOFT_FLOAT || defined __NO_FPRS__ +#ifdef _SOFT_FLOAT # define _FPU_RESERVED 0xffffffff # define _FPU_DEFAULT 0x00000000 /* Default value. */ @@ -28,6 +28,43 @@ typedef unsigned int fpu_control_t; # define _FPU_SETCW(cw) (void) (cw) extern fpu_control_t __fpu_control; +#elif defined __NO_FPRS__ /* e500 */ + +/* rounding control */ +# define _FPU_RC_NEAREST 0x00 /* RECOMMENDED */ +# define _FPU_RC_DOWN 0x03 +# define _FPU_RC_UP 0x02 +# define _FPU_RC_ZERO 0x01 + +/* masking of interrupts */ +# define _FPU_MASK_ZM 0x10 /* zero divide */ +# define _FPU_MASK_OM 0x40 /* overflow */ +# define _FPU_MASK_UM 0x80 /* underflow */ +# define _FPU_MASK_XM 0x40 /* inexact */ +# define _FPU_MASK_IM 0x20 /* invalid operation */ + +# define _FPU_RESERVED 0xff3fff7f /* These bits are reserved and not changed. */ + +/* The fdlibm code requires no interrupts for exceptions. */ +# define _FPU_DEFAULT 0x00000000 /* Default value. */ + +/* IEEE: same as above, but (some) exceptions; + we leave the 'inexact' exception off. + */ +# define _FPU_IEEE 0x000003c0 + +/* Type of the control word. */ +typedef unsigned int fpu_control_t; + +/* Macros for accessing the hardware control word. */ +# define _FPU_GETCW(cw) \ + __asm__ volatile ("mfspefscr %0" : "=r" (cw)) +# define _FPU_SETCW(cw) \ + __asm__ volatile ("mtspefscr %0" : : "r" (cw)) + +/* Default control word set at startup. */ +extern fpu_control_t __fpu_control; + #else /* PowerPC 6xx floating-point. */ /* rounding control */ |