209{
210 for (unsigned int k = 0, cnt_kji = 0; k < nq2; ++k)
211 {
212 unsigned int cnt_pq = 0, cnt_pqr = 0, mode = 0;
213 for (
unsigned int p = 0;
p < nm0; ++
p)
214 {
215 for (
unsigned int q = 0;
q < nm1 -
p; ++
q, ++cnt_pq)
216 {
217 simd_type prod =
218 in[cnt_pqr] * basis2[k + nq2 * mode];
219 ++mode;
220 ++cnt_pqr;
221
222 for (
unsigned int r = 1; r < nm2 -
p -
q;
223 ++r, ++mode, ++cnt_pqr)
224 {
225 prod.fma(in[cnt_pqr], basis2[k + nq2 * mode]);
226 }
227
228 fpq[cnt_pq] = prod;
229 }
230
231
232 for (
unsigned int q = nm1 - p;
q < nm2 -
p; ++
q)
233 {
235 }
236 }
237
238 for (unsigned int j = 0; j < nq1; ++j)
239 {
240 mode = cnt_pq = 0;
241 for (
unsigned int p = 0;
p < nm0; ++
p)
242 {
243 simd_type prod =
244 fpq[cnt_pq] * basis1[mode * nq1 + j];
245 ++cnt_pq;
246
247 for (
unsigned int q = 1;
q < nm1 -
p; ++
q, ++cnt_pq)
248 {
249 prod.fma(fpq[cnt_pq],
250 basis1[(mode + q) * nq1 + j]);
251 }
252
255 }
256
257 for (unsigned int i = 0; i < nq0; ++i, ++cnt_kji)
258 {
259 simd_type tmp = basis0[i] * fp[0];
260
261 for (
unsigned int p = 1;
p < nm0; ++
p)
262 {
263 tmp.fma(basis0[p * nq0 + i], fp[p]);
264 }
265
266 if (isModified)
267 {
268
269
270
271
272
273
274
275 simd_type tmp1 = basis0[i] * basis1[nq1 + j];
276 tmp1.fma(basis0[nq0 + i], basis1[j]);
277 tmp1.fma(basis0[nq0 + i], basis1[nq1 + j]);
278 tmp1 = tmp1 * basis2[nq2 + k];
279
280 simd_type inarray1 = simd_type(in[1]);
281 tmp.fma(tmp1, inarray1);
282
283
284
285
286
287 tmp1 = basis0[nq0 + i] * basis1[nq1 + j];
288 tmp1 = tmp1 * basis2[k];
289 inarray1 = simd_type(in[nm2]);
290 tmp.fma(inarray1, tmp1);
291
292
293 for (unsigned int r = 1; r < nm2 - 1; ++r)
294 {
295
296
297 tmp1 = basis1[nq1 + j] * basis0[nq0 + i];
298 tmp1 = tmp1 * basis2[(r + 1) * nq2 + k];
299 inarray1 = simd_type(in[nm2 + r]);
300 tmp.fma(inarray1, tmp1);
301
302 }
303 }
304
305 out[cnt_kji] = tmp;
306 }
307 }
308 }
309}