36 const C& l =
static_cast<const C&
>(rhs.expression().left());
37 const C& r =
static_cast<const C&
>(rhs.expression().right());
39 if( s.hasOrderedRep() ) {
40 for(
int i=s.start(); i <= s.end(); i++) {
42 su3_matrixf *lm = (su3_matrixf *)&(l.elem(i).elem().elem(0,0).real());
43 su3_matrixf *rm = (su3_matrixf *)&(r.elem(i).elem().elem(0,0).real());
44 su3_matrixf *dm = (su3_matrixf *)&(d.elem(i).elem().elem(0,0).real());
46 intrin_sse_mult_su3_nn(lm, rm, dm);
51 const int *tab = s.siteTable().slice();
52 for(
int j=0; j < s.numSiteTable(); ++j) {
54 su3_matrixf *lm = (su3_matrixf *)&(l.elem(i).elem().elem(0,0).real());
55 su3_matrixf *rm = (su3_matrixf *)&(r.elem(i).elem().elem(0,0).real());
56 su3_matrixf *dm = (su3_matrixf *)&(d.elem(i).elem().elem(0,0).real());
58 intrin_sse_mult_su3_nn(lm, rm, dm);
80 const C& l =
static_cast<const C&
>(rhs.expression().left().child());
81 const C& r =
static_cast<const C&
>(rhs.expression().right());
83 if( s.hasOrderedRep() ) {
84 for(
int i=s.start(); i <= s.end(); i++) {
85 su3_matrixf *lm = (su3_matrixf *)&(l.elem(i).elem().elem(0,0).real());
86 su3_matrixf *rm = (su3_matrixf *)&(r.elem(i).elem().elem(0,0).real());
87 su3_matrixf *dm = (su3_matrixf *)&(d.elem(i).elem().elem(0,0).real());
89 intrin_sse_mult_su3_an(lm, rm, dm);
94 const int *tab = s.siteTable().slice();
95 for(
int j=0; j < s.numSiteTable(); ++j) {
98 su3_matrixf *lm = (su3_matrixf *)&(l.elem(i).elem().elem(0,0).real());
99 su3_matrixf *rm = (su3_matrixf *)&(r.elem(i).elem().elem(0,0).real());
100 su3_matrixf *dm = (su3_matrixf *)&(d.elem(i).elem().elem(0,0).real());
102 intrin_sse_mult_su3_an(lm, rm, dm);
125 const C& l =
static_cast<const C&
>(rhs.expression().left());
126 const C& r =
static_cast<const C&
>(rhs.expression().right().child());
128 if( s.hasOrderedRep() ) {
129 for(
int i=s.start(); i <= s.end(); i++) {
130 su3_matrixf *lm = (su3_matrixf *)&(l.elem(i).elem().elem(0,0).real());
131 su3_matrixf *rm = (su3_matrixf *)&(r.elem(i).elem().elem(0,0).real());
132 su3_matrixf *dm = (su3_matrixf *)&(d.elem(i).elem().elem(0,0).real());
134 intrin_sse_mult_su3_na(lm, rm, dm);
140 const int *tab = s.siteTable().slice();
141 for(
int j=0; j < s.numSiteTable(); ++j) {
143 su3_matrixf *lm = (su3_matrixf *)&(l.elem(i).elem().elem(0,0).real());
144 su3_matrixf *rm = (su3_matrixf *)&(r.elem(i).elem().elem(0,0).real());
145 su3_matrixf *dm = (su3_matrixf *)&(d.elem(i).elem().elem(0,0).real());
147 intrin_sse_mult_su3_na(lm, rm, dm);
169 const C& l =
static_cast<const C&
>(rhs.expression().left().child());
170 const C& r =
static_cast<const C&
>(rhs.expression().right().child());
174 if( s.hasOrderedRep() ) {
175 for(
int i=s.start(); i <= s.end(); i++) {
176 su3_matrixf *lm = (su3_matrixf *)&(l.elem(i).elem().elem(0,0).real());
177 su3_matrixf *rm = (su3_matrixf *)&(r.elem(i).elem().elem(0,0).real());
178 su3_matrixf *tmpm = (su3_matrixf *)&(tmp.elem(0,0).real());
180 intrin_sse_mult_su3_nn(rm, lm, tmpm);
183 d.elem(i).elem().elem(0,0).real() = tmp.elem(0,0).real();
184 d.elem(i).elem().elem(0,0).imag() = -tmp.elem(0,0).imag();
185 d.elem(i).elem().elem(0,1).real() = tmp.elem(1,0).real();
186 d.elem(i).elem().elem(0,1).imag() = -tmp.elem(1,0).imag();
187 d.elem(i).elem().elem(0,2).real() = tmp.elem(2,0).real();
188 d.elem(i).elem().elem(0,2).imag() = -tmp.elem(2,0).imag();
190 d.elem(i).elem().elem(1,0).real() = tmp.elem(0,1).real();
191 d.elem(i).elem().elem(1,0).imag() = -tmp.elem(0,1).imag();
192 d.elem(i).elem().elem(1,1).real() = tmp.elem(1,1).real();
193 d.elem(i).elem().elem(1,1).imag() = -tmp.elem(1,1).imag();
194 d.elem(i).elem().elem(1,2).real() = tmp.elem(2,1).real();
195 d.elem(i).elem().elem(1,2).imag() = -tmp.elem(2,1).imag();
197 d.elem(i).elem().elem(2,0).real() = tmp.elem(0,2).real();
198 d.elem(i).elem().elem(2,0).imag() = -tmp.elem(0,2).imag();
199 d.elem(i).elem().elem(2,1).real() = tmp.elem(1,2).real();
200 d.elem(i).elem().elem(2,1).imag() = -tmp.elem(1,2).imag();
201 d.elem(i).elem().elem(2,2).real() = tmp.elem(2,2).real();
202 d.elem(i).elem().elem(2,2).imag() = -tmp.elem(2,2).imag();
206 const int *tab = s.siteTable().slice();
207 for(
int j=0; j < s.numSiteTable(); ++j) {
209 su3_matrixf *lm = (su3_matrixf *)&(l.elem(i).elem().elem(0,0).real());
210 su3_matrixf *rm = (su3_matrixf *)&(r.elem(i).elem().elem(0,0).real());
211 su3_matrixf *tmpm = (su3_matrixf *)&(tmp.elem(0,0).real());
213 intrin_sse_mult_su3_nn(rm, lm, tmpm);
216 d.elem(i).elem().elem(0,0).real() = tmp.elem(0,0).real();
217 d.elem(i).elem().elem(0,0).imag() = -tmp.elem(0,0).imag();
218 d.elem(i).elem().elem(0,1).real() = tmp.elem(1,0).real();
219 d.elem(i).elem().elem(0,1).imag() = -tmp.elem(1,0).imag();
220 d.elem(i).elem().elem(0,2).real() = tmp.elem(2,0).real();
221 d.elem(i).elem().elem(0,2).imag() = -tmp.elem(2,0).imag();
223 d.elem(i).elem().elem(1,0).real() = tmp.elem(0,1).real();
224 d.elem(i).elem().elem(1,0).imag() = -tmp.elem(0,1).imag();
225 d.elem(i).elem().elem(1,1).real() = tmp.elem(1,1).real();
226 d.elem(i).elem().elem(1,1).imag() = -tmp.elem(1,1).imag();
227 d.elem(i).elem().elem(1,2).real() = tmp.elem(2,1).real();
228 d.elem(i).elem().elem(1,2).imag() = -tmp.elem(2,1).imag();
230 d.elem(i).elem().elem(2,0).real() = tmp.elem(0,2).real();
231 d.elem(i).elem().elem(2,0).imag() = -tmp.elem(0,2).imag();
232 d.elem(i).elem().elem(2,1).real() = tmp.elem(1,2).real();
233 d.elem(i).elem().elem(2,1).imag() = -tmp.elem(1,2).imag();
234 d.elem(i).elem().elem(2,2).real() = tmp.elem(2,2).real();
235 d.elem(i).elem().elem(2,2).imag() = -tmp.elem(2,2).imag();
257 const C& l =
static_cast<const C&
>(rhs.expression().left());
258 const C& r =
static_cast<const C&
>(rhs.expression().right());
262 if( s.hasOrderedRep() ) {
263 for(
int i=s.start(); i <= s.end(); i++) {
264 su3_matrixf *lm = (su3_matrixf *)&(l.elem(i).elem().elem(0,0).real());
265 su3_matrixf *rm = (su3_matrixf *)&(r.elem(i).elem().elem(0,0).real());
266 su3_matrixf *tmpm = (su3_matrixf *)&(tmp.elem(0,0).real());
268 intrin_sse_mult_su3_nn(lm, rm, tmpm);
270 d.elem(i).elem().elem(0,0).real() += tmp.elem(0,0).real();
271 d.elem(i).elem().elem(0,0).imag() += tmp.elem(0,0).imag();
272 d.elem(i).elem().elem(0,1).real() += tmp.elem(0,1).real();
273 d.elem(i).elem().elem(0,1).imag() += tmp.elem(0,1).imag();
274 d.elem(i).elem().elem(0,2).real() += tmp.elem(0,2).real();
275 d.elem(i).elem().elem(0,2).imag() += tmp.elem(0,2).imag();
277 d.elem(i).elem().elem(1,0).real() += tmp.elem(1,0).real();
278 d.elem(i).elem().elem(1,0).imag() += tmp.elem(1,0).imag();
279 d.elem(i).elem().elem(1,1).real() += tmp.elem(1,1).real();
280 d.elem(i).elem().elem(1,1).imag() += tmp.elem(1,1).imag();
281 d.elem(i).elem().elem(1,2).real() += tmp.elem(1,2).real();
282 d.elem(i).elem().elem(1,2).imag() += tmp.elem(1,2).imag();
284 d.elem(i).elem().elem(2,0).real() += tmp.elem(2,0).real();
285 d.elem(i).elem().elem(2,0).imag() += tmp.elem(2,0).imag();
286 d.elem(i).elem().elem(2,1).real() += tmp.elem(2,1).real();
287 d.elem(i).elem().elem(2,1).imag() += tmp.elem(2,1).imag();
288 d.elem(i).elem().elem(2,2).real() += tmp.elem(2,2).real();
289 d.elem(i).elem().elem(2,2).imag() += tmp.elem(2,2).imag();
293 const int *tab = s.siteTable().slice();
294 for(
int j=0; j < s.numSiteTable(); ++j) {
296 su3_matrixf *lm = (su3_matrixf *)&(l.elem(i).elem().elem(0,0).real());
297 su3_matrixf *rm = (su3_matrixf *)&(r.elem(i).elem().elem(0,0).real());
298 su3_matrixf *tmpm = (su3_matrixf *)&(tmp.elem(0,0).real());
300 intrin_sse_mult_su3_nn(lm, rm, tmpm);
302 d.elem(i).elem().elem(0,0).real() += tmp.elem(0,0).real();
303 d.elem(i).elem().elem(0,0).imag() += tmp.elem(0,0).imag();
304 d.elem(i).elem().elem(0,1).real() += tmp.elem(0,1).real();
305 d.elem(i).elem().elem(0,1).imag() += tmp.elem(0,1).imag();
306 d.elem(i).elem().elem(0,2).real() += tmp.elem(0,2).real();
307 d.elem(i).elem().elem(0,2).imag() += tmp.elem(0,2).imag();
309 d.elem(i).elem().elem(1,0).real() += tmp.elem(1,0).real();
310 d.elem(i).elem().elem(1,0).imag() += tmp.elem(1,0).imag();
311 d.elem(i).elem().elem(1,1).real() += tmp.elem(1,1).real();
312 d.elem(i).elem().elem(1,1).imag() += tmp.elem(1,1).imag();
313 d.elem(i).elem().elem(1,2).real() += tmp.elem(1,2).real();
314 d.elem(i).elem().elem(1,2).imag() += tmp.elem(1,2).imag();
316 d.elem(i).elem().elem(2,0).real() += tmp.elem(2,0).real();
317 d.elem(i).elem().elem(2,0).imag() += tmp.elem(2,0).imag();
318 d.elem(i).elem().elem(2,1).real() += tmp.elem(2,1).real();
319 d.elem(i).elem().elem(2,1).imag() += tmp.elem(2,1).imag();
320 d.elem(i).elem().elem(2,2).real() += tmp.elem(2,2).real();
321 d.elem(i).elem().elem(2,2).imag() += tmp.elem(2,2).imag();
342 const C& l =
static_cast<const C&
>(rhs.expression().left().child());
343 const C& r =
static_cast<const C&
>(rhs.expression().right());
347 if( s.hasOrderedRep() ) {
348 for(
int i=s.start(); i <= s.end(); i++) {
349 su3_matrixf *lm = (su3_matrixf *)&(l.elem(i).elem().elem(0,0).real());
350 su3_matrixf *rm = (su3_matrixf *)&(r.elem(i).elem().elem(0,0).real());
351 su3_matrixf *tmpm = (su3_matrixf *)&(tmp.elem(0,0).real());
353 intrin_sse_mult_su3_an(lm, rm, tmpm);
355 d.elem(i).elem().elem(0,0).real() += tmp.elem(0,0).real();
356 d.elem(i).elem().elem(0,0).imag() += tmp.elem(0,0).imag();
357 d.elem(i).elem().elem(0,1).real() += tmp.elem(0,1).real();
358 d.elem(i).elem().elem(0,1).imag() += tmp.elem(0,1).imag();
359 d.elem(i).elem().elem(0,2).real() += tmp.elem(0,2).real();
360 d.elem(i).elem().elem(0,2).imag() += tmp.elem(0,2).imag();
362 d.elem(i).elem().elem(1,0).real() += tmp.elem(1,0).real();
363 d.elem(i).elem().elem(1,0).imag() += tmp.elem(1,0).imag();
364 d.elem(i).elem().elem(1,1).real() += tmp.elem(1,1).real();
365 d.elem(i).elem().elem(1,1).imag() += tmp.elem(1,1).imag();
366 d.elem(i).elem().elem(1,2).real() += tmp.elem(1,2).real();
367 d.elem(i).elem().elem(1,2).imag() += tmp.elem(1,2).imag();
369 d.elem(i).elem().elem(2,0).real() += tmp.elem(2,0).real();
370 d.elem(i).elem().elem(2,0).imag() += tmp.elem(2,0).imag();
371 d.elem(i).elem().elem(2,1).real() += tmp.elem(2,1).real();
372 d.elem(i).elem().elem(2,1).imag() += tmp.elem(2,1).imag();
373 d.elem(i).elem().elem(2,2).real() += tmp.elem(2,2).real();
374 d.elem(i).elem().elem(2,2).imag() += tmp.elem(2,2).imag();
378 const int *tab = s.siteTable().slice();
379 for(
int j=0; j < s.numSiteTable(); ++j) {
381 su3_matrixf *lm = (su3_matrixf *)&(l.elem(i).elem().elem(0,0).real());
382 su3_matrixf *rm = (su3_matrixf *)&(r.elem(i).elem().elem(0,0).real());
383 su3_matrixf *tmpm = (su3_matrixf *)&(tmp.elem(0,0).real());
385 intrin_sse_mult_su3_an(lm, rm, tmpm);
387 d.elem(i).elem().elem(0,0).real() += tmp.elem(0,0).real();
388 d.elem(i).elem().elem(0,0).imag() += tmp.elem(0,0).imag();
389 d.elem(i).elem().elem(0,1).real() += tmp.elem(0,1).real();
390 d.elem(i).elem().elem(0,1).imag() += tmp.elem(0,1).imag();
391 d.elem(i).elem().elem(0,2).real() += tmp.elem(0,2).real();
392 d.elem(i).elem().elem(0,2).imag() += tmp.elem(0,2).imag();
394 d.elem(i).elem().elem(1,0).real() += tmp.elem(1,0).real();
395 d.elem(i).elem().elem(1,0).imag() += tmp.elem(1,0).imag();
396 d.elem(i).elem().elem(1,1).real() += tmp.elem(1,1).real();
397 d.elem(i).elem().elem(1,1).imag() += tmp.elem(1,1).imag();
398 d.elem(i).elem().elem(1,2).real() += tmp.elem(1,2).real();
399 d.elem(i).elem().elem(1,2).imag() += tmp.elem(1,2).imag();
401 d.elem(i).elem().elem(2,0).real() += tmp.elem(2,0).real();
402 d.elem(i).elem().elem(2,0).imag() += tmp.elem(2,0).imag();
403 d.elem(i).elem().elem(2,1).real() += tmp.elem(2,1).real();
404 d.elem(i).elem().elem(2,1).imag() += tmp.elem(2,1).imag();
405 d.elem(i).elem().elem(2,2).real() += tmp.elem(2,2).real();
406 d.elem(i).elem().elem(2,2).imag() += tmp.elem(2,2).imag();
427 const C& l =
static_cast<const C&
>(rhs.expression().left());
428 const C& r =
static_cast<const C&
>(rhs.expression().right().child());
432 if( s.hasOrderedRep() ) {
433 for(
int i=s.start(); i <= s.end(); i++) {
434 su3_matrixf *lm = (su3_matrixf *)&(l.elem(i).elem().elem(0,0).real());
435 su3_matrixf *rm = (su3_matrixf *)&(r.elem(i).elem().elem(0,0).real());
436 su3_matrixf *tmpm = (su3_matrixf *)&(tmp.elem(0,0).real());
438 intrin_sse_mult_su3_na(lm, rm, tmpm);
441 d.elem(i).elem().elem(0,0).real() += tmp.elem(0,0).real();
442 d.elem(i).elem().elem(0,0).imag() += tmp.elem(0,0).imag();
443 d.elem(i).elem().elem(0,1).real() += tmp.elem(0,1).real();
444 d.elem(i).elem().elem(0,1).imag() += tmp.elem(0,1).imag();
445 d.elem(i).elem().elem(0,2).real() += tmp.elem(0,2).real();
446 d.elem(i).elem().elem(0,2).imag() += tmp.elem(0,2).imag();
448 d.elem(i).elem().elem(1,0).real() += tmp.elem(1,0).real();
449 d.elem(i).elem().elem(1,0).imag() += tmp.elem(1,0).imag();
450 d.elem(i).elem().elem(1,1).real() += tmp.elem(1,1).real();
451 d.elem(i).elem().elem(1,1).imag() += tmp.elem(1,1).imag();
452 d.elem(i).elem().elem(1,2).real() += tmp.elem(1,2).real();
453 d.elem(i).elem().elem(1,2).imag() += tmp.elem(1,2).imag();
455 d.elem(i).elem().elem(2,0).real() += tmp.elem(2,0).real();
456 d.elem(i).elem().elem(2,0).imag() += tmp.elem(2,0).imag();
457 d.elem(i).elem().elem(2,1).real() += tmp.elem(2,1).real();
458 d.elem(i).elem().elem(2,1).imag() += tmp.elem(2,1).imag();
459 d.elem(i).elem().elem(2,2).real() += tmp.elem(2,2).real();
460 d.elem(i).elem().elem(2,2).imag() += tmp.elem(2,2).imag();
465 const int *tab = s.siteTable().slice();
466 for(
int j=0; j < s.numSiteTable(); ++j) {
468 su3_matrixf *lm = (su3_matrixf *)&(l.elem(i).elem().elem(0,0).real());
469 su3_matrixf *rm = (su3_matrixf *)&(r.elem(i).elem().elem(0,0).real());
470 su3_matrixf *tmpm = (su3_matrixf *)&(tmp.elem(0,0).real());
472 intrin_sse_mult_su3_na(lm, rm, tmpm);
474 d.elem(i).elem().elem(0,0).real() += tmp.elem(0,0).real();
475 d.elem(i).elem().elem(0,0).imag() += tmp.elem(0,0).imag();
476 d.elem(i).elem().elem(0,1).real() += tmp.elem(0,1).real();
477 d.elem(i).elem().elem(0,1).imag() += tmp.elem(0,1).imag();
478 d.elem(i).elem().elem(0,2).real() += tmp.elem(0,2).real();
479 d.elem(i).elem().elem(0,2).imag() += tmp.elem(0,2).imag();
481 d.elem(i).elem().elem(1,0).real() += tmp.elem(1,0).real();
482 d.elem(i).elem().elem(1,0).imag() += tmp.elem(1,0).imag();
483 d.elem(i).elem().elem(1,1).real() += tmp.elem(1,1).real();
484 d.elem(i).elem().elem(1,1).imag() += tmp.elem(1,1).imag();
485 d.elem(i).elem().elem(1,2).real() += tmp.elem(1,2).real();
486 d.elem(i).elem().elem(1,2).imag() += tmp.elem(1,2).imag();
488 d.elem(i).elem().elem(2,0).real() += tmp.elem(2,0).real();
489 d.elem(i).elem().elem(2,0).imag() += tmp.elem(2,0).imag();
490 d.elem(i).elem().elem(2,1).real() += tmp.elem(2,1).real();
491 d.elem(i).elem().elem(2,1).imag() += tmp.elem(2,1).imag();
492 d.elem(i).elem().elem(2,2).real() += tmp.elem(2,2).real();
493 d.elem(i).elem().elem(2,2).imag() += tmp.elem(2,2).imag();
514 const C& l =
static_cast<const C&
>(rhs.expression().left().child());
515 const C& r =
static_cast<const C&
>(rhs.expression().right().child());
519 if( s.hasOrderedRep() ) {
520 for(
int i=s.start(); i <= s.end(); i++) {
522 su3_matrixf *lm = (su3_matrixf *)&(l.elem(i).elem().elem(0,0).real());
523 su3_matrixf *rm = (su3_matrixf *)&(r.elem(i).elem().elem(0,0).real());
524 su3_matrixf *tmpm = (su3_matrixf *)&(tmp.elem(0,0).real());
526 intrin_sse_mult_su3_nn(rm, lm, tmpm);
529 d.elem(i).elem().elem(0,0).real() += tmp.elem(0,0).real();
530 d.elem(i).elem().elem(0,0).imag() -= tmp.elem(0,0).imag();
531 d.elem(i).elem().elem(0,1).real() += tmp.elem(1,0).real();
532 d.elem(i).elem().elem(0,1).imag() -= tmp.elem(1,0).imag();
533 d.elem(i).elem().elem(0,2).real() += tmp.elem(2,0).real();
534 d.elem(i).elem().elem(0,2).imag() -= tmp.elem(2,0).imag();
536 d.elem(i).elem().elem(1,0).real() += tmp.elem(0,1).real();
537 d.elem(i).elem().elem(1,0).imag() -= tmp.elem(0,1).imag();
538 d.elem(i).elem().elem(1,1).real() += tmp.elem(1,1).real();
539 d.elem(i).elem().elem(1,1).imag() -= tmp.elem(1,1).imag();
540 d.elem(i).elem().elem(1,2).real() += tmp.elem(2,1).real();
541 d.elem(i).elem().elem(1,2).imag() -= tmp.elem(2,1).imag();
543 d.elem(i).elem().elem(2,0).real() += tmp.elem(0,2).real();
544 d.elem(i).elem().elem(2,0).imag() -= tmp.elem(0,2).imag();
545 d.elem(i).elem().elem(2,1).real() += tmp.elem(1,2).real();
546 d.elem(i).elem().elem(2,1).imag() -= tmp.elem(1,2).imag();
547 d.elem(i).elem().elem(2,2).real() += tmp.elem(2,2).real();
548 d.elem(i).elem().elem(2,2).imag() -= tmp.elem(2,2).imag();
554 const int *tab = s.siteTable().slice();
555 for(
int j=0; j < s.numSiteTable(); ++j) {
557 su3_matrixf *lm = (su3_matrixf *)&(l.elem(i).elem().elem(0,0).real());
558 su3_matrixf *rm = (su3_matrixf *)&(r.elem(i).elem().elem(0,0).real());
559 su3_matrixf *tmpm = (su3_matrixf *)&(tmp.elem(0,0).real());
561 intrin_sse_mult_su3_nn(rm, lm, tmpm);
564 d.elem(i).elem().elem(0,0).real() += tmp.elem(0,0).real();
565 d.elem(i).elem().elem(0,0).imag() -= tmp.elem(0,0).imag();
566 d.elem(i).elem().elem(0,1).real() += tmp.elem(1,0).real();
567 d.elem(i).elem().elem(0,1).imag() -= tmp.elem(1,0).imag();
568 d.elem(i).elem().elem(0,2).real() += tmp.elem(2,0).real();
569 d.elem(i).elem().elem(0,2).imag() -= tmp.elem(2,0).imag();
571 d.elem(i).elem().elem(1,0).real() += tmp.elem(0,1).real();
572 d.elem(i).elem().elem(1,0).imag() -= tmp.elem(0,1).imag();
573 d.elem(i).elem().elem(1,1).real() += tmp.elem(1,1).real();
574 d.elem(i).elem().elem(1,1).imag() -= tmp.elem(1,1).imag();
575 d.elem(i).elem().elem(1,2).real() += tmp.elem(2,1).real();
576 d.elem(i).elem().elem(1,2).imag() -= tmp.elem(2,1).imag();
578 d.elem(i).elem().elem(2,0).real() += tmp.elem(0,2).real();
579 d.elem(i).elem().elem(2,0).imag() -= tmp.elem(0,2).imag();
580 d.elem(i).elem().elem(2,1).real() += tmp.elem(1,2).real();
581 d.elem(i).elem().elem(2,1).imag() -= tmp.elem(1,2).imag();
582 d.elem(i).elem().elem(2,2).real() += tmp.elem(2,2).real();
583 d.elem(i).elem().elem(2,2).imag() -= tmp.elem(2,2).imag();
600 const C& l =
static_cast<const C&
>(rhs.expression().child());
603 if( s.hasOrderedRep() ) {
605 const int start = s.start();
606 const int end = s.end();
608 REAL32* d_ptr =&(d.elem(start).elem().elem(0,0).
real());
609 const REAL32* r_ptr =&(l.elem(start).elem().elem(0,0).
real());
611 const unsigned int total_reals = (end-start+1)*3*3*2;
612 const unsigned int total_v4sf = total_reals/4;
613 const unsigned int remainder = total_reals%4;
615 float* d_ptr_v4sf = (
float *)d_ptr;
616 float* r_ptr_v4sf = (
float *)r_ptr;
619 for(
unsigned int i = 0 ; i < total_v4sf; i++, d_ptr_v4sf +=4, r_ptr_v4sf+=4 ) {
620 _mm_store_ps( d_ptr_v4sf, _mm_load_ps(r_ptr_v4sf));
624 r_ptr = (
REAL32 *)r_ptr_v4sf;
625 d_ptr = (
REAL32 *)d_ptr_v4sf;
626 for(
unsigned int i=0; i < remainder; i++, r_ptr++, d_ptr++) {
632 const int* tab = s.siteTable().slice();
635 for(
int j=0; j < s.numSiteTable(); j++) {
640 d.elem(i).elem() = l.elem(i).elem();
659 const C& l =
static_cast<const C&
>(rhs.expression().child());
661 if( s.hasOrderedRep() ) {
662 const int start = s.start();
663 const int end = s.end();
665 REAL32* d_ptr =&(d.elem(start).elem().elem(0,0).
real());
666 const REAL32* r_ptr =&(l.elem(start).elem().elem(0,0).
real());
668 const unsigned int total_reals = (end-start+1)*3*3*2;
669 const unsigned int total_v4sf = total_reals/4;
670 const unsigned int remainder = total_reals%4;
672 float* d_ptr_v4sf = (
float *)d_ptr;
673 float* r_ptr_v4sf = (
float *)r_ptr;
676 for(
unsigned int i = 0 ; i < total_v4sf; i++, d_ptr_v4sf +=4, r_ptr_v4sf+=4 ) {
677 _mm_store_ps( d_ptr_v4sf, _mm_add_ps( _mm_load_ps(d_ptr_v4sf),
678 _mm_load_ps(r_ptr_v4sf) ) );
682 r_ptr = (
REAL32 *)r_ptr_v4sf;
683 d_ptr = (
REAL32 *)d_ptr_v4sf;
684 for(
unsigned int i=0; i < remainder; i++, r_ptr++, d_ptr++) {
690 const int* tab = s.siteTable().slice();
693 for(
int j=0; j < s.numSiteTable(); j++) {
698 d.elem(i).elem() += l.elem(i).elem();
717 const C& l =
static_cast<const C&
>(rhs.expression().child());
718 if (s.hasOrderedRep()) {
719 const int start = s.start();
720 const int end = s.end();
722 REAL32* d_ptr =&(d.elem(start).elem().elem(0,0).
real());
723 const REAL32* r_ptr =&(l.elem(start).elem().elem(0,0).
real());
725 const unsigned int total_reals = (end-start+1)*3*3*2;
726 const unsigned int total_v4sf = total_reals/4;
727 const unsigned int remainder = total_reals%4;
729 float* d_ptr_v4sf = (
float *)d_ptr;
730 float* r_ptr_v4sf = (
float *)r_ptr;
733 for(
unsigned int i = 0 ; i < total_v4sf; i++, d_ptr_v4sf +=4, r_ptr_v4sf+=4 ) {
734 _mm_store_ps( d_ptr_v4sf, _mm_sub_ps( _mm_load_ps( d_ptr_v4sf),
735 _mm_load_ps( r_ptr_v4sf) ) );
739 r_ptr = (
REAL32 *)r_ptr_v4sf;
740 d_ptr = (
REAL32 *)d_ptr_v4sf;
741 for(
unsigned int i=0; i < remainder; i++, r_ptr++, d_ptr++) {
747 const int* tab = s.siteTable().slice();
750 for(
int j=0; j < s.numSiteTable(); j++) {
755 d.elem(i).elem() -= l.elem(i).elem();
777 const C& l =
static_cast<const C&
>(rhs.expression().left());
778 const C& r =
static_cast<const C&
>(rhs.expression().right());
783 if( s.hasOrderedRep() ) {
784 for(
int i=s.start(); i <= s.end(); i++) {
785 su3_matrixf *lm = (su3_matrixf *)&(l.elem(i).elem().elem(0,0).real());
786 su3_matrixf *rm = (su3_matrixf *)&(r.elem(i).elem().elem(0,0).real());
787 su3_matrixf *tmpm = (su3_matrixf *)&(tmp.elem(0,0).real());
789 intrin_sse_mult_su3_nn(lm, rm, tmpm);
791 d.elem(i).elem().elem(0,0).real() -= tmp.elem(0,0).real();
792 d.elem(i).elem().elem(0,0).imag() -= tmp.elem(0,0).imag();
793 d.elem(i).elem().elem(0,1).real() -= tmp.elem(0,1).real();
794 d.elem(i).elem().elem(0,1).imag() -= tmp.elem(0,1).imag();
795 d.elem(i).elem().elem(0,2).real() -= tmp.elem(0,2).real();
796 d.elem(i).elem().elem(0,2).imag() -= tmp.elem(0,2).imag();
798 d.elem(i).elem().elem(1,0).real() -= tmp.elem(1,0).real();
799 d.elem(i).elem().elem(1,0).imag() -= tmp.elem(1,0).imag();
800 d.elem(i).elem().elem(1,1).real() -= tmp.elem(1,1).real();
801 d.elem(i).elem().elem(1,1).imag() -= tmp.elem(1,1).imag();
802 d.elem(i).elem().elem(1,2).real() -= tmp.elem(1,2).real();
803 d.elem(i).elem().elem(1,2).imag() -= tmp.elem(1,2).imag();
805 d.elem(i).elem().elem(2,0).real() -= tmp.elem(2,0).real();
806 d.elem(i).elem().elem(2,0).imag() -= tmp.elem(2,0).imag();
807 d.elem(i).elem().elem(2,1).real() -= tmp.elem(2,1).real();
808 d.elem(i).elem().elem(2,1).imag() -= tmp.elem(2,1).imag();
809 d.elem(i).elem().elem(2,2).real() -= tmp.elem(2,2).real();
810 d.elem(i).elem().elem(2,2).imag() -= tmp.elem(2,2).imag();
815 const int *tab = s.siteTable().slice();
816 for(
int j=0; j < s.numSiteTable(); j++) {
818 su3_matrixf *lm = (su3_matrixf *)&(l.elem(i).elem().elem(0,0).real());
819 su3_matrixf *rm = (su3_matrixf *)&(r.elem(i).elem().elem(0,0).real());
820 su3_matrixf *tmpm = (su3_matrixf *)&(tmp.elem(0,0).real());
822 intrin_sse_mult_su3_nn(lm, rm, tmpm);
824 d.elem(i).elem().elem(0,0).real() -= tmp.elem(0,0).real();
825 d.elem(i).elem().elem(0,0).imag() -= tmp.elem(0,0).imag();
826 d.elem(i).elem().elem(0,1).real() -= tmp.elem(0,1).real();
827 d.elem(i).elem().elem(0,1).imag() -= tmp.elem(0,1).imag();
828 d.elem(i).elem().elem(0,2).real() -= tmp.elem(0,2).real();
829 d.elem(i).elem().elem(0,2).imag() -= tmp.elem(0,2).imag();
831 d.elem(i).elem().elem(1,0).real() -= tmp.elem(1,0).real();
832 d.elem(i).elem().elem(1,0).imag() -= tmp.elem(1,0).imag();
833 d.elem(i).elem().elem(1,1).real() -= tmp.elem(1,1).real();
834 d.elem(i).elem().elem(1,1).imag() -= tmp.elem(1,1).imag();
835 d.elem(i).elem().elem(1,2).real() -= tmp.elem(1,2).real();
836 d.elem(i).elem().elem(1,2).imag() -= tmp.elem(1,2).imag();
838 d.elem(i).elem().elem(2,0).real() -= tmp.elem(2,0).real();
839 d.elem(i).elem().elem(2,0).imag() -= tmp.elem(2,0).imag();
840 d.elem(i).elem().elem(2,1).real() -= tmp.elem(2,1).real();
841 d.elem(i).elem().elem(2,1).imag() -= tmp.elem(2,1).imag();
842 d.elem(i).elem().elem(2,2).real() -= tmp.elem(2,2).real();
843 d.elem(i).elem().elem(2,2).imag() -= tmp.elem(2,2).imag();
864 const C& l =
static_cast<const C&
>(rhs.expression().left().child());
865 const C& r =
static_cast<const C&
>(rhs.expression().right());
868 if( s.hasOrderedRep() ) {
869 for(
int i=s.start(); i <= s.end(); i++) {
870 su3_matrixf *lm = (su3_matrixf *)&(l.elem(i).elem().elem(0,0).real());
871 su3_matrixf *rm = (su3_matrixf *)&(r.elem(i).elem().elem(0,0).real());
872 su3_matrixf *tmpm = (su3_matrixf *)&(tmp.elem(0,0).real());
874 intrin_sse_mult_su3_an(lm, rm, tmpm);
877 d.elem(i).elem().elem(0,0).real() -= tmp.elem(0,0).real();
878 d.elem(i).elem().elem(0,0).imag() -= tmp.elem(0,0).imag();
879 d.elem(i).elem().elem(0,1).real() -= tmp.elem(0,1).real();
880 d.elem(i).elem().elem(0,1).imag() -= tmp.elem(0,1).imag();
881 d.elem(i).elem().elem(0,2).real() -= tmp.elem(0,2).real();
882 d.elem(i).elem().elem(0,2).imag() -= tmp.elem(0,2).imag();
884 d.elem(i).elem().elem(1,0).real() -= tmp.elem(1,0).real();
885 d.elem(i).elem().elem(1,0).imag() -= tmp.elem(1,0).imag();
886 d.elem(i).elem().elem(1,1).real() -= tmp.elem(1,1).real();
887 d.elem(i).elem().elem(1,1).imag() -= tmp.elem(1,1).imag();
888 d.elem(i).elem().elem(1,2).real() -= tmp.elem(1,2).real();
889 d.elem(i).elem().elem(1,2).imag() -= tmp.elem(1,2).imag();
891 d.elem(i).elem().elem(2,0).real() -= tmp.elem(2,0).real();
892 d.elem(i).elem().elem(2,0).imag() -= tmp.elem(2,0).imag();
893 d.elem(i).elem().elem(2,1).real() -= tmp.elem(2,1).real();
894 d.elem(i).elem().elem(2,1).imag() -= tmp.elem(2,1).imag();
895 d.elem(i).elem().elem(2,2).real() -= tmp.elem(2,2).real();
896 d.elem(i).elem().elem(2,2).imag() -= tmp.elem(2,2).imag();
901 const int *tab = s.siteTable().slice();
902 for(
int j=0; j < s.numSiteTable(); j++) {
904 su3_matrixf *lm = (su3_matrixf *)&(l.elem(i).elem().elem(0,0).real());
905 su3_matrixf *rm = (su3_matrixf *)&(r.elem(i).elem().elem(0,0).real());
906 su3_matrixf *tmpm = (su3_matrixf *)&(tmp.elem(0,0).real());
908 intrin_sse_mult_su3_an(lm, rm, tmpm);
910 d.elem(i).elem().elem(0,0).real() -= tmp.elem(0,0).real();
911 d.elem(i).elem().elem(0,0).imag() -= tmp.elem(0,0).imag();
912 d.elem(i).elem().elem(0,1).real() -= tmp.elem(0,1).real();
913 d.elem(i).elem().elem(0,1).imag() -= tmp.elem(0,1).imag();
914 d.elem(i).elem().elem(0,2).real() -= tmp.elem(0,2).real();
915 d.elem(i).elem().elem(0,2).imag() -= tmp.elem(0,2).imag();
917 d.elem(i).elem().elem(1,0).real() -= tmp.elem(1,0).real();
918 d.elem(i).elem().elem(1,0).imag() -= tmp.elem(1,0).imag();
919 d.elem(i).elem().elem(1,1).real() -= tmp.elem(1,1).real();
920 d.elem(i).elem().elem(1,1).imag() -= tmp.elem(1,1).imag();
921 d.elem(i).elem().elem(1,2).real() -= tmp.elem(1,2).real();
922 d.elem(i).elem().elem(1,2).imag() -= tmp.elem(1,2).imag();
924 d.elem(i).elem().elem(2,0).real() -= tmp.elem(2,0).real();
925 d.elem(i).elem().elem(2,0).imag() -= tmp.elem(2,0).imag();
926 d.elem(i).elem().elem(2,1).real() -= tmp.elem(2,1).real();
927 d.elem(i).elem().elem(2,1).imag() -= tmp.elem(2,1).imag();
928 d.elem(i).elem().elem(2,2).real() -= tmp.elem(2,2).real();
929 d.elem(i).elem().elem(2,2).imag() -= tmp.elem(2,2).imag();
950 const C& l =
static_cast<const C&
>(rhs.expression().left());
951 const C& r =
static_cast<const C&
>(rhs.expression().right().child());
955 if( s.hasOrderedRep() ) {
956 for(
int i=s.start(); i <= s.end(); i++) {
957 su3_matrixf *lm = (su3_matrixf *)&(l.elem(i).elem().elem(0,0).real());
958 su3_matrixf *rm = (su3_matrixf *)&(r.elem(i).elem().elem(0,0).real());
959 su3_matrixf *tmpm = (su3_matrixf *)&(tmp.elem(0,0).real());
961 intrin_sse_mult_su3_na(lm, rm, tmpm);
963 d.elem(i).elem().elem(0,0).real() -= tmp.elem(0,0).real();
964 d.elem(i).elem().elem(0,0).imag() -= tmp.elem(0,0).imag();
965 d.elem(i).elem().elem(0,1).real() -= tmp.elem(0,1).real();
966 d.elem(i).elem().elem(0,1).imag() -= tmp.elem(0,1).imag();
967 d.elem(i).elem().elem(0,2).real() -= tmp.elem(0,2).real();
968 d.elem(i).elem().elem(0,2).imag() -= tmp.elem(0,2).imag();
970 d.elem(i).elem().elem(1,0).real() -= tmp.elem(1,0).real();
971 d.elem(i).elem().elem(1,0).imag() -= tmp.elem(1,0).imag();
972 d.elem(i).elem().elem(1,1).real() -= tmp.elem(1,1).real();
973 d.elem(i).elem().elem(1,1).imag() -= tmp.elem(1,1).imag();
974 d.elem(i).elem().elem(1,2).real() -= tmp.elem(1,2).real();
975 d.elem(i).elem().elem(1,2).imag() -= tmp.elem(1,2).imag();
977 d.elem(i).elem().elem(2,0).real() -= tmp.elem(2,0).real();
978 d.elem(i).elem().elem(2,0).imag() -= tmp.elem(2,0).imag();
979 d.elem(i).elem().elem(2,1).real() -= tmp.elem(2,1).real();
980 d.elem(i).elem().elem(2,1).imag() -= tmp.elem(2,1).imag();
981 d.elem(i).elem().elem(2,2).real() -= tmp.elem(2,2).real();
982 d.elem(i).elem().elem(2,2).imag() -= tmp.elem(2,2).imag();
986 const int *tab = s.siteTable().slice();
987 for(
int j=0; j < s.numSiteTable(); j++) {
989 su3_matrixf *lm = (su3_matrixf *)&(l.elem(i).elem().elem(0,0).real());
990 su3_matrixf *rm = (su3_matrixf *)&(r.elem(i).elem().elem(0,0).real());
991 su3_matrixf *tmpm = (su3_matrixf *)&(tmp.elem(0,0).real());
993 intrin_sse_mult_su3_na(lm, rm, tmpm);
995 d.elem(i).elem().elem(0,0).real() -= tmp.elem(0,0).real();
996 d.elem(i).elem().elem(0,0).imag() -= tmp.elem(0,0).imag();
997 d.elem(i).elem().elem(0,1).real() -= tmp.elem(0,1).real();
998 d.elem(i).elem().elem(0,1).imag() -= tmp.elem(0,1).imag();
999 d.elem(i).elem().elem(0,2).real() -= tmp.elem(0,2).real();
1000 d.elem(i).elem().elem(0,2).imag() -= tmp.elem(0,2).imag();
1002 d.elem(i).elem().elem(1,0).real() -= tmp.elem(1,0).real();
1003 d.elem(i).elem().elem(1,0).imag() -= tmp.elem(1,0).imag();
1004 d.elem(i).elem().elem(1,1).real() -= tmp.elem(1,1).real();
1005 d.elem(i).elem().elem(1,1).imag() -= tmp.elem(1,1).imag();
1006 d.elem(i).elem().elem(1,2).real() -= tmp.elem(1,2).real();
1007 d.elem(i).elem().elem(1,2).imag() -= tmp.elem(1,2).imag();
1009 d.elem(i).elem().elem(2,0).real() -= tmp.elem(2,0).real();
1010 d.elem(i).elem().elem(2,0).imag() -= tmp.elem(2,0).imag();
1011 d.elem(i).elem().elem(2,1).real() -= tmp.elem(2,1).real();
1012 d.elem(i).elem().elem(2,1).imag() -= tmp.elem(2,1).imag();
1013 d.elem(i).elem().elem(2,2).real() -= tmp.elem(2,2).real();
1014 d.elem(i).elem().elem(2,2).imag() -= tmp.elem(2,2).imag();
1035 const C& l =
static_cast<const C&
>(rhs.expression().left().child());
1036 const C& r =
static_cast<const C&
>(rhs.expression().right().child());
1039 if( s.hasOrderedRep() ) {
1040 for(
int i=s.start(); i <= s.end(); i++) {
1041 su3_matrixf *lm = (su3_matrixf *)&(l.elem(i).elem().elem(0,0).real());
1042 su3_matrixf *rm = (su3_matrixf *)&(r.elem(i).elem().elem(0,0).real());
1043 su3_matrixf *tmpm = (su3_matrixf *)&(tmp.elem(0,0).real());
1045 intrin_sse_mult_su3_nn(rm, lm, tmpm);
1048 d.elem(i).elem().elem(0,0).real() -= tmp.elem(0,0).real();
1049 d.elem(i).elem().elem(0,0).imag() += tmp.elem(0,0).imag();
1050 d.elem(i).elem().elem(0,1).real() -= tmp.elem(1,0).real();
1051 d.elem(i).elem().elem(0,1).imag() += tmp.elem(1,0).imag();
1052 d.elem(i).elem().elem(0,2).real() -= tmp.elem(2,0).real();
1053 d.elem(i).elem().elem(0,2).imag() += tmp.elem(2,0).imag();
1055 d.elem(i).elem().elem(1,0).real() -= tmp.elem(0,1).real();
1056 d.elem(i).elem().elem(1,0).imag() += tmp.elem(0,1).imag();
1057 d.elem(i).elem().elem(1,1).real() -= tmp.elem(1,1).real();
1058 d.elem(i).elem().elem(1,1).imag() += tmp.elem(1,1).imag();
1059 d.elem(i).elem().elem(1,2).real() -= tmp.elem(2,1).real();
1060 d.elem(i).elem().elem(1,2).imag() += tmp.elem(2,1).imag();
1062 d.elem(i).elem().elem(2,0).real() -= tmp.elem(0,2).real();
1063 d.elem(i).elem().elem(2,0).imag() += tmp.elem(0,2).imag();
1064 d.elem(i).elem().elem(2,1).real() -= tmp.elem(1,2).real();
1065 d.elem(i).elem().elem(2,1).imag() += tmp.elem(1,2).imag();
1066 d.elem(i).elem().elem(2,2).real() -= tmp.elem(2,2).real();
1067 d.elem(i).elem().elem(2,2).imag() += tmp.elem(2,2).imag();
1072 const int *tab = s.siteTable().slice();
1073 for(
int j=0; j < s.numSiteTable(); j++) {
1075 su3_matrixf *lm = (su3_matrixf *)&(l.elem(i).elem().elem(0,0).real());
1076 su3_matrixf *rm = (su3_matrixf *)&(r.elem(i).elem().elem(0,0).real());
1077 su3_matrixf *tmpm = (su3_matrixf *)&(tmp.elem(0,0).real());
1079 intrin_sse_mult_su3_nn(rm, lm, tmpm);
1083 d.elem(i).elem().elem(0,0).real() -= tmp.elem(0,0).real();
1084 d.elem(i).elem().elem(0,0).imag() += tmp.elem(0,0).imag();
1085 d.elem(i).elem().elem(0,1).real() -= tmp.elem(1,0).real();
1086 d.elem(i).elem().elem(0,1).imag() += tmp.elem(1,0).imag();
1087 d.elem(i).elem().elem(0,2).real() -= tmp.elem(2,0).real();
1088 d.elem(i).elem().elem(0,2).imag() += tmp.elem(2,0).imag();
1090 d.elem(i).elem().elem(1,0).real() -= tmp.elem(0,1).real();
1091 d.elem(i).elem().elem(1,0).imag() += tmp.elem(0,1).imag();
1092 d.elem(i).elem().elem(1,1).real() -= tmp.elem(1,1).real();
1093 d.elem(i).elem().elem(1,1).imag() += tmp.elem(1,1).imag();
1094 d.elem(i).elem().elem(1,2).real() -= tmp.elem(2,1).real();
1095 d.elem(i).elem().elem(1,2).imag() += tmp.elem(2,1).imag();
1097 d.elem(i).elem().elem(2,0).real() -= tmp.elem(0,2).real();
1098 d.elem(i).elem().elem(2,0).imag() += tmp.elem(0,2).imag();
1099 d.elem(i).elem().elem(2,1).real() -= tmp.elem(1,2).real();
1100 d.elem(i).elem().elem(2,1).imag() += tmp.elem(1,2).imag();
1101 d.elem(i).elem().elem(2,2).real() -= tmp.elem(2,2).real();
1102 d.elem(i).elem().elem(2,2).imag() += tmp.elem(2,2).imag();
1122#if defined(QDP_SCALARSITE_DEBUG)
1123 cout <<
"specialized QDP_H_M_times_H" << endl;
1129 const C& l =
static_cast<const C&
>(rhs.expression().left());
1130 const H& r =
static_cast<const H&
>(rhs.expression().right());
1134 if( s.hasOrderedRep() ) {
1135 for(
int i=s.start(); i <= s.end(); i++) {
1137 su3_matrixf* lm = (su3_matrixf *)&(l.elem(i).elem().elem(0,0).real());
1138 half_wilson_vectorf* rh = (half_wilson_vectorf*)&(r.elem(i).elem(0).elem(0).real());
1139 half_wilson_vectorf* dh = (half_wilson_vectorf*)&(d.elem(i).elem(0).elem(0).real());
1141 intrin_sse_mult_su3_mat_hwvec(lm,rh,dh);
1147 const int *tab = s.siteTable().slice();
1148 for(
int j=0; j < s.numSiteTable(); j++) {
1150 su3_matrixf* lm = (su3_matrixf *)&(l.elem(i).elem().elem(0,0).real());
1151 half_wilson_vectorf* rh = (half_wilson_vectorf*)&(r.elem(i).elem(0).elem(0).real());
1152 half_wilson_vectorf* dh = (half_wilson_vectorf*)&(d.elem(i).elem(0).elem(0).real());
1154 intrin_sse_mult_su3_mat_hwvec(lm,rh,dh);
1174 int n_loops = n_4vec;
1176 __m128 vscalep = _mm_load_ss(scalep);
1177 vscalep = _mm_shuffle_ps(vscalep, vscalep, 0);
1180 for (; n_loops-- > 0; )
1182 _mm_store_ps(Out+ 0, _mm_add_ps(_mm_mul_ps(vscalep, _mm_load_ps(InScale+ 0)), _mm_load_ps(Add+ 0)));
1183 _mm_store_ps(Out+ 4, _mm_add_ps(_mm_mul_ps(vscalep, _mm_load_ps(InScale+ 4)), _mm_load_ps(Add+ 4)));
1184 _mm_store_ps(Out+ 8, _mm_add_ps(_mm_mul_ps(vscalep, _mm_load_ps(InScale+ 8)), _mm_load_ps(Add+ 8)));
1185 _mm_store_ps(Out+12, _mm_add_ps(_mm_mul_ps(vscalep, _mm_load_ps(InScale+12)), _mm_load_ps(Add+12)));
1186 _mm_store_ps(Out+16, _mm_add_ps(_mm_mul_ps(vscalep, _mm_load_ps(InScale+16)), _mm_load_ps(Add+16)));
1187 _mm_store_ps(Out+20, _mm_add_ps(_mm_mul_ps(vscalep, _mm_load_ps(InScale+20)), _mm_load_ps(Add+20)));
1189 Out += 24; InScale += 24; Add += 24;
1201 int n_loops = n_4vec;
1204 __m128 vscalep = _mm_load_ss(scalep);
1205 vscalep = _mm_shuffle_ps( vscalep, vscalep, 0);
1207 for (; n_loops-- > 0; )
1209 _mm_store_ps(Out+ 0, _mm_sub_ps(_mm_mul_ps(vscalep, _mm_load_ps(InScale+ 0)), _mm_load_ps(Sub+ 0)));
1210 _mm_store_ps(Out+ 4, _mm_sub_ps(_mm_mul_ps(vscalep, _mm_load_ps(InScale+ 4)), _mm_load_ps(Sub+ 4)));
1211 _mm_store_ps(Out+ 8, _mm_sub_ps(_mm_mul_ps(vscalep, _mm_load_ps(InScale+ 8)), _mm_load_ps(Sub+ 8)));
1212 _mm_store_ps(Out+12, _mm_sub_ps(_mm_mul_ps(vscalep, _mm_load_ps(InScale+12)), _mm_load_ps(Sub+12)));
1213 _mm_store_ps(Out+16, _mm_sub_ps(_mm_mul_ps(vscalep, _mm_load_ps(InScale+16)), _mm_load_ps(Sub+16)));
1214 _mm_store_ps(Out+20, _mm_sub_ps(_mm_mul_ps(vscalep, _mm_load_ps(InScale+20)), _mm_load_ps(Sub+20)));
1216 Out += 24; InScale += 24; Sub += 24;
1228 int n_loops = n_4vec;
1230 for (; n_loops-- > 0; )
1232 _mm_store_ps(Out+ 0, _mm_add_ps(_mm_load_ps(In1+ 0), _mm_load_ps(In2+ 0)));
1233 _mm_store_ps(Out+ 4, _mm_add_ps(_mm_load_ps(In1+ 4), _mm_load_ps(In2+ 4)));
1234 _mm_store_ps(Out+ 8, _mm_add_ps(_mm_load_ps(In1+ 8), _mm_load_ps(In2+ 8)));
1235 _mm_store_ps(Out+12, _mm_add_ps(_mm_load_ps(In1+12), _mm_load_ps(In2+12)));
1236 _mm_store_ps(Out+16, _mm_add_ps(_mm_load_ps(In1+16), _mm_load_ps(In2+16)));
1237 _mm_store_ps(Out+20, _mm_add_ps(_mm_load_ps(In1+20), _mm_load_ps(In2+20)));
1239 Out += 24; In1 += 24; In2 += 24;
1251 int n_loops = n_4vec;
1253 for (; n_loops-- > 0; )
1255 _mm_store_ps(Out+ 0, _mm_sub_ps(_mm_load_ps(In1+ 0), _mm_load_ps(In2+ 0)));
1256 _mm_store_ps(Out+ 4, _mm_sub_ps(_mm_load_ps(In1+ 4), _mm_load_ps(In2+ 4)));
1257 _mm_store_ps(Out+ 8, _mm_sub_ps(_mm_load_ps(In1+ 8), _mm_load_ps(In2+ 8)));
1258 _mm_store_ps(Out+12, _mm_sub_ps(_mm_load_ps(In1+12), _mm_load_ps(In2+12)));
1259 _mm_store_ps(Out+16, _mm_sub_ps(_mm_load_ps(In1+16), _mm_load_ps(In2+16)));
1260 _mm_store_ps(Out+20, _mm_sub_ps(_mm_load_ps(In1+20), _mm_load_ps(In2+20)));
1262 Out += 24; In1 += 24; In2 += 24;
1273 int n_loops = n_4vec;
1276 __m128 vscalep = _mm_load_ss(scalep);
1277 vscalep = _mm_shuffle_ps(vscalep, vscalep, 0);
1279 for (; n_loops-- > 0; )
1281 _mm_store_ps(Out+ 0, _mm_mul_ps(vscalep, _mm_load_ps(In+ 0)));
1282 _mm_store_ps(Out+ 4, _mm_mul_ps(vscalep, _mm_load_ps(In+ 4)));
1283 _mm_store_ps(Out+ 8, _mm_mul_ps(vscalep, _mm_load_ps(In+ 8)));
1284 _mm_store_ps(Out+12, _mm_mul_ps(vscalep, _mm_load_ps(In+12)));
1285 _mm_store_ps(Out+16, _mm_mul_ps(vscalep, _mm_load_ps(In+16)));
1286 _mm_store_ps(Out+20, _mm_mul_ps(vscalep, _mm_load_ps(In+20)));
1288 Out += 24; In += 24;
1296 QDPIO::cout <<
"SSE_TEST: vaxpby3: a*x+b*y" << endl;
1300 int n_loops = n_4vec;
1303 __m128 va = _mm_load_ss(a);
1304 __m128 vb = _mm_load_ss(b);
1305 va = _mm_shuffle_ps(va, va, 0);
1306 vb = _mm_shuffle_ps(vb, vb, 0);
1309 for (; n_loops-- > 0; )
1311 _mm_store_ps(Out+ 0, _mm_add_ps(_mm_mul_ps(va, _mm_load_ps(x+ 0)), _mm_mul_ps(vb, _mm_load_ps(y+ 0))));
1312 _mm_store_ps(Out+ 4, _mm_add_ps(_mm_mul_ps(va, _mm_load_ps(x+ 4)), _mm_mul_ps(vb, _mm_load_ps(y+ 4))));
1313 _mm_store_ps(Out+ 8, _mm_add_ps(_mm_mul_ps(va, _mm_load_ps(x+ 8)), _mm_mul_ps(vb, _mm_load_ps(y+ 8))));
1314 _mm_store_ps(Out+12, _mm_add_ps(_mm_mul_ps(va, _mm_load_ps(x+12)), _mm_mul_ps(vb, _mm_load_ps(y+12))));
1315 _mm_store_ps(Out+16, _mm_add_ps(_mm_mul_ps(va, _mm_load_ps(x+16)), _mm_mul_ps(vb, _mm_load_ps(y+16))));
1316 _mm_store_ps(Out+20, _mm_add_ps(_mm_mul_ps(va, _mm_load_ps(x+20)), _mm_mul_ps(vb, _mm_load_ps(y+20))));
1318 Out += 24; x += 24; y += 24;
1326 QDPIO::cout <<
"SSE_TEST: vaxmby3: a*x-b*y" << endl;
1330 int n_loops = n_4vec;
1333 __m128 va = _mm_load_ss(a);
1334 __m128 vb = _mm_load_ss(b);
1335 va = _mm_shuffle_ps( va, va, 0);
1336 vb = _mm_shuffle_ps( vb, vb, 0);
1338 for (; n_loops-- > 0; )
1340 _mm_store_ps(Out+ 0, _mm_sub_ps(_mm_mul_ps(va, _mm_load_ps(x+ 0)), _mm_mul_ps(vb, _mm_load_ps(y+ 0))));
1341 _mm_store_ps(Out+ 4, _mm_sub_ps(_mm_mul_ps(va, _mm_load_ps(x+ 4)), _mm_mul_ps(vb, _mm_load_ps(y+ 4))));
1342 _mm_store_ps(Out+ 8, _mm_sub_ps(_mm_mul_ps(va, _mm_load_ps(x+ 8)), _mm_mul_ps(vb, _mm_load_ps(y+ 8))));
1343 _mm_store_ps(Out+12, _mm_sub_ps(_mm_mul_ps(va, _mm_load_ps(x+12)), _mm_mul_ps(vb, _mm_load_ps(y+12))));
1344 _mm_store_ps(Out+16, _mm_sub_ps(_mm_mul_ps(va, _mm_load_ps(x+16)), _mm_mul_ps(vb, _mm_load_ps(y+16))));
1345 _mm_store_ps(Out+20, _mm_sub_ps(_mm_mul_ps(va, _mm_load_ps(x+20)), _mm_mul_ps(vb, _mm_load_ps(y+20))));
1347 Out += 24; x += 24; y += 24;
1359 __m128d vsum = _mm_setzero_pd();
1360 __m128d vsum2 = _mm_setzero_pd();
1361 __m128d lower_2, upper_2;
1362 __m128d dat_sq, dat_sq2;
1363 __m128 tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
1370 loop_end = n_4vec-1;
1371 tmp1 = _mm_load_ps(num); num+=4;
1373 for(
int site=0; site < loop_end; site++) {
1375 tmp3 = _mm_load_ps(num); num+=4;
1378 tmp2 = _mm_shuffle_ps(tmp1, tmp1, 0x0e);
1379 lower_2 = _mm_cvtps_pd(tmp1);
1380 upper_2 = _mm_cvtps_pd(tmp2);
1383 dat_sq = _mm_mul_pd(lower_2, lower_2);
1384 vsum = _mm_add_pd(vsum, dat_sq);
1385 dat_sq2 = _mm_mul_pd(upper_2, upper_2);
1386 vsum2 = _mm_add_pd(vsum2, dat_sq2);
1387 tmp4 = _mm_load_ps(num); num+=4;
1390 tmp2 = _mm_shuffle_ps(tmp3, tmp3, 0x0e);
1391 lower_2 = _mm_cvtps_pd(tmp3);
1392 upper_2 = _mm_cvtps_pd(tmp2);
1395 dat_sq = _mm_mul_pd(lower_2, lower_2);
1396 vsum = _mm_add_pd(vsum, dat_sq);
1397 dat_sq2 = _mm_mul_pd(upper_2, upper_2);
1398 vsum2 = _mm_add_pd(vsum2, dat_sq2);
1399 tmp5 = _mm_load_ps(num); num+=4;
1403 tmp2 = _mm_shuffle_ps(tmp4, tmp4, 0x0e);
1404 lower_2 = _mm_cvtps_pd(tmp4);
1405 upper_2 = _mm_cvtps_pd(tmp2);
1408 dat_sq = _mm_mul_pd(lower_2, lower_2);
1409 vsum = _mm_add_pd(vsum, dat_sq);
1410 dat_sq2 = _mm_mul_pd(upper_2, upper_2);
1411 vsum2 = _mm_add_pd(vsum2, dat_sq2);
1412 tmp6 = _mm_load_ps(num); num+=4;
1415 tmp2 = _mm_shuffle_ps(tmp5, tmp5, 0x0e);
1416 lower_2 = _mm_cvtps_pd(tmp5);
1417 upper_2 = _mm_cvtps_pd(tmp2);
1420 dat_sq = _mm_mul_pd(lower_2, lower_2);
1421 vsum = _mm_add_pd(vsum, dat_sq);
1422 dat_sq2 = _mm_mul_pd(upper_2, upper_2);
1423 vsum2 = _mm_add_pd(vsum2, dat_sq2);
1424 tmp7 = _mm_load_ps(num); num+=4;
1427 tmp2 = _mm_shuffle_ps(tmp6, tmp6, 0x0e);
1428 lower_2 = _mm_cvtps_pd(tmp6);
1429 upper_2 = _mm_cvtps_pd(tmp2);
1432 dat_sq = _mm_mul_pd(lower_2, lower_2);
1433 vsum = _mm_add_pd(vsum, dat_sq);
1434 dat_sq2 = _mm_mul_pd(upper_2, upper_2);
1435 vsum2 = _mm_add_pd(vsum2, dat_sq2);
1436 tmp1 = _mm_load_ps(num); num+=4;
1439 tmp2 = _mm_shuffle_ps(tmp7, tmp7, 0x0e);
1440 lower_2 = _mm_cvtps_pd(tmp7);
1441 upper_2 = _mm_cvtps_pd(tmp2);
1444 dat_sq = _mm_mul_pd(lower_2, lower_2);
1445 vsum = _mm_add_pd(vsum, dat_sq);
1446 dat_sq2 = _mm_mul_pd(upper_2, upper_2);
1447 vsum2 = _mm_add_pd(vsum2, dat_sq2);
1453 tmp3 = _mm_load_ps(num); num+=4;
1456 tmp2 = _mm_shuffle_ps(tmp1, tmp1, 0x0e);
1457 lower_2 = _mm_cvtps_pd(tmp1);
1458 upper_2 = _mm_cvtps_pd(tmp2);
1461 dat_sq = _mm_mul_pd(lower_2, lower_2);
1462 vsum = _mm_add_pd(vsum, dat_sq);
1463 dat_sq2 = _mm_mul_pd(upper_2, upper_2);
1464 vsum2 = _mm_add_pd(vsum2, dat_sq2);
1466 tmp4 = _mm_load_ps(num); num+=4;
1469 tmp2 = _mm_shuffle_ps(tmp3, tmp3, 0x0e);
1470 lower_2 = _mm_cvtps_pd(tmp3);
1471 upper_2 = _mm_cvtps_pd(tmp2);
1474 dat_sq = _mm_mul_pd(lower_2, lower_2);
1475 vsum = _mm_add_pd(vsum, dat_sq);
1476 dat_sq2 = _mm_mul_pd(upper_2, upper_2);
1477 vsum2 = _mm_add_pd(vsum2, dat_sq2);
1479 tmp5 = _mm_load_ps(num); num+=4;
1482 tmp2 = _mm_shuffle_ps(tmp4, tmp4, 0x0e);
1483 lower_2 = _mm_cvtps_pd(tmp4);
1484 upper_2 = _mm_cvtps_pd(tmp2);
1487 dat_sq = _mm_mul_pd(lower_2, lower_2);
1488 vsum = _mm_add_pd(vsum, dat_sq);
1489 dat_sq2 = _mm_mul_pd(upper_2, upper_2);
1490 vsum2 = _mm_add_pd(vsum2, dat_sq2);
1492 tmp6 = _mm_load_ps(num); num+=4;
1495 tmp2 = _mm_shuffle_ps(tmp5, tmp5, 0x0e);
1496 lower_2 = _mm_cvtps_pd(tmp5);
1497 upper_2 = _mm_cvtps_pd(tmp2);
1500 dat_sq = _mm_mul_pd(lower_2, lower_2);
1501 vsum = _mm_add_pd(vsum, dat_sq);
1502 dat_sq2 = _mm_mul_pd(upper_2, upper_2);
1503 vsum2 = _mm_add_pd(vsum2, dat_sq2);
1505 tmp7 = _mm_load_ps(num); num+=4;
1508 tmp2 = _mm_shuffle_ps(tmp6, tmp6, 0x0e);
1509 lower_2 = _mm_cvtps_pd(tmp6);
1510 upper_2 = _mm_cvtps_pd(tmp2);
1513 dat_sq = _mm_mul_pd(lower_2, lower_2);
1514 vsum = _mm_add_pd(vsum, dat_sq);
1515 dat_sq2 = _mm_mul_pd(upper_2, upper_2);
1516 vsum2 = _mm_add_pd(vsum2, dat_sq2);
1519 tmp2 = _mm_shuffle_ps(tmp7, tmp7, 0x0e);
1520 lower_2 = _mm_cvtps_pd(tmp7);
1521 upper_2 = _mm_cvtps_pd(tmp2);
1524 dat_sq = _mm_mul_pd(lower_2, lower_2);
1525 vsum = _mm_add_pd(vsum, dat_sq);
1526 dat_sq2 = _mm_mul_pd(upper_2, upper_2);
1527 vsum2 = _mm_add_pd(vsum2, dat_sq2);
1531 vsum = _mm_add_pd(vsum, vsum2);
1541 lower_2 = _mm_shuffle_pd(vsum, vsum, 0x01);
1549 upper_2 = _mm_add_pd(lower_2, vsum);
1553 _mm_storeh_pd((
double *)Out, upper_2);
1580 unsigned long vecptr1=0;
1581 unsigned long vecptr2=0;
1588 v1_0r = (
REAL64)V1[vecptr1++];
1589 v2_0r = (
REAL64)V2[vecptr2++];
1591 v1_0i = (
REAL64)V1[vecptr1++];
1592 v2_0i = (
REAL64)V2[vecptr2++];
1594 v1_1r = (
REAL64)V1[vecptr1++];
1595 v2_1r = (
REAL64)V2[vecptr2++];
1597 for(counter=0; counter < n_3vec-1; counter++) {
1601 result_re = result_re + v1_0r*v2_0r;
1602 v1_1i =(
REAL64)V1[vecptr1++];
1603 result_im = result_im - v1_0i*v2_0r;
1604 v2_1i = (
REAL64)V2[vecptr2++];
1605 result_im = result_im + v1_0r*v2_0i;
1606 v1_2r = (
REAL64)V1[vecptr1++];
1607 result_re = result_re + v1_0i*v2_0i;
1608 v2_2r = (
REAL64)V2[vecptr2++];
1610 result_re = result_re + v1_1r*v2_1r;
1611 v1_2i = (
REAL64)V1[vecptr1++];
1612 result_im = result_im - v1_1i*v2_1r;
1613 v2_2i = (
REAL64)V2[vecptr2++];
1614 result_im = result_im + v1_1r*v2_1i;
1615 v1_0r = (
REAL64)V1[vecptr1++];
1616 result_re = result_re + v1_1i*v2_1i;
1617 v2_0r = (
REAL64)V2[vecptr2++];
1619 result_re = result_re + v1_2r*v2_2r;
1620 v1_0i = (
REAL64)V1[vecptr1++];
1621 result_im = result_im - v1_2i*v2_2r;
1622 v2_0i = (
REAL64)V2[vecptr2++];
1623 result_im = result_im + v1_2r*v2_2i;
1624 v1_1r = (
REAL64)V1[vecptr1++];
1625 result_re = result_re + v1_2i*v2_2i;
1626 v2_1r = (
REAL64)V2[vecptr2++];
1631 result_re = result_re + v1_0r*v2_0r;
1632 v1_1i =(
REAL64)V1[vecptr1++];
1633 result_im = result_im - v1_0i*v2_0r;
1634 v2_1i = (
REAL64)V2[vecptr2++];
1635 result_im = result_im + v1_0r*v2_0i;
1636 v1_2r = (
REAL64)V1[vecptr1++];
1637 result_re = result_re + v1_0i*v2_0i;
1638 v2_2r = (
REAL64)V2[vecptr2++];
1640 result_re = result_re + v1_1r*v2_1r;
1641 v1_2i = (
REAL64)V1[vecptr1++];
1642 result_im = result_im - v1_1i*v2_1r;
1643 v2_2i = (
REAL64)V2[vecptr2++];
1645 result_im = result_im + v1_1r*v2_1i;
1646 result_re = result_re + v1_1i*v2_1i;
1649 result_re = result_re + v1_2r*v2_2r;
1650 result_im = result_im - v1_2i*v2_2r;
1651 result_im = result_im + v1_2r*v2_2i;
1652 result_re = result_re + v1_2i*v2_2i;
1656 *Out_re=(
REAL64)result_re;
1657 *Out_im=(
REAL64)result_im;
1680 unsigned long vecptr1=0;
1681 unsigned long vecptr2=0;
1688 v1_0r = (
REAL64)V1[vecptr1++];
1689 v2_0r = (
REAL64)V2[vecptr2++];
1691 v1_0i = (
REAL64)V1[vecptr1++];
1692 v2_0i = (
REAL64)V2[vecptr2++];
1694 v1_1r = (
REAL64)V1[vecptr1++];
1695 v2_1r = (
REAL64)V2[vecptr2++];
1697 v1_1i =(
REAL64)V1[vecptr1++];
1698 v2_1i = (
REAL64)V2[vecptr2++];
1700 v1_2r = (
REAL64)V1[vecptr1++];
1701 v2_2r = (
REAL64)V2[vecptr2++];
1703 v1_2i = (
REAL64)V1[vecptr1++];
1704 v2_2i = (
REAL64)V2[vecptr2++];
1706 for(counter=0; counter < n_3vec-1; counter++) {
1707 result = result + v1_0r*v2_0r;
1708 v1_0r = (
REAL64)V1[vecptr1++];
1709 v2_0r = (
REAL64)V2[vecptr2++];
1711 result = result + v1_0i*v2_0i;
1712 v1_0i = (
REAL64)V1[vecptr1++];
1713 v2_0i = (
REAL64)V2[vecptr2++];
1715 result = result + v1_1r*v2_1r;
1716 v1_1r = (
REAL64)V1[vecptr1++];
1717 v2_1r = (
REAL64)V2[vecptr2++];
1719 result = result + v1_1i*v2_1i;
1720 v1_1i =(
REAL64)V1[vecptr1++];
1721 v2_1i = (
REAL64)V2[vecptr2++];
1723 result = result + v1_2r*v2_2r;
1724 v1_2r = (
REAL64)V1[vecptr1++];
1725 v2_2r = (
REAL64)V2[vecptr2++];
1727 result = result + v1_2i*v2_2i;
1728 v1_2i = (
REAL64)V1[vecptr1++];
1729 v2_2i = (
REAL64)V2[vecptr2++];
1735 result = result + v1_0r*v2_0r;
1736 result = result + v1_0i*v2_0i;
1737 result = result + v1_1r*v2_1r;
1738 result = result + v1_1i*v2_1i;
1739 result = result + v1_2r*v2_2r;
1740 result = result + v1_2i*v2_2i;
Primitive color Matrix class.
Expression class for QDP.
QDPType - major type class/container for all QDP objects.
Subsets - controls how lattices are looped.
OLattice< PSpinVector< PColorVector< RComplexFloat, 3 >, 2 > > H
void evaluate(OLattice< DCol > &d, const OpAssign &op, const QDPExpr< BinaryNode< OpMultiply, Reference< QDPType< DCol, OLattice< DCol > > >, Reference< QDPType< DCol, OLattice< DCol > > > >, OLattice< DCol > > &rhs, const Subset &s)
OLattice< PScalar< PColorMatrix< RComplexFloat, 3 > > > C
StandardOutputStream cout
Yet another random number generator.
void local_sumsq_24_48(REAL64 *Out, REAL32 *In, int n_3vec)
MakeReturn< UnaryNode< FnReal, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnReal >::Type_t >::Expression_t real(const QDPExpr< T1, C1 > &l)
void local_vcdot_real(REAL64 *Out_re, REAL32 *V1, REAL32 *V2, int n_3vec)
void local_vcdot(REAL64 *Out_re, REAL64 *Out_im, REAL32 *V1, REAL32 *V2, int n_3vec)
void vaxpby3(REAL *Out, REAL *ap, REAL *xp, REAL *bp, REAL *yp, int n_3vec)
void vsub(REAL *Out, REAL *In1, REAL *In2, int n_3vec)
void vaxpy3(REAL *Out, REAL *scalep, REAL *InScale, REAL *Add, int n_4vec)
void vadd(REAL *Out, REAL *In1, REAL *In2, int n_3vec)
void vaxmy3(REAL *Out, REAL *scalep, REAL *InScale, REAL *Sub, int n_3vec)
void vaxmby3(REAL *Out, REAL *ap, REAL *xp, REAL *bp, REAL *yp, int n_3vec)
void vscal(REAL *Out, REAL *scalep, REAL *In, int n_3vec)
Primary include file for QDP.