28 template <
typename L_Expr,
typename R_Expr>
29 static void apply(L_Expr&& lhs, R_Expr&& rhs) {
32 auto* lhs_mem = lhs.memory_start();
37 const size_t iend = prev_multiple(N, 4);
39 for (; i < iend; i += 4) {
40 lhs_mem[i] = rhs.read_flat(i);
41 lhs_mem[i + 1] = rhs.read_flat(i + 1);
42 lhs_mem[i + 2] = rhs.read_flat(i + 2);
43 lhs_mem[i + 3] = rhs.read_flat(i + 3);
48 lhs_mem[i] = rhs.read_flat(i);
60 template <
typename L_Expr,
typename R_Expr>
61 static void apply(L_Expr&& lhs, R_Expr&& rhs) {
64 auto* lhs_mem = lhs.memory_start();
69 const size_t iend = prev_multiple(N, 4);
71 for (; i < iend; i += 4) {
73 lhs_mem[i + 1] += rhs[i + 1];
74 lhs_mem[i + 2] += rhs[i + 2];
75 lhs_mem[i + 3] += rhs[i + 3];
92 template <
typename L_Expr,
typename R_Expr>
93 static void apply(L_Expr&& lhs, R_Expr&& rhs) {
96 auto* lhs_mem = lhs.memory_start();
101 const size_t iend = prev_multiple(N, 4);
103 for (; i < iend; i += 4) {
104 lhs_mem[i] -= rhs[i];
105 lhs_mem[i + 1] -= rhs[i + 1];
106 lhs_mem[i + 2] -= rhs[i + 2];
107 lhs_mem[i + 3] -= rhs[i + 3];
112 lhs_mem[i] -= rhs[i];
124 template <
typename L_Expr,
typename R_Expr>
125 static void apply(L_Expr&& lhs, R_Expr&& rhs) {
128 auto* lhs_mem = lhs.memory_start();
133 const size_t iend = prev_multiple(N, 4);
135 for (; i < iend; i += 4) {
136 lhs_mem[i] *= rhs[i];
137 lhs_mem[i + 1] *= rhs[i + 1];
138 lhs_mem[i + 2] *= rhs[i + 2];
139 lhs_mem[i + 3] *= rhs[i + 3];
144 lhs_mem[i] *= rhs[i];
156 template <
typename L_Expr,
typename R_Expr>
157 static void apply(L_Expr&& lhs, R_Expr&& rhs) {
160 auto* lhs_mem = lhs.memory_start();
165 const size_t iend = prev_multiple(N, 4);
167 for (; i < iend; i += 4) {
168 lhs_mem[i] /= rhs[i];
169 lhs_mem[i + 1] /= rhs[i + 1];
170 lhs_mem[i + 2] /= rhs[i + 2];
171 lhs_mem[i + 3] /= rhs[i + 3];
176 lhs_mem[i] /= rhs[i];
static void apply(L_Expr &&lhs, R_Expr &&rhs)
Assign rhs to lhs.
Definition: linear_eval_functors.hpp:125
static void apply(L_Expr &&lhs, R_Expr &&rhs)
Assign rhs to lhs.
Definition: linear_eval_functors.hpp:93
Definition: expression_builder.hpp:699
static void apply(L_Expr &&lhs, R_Expr &&rhs)
Assign rhs to lhs.
Definition: linear_eval_functors.hpp:29
Functor for compound assign mul.
Definition: linear_eval_functors.hpp:120
Functor for compound assign sub.
Definition: linear_eval_functors.hpp:88
constexpr size_t size(const E &expr) noexcept
Returns the size of the given ETL expression.
Definition: helpers.hpp:108
static void apply(L_Expr &&lhs, R_Expr &&rhs)
Assign rhs to lhs.
Definition: linear_eval_functors.hpp:157
static void apply(L_Expr &&lhs, R_Expr &&rhs)
Assign rhs to lhs.
Definition: linear_eval_functors.hpp:61
Functor for compound assign div.
Definition: linear_eval_functors.hpp:152
Functor for simple assign.
Definition: linear_eval_functors.hpp:24
Functor for simple compound assign add.
Definition: linear_eval_functors.hpp:56
constexpr bool unroll_normal_loops
Indicates if ETL is allowed tor unroll non-vectorized loops.
Definition: config.hpp:153