1 /* 2 * Helper macros for pairwise Horner polynomial evaluation. 3 * 4 * Copyright (c) 2022-2023, Arm Limited. 5 * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception 6 */ 7 8 // clang-format off 9 #define PW_HORNER_1_(x, c, i) FMA(x, c(i + 1), c(i)) 10 #define PW_HORNER_3_(x, x2, c, i) FMA(x2, PW_HORNER_1_ (x, c, i + 2), PW_HORNER_1_(x, c, i)) 11 #define PW_HORNER_5_(x, x2, c, i) FMA(x2, PW_HORNER_3_ (x, x2, c, i + 2), PW_HORNER_1_(x, c, i)) 12 #define PW_HORNER_7_(x, x2, c, i) FMA(x2, PW_HORNER_5_ (x, x2, c, i + 2), PW_HORNER_1_(x, c, i)) 13 #define PW_HORNER_9_(x, x2, c, i) FMA(x2, PW_HORNER_7_ (x, x2, c, i + 2), PW_HORNER_1_(x, c, i)) 14 #define PW_HORNER_11_(x, x2, c, i) FMA(x2, PW_HORNER_9_ (x, x2, c, i + 2), PW_HORNER_1_(x, c, i)) 15 #define PW_HORNER_13_(x, x2, c, i) FMA(x2, PW_HORNER_11_(x, x2, c, i + 2), PW_HORNER_1_(x, c, i)) 16 #define PW_HORNER_15_(x, x2, c, i) FMA(x2, PW_HORNER_13_(x, x2, c, i + 2), PW_HORNER_1_(x, c, i)) 17 #define PW_HORNER_17_(x, x2, c, i) FMA(x2, PW_HORNER_15_(x, x2, c, i + 2), PW_HORNER_1_(x, c, i)) 18 19 #define PAIRWISE_HORNER_1(x, c) PW_HORNER_1_ (x, c, 0) 20 #define PAIRWISE_HORNER_3(x, x2, c) PW_HORNER_3_ (x, x2, c, 0) 21 #define PAIRWISE_HORNER_5(x, x2, c) PW_HORNER_5_ (x, x2, c, 0) 22 #define PAIRWISE_HORNER_7(x, x2, c) PW_HORNER_7_ (x, x2, c, 0) 23 #define PAIRWISE_HORNER_9(x, x2, c) PW_HORNER_9_ (x, x2, c, 0) 24 #define PAIRWISE_HORNER_11(x, x2, c) PW_HORNER_11_(x, x2, c, 0) 25 #define PAIRWISE_HORNER_13(x, x2, c) PW_HORNER_13_(x, x2, c, 0) 26 #define PAIRWISE_HORNER_15(x, x2, c) PW_HORNER_15_(x, x2, c, 0) 27 #define PAIRWISE_HORNER_17(x, x2, c) PW_HORNER_17_(x, x2, c, 0) 28 29 #define PW_HORNER_2_(x, x2, c, i) FMA(x2, c(i + 2), PW_HORNER_1_(x, c, i)) 30 #define PW_HORNER_4_(x, x2, c, i) FMA(x2, PW_HORNER_2_ (x, x2, c, i + 2), PW_HORNER_1_(x, c, i)) 31 #define PW_HORNER_6_(x, x2, c, i) FMA(x2, PW_HORNER_4_ (x, x2, c, i + 2), PW_HORNER_1_(x, c, i)) 32 #define PW_HORNER_8_(x, x2, c, i) FMA(x2, PW_HORNER_6_ (x, x2, c, i + 2), PW_HORNER_1_(x, c, i)) 33 #define PW_HORNER_10_(x, x2, c, i) FMA(x2, PW_HORNER_8_ (x, x2, c, i + 2), PW_HORNER_1_(x, c, i)) 34 #define PW_HORNER_12_(x, x2, c, i) FMA(x2, PW_HORNER_10_(x, x2, c, i + 2), PW_HORNER_1_(x, c, i)) 35 #define PW_HORNER_14_(x, x2, c, i) FMA(x2, PW_HORNER_12_(x, x2, c, i + 2), PW_HORNER_1_(x, c, i)) 36 #define PW_HORNER_16_(x, x2, c, i) FMA(x2, PW_HORNER_14_(x, x2, c, i + 2), PW_HORNER_1_(x, c, i)) 37 #define PW_HORNER_18_(x, x2, c, i) FMA(x2, PW_HORNER_16_(x, x2, c, i + 2), PW_HORNER_1_(x, c, i)) 38 39 #define PAIRWISE_HORNER_2(x, x2, c) PW_HORNER_2_ (x, x2, c, 0) 40 #define PAIRWISE_HORNER_4(x, x2, c) PW_HORNER_4_ (x, x2, c, 0) 41 #define PAIRWISE_HORNER_6(x, x2, c) PW_HORNER_6_ (x, x2, c, 0) 42 #define PAIRWISE_HORNER_8(x, x2, c) PW_HORNER_8_(x, x2, c, 0) 43 #define PAIRWISE_HORNER_10(x, x2, c) PW_HORNER_10_(x, x2, c, 0) 44 #define PAIRWISE_HORNER_12(x, x2, c) PW_HORNER_12_(x, x2, c, 0) 45 #define PAIRWISE_HORNER_14(x, x2, c) PW_HORNER_14_(x, x2, c, 0) 46 #define PAIRWISE_HORNER_16(x, x2, c) PW_HORNER_16_(x, x2, c, 0) 47 #define PAIRWISE_HORNER_18(x, x2, c) PW_HORNER_18_(x, x2, c, 0) 48 // clang-format on 49