#ifndef LLVM_LIBC_SRC___SUPPORT_FPUTIL_POLYEVAL_H
#define LLVM_LIBC_SRC___SUPPORT_FPUTIL_POLYEVAL_H
#include "multiply_add.h"
#include "src/__support/CPP/type_traits.h"
#include "src/__support/common.h"
#include "src/__support/macros/config.h"
namespace LIBC_NAMESPACE_DECL {
namespace fputil {
template <typename T>
LIBC_INLINE cpp::enable_if_t<(sizeof(T) > sizeof(void *)), T>
polyeval(const T &, const T &a0) {
return a0;
}
template <typename T>
LIBC_INLINE cpp::enable_if_t<(sizeof(T) <= sizeof(void *)), T> polyeval(T,
T a0) {
return a0;
}
template <typename T, typename... Ts>
LIBC_INLINE cpp::enable_if_t<(sizeof(T) > sizeof(void *)), T>
polyeval(const T &x, const T &a0, const Ts &...a) {
return multiply_add(x, polyeval(x, a...), a0);
}
template <typename T, typename... Ts>
LIBC_INLINE cpp::enable_if_t<(sizeof(T) <= sizeof(void *)), T>
polyeval(T x, T a0, Ts... a) {
return multiply_add(x, polyeval(x, a...), a0);
}
}
}
#endif