FLINT3.7.0-dev

flint_mpn_dot_strided_tab, flint_mpn_dot_tab, flint_mpn_dot_rev_tab

Synopsis#include <flint/mpn_extras.h>
const flint_mpn_dot_strided_func_t flint_mpn_dot_strided_tab
const flint_mpn_dot_func_t flint_mpn_dot_tab
const flint_mpn_dot_func_t flint_mpn_dot_rev_tab

Tables of dot product kernels. The kernel at index [sgn][n1][n2][s - (n1 + n2 - 1)] sets (res,s)(\mathit{res}, s) to ∑k=0len−1akbk mod Bs\sum_{k=0}^{\mathit{len}-1} a_k b_k \bmod B^s, where the aka_k have n1n_1 limbs and the bkb_k have n2n_2 limbs, unsigned for sgn = 0 and two's complement for sgn = 1, for 1≤n2≤n11 \le n_2 \le n_1 and s∈{n1+n2−1,n1+n2,n1+n2+1}s \in \{n_1 + n_2 - 1, n_1 + n_2, n_1 + n_2 + 1\}. Entries are NULL where no kernel exists (in particular for n1<n2n_1 < n_2).

The table dimensions are [2][FLINT_MPN_DOT_TAB_N + 1][FLINT_MPN_DOT_TAB_N + 1][3] for the strided kernels and [2][FLINT_MPN_DOT_DEDICATED_TAB_N + 1][FLINT_MPN_DOT_DEDICATED_TAB_N + 1][3] for the others, with FLINT_MPN_DOT_TAB_N = 4 and FLINT_MPN_DOT_DEDICATED_TAB_N = 2. In flint_mpn_dot_tab the entries are contiguous, ak=a[kn1]a_k = a[k n_1], bk=b[kn2]b_k = b[k n_2]; in flint_mpn_dot_rev_tab the second array is read backwards, bkb_k being the entry len−1−k\mathit{len} - 1 - k; in the strided kernels the entries are astride and bstride limbs apart (the strides may be negative). The kernels (static functions such as _flint_mpn_dot_2x2_5) are generated by dev/gen_mpn_dot_rev.py.

Cite this page

The FLINT team, “flint_mpn_dot_strided_tab, flint_mpn_dot_tab, flint_mpn_dot_rev_tab (mpn_extras.h),” FLINT: Fast Library for Number Theory, documentation, version 3.7.0-dev, 2026. https://flintlib.org/doc/mpn_extras/flint_mpn_dot_strided_tab.html (generated 2026-11-02).