#ifndef SPQLIOS_Q120_ARITHMETIC_H #define SPQLIOS_Q120_ARITHMETIC_H #include #include "../commons.h" #include "q120_common.h" typedef struct _q120_mat1col_product_baa_precomp q120_mat1col_product_baa_precomp; typedef struct _q120_mat1col_product_bbb_precomp q120_mat1col_product_bbb_precomp; typedef struct _q120_mat1col_product_bbc_precomp q120_mat1col_product_bbc_precomp; EXPORT q120_mat1col_product_baa_precomp* q120_new_vec_mat1col_product_baa_precomp(); EXPORT void q120_delete_vec_mat1col_product_baa_precomp(q120_mat1col_product_baa_precomp*); EXPORT q120_mat1col_product_bbb_precomp* q120_new_vec_mat1col_product_bbb_precomp(); EXPORT void q120_delete_vec_mat1col_product_bbb_precomp(q120_mat1col_product_bbb_precomp*); EXPORT q120_mat1col_product_bbc_precomp* q120_new_vec_mat1col_product_bbc_precomp(); EXPORT void q120_delete_vec_mat1col_product_bbc_precomp(q120_mat1col_product_bbc_precomp*); // ell < 10000 EXPORT void q120_vec_mat1col_product_baa_ref(q120_mat1col_product_baa_precomp*, const uint64_t ell, q120b* const res, const q120a* const x, const q120a* const y); EXPORT void q120_vec_mat1col_product_bbb_ref(q120_mat1col_product_bbb_precomp*, const uint64_t ell, q120b* const res, const q120b* const x, const q120b* const y); EXPORT void q120_vec_mat1col_product_bbc_ref(q120_mat1col_product_bbc_precomp*, const uint64_t ell, q120b* const res, const q120b* const x, const q120c* const y); EXPORT void q120_vec_mat1col_product_baa_avx2(q120_mat1col_product_baa_precomp*, const uint64_t ell, q120b* const res, const q120a* const x, const q120a* const y); EXPORT void q120_vec_mat1col_product_bbb_avx2(q120_mat1col_product_bbb_precomp*, const uint64_t ell, q120b* const res, const q120b* const x, const q120b* const y); EXPORT void q120_vec_mat1col_product_bbc_avx2(q120_mat1col_product_bbc_precomp*, const uint64_t ell, q120b* const res, const q120b* const x, const q120c* const y); EXPORT void q120x2_vec_mat1col_product_bbc_ref(q120_mat1col_product_bbc_precomp* precomp, const uint64_t ell, q120b* const res, const q120b* const x, const q120c* const y); EXPORT void q120x2_vec_mat1col_product_bbc_avx2(q120_mat1col_product_bbc_precomp* precomp, const uint64_t ell, q120b* const res, const q120b* const x, const q120c* const y); EXPORT void q120x2_vec_mat2cols_product_bbc_ref(q120_mat1col_product_bbc_precomp* precomp, const uint64_t ell, q120b* const res, const q120b* const x, const q120c* const y); EXPORT void q120x2_vec_mat2cols_product_bbc_avx2(q120_mat1col_product_bbc_precomp* precomp, const uint64_t ell, q120b* const res, const q120b* const x, const q120c* const y); /** * @brief extract 1 q120x2 block from one q120 ntt vectors * @param nn the size of each vector * @param blk the block id to extract (