Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libm/common/sincosf.c')
-rw-r--r--newlib/libm/common/sincosf.c104
1 files changed, 0 insertions, 104 deletions
diff --git a/newlib/libm/common/sincosf.c b/newlib/libm/common/sincosf.c
deleted file mode 100644
index 85f12642f..000000000
--- a/newlib/libm/common/sincosf.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/* Single-precision sincos function.
- Copyright (c) 2018 Arm Ltd. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. The name of the company may not be used to endorse or promote
- products derived from this software without specific prior written
- permission.
-
- THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS AND ANY EXPRESS OR IMPLIED
- WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
-
-#include "fdlibm.h"
-#if !__OBSOLETE_MATH
-
-#include <stdint.h>
-#include <math.h>
-#include "math_config.h"
-#include "sincosf.h"
-
-/* Fast sincosf implementation. Worst-case ULP is 0.56072, maximum relative
- error is 0.5303p-23. A single-step signed range reduction is used for
- small values. Large inputs have their range reduced using fast integer
- arithmetic.
-*/
-void
-sincosf (float y, float *sinp, float *cosp)
-{
- double x = y;
- double s;
- int n;
- sincos_t *p = &sincosf_table[0];
-
- if (abstop12 (y) < abstop12 (pio4))
- {
- double x2 = x * x;
-
- if (unlikely (abstop12 (y) < abstop12 (0x1p-12f)))
- {
- if (unlikely (abstop12 (y) < abstop12 (0x1p-126f)))
- /* Force underflow for tiny y. */
- force_eval_float (x2);
- *sinp = y;
- *cosp = 1.0f;
- return;
- }
-
- sincosf_poly (x, x2, p, 0, sinp, cosp);
- }
- else if (abstop12 (y) < abstop12 (120.0f))
- {
- x = reduce_fast (x, p, &n);
-
- /* Setup the signs for sin and cos. */
- s = p->sign[n & 3];
-
- if (n & 2)
- p = &sincosf_table[1];
-
- sincosf_poly (x * s, x * x, p, n, sinp, cosp);
- }
- else if (likely (abstop12 (y) < abstop12 (INFINITY)))
- {
- uint32_t xi = asuint (y);
- int sign = xi >> 31;
-
- x = reduce_large (xi, &n);
-
- /* Setup signs for sin and cos - include original sign. */
- s = p->sign[(n + sign) & 3];
-
- if ((n + sign) & 2)
- p = &sincosf_table[1];
-
- sincosf_poly (x * s, x * x, p, n, sinp, cosp);
- }
- else
- {
- /* Return NaN if Inf or NaN for both sin and cos. */
- *sinp = *cosp = y - y;
-#if WANT_ERRNO
- /* Needed to set errno for +-Inf, the add is a hack to work
- around a gcc register allocation issue: just passing y
- affects code generation in the fast path. */
- __math_invalidf (y + y);
-#endif
- }
-}
-
-#endif