Lines Matching +full:ulp +full:- +full:allow
2 * Single-precision vector e^x function.
4 * Copyright (c) 2019-2023, Arm Limited.
5 * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
20 /* maxerr: 1.45358 +0.5 ulp. */
21 .poly = { V4 (0x1.0e4020p-7f), V4 (0x1.573e2ep-5f), V4 (0x1.555e66p-3f),
22 V4 (0x1.fffdb6p-2f), V4 (0x1.ffffecp-1f) },
25 .ln2_hi = V4 (0x1.62e4p-1f),
26 .ln2_lo = V4 (0x1.7f7d1cp-20f),
34 #define C(i) d->poly[i]
38 # define TinyBound v_u32 (0x20000000) /* asuint (0x1p-63). */
40 # define SpecialBound v_u32 (0x22800000) /* BigBound - TinyBound. */
63 uint32x4_t cmp2 = vcagtq_f32 (n, d->scale_thresh); in special_case()
81 /* asuint(x) - TinyBound >= BigBound - TinyBound. */ in V_NAME_F1()
87 /* If any lanes are special, mask them with 1 and retain a copy of x to allow in V_NAME_F1()
95 x = ln2*n + r, with r in [-ln2/2, ln2/2]. */ in V_NAME_F1()
96 z = vfmaq_f32 (d->shift, x, d->inv_ln2); in V_NAME_F1()
97 n = vsubq_f32 (z, d->shift); in V_NAME_F1()
98 r = vfmsq_f32 (x, n, d->ln2_hi); in V_NAME_F1()
99 r = vfmsq_f32 (r, n, d->ln2_lo); in V_NAME_F1()
101 scale = vreinterpretq_f32_u32 (vaddq_u32 (e, d->exponent_bias)); in V_NAME_F1()
104 cmp = vcagtq_f32 (n, d->special_bound); in V_NAME_F1()