OSDN Git Service

Revert last change until we figure out the correct fix.
[uclinux-h8/uClibc.git] / libm / powerpc / s_ldexp.c
1 /*******************************************************************************
2 *                                                                              *
3 *      File frexpldexp.c,                                                      *
4 *      Functions frexp(x) and ldexp(x),                                        *
5 *      Implementation of frexp and ldexp functions for the PowerPC.            *
6 *                                                                              *
7 *      Copyright © 1991 Apple Computer, Inc.  All rights reserved.             *
8 *                                                                              *
9 *      Written by Ali Sazegari, started on January 1991,                       *
10 *                                                                              *
11 *      W A R N I N G:  This routine expects a 64 bit double model.             *
12 *                                                                              *
13 *      December03 1992: first rs6000 implementation.                           *
14 *      October 05 1993: added special cases for NaN and ° in frexp.            *
15 *      May     27 1997: improved the performance of frexp by eliminating the   *
16 *                       switch statement.                                      *
17 *        June      13 2001: (ram) rewrote frexp to eliminate calls to scalb and    *
18 *                               logb.                                                                    *
19 *                                                                              *
20 *******************************************************************************/
21
22 #include <limits.h>
23 #include <math.h>
24 #include <endian.h>
25
26 typedef union
27       {
28       struct {
29 #if (__BYTE_ORDER == __BIG_ENDIAN)
30         unsigned long int hi;
31         unsigned long int lo;
32 #else
33         unsigned long int lo;
34         unsigned long int hi;
35 #endif
36       } words;
37       double dbl;
38       } DblInHex;
39
40 libm_hidden_proto(ldexp)
41 double ldexp ( double value, int exp )
42       {
43       if ( exp > SHRT_MAX )
44             exp = SHRT_MAX;
45       else if ( exp < -SHRT_MAX )
46             exp = -SHRT_MAX;
47       return scalb ( value, exp  );
48       }
49 libm_hidden_def(ldexp)