| /* Copyright (C) 1997-2016 Free Software Foundation, Inc. | 
 |    This file is part of the GNU C Library. | 
 |  | 
 |    The GNU C Library is free software; you can redistribute it and/or | 
 |    modify it under the terms of the GNU Lesser General Public | 
 |    License as published by the Free Software Foundation; either | 
 |    version 2.1 of the License, or (at your option) any later version. | 
 |  | 
 |    The GNU C Library is distributed in the hope that it will be useful, | 
 |    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
 |    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
 |    Lesser General Public License for more details. | 
 |  | 
 |    You should have received a copy of the GNU Lesser General Public | 
 |    License along with the GNU C Library; if not, see | 
 |    <http://www.gnu.org/licenses/>.  */ | 
 |  | 
 | /* | 
 |  *	ISO C99:  7.3 Complex arithmetic	<complex.h> | 
 |  */ | 
 |  | 
 | #ifndef _COMPLEX_H | 
 | #define _COMPLEX_H	1 | 
 |  | 
 | #include <features.h> | 
 |  | 
 | /* Get general and ISO C99 specific information.  */ | 
 | #include <bits/mathdef.h> | 
 |  | 
 | __BEGIN_DECLS | 
 |  | 
 | /* We might need to add support for more compilers here.  But since ISO | 
 |    C99 is out hopefully all maintained compilers will soon provide the data | 
 |    types `float complex' and `double complex'.  */ | 
 | #if __GNUC_PREREQ (2, 7) && !__GNUC_PREREQ (2, 97) | 
 | # define _Complex __complex__ | 
 | #endif | 
 |  | 
 | #define complex		_Complex | 
 |  | 
 | /* Narrowest imaginary unit.  This depends on the floating-point | 
 |    evaluation method. | 
 |    XXX This probably has to go into a gcc related file.  */ | 
 | #define _Complex_I	(__extension__ 1.0iF) | 
 |  | 
 | /* Another more descriptive name is `I'. | 
 |    XXX Once we have the imaginary support switch this to _Imaginary_I.  */ | 
 | #undef I | 
 | #define I _Complex_I | 
 |  | 
 | #if defined __USE_ISOC11 && __GNUC_PREREQ (4, 7) | 
 | /* Macros to expand into expression of specified complex type.  */ | 
 | # define CMPLX(x, y) __builtin_complex ((double) (x), (double) (y)) | 
 | # define CMPLXF(x, y) __builtin_complex ((float) (x), (float) (y)) | 
 | # define CMPLXL(x, y) __builtin_complex ((long double) (x), (long double) (y)) | 
 | #endif | 
 |  | 
 | /* The file <bits/cmathcalls.h> contains the prototypes for all the | 
 |    actual math functions.  These macros are used for those prototypes, | 
 |    so we can easily declare each function as both `name' and `__name', | 
 |    and can declare the float versions `namef' and `__namef'.  */ | 
 |  | 
 | #define __MATHCALL(function, args)	\ | 
 |   __MATHDECL (_Mdouble_complex_,function, args) | 
 | #define __MATHDECL(type, function, args) \ | 
 |   __MATHDECL_1(type, function, args); \ | 
 |   __MATHDECL_1(type, __CONCAT(__,function), args) | 
 | #define __MATHDECL_1(type, function, args) \ | 
 |   extern type __MATH_PRECNAME(function) args __THROW | 
 |  | 
 | #define _Mdouble_ 		double | 
 | #define __MATH_PRECNAME(name)	name | 
 | #include <bits/cmathcalls.h> | 
 | #undef	_Mdouble_ | 
 | #undef	__MATH_PRECNAME | 
 |  | 
 | /* Now the float versions.  */ | 
 | #ifndef _Mfloat_ | 
 | # define _Mfloat_		float | 
 | #endif | 
 | #define _Mdouble_ 		_Mfloat_ | 
 | #define __MATH_PRECNAME(name)	name##f | 
 | #include <bits/cmathcalls.h> | 
 | #undef	_Mdouble_ | 
 | #undef	__MATH_PRECNAME | 
 |  | 
 | /* And the long double versions.  It is non-critical to define them | 
 |    here unconditionally since `long double' is required in ISO C99.  */ | 
 | #if !(defined __NO_LONG_DOUBLE_MATH && defined _LIBC)	\ | 
 |     || defined __LDBL_COMPAT | 
 | # ifdef __LDBL_COMPAT | 
 | #  undef __MATHDECL_1 | 
 | #  define __MATHDECL_1(type, function, args) \ | 
 |   extern type __REDIRECT_NTH(__MATH_PRECNAME(function), args, function) | 
 | # endif | 
 |  | 
 | # ifndef _Mlong_double_ | 
 | #  define _Mlong_double_	long double | 
 | # endif | 
 | # define _Mdouble_ 		_Mlong_double_ | 
 | # define __MATH_PRECNAME(name)	name##l | 
 | # include <bits/cmathcalls.h> | 
 | #endif | 
 | #undef	_Mdouble_ | 
 | #undef	__MATH_PRECNAME | 
 | #undef	__MATHDECL_1 | 
 | #undef	__MATHDECL | 
 | #undef	__MATHCALL | 
 |  | 
 | __END_DECLS | 
 |  | 
 | #endif /* complex.h */ |