28 static Elt dot(
size_t n,
const Elt x[],
size_t incx,
29 const Elt y[],
size_t incy,
const Field& F) {
31 for (
size_t i = 0; i < n; i++) {
32 F.add(r, F.mulf(x[i * incx], y[i * incy]));
38 static Elt dot1(
size_t n,
const Elt x[],
size_t incx,
41 for (
size_t i = 0; i < n; ++i) {
42 F.add(r, x[i * incx]);
48 static void scale(
size_t n, Elt y[],
size_t incy,
const Elt a,
50 for (
size_t i = 0; i < n; i++) {
51 F.mul(y[i * incy], a);
56 static void axpy(
size_t n, Elt y[],
size_t incy,
const Elt a,
57 const Elt x[],
size_t incx,
const Field& F) {
58 for (
size_t i = 0; i < n; i++) {
59 F.add(y[i * incy], F.mulf(x[i * incx], a));
64 static void vaxpy(
size_t n, Elt y[],
size_t incy,
65 const Elt a[],
size_t inca,
66 const Elt x[],
size_t incx,
const Field& F) {
67 for (
size_t i = 0; i < n; i++) {
68 F.add(y[i * incy], F.mulf(x[i * incx], a[i * inca]));
73 static void vymax(
size_t n, Elt y[],
size_t incy,
74 const Elt a[],
size_t inca,
75 const Elt x[],
size_t incx,
const Field& F) {
76 for (
size_t i = 0; i < n; i++) {
77 F.sub(y[i * incy], F.mulf(x[i * incx], a[i * inca]));
81 static bool equal(
size_t n,
const Elt x[],
size_t incx,
82 const Elt y[],
size_t incy,
const Field& F) {
83 for (
size_t i = 0; i < n; i++) {
84 if (x[i * incx] != y[i * incy])
return false;
89 static bool equal0(
size_t n,
const Elt x[],
size_t incx,
91 for (
size_t i = 0; i < n; i++) {
92 if (x[i * incx] != F.zero())
return false;
97 static void copy(
size_t n, Elt dst[],
size_t incd,
98 const Elt src[],
size_t incs) {
99 for (
size_t i = 0; i < n; i++) {
100 dst[i * incd] = src[i * incs];
105 static void gather(
size_t n, Elt dst[],
const Elt src[],
106 const size_t idx[]) {
107 for (
size_t i = 0; i < n; i++) {
108 dst[i] = src[idx[i]];
112 static void clear(
size_t n, Elt dst[],
size_t incd,
114 for (
size_t i = 0; i < n; i++) {
115 dst[i * incd] = F.zero();