xref: /llvm-project/libc/src/math/generic/exp_utils.h (revision 5ff3ff33ff930e4ec49da7910612d8a41eb068cb)
1bbb75554SSiva Chandra //===-- Collection of utils for exp and friends -----------------*- C++ -*-===//
2bbb75554SSiva Chandra //
3bbb75554SSiva Chandra // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4bbb75554SSiva Chandra // See https://llvm.org/LICENSE.txt for license information.
5bbb75554SSiva Chandra // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6bbb75554SSiva Chandra //
7bbb75554SSiva Chandra //===----------------------------------------------------------------------===//
8bbb75554SSiva Chandra 
9330793c9SNick Desaulniers #ifndef LLVM_LIBC_SRC_MATH_GENERIC_EXP_UTILS_H
10330793c9SNick Desaulniers #define LLVM_LIBC_SRC_MATH_GENERIC_EXP_UTILS_H
11bbb75554SSiva Chandra 
12*5ff3ff33SPetr Hosek #include "src/__support/macros/config.h"
13bbb75554SSiva Chandra #include <stdint.h>
14bbb75554SSiva Chandra 
15bbb75554SSiva Chandra #define EXP2F_TABLE_BITS 5
16bbb75554SSiva Chandra #define EXP2F_POLY_ORDER 3
17bbb75554SSiva Chandra #define N (1 << EXP2F_TABLE_BITS)
18bbb75554SSiva Chandra 
19*5ff3ff33SPetr Hosek namespace LIBC_NAMESPACE_DECL {
20bbb75554SSiva Chandra 
21bbb75554SSiva Chandra struct Exp2fDataTable {
22bbb75554SSiva Chandra   uint64_t tab[1 << EXP2F_TABLE_BITS];
23bbb75554SSiva Chandra   double shift_scaled;
24bbb75554SSiva Chandra   double poly[EXP2F_POLY_ORDER];
25bbb75554SSiva Chandra   double shift;
26bbb75554SSiva Chandra   double invln2_scaled;
27bbb75554SSiva Chandra   double poly_scaled[EXP2F_POLY_ORDER];
28bbb75554SSiva Chandra };
29bbb75554SSiva Chandra 
30bbb75554SSiva Chandra extern const Exp2fDataTable exp2f_data;
31bbb75554SSiva Chandra 
32*5ff3ff33SPetr Hosek } // namespace LIBC_NAMESPACE_DECL
33bbb75554SSiva Chandra 
34330793c9SNick Desaulniers #endif // LLVM_LIBC_SRC_MATH_GENERIC_EXP_UTILS_H
35