12#ifndef EIGEN_ARCH_GENERIC_PACKET_MATH_POLYNOMIALS_H
13#define EIGEN_ARCH_GENERIC_PACKET_MATH_POLYNOMIALS_H
16#include "../../InternalHeaderCheck.h"
60template <
typename Packet,
int N>
62 template <
int... Indices>
63 static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet run_impl(
const Packet& x,
64 const typename unpacket_traits<Packet>::type coeff[],
65 std::integer_sequence<int, Indices...>) {
66 Packet result = pset1<Packet>(coeff[0]);
67 int unused[] = {0, (result = pmadd(result, x, pset1<Packet>(coeff[Indices + 1])), 0)...};
68 EIGEN_UNUSED_VARIABLE(unused);
72 static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet run(
const Packet& x,
73 const typename unpacket_traits<Packet>::type coeff[]) {
74 EIGEN_STATIC_ASSERT((N >= 0), YOU_MADE_A_PROGRAMMING_MISTAKE);
75 return run_impl(x, coeff, std::make_integer_sequence<
int, (N > 0 ? N : 0)>{});
131template <
typename Packet,
int N>
133 EIGEN_DEVICE_FUNC
static EIGEN_STRONG_INLINE Packet run(
const Packet& x,
134 const typename unpacket_traits<Packet>::type coef[]) {
135 using Scalar =
typename unpacket_traits<Packet>::type;
136 Packet b0 = pset1<Packet>(coef[0]);
137 Packet b1 = pset1<Packet>(
static_cast<Scalar
>(0.f));
140 for (
int i = 1; i < N; i++) {
143 b0 = psub(pmadd(x, b1, pset1<Packet>(coef[i])), b2);
146 return pmul(pset1<Packet>(
static_cast<Scalar
>(0.5f)), psub(b0, b2));