#ifndef NTT_H
#define NTT_H

#include <stdint.h>
#include "params.h"

void ntt_levels0t2_avx(int32_t r[N],
                       const int32_t a[N],
                       const int32_t *pdata,
                       const int32_t zetas[7]);
void ntt_levels3t5_avx(int32_t r[N],
                       const int32_t a[N],
                       const int32_t *pdata,
                       const int32_t zetas[7]);
void ntt_levels6t8_avx(int32_t r[N],
                       const int32_t a[N],
                       const int32_t *pdata,
                       const int32_t zetas[7]);
void ntt_levels9t11_avx(int32_t r[N],
                        const int32_t a[N],
                        const int32_t *pdata,
                        const int32_t zetas[28]);

void invntt_levels0t2_avx(int32_t r[N],
                          const int32_t a[N],
                          const int32_t *pdata,
                          const int32_t zetas_inv[28]);
void invntt_levels3t5_avx(int32_t r[N],
                          const int32_t a[N],
                          const int32_t *pdata,
                          const int32_t zetas_inv[7]);
void invntt_levels6t8_avx(int32_t r[N],
                          const int32_t a[N],
                          const int32_t *pdata,
                          const int32_t zetas_inv[7]);
void invntt_levels9t11_avx(int32_t r[N],
                           const int32_t a[N],
                           const int32_t *pdata,
                           const int32_t zetas_inv[7]);

#endif
