this repo has no description
1/*
2 * Copyright (c) 2002 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * The contents of this file constitute Original Code as defined in and
7 * are subject to the Apple Public Source License Version 1.1 (the
8 * "License"). You may not use this file except in compliance with the
9 * License. Please obtain a copy of the License at
10 * http://www.apple.com/publicsource and read it before using this file.
11 *
12 * This Original Code and all software distributed under the License are
13 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
17 * License for the specific language governing rights and limitations
18 * under the License.
19 *
20 * @APPLE_LICENSE_HEADER_END@
21 */
22
23#define __WANT_LONG_DOUBLE_FORMAT__ 0 /* Defeat long double prototypes in math.h */
24#include "math.h" /* for its *double* prototypes */
25
26#undef __LIBMLDBL_COMPAT
27#if 0 /* Temporarily disable the plan-in-blue. */
28#define __LIBMLDBL_64(sym) __asm("_" __STRING(sym) "$LDBL64")
29#define __LIBMLDBL_GLOB(sym) __asm(".text"); __asm(".align 4"); __asm(".globl " "_" __STRING(sym))
30#define __LIBMLDBL_NO_DECOR(sym) __asm("_" __STRING(sym) ": b " "_" __STRING(sym) "$LDBL64")
31#define __LIBMLDBL_COMPAT(sym) __LIBMLDBL_64(sym) ; __LIBMLDBL_GLOB(sym) ; __LIBMLDBL_NO_DECOR(sym)
32#else
33#define __LIBMLDBL_64(sym) /* NOTHING */
34#define __LIBMLDBL_GLOB(sym) __asm(".text"); __asm(".align 4"); __asm(".globl " "_" __STRING(sym) "$LDBL64")
35#define __LIBMLDBL_NO_DECOR(sym) __asm("_" __STRING(sym) "$LDBL64" ": b " "_" __STRING(sym))
36#define __LIBMLDBL_COMPAT(sym) __LIBMLDBL_64(sym) ; __LIBMLDBL_GLOB(sym) ; __LIBMLDBL_NO_DECOR(sym)
37#endif
38//
39// Introduce prototypes and (trivial) implementations for long double == double scheme.
40// Programs compiled with -mlong-double-64 see these.
41//
42extern double acosl( double ) __LIBMLDBL_COMPAT(acosl);
43extern double asinl( double ) __LIBMLDBL_COMPAT(asinl);
44extern double atanl( double ) __LIBMLDBL_COMPAT(atanl);
45extern double atan2l( double, double ) __LIBMLDBL_COMPAT(atan2l);
46extern double cosl( double ) __LIBMLDBL_COMPAT(cosl);
47extern double sinl( double ) __LIBMLDBL_COMPAT(sinl);
48extern double tanl( double ) __LIBMLDBL_COMPAT(tanl);
49extern double acoshl( double ) __LIBMLDBL_COMPAT(acoshl);
50extern double asinhl( double ) __LIBMLDBL_COMPAT(asinhl);
51extern double atanhl( double ) __LIBMLDBL_COMPAT(atanhl);
52extern double coshl( double ) __LIBMLDBL_COMPAT(coshl);
53extern double sinhl( double ) __LIBMLDBL_COMPAT(sinhl);
54extern double tanhl( double ) __LIBMLDBL_COMPAT(tanhl);
55extern double expl( double ) __LIBMLDBL_COMPAT(expl);
56extern double exp2l( double ) __LIBMLDBL_COMPAT(exp2l);
57extern double expm1l( double ) __LIBMLDBL_COMPAT(expm1l);
58extern double logl( double ) __LIBMLDBL_COMPAT(logl);
59extern double log10l( double ) __LIBMLDBL_COMPAT(log10l);
60extern double log2l( double ) __LIBMLDBL_COMPAT(log2l);
61extern double log1pl( double ) __LIBMLDBL_COMPAT(log1pl);
62extern double logbl( double ) __LIBMLDBL_COMPAT(logbl);
63extern double modfl( double, double * ) __LIBMLDBL_COMPAT(modfl);
64extern double ldexpl( double, int ) __LIBMLDBL_COMPAT(ldexpl);
65extern double frexpl( double, int * ) __LIBMLDBL_COMPAT(frexpl);
66extern int ilogbl( double ) __LIBMLDBL_COMPAT(ilogbl);
67extern double scalbnl( double, int ) __LIBMLDBL_COMPAT(scalbnl);
68extern double scalblnl( double, long int ) __LIBMLDBL_COMPAT(scalblnl);
69extern double fabsl( double ) __LIBMLDBL_COMPAT(fabsl);
70extern double cbrtl( double ) __LIBMLDBL_COMPAT(cbrtl);
71extern double hypotl( double, double ) __LIBMLDBL_COMPAT(hypotl);
72extern double powl( double, double ) __LIBMLDBL_COMPAT(powl);
73extern double sqrtl( double ) __LIBMLDBL_COMPAT(sqrtl);
74extern double erfl( double ) __LIBMLDBL_COMPAT(erfl);
75extern double erfcl( double ) __LIBMLDBL_COMPAT(erfcl);
76extern double lgammal( double ) __LIBMLDBL_COMPAT(lgammal);
77extern double tgammal( double ) __LIBMLDBL_COMPAT(tgammal);
78extern double ceill( double ) __LIBMLDBL_COMPAT(ceill);
79extern double floorl( double ) __LIBMLDBL_COMPAT(floorl);
80extern double nearbyintl( double ) __LIBMLDBL_COMPAT(nearbyintl);
81extern double rintl( double ) __LIBMLDBL_COMPAT(rintl);
82extern long int lrintl( double ) __LIBMLDBL_COMPAT(lrintl);
83extern long long int llrintl( double ) __LIBMLDBL_COMPAT(llrintl);
84extern double roundl( double ) __LIBMLDBL_COMPAT(roundl);
85extern long int lroundl( double ) __LIBMLDBL_COMPAT(lroundl);
86extern long long int llroundl( double ) __LIBMLDBL_COMPAT(llroundl);
87extern double truncl( double ) __LIBMLDBL_COMPAT(truncl);
88extern double fmodl( double, double) __LIBMLDBL_COMPAT(fmodl);
89extern double remainderl( double, double ) __LIBMLDBL_COMPAT(remainderl);
90extern double remquol( double, double, int * ) __LIBMLDBL_COMPAT(remquol);
91extern double copysignl( double, double ) __LIBMLDBL_COMPAT(copysignl);
92extern double nextafterl( double, double ) __LIBMLDBL_COMPAT(nextafterl);
93extern double nexttoward( double, double ) __LIBMLDBL_COMPAT(nexttoward);
94extern float nexttowardf( float, double ) __LIBMLDBL_COMPAT(nexttowardf);
95extern double nexttowardl( double, double ) __LIBMLDBL_COMPAT(nexttowardl);
96extern double fdiml( double, double ) __LIBMLDBL_COMPAT(fdiml);
97extern double fmaxl( double, double ) __LIBMLDBL_COMPAT(fmaxl);
98extern double fminl( double, double ) __LIBMLDBL_COMPAT(fminl);
99extern double fmal( double, double, double ) __LIBMLDBL_COMPAT(fmal);
100
101double acosl( double x ) { return (double)acos((double) x); }
102double asinl( double x ) { return (double)asin((double) x); }
103double atanl( double x ) { return (double)atan((double) x); }
104double atan2l( double y, double x )
105 { return (double)atan2((double) y, (double) x); }
106double cosl( double x ) { return (double)cos((double) x); }
107double sinl( double x ) { return (double)sin((double) x); }
108double tanl( double x ) { return (double)tan((double) x); }
109double acoshl( double x ) { return (double)acosh((double) x); }
110double asinhl( double x ) { return (double)asinh((double) x); }
111double atanhl( double x ) { return (double)atanh((double) x); }
112double coshl( double x ) { return (double)cosh((double) x); }
113double sinhl( double x ) { return (double)sinh((double) x); }
114double tanhl( double x ) { return (double)tanh((double) x); }
115double expl( double x ) { return (double)exp((double) x); }
116double exp2l( double x ) { return (double)exp2((double) x); }
117double expm1l( double x ) { return (double)expm1((double) x); }
118double logl( double x ) { return (double)log((double) x); }
119double log10l( double x ) { return (double)log10((double) x); }
120double log2l( double x ) { return (double)log2((double) x); }
121double log1pl( double x ) { return (double)log1p((double) x); }
122double logbl( double x ) { return (double)logb((double) x); }
123double modfl( double x, double *iptr )
124 { return (double)modf((double) x, (double *)iptr); }
125double ldexpl( double x, int n ) { return (double)ldexp((double) x, n); }
126double frexpl( double x, int *exp ) { return (double)frexp((double) x, exp); }
127int ilogbl( double x ) { return ilogb((double) x); }
128double scalbnl( double x, int n ) { return (double)scalbn((double) x, n); }
129double scalblnl( double x, long int n ) { return (double)scalbln((double) x, n); }
130double fabsl( double x ) { return (double)fabs((double) x); }
131double cbrtl( double x ) { return (double)cbrt((double) x); }
132double hypotl( double x, double y )
133 { return (double)hypot((double) x, (double) y); }
134double powl( double x, double y )
135 { return (double)pow((double) x, (double) y); }
136double sqrtl( double x ) { return (double)sqrt((double) x); }
137double erfl( double x ) { return (double)erf((double) x); }
138double erfcl( double x ) { return (double)erfc((double) x); }
139double lgammal( double x ) { return (double)lgamma((double) x); }
140double tgammal( double x ) { return (double)tgamma((double) x); }
141double ceill( double x ) { return (double)ceil((double) x); }
142double floorl( double x ) { return (double)floor((double) x); }
143double nearbyintl( double x ) { return (double)nearbyint((double) x); }
144double rintl( double x ) { return (double)rint((double) x); }
145long int lrintl( double x ) { return (long int)lrint((double) x); }
146long long int llrintl( double x ) { return (long long int)llrint((double) x); }
147double roundl( double x ) { return (double)round((double) x); }
148long int lroundl( double x ) { return (long int)lround((double) x); }
149long long int llroundl( double x ) { return (long long int)llround((double) x); }
150double truncl( double x ) { return (double)trunc((double) x); }
151double fmodl( double x, double y){ return (double)fmod((double) x, (double) y); }
152double remainderl( double x, double y )
153 { return (double)remainder((double) x, (double) y); }
154double remquol( double x, double y, int *quo )
155 { return (double)remquo((double) x, (double) y, quo); }
156double copysignl( double x, double y )
157 { return (double)copysign((double) x, (double) y); }
158double nextafterl( double x, double y )
159 { return (double)nextafter((double) x, (double) y); }
160double nexttoward( double x, double y ) { return (double)nextafter((double) x, (double) y); }
161float nexttowardf( float x, double y )
162{
163if ((double) x == y || y != y) return (float)y; /* 7.2.11.4 paragraph 2*/
164else if ((double)x > y) return nextafterf(x, -INFINITY);
165 else return nextafterf(x, INFINITY);
166}
167
168double nexttowardl( double x, double y )
169 { return (double)nextafter((double) x, (double) y); }
170double fdiml( double x, double y ) { return (double)fdim((double) x, (double) y); }
171double fmaxl( double x, double y ) { return (double)fmax((double) x, (double) y); }
172double fminl( double x, double y ) { return (double)fmin((double) x, (double) y); }
173double fmal( double x, double y, double z )
174 { return (double)fma((double) x, (double) y, (double) z); }
175