_d1_vec_dot, _d2_vec_dot, _d3_vec_dot, _d4_vec_dot, _d1_vec_dot_rev, _d2_vec_dot_rev, _d3_vec_dot_rev, _d4_vec_dot_rev
#include <flint/dfloat.h>void _d1_vec_dot_rev(d1_t res, d1_srcptr initial, int subtract, d1_srcptr x, d1_srcptr y, slong len)void _d2_vec_dot_rev(d2_t res, d2_srcptr initial, int subtract, d2_srcptr x, d2_srcptr y, slong len)void _d3_vec_dot_rev(d3_t res, d3_srcptr initial, int subtract, d3_srcptr x, d3_srcptr y, slong len)void _d4_vec_dot_rev(d4_t res, d4_srcptr initial, int subtract, d4_srcptr x, d4_srcptr y, slong len)Set res to (vec_dot) or (vec_dot_rev), where is initial (or zero if initial is NULL) and the sign is negative if subtract is nonzero, as _gr_vec_dot and _gr_vec_dot_rev.
The SIMD versions keep four lane accumulators and combine them at the end; vec_dot_rev (the kernel of classical polynomial multiplication and of the power series base cases) loads the blocks of in reverse lane order, so that it gives the same result as vec_dot on a reversed copy of . Dot products shorter than 32 terms for d1, 10 for d2 and d3, and 8 for the balls use a lean scalar loop.
The FLINT team, “_d1_vec_dot, _d2_vec_dot, _d3_vec_dot, _d4_vec_dot, _d1_vec_dot_rev, _d2_vec_dot_rev, _d3_vec_dot_rev, _d4_vec_dot_rev (dfloat.h),” FLINT: Fast Library for Number Theory, documentation, version 3.7.0-dev, 2026. https://flintlib.org/doc/dfloat/_d1_vec_dot.html (generated 2026-11-02).
@misc{flint-doc-dfloat-d1-vec-dot,
author = {{The FLINT team}},
title = {{\_d1\_vec\_dot, \_d2\_vec\_dot, \_d3\_vec\_dot, \_d4\_vec\_dot, \_d1\_vec\_dot\_rev, \_d2\_vec\_dot\_rev, \_d3\_vec\_dot\_rev, \_d4\_vec\_dot\_rev (dfloat.h)}},
howpublished = {FLINT: Fast Library for Number Theory, documentation, version 3.7.0-dev},
year = {2026},
url = {https://flintlib.org/doc/dfloat/_d1_vec_dot.html},
note = {Generated 2026-11-02}
}