1 /* 2 * SPDX-License-Identifier: BSD-3-Clause 3 * 4 * Copyright © 2022 Keith Packard 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 13 * 2. Redistributions in binary form must reproduce the above 14 * copyright notice, this list of conditions and the following 15 * disclaimer in the documentation and/or other materials provided 16 * with the distribution. 17 * 18 * 3. Neither the name of the copyright holder nor the names of its 19 * contributors may be used to endorse or promote products derived 20 * from this software without specific prior written permission. 21 * 22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 25 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 26 * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 27 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 28 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 29 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 31 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 32 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 33 * OF THE POSSIBILITY OF SUCH DAMAGE. 34 */ 35 36 #include "fdlibm.h" 37 #include <math.h> 38 39 #if defined(_HAVE_LONG_DOUBLE_MATH) && defined(_NEED_FLOAT_HUGE) 40 #define _HAVE_LD_SUPPORT 41 #endif 42 43 #ifdef _HAVE_LD_SUPPORT 44 45 typedef uint32_t u_int32_t; 46 typedef uint64_t u_int64_t; 47 48 #define __kernel_rem_pio2 __kernel_rem_pio2l 49 50 int __kernel_rem_pio2(double*,double*,int,int,int); 51 /* long double precision kernel functions */ 52 long double __kernel_sinl(long double, long double, int); 53 long double __kernel_cosl(long double, long double); 54 long double __kernel_tanl(long double, long double, int); 55 56 #ifndef __FreeBSD__ 57 #define STRICT_ASSIGN(type, lval, rval) ((lval) = (rval)) 58 #else 59 #ifdef FLT_EVAL_METHOD 60 // Attempt to get strict C99 semantics for assignment with non-C99 compilers. 61 #if FLT_EVAL_METHOD == 0 || __GNUC__ == 0 62 #define STRICT_ASSIGN(type, lval, rval) ((lval) = (rval)) 63 #else 64 #define STRICT_ASSIGN(type, lval, rval) do { \ 65 volatile type __lval; \ 66 \ 67 if (sizeof(type) >= sizeof(long double)) \ 68 (lval) = (rval); \ 69 else { \ 70 __lval = (rval); \ 71 (lval) = __lval; \ 72 } \ 73 } while (0) 74 #endif 75 #endif 76 #endif 77 78 #endif 79 80 #include "math_private_openbsd.h" 81 82 #ifndef EXT_FRACLMBITS 83 #define EXT_FRACLMBITS 0 84 #endif 85 86 #ifndef EXT_FRACHMBITS 87 #define EXT_FRACHMBITS 0 88 #endif 89