1/*********************************************************************/ 2/* Copyright 2009, 2010 The University of Texas at Austin. */ 3/* All rights reserved. */ 4/* */ 5/* Redistribution and use in source and binary forms, with or */ 6/* without modification, are permitted provided that the following */ 7/* conditions are met: */ 8/* */ 9/* 1. Redistributions of source code must retain the above */ 10/* copyright notice, this list of conditions and the following */ 11/* disclaimer. */ 12/* */ 13/* 2. Redistributions in binary form must reproduce the above */ 14/* copyright notice, this list of conditions and the following */ 15/* disclaimer in the documentation and/or other materials */ 16/* provided with the distribution. */ 17/* */ 18/* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF TEXAS AT */ 19/* AUSTIN ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, */ 20/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ 21/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ 22/* DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OF TEXAS AT */ 23/* AUSTIN OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, */ 24/* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES */ 25/* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE */ 26/* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR */ 27/* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF */ 28/* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT */ 29/* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT */ 30/* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */ 31/* POSSIBILITY OF SUCH DAMAGE. */ 32/* */ 33/* The views and conclusions contained in the software and */ 34/* documentation are those of the authors and should not be */ 35/* interpreted as representing official policies, either expressed */ 36/* or implied, of The University of Texas at Austin. */ 37/*********************************************************************/ 38 39#define ASSEMBLER 40#include "common.h" 41#include "l2param.h" 42 43#if GEMV_UNROLL < 2 44#undef GEMV_UNROLL 45#define GEMV_UNROLL 2 46#endif 47 48#ifndef WINDOWS_ABI 49 50#define STACKSIZE 128 51 52#define OLD_INCX 8 + STACKSIZE(%rsp) 53#define OLD_Y 16 + STACKSIZE(%rsp) 54#define OLD_INCY 24 + STACKSIZE(%rsp) 55#define OLD_BUFFER 32 + STACKSIZE(%rsp) 56#define ALPHA 48 (%rsp) 57 58#define MMM 64(%rsp) 59#define NN 72(%rsp) 60#define AA 80(%rsp) 61#define XX 88(%rsp) 62#define LDAX 96(%rsp) 63#define ALPHAR 104(%rsp) 64#define ALPHAI 112(%rsp) 65 66#define M %rdi 67#define N %rsi 68#define A %rcx 69#define LDA %r8 70#define X %r9 71#define INCX %rdx 72#define Y %rbp 73#define INCY %r10 74 75#else 76 77#define STACKSIZE 288 78 79#define OLD_ALPHA_I 40 + STACKSIZE(%rsp) 80#define OLD_A 48 + STACKSIZE(%rsp) 81#define OLD_LDA 56 + STACKSIZE(%rsp) 82#define OLD_X 64 + STACKSIZE(%rsp) 83#define OLD_INCX 72 + STACKSIZE(%rsp) 84#define OLD_Y 80 + STACKSIZE(%rsp) 85#define OLD_INCY 88 + STACKSIZE(%rsp) 86#define OLD_BUFFER 96 + STACKSIZE(%rsp) 87#define ALPHA 224 (%rsp) 88 89#define MMM 232(%rsp) 90#define NN 240(%rsp) 91#define AA 248(%rsp) 92#define XX 256(%rsp) 93#define LDAX 264(%rsp) 94#define ALPHAR 272(%rsp) 95#define ALPHAI 280(%rsp) 96 97#define M %rcx 98#define N %rdx 99#define A %r8 100#define LDA %r9 101#define X %rdi 102#define INCX %rsi 103#define Y %rbp 104#define INCY %r10 105 106#endif 107 108#define I %rax 109#define A1 %r11 110#define A2 %r12 111 112#define Y1 %r13 113#define BUFFER %r14 114 115#ifdef ALIGNED_ACCESS 116#define MM %r15 117#else 118#define MM M 119#endif 120 121#undef SUBPS 122 123#if (!defined(CONJ) && !defined(XCONJ)) || (defined(CONJ) && defined(XCONJ)) 124#define SUBPS subps 125#else 126#define SUBPS addps 127#endif 128 129 PROLOGUE 130 PROFCODE 131 132 subq $STACKSIZE, %rsp 133 movq %rbx, 0(%rsp) 134 movq %rbp, 8(%rsp) 135 movq %r12, 16(%rsp) 136 movq %r13, 24(%rsp) 137 movq %r14, 32(%rsp) 138 movq %r15, 40(%rsp) 139 140#ifdef WINDOWS_ABI 141 movq %rdi, 48(%rsp) 142 movq %rsi, 56(%rsp) 143 movups %xmm6, 64(%rsp) 144 movups %xmm7, 80(%rsp) 145 movups %xmm8, 96(%rsp) 146 movups %xmm9, 112(%rsp) 147 movups %xmm10, 128(%rsp) 148 movups %xmm11, 144(%rsp) 149 movups %xmm12, 160(%rsp) 150 movups %xmm13, 176(%rsp) 151 movups %xmm14, 192(%rsp) 152 movups %xmm15, 208(%rsp) 153 154 movq OLD_A, A 155 movq OLD_LDA, LDA 156 movq OLD_X, X 157 158 movaps %xmm3, %xmm0 159 movss OLD_ALPHA_I, %xmm1 160#endif 161 movq A, AA 162 movq N, NN 163 movq M, MMM 164 movq LDA, LDAX 165 movq X, XX 166 movq OLD_Y, Y 167 movss %xmm0,ALPHAR 168 movss %xmm1,ALPHAI 169 170.L0t: 171 xorq I,I 172 addq $1,I 173 salq $20,I 174 subq I,MMM 175 movq I,M 176 movss ALPHAR,%xmm0 177 movss ALPHAI,%xmm1 178 jge .L00t 179 180 movq MMM,M 181 addq I,M 182 jle .L999x 183 184.L00t: 185 movq AA, A 186 movq NN, N 187 movq LDAX, LDA 188 movq XX, X 189 190 movq OLD_INCX, INCX 191# movq OLD_Y, Y 192 movq OLD_INCY, INCY 193 movq OLD_BUFFER, BUFFER 194 195 salq $ZBASE_SHIFT, LDA 196 salq $ZBASE_SHIFT, INCX 197 salq $ZBASE_SHIFT, INCY 198 199 unpcklps %xmm1, %xmm0 200 201 movlps %xmm0, ALPHA 202 203 testq M, M 204 jle .L999 205 testq N, N 206 jle .L999 207 ALIGN_3 208 209 subq $-32 * SIZE, A 210 211 movq BUFFER, Y1 212 213 pxor %xmm4, %xmm4 214 215 movq M, %rax 216 addq $8, %rax 217 sarq $3, %rax 218 ALIGN_3 219 220.L01: 221 movaps %xmm4, 0 * SIZE(Y1) 222 movaps %xmm4, 4 * SIZE(Y1) 223 movaps %xmm4, 8 * SIZE(Y1) 224 movaps %xmm4, 12 * SIZE(Y1) 225 226 subq $-16 * SIZE, Y1 227 decq %rax 228 jg .L01 229 ALIGN_3 230 231.L10: 232#ifdef ALIGNED_ACCESS 233 movq M, MM 234 235 movq A, %rax 236 andq $4 * SIZE - 1, %rax 237 leaq 2 * SIZE(BUFFER), A1 238 leaq -1(M), A2 239 240 cmpq $2 * SIZE, %rax 241 cmovge A1, BUFFER 242 cmovge A2, MM 243 244 testq $SIZE, A 245 jne .L200 246 247 testq $2 * SIZE, LDA 248 jne .L100 249#endif 250 251#if GEMV_UNROLL >= 4 252 cmpq $4, N 253 jl .L20 254 ALIGN_3 255 256.L11: 257 subq $4, N 258 259 leaq 32 * SIZE(BUFFER), Y1 260 movq A, A1 261 leaq (A, LDA, 2), A2 262 leaq (A, LDA, 4), A 263 264 movsd (X), %xmm9 265 addq INCX, X 266 movsd (X), %xmm11 267 addq INCX, X 268 movsd (X), %xmm13 269 addq INCX, X 270 movsd (X), %xmm15 271 addq INCX, X 272 273#ifdef HAVE_SSE3 274 movddup ALPHA, %xmm6 275#else 276 movsd ALPHA, %xmm6 277 unpcklpd %xmm6, %xmm6 278#endif 279 280 pshufd $0xb1, %xmm6, %xmm5 281 282 pcmpeqb %xmm7, %xmm7 283 psllq $63, %xmm7 284 285 pshufd $0x00, %xmm9, %xmm8 286 pshufd $0x55, %xmm9, %xmm9 287 pshufd $0x00, %xmm11, %xmm10 288 pshufd $0x55, %xmm11, %xmm11 289 pshufd $0x00, %xmm13, %xmm12 290 pshufd $0x55, %xmm13, %xmm13 291 pshufd $0x00, %xmm15, %xmm14 292 pshufd $0x55, %xmm15, %xmm15 293 294#ifndef XCONJ 295 xorps %xmm7, %xmm9 296 xorps %xmm7, %xmm11 297 xorps %xmm7, %xmm13 298 xorps %xmm7, %xmm15 299#else 300 xorps %xmm7, %xmm8 301 xorps %xmm7, %xmm10 302 xorps %xmm7, %xmm12 303 xorps %xmm7, %xmm14 304#endif 305 306 mulps %xmm6, %xmm8 307 mulps %xmm5, %xmm9 308 mulps %xmm6, %xmm10 309 mulps %xmm5, %xmm11 310 mulps %xmm6, %xmm12 311 mulps %xmm5, %xmm13 312 mulps %xmm6, %xmm14 313 mulps %xmm5, %xmm15 314 315#ifndef XCONJ 316 subps %xmm9, %xmm8 317 subps %xmm11, %xmm10 318 subps %xmm13, %xmm12 319 subps %xmm15, %xmm14 320#else 321 addps %xmm9, %xmm8 322 addps %xmm11, %xmm10 323 addps %xmm13, %xmm12 324 addps %xmm15, %xmm14 325#endif 326 327 pshufd $0x55, %xmm8, %xmm9 328 pshufd $0x00, %xmm8, %xmm8 329 pshufd $0x55, %xmm10, %xmm11 330 pshufd $0x00, %xmm10, %xmm10 331 pshufd $0x55, %xmm12, %xmm13 332 pshufd $0x00, %xmm12, %xmm12 333 pshufd $0x55, %xmm14, %xmm15 334 pshufd $0x00, %xmm14, %xmm14 335 336#ifndef CONJ 337 xorps %xmm7, %xmm9 338 xorps %xmm7, %xmm11 339 xorps %xmm7, %xmm13 340 xorps %xmm7, %xmm15 341#else 342 xorps %xmm7, %xmm8 343 xorps %xmm7, %xmm10 344 xorps %xmm7, %xmm12 345 xorps %xmm7, %xmm14 346#endif 347 348#ifdef ALIGNED_ACCESS 349 cmpq M, MM 350 je .L1X 351 352 movsd -32 * SIZE(A1), %xmm4 353 movsd -32 * SIZE(A1, LDA), %xmm6 354 355 movsd -32 * SIZE(Y1), %xmm0 356 357 pshufd $0xb1, %xmm4, %xmm5 358 mulps %xmm8, %xmm4 359 addps %xmm4, %xmm0 360 movsd -32 * SIZE(A2), %xmm4 361 pshufd $0xb1, %xmm6, %xmm7 362 mulps %xmm9, %xmm5 363 SUBPS %xmm5, %xmm0 364 365 mulps %xmm10, %xmm6 366 addps %xmm6, %xmm0 367 movsd -32 * SIZE(A2, LDA), %xmm6 368 mulps %xmm11, %xmm7 369 SUBPS %xmm7, %xmm0 370 371 pshufd $0xb1, %xmm4, %xmm5 372 mulps %xmm12, %xmm4 373 addps %xmm4, %xmm0 374 pshufd $0xb1, %xmm6, %xmm7 375 mulps %xmm13, %xmm5 376 SUBPS %xmm5, %xmm0 377 378 mulps %xmm14, %xmm6 379 addps %xmm6, %xmm0 380 mulps %xmm15, %xmm7 381 SUBPS %xmm7, %xmm0 382 383 movlps %xmm0, -32 * SIZE(Y1) 384 385 addq $2 * SIZE, A1 386 addq $2 * SIZE, A2 387 addq $2 * SIZE, Y1 388 ALIGN_3 389.L1X: 390#endif 391 392 movaps -32 * SIZE(Y1), %xmm0 393 movaps -28 * SIZE(Y1), %xmm1 394 movaps -24 * SIZE(Y1), %xmm2 395 movaps -20 * SIZE(Y1), %xmm3 396 397 movq MM, I 398 sarq $3, I 399 jle .L15 400 401 MOVUPS_A1(-32 * SIZE, A1, %xmm4) 402 MOVUPS_A1(-28 * SIZE, A1, %xmm6) 403 404 decq I 405 jle .L14 406 ALIGN_3 407 408.L13: 409#ifdef PREFETCH 410 PREFETCH (PREFETCHSIZE) - 128 + PREOFFSET(A1) 411#endif 412 413 pshufd $0xb1, %xmm4, %xmm5 414 mulps %xmm8, %xmm4 415 addps %xmm4, %xmm0 416 MOVUPS_A1(-24 * SIZE, A1, %xmm4) 417 pshufd $0xb1, %xmm6, %xmm7 418 mulps %xmm8, %xmm6 419 addps %xmm6, %xmm1 420 MOVUPS_A1(-20 * SIZE, A1, %xmm6) 421 422 mulps %xmm9, %xmm5 423 SUBPS %xmm5, %xmm0 424 mulps %xmm9, %xmm7 425 SUBPS %xmm7, %xmm1 426 427 pshufd $0xb1, %xmm4, %xmm5 428 mulps %xmm8, %xmm4 429 addps %xmm4, %xmm2 430 MOVUPS_A2(-32 * SIZE, A1, LDA, 1, %xmm4) 431 pshufd $0xb1, %xmm6, %xmm7 432 mulps %xmm8, %xmm6 433 addps %xmm6, %xmm3 434 MOVUPS_A2(-28 * SIZE, A1, LDA, 1, %xmm6) 435 436 mulps %xmm9, %xmm5 437 SUBPS %xmm5, %xmm2 438 mulps %xmm9, %xmm7 439 SUBPS %xmm7, %xmm3 440 441#ifdef PREFETCH 442 PREFETCH (PREFETCHSIZE) - 128 + PREOFFSET(A1, LDA) 443#endif 444 445 pshufd $0xb1, %xmm4, %xmm5 446 mulps %xmm10, %xmm4 447 addps %xmm4, %xmm0 448 MOVUPS_A2(-24 * SIZE, A1, LDA, 1, %xmm4) 449 pshufd $0xb1, %xmm6, %xmm7 450 mulps %xmm10, %xmm6 451 addps %xmm6, %xmm1 452 MOVUPS_A2(-20 * SIZE, A1, LDA, 1, %xmm6) 453 454 mulps %xmm11, %xmm5 455 SUBPS %xmm5, %xmm0 456 mulps %xmm11, %xmm7 457 SUBPS %xmm7, %xmm1 458 459 pshufd $0xb1, %xmm4, %xmm5 460 mulps %xmm10, %xmm4 461 addps %xmm4, %xmm2 462 MOVUPS_A1(-32 * SIZE, A2, %xmm4) 463 pshufd $0xb1, %xmm6, %xmm7 464 mulps %xmm10, %xmm6 465 addps %xmm6, %xmm3 466 MOVUPS_A1(-28 * SIZE, A2, %xmm6) 467 468 mulps %xmm11, %xmm5 469 SUBPS %xmm5, %xmm2 470 mulps %xmm11, %xmm7 471 SUBPS %xmm7, %xmm3 472 473#ifdef PREFETCH 474 PREFETCH (PREFETCHSIZE) - 128 + PREOFFSET(A2) 475#endif 476 477 pshufd $0xb1, %xmm4, %xmm5 478 mulps %xmm12, %xmm4 479 addps %xmm4, %xmm0 480 MOVUPS_A1(-24 * SIZE, A2, %xmm4) 481 pshufd $0xb1, %xmm6, %xmm7 482 mulps %xmm12, %xmm6 483 addps %xmm6, %xmm1 484 MOVUPS_A1(-20 * SIZE, A2, %xmm6) 485 486 mulps %xmm13, %xmm5 487 SUBPS %xmm5, %xmm0 488 mulps %xmm13, %xmm7 489 SUBPS %xmm7, %xmm1 490 491 pshufd $0xb1, %xmm4, %xmm5 492 mulps %xmm12, %xmm4 493 addps %xmm4, %xmm2 494 MOVUPS_A2(-32 * SIZE, A2, LDA, 1, %xmm4) 495 pshufd $0xb1, %xmm6, %xmm7 496 mulps %xmm12, %xmm6 497 addps %xmm6, %xmm3 498 MOVUPS_A2(-28 * SIZE, A2, LDA, 1, %xmm6) 499 500 mulps %xmm13, %xmm5 501 SUBPS %xmm5, %xmm2 502 mulps %xmm13, %xmm7 503 SUBPS %xmm7, %xmm3 504 505#ifdef PREFETCH 506 PREFETCH (PREFETCHSIZE) - 128 + PREOFFSET(A2, LDA) 507#endif 508 509 pshufd $0xb1, %xmm4, %xmm5 510 mulps %xmm14, %xmm4 511 addps %xmm4, %xmm0 512 MOVUPS_A2(-24 * SIZE, A2, LDA, 1, %xmm4) 513 pshufd $0xb1, %xmm6, %xmm7 514 mulps %xmm14, %xmm6 515 addps %xmm6, %xmm1 516 MOVUPS_A2(-20 * SIZE, A2, LDA, 1, %xmm6) 517 518 mulps %xmm15, %xmm5 519 SUBPS %xmm5, %xmm0 520 mulps %xmm15, %xmm7 521 SUBPS %xmm7, %xmm1 522 523 pshufd $0xb1, %xmm4, %xmm5 524 mulps %xmm14, %xmm4 525 addps %xmm4, %xmm2 526 MOVUPS_A1(-16 * SIZE, A1, %xmm4) 527 pshufd $0xb1, %xmm6, %xmm7 528 mulps %xmm14, %xmm6 529 addps %xmm6, %xmm3 530 MOVUPS_A1(-12 * SIZE, A1, %xmm6) 531 532 mulps %xmm15, %xmm5 533 SUBPS %xmm5, %xmm2 534 mulps %xmm15, %xmm7 535 SUBPS %xmm7, %xmm3 536 537#ifdef PREFETCHW 538 PREFETCHW (PREFETCHSIZE) - 128 + PREOFFSET(Y1) 539#endif 540 541 movaps %xmm0, -32 * SIZE(Y1) 542 movaps %xmm1, -28 * SIZE(Y1) 543 movaps %xmm2, -24 * SIZE(Y1) 544 movaps %xmm3, -20 * SIZE(Y1) 545 546 movaps -16 * SIZE(Y1), %xmm0 547 movaps -12 * SIZE(Y1), %xmm1 548 movaps -8 * SIZE(Y1), %xmm2 549 movaps -4 * SIZE(Y1), %xmm3 550 551 subq $-16 * SIZE, A1 552 subq $-16 * SIZE, A2 553 subq $-16 * SIZE, Y1 554 555 subq $1, I 556 BRANCH 557 jg .L13 558 ALIGN_3 559 560.L14: 561 pshufd $0xb1, %xmm4, %xmm5 562 mulps %xmm8, %xmm4 563 addps %xmm4, %xmm0 564 MOVUPS_A1(-24 * SIZE, A1, %xmm4) 565 pshufd $0xb1, %xmm6, %xmm7 566 mulps %xmm8, %xmm6 567 addps %xmm6, %xmm1 568 MOVUPS_A1(-20 * SIZE, A1, %xmm6) 569 570 mulps %xmm9, %xmm5 571 SUBPS %xmm5, %xmm0 572 mulps %xmm9, %xmm7 573 SUBPS %xmm7, %xmm1 574 575 pshufd $0xb1, %xmm4, %xmm5 576 mulps %xmm8, %xmm4 577 addps %xmm4, %xmm2 578 MOVUPS_A2(-32 * SIZE, A1, LDA, 1, %xmm4) 579 pshufd $0xb1, %xmm6, %xmm7 580 mulps %xmm8, %xmm6 581 addps %xmm6, %xmm3 582 MOVUPS_A2(-28 * SIZE, A1, LDA, 1, %xmm6) 583 584 mulps %xmm9, %xmm5 585 SUBPS %xmm5, %xmm2 586 mulps %xmm9, %xmm7 587 SUBPS %xmm7, %xmm3 588 589 pshufd $0xb1, %xmm4, %xmm5 590 mulps %xmm10, %xmm4 591 addps %xmm4, %xmm0 592 MOVUPS_A2(-24 * SIZE, A1, LDA, 1, %xmm4) 593 pshufd $0xb1, %xmm6, %xmm7 594 mulps %xmm10, %xmm6 595 addps %xmm6, %xmm1 596 MOVUPS_A2(-20 * SIZE, A1, LDA, 1, %xmm6) 597 598 mulps %xmm11, %xmm5 599 SUBPS %xmm5, %xmm0 600 mulps %xmm11, %xmm7 601 SUBPS %xmm7, %xmm1 602 603 pshufd $0xb1, %xmm4, %xmm5 604 mulps %xmm10, %xmm4 605 addps %xmm4, %xmm2 606 MOVUPS_A1(-32 * SIZE, A2, %xmm4) 607 pshufd $0xb1, %xmm6, %xmm7 608 mulps %xmm10, %xmm6 609 addps %xmm6, %xmm3 610 MOVUPS_A1(-28 * SIZE, A2, %xmm6) 611 612 mulps %xmm11, %xmm5 613 SUBPS %xmm5, %xmm2 614 mulps %xmm11, %xmm7 615 SUBPS %xmm7, %xmm3 616 617 pshufd $0xb1, %xmm4, %xmm5 618 mulps %xmm12, %xmm4 619 addps %xmm4, %xmm0 620 MOVUPS_A1(-24 * SIZE, A2, %xmm4) 621 pshufd $0xb1, %xmm6, %xmm7 622 mulps %xmm12, %xmm6 623 addps %xmm6, %xmm1 624 MOVUPS_A1(-20 * SIZE, A2, %xmm6) 625 626 mulps %xmm13, %xmm5 627 SUBPS %xmm5, %xmm0 628 mulps %xmm13, %xmm7 629 SUBPS %xmm7, %xmm1 630 631 pshufd $0xb1, %xmm4, %xmm5 632 mulps %xmm12, %xmm4 633 addps %xmm4, %xmm2 634 MOVUPS_A2(-32 * SIZE, A2, LDA, 1, %xmm4) 635 pshufd $0xb1, %xmm6, %xmm7 636 mulps %xmm12, %xmm6 637 addps %xmm6, %xmm3 638 MOVUPS_A2(-28 * SIZE, A2, LDA, 1, %xmm6) 639 640 mulps %xmm13, %xmm5 641 SUBPS %xmm5, %xmm2 642 mulps %xmm13, %xmm7 643 SUBPS %xmm7, %xmm3 644 645 pshufd $0xb1, %xmm4, %xmm5 646 mulps %xmm14, %xmm4 647 addps %xmm4, %xmm0 648 MOVUPS_A2(-24 * SIZE, A2, LDA, 1, %xmm4) 649 pshufd $0xb1, %xmm6, %xmm7 650 mulps %xmm14, %xmm6 651 addps %xmm6, %xmm1 652 MOVUPS_A2(-20 * SIZE, A2, LDA, 1, %xmm6) 653 654 mulps %xmm15, %xmm5 655 SUBPS %xmm5, %xmm0 656 mulps %xmm15, %xmm7 657 SUBPS %xmm7, %xmm1 658 659 pshufd $0xb1, %xmm4, %xmm5 660 mulps %xmm14, %xmm4 661 addps %xmm4, %xmm2 662 pshufd $0xb1, %xmm6, %xmm7 663 mulps %xmm14, %xmm6 664 addps %xmm6, %xmm3 665 666 mulps %xmm15, %xmm5 667 SUBPS %xmm5, %xmm2 668 mulps %xmm15, %xmm7 669 SUBPS %xmm7, %xmm3 670 671 movaps %xmm0, -32 * SIZE(Y1) 672 movaps %xmm1, -28 * SIZE(Y1) 673 movaps %xmm2, -24 * SIZE(Y1) 674 movaps %xmm3, -20 * SIZE(Y1) 675 676 movaps -16 * SIZE(Y1), %xmm0 677 movaps -12 * SIZE(Y1), %xmm1 678 movaps -8 * SIZE(Y1), %xmm2 679 movaps -4 * SIZE(Y1), %xmm3 680 681 subq $-16 * SIZE, A1 682 subq $-16 * SIZE, A2 683 subq $-16 * SIZE, Y1 684 ALIGN_3 685 686.L15: 687 testq $4, MM 688 je .L17 689 690 MOVUPS_A1(-32 * SIZE, A1, %xmm4) 691 MOVUPS_A1(-28 * SIZE, A1, %xmm6) 692 693 pshufd $0xb1, %xmm4, %xmm5 694 mulps %xmm8, %xmm4 695 addps %xmm4, %xmm0 696 pshufd $0xb1, %xmm6, %xmm7 697 mulps %xmm8, %xmm6 698 addps %xmm6, %xmm1 699 700 mulps %xmm9, %xmm5 701 SUBPS %xmm5, %xmm0 702 mulps %xmm9, %xmm7 703 SUBPS %xmm7, %xmm1 704 705 MOVUPS_A2(-32 * SIZE, A1, LDA, 1, %xmm4) 706 MOVUPS_A2(-28 * SIZE, A1, LDA, 1, %xmm6) 707 708 pshufd $0xb1, %xmm4, %xmm5 709 mulps %xmm10, %xmm4 710 addps %xmm4, %xmm0 711 pshufd $0xb1, %xmm6, %xmm7 712 mulps %xmm10, %xmm6 713 addps %xmm6, %xmm1 714 715 mulps %xmm11, %xmm5 716 SUBPS %xmm5, %xmm0 717 mulps %xmm11, %xmm7 718 SUBPS %xmm7, %xmm1 719 720 MOVUPS_A1(-32 * SIZE, A2, %xmm4) 721 MOVUPS_A1(-28 * SIZE, A2, %xmm6) 722 723 pshufd $0xb1, %xmm4, %xmm5 724 mulps %xmm12, %xmm4 725 addps %xmm4, %xmm0 726 pshufd $0xb1, %xmm6, %xmm7 727 mulps %xmm12, %xmm6 728 addps %xmm6, %xmm1 729 730 mulps %xmm13, %xmm5 731 SUBPS %xmm5, %xmm0 732 mulps %xmm13, %xmm7 733 SUBPS %xmm7, %xmm1 734 735 MOVUPS_A2(-32 * SIZE, A2, LDA, 1, %xmm4) 736 MOVUPS_A2(-28 * SIZE, A2, LDA, 1, %xmm6) 737 738 pshufd $0xb1, %xmm4, %xmm5 739 mulps %xmm14, %xmm4 740 addps %xmm4, %xmm0 741 pshufd $0xb1, %xmm6, %xmm7 742 mulps %xmm14, %xmm6 743 addps %xmm6, %xmm1 744 745 mulps %xmm15, %xmm5 746 SUBPS %xmm5, %xmm0 747 mulps %xmm15, %xmm7 748 SUBPS %xmm7, %xmm1 749 750 movaps %xmm0, -32 * SIZE(Y1) 751 movaps %xmm1, -28 * SIZE(Y1) 752 753 movaps %xmm2, %xmm0 754 movaps %xmm3, %xmm1 755 756 addq $8 * SIZE, A1 757 addq $8 * SIZE, A2 758 addq $8 * SIZE, Y1 759 ALIGN_3 760 761.L17: 762 testq $2, MM 763 je .L18 764 765 MOVUPS_A1(-32 * SIZE, A1, %xmm4) 766 MOVUPS_A2(-32 * SIZE, A1, LDA, 1, %xmm6) 767 768 pshufd $0xb1, %xmm4, %xmm5 769 mulps %xmm8, %xmm4 770 addps %xmm4, %xmm0 771 MOVUPS_A1(-32 * SIZE, A2, %xmm4) 772 pshufd $0xb1, %xmm6, %xmm7 773 mulps %xmm9, %xmm5 774 SUBPS %xmm5, %xmm0 775 776 mulps %xmm10, %xmm6 777 addps %xmm6, %xmm0 778 MOVUPS_A2(-32 * SIZE, A2, LDA, 1, %xmm6) 779 mulps %xmm11, %xmm7 780 SUBPS %xmm7, %xmm0 781 782 pshufd $0xb1, %xmm4, %xmm5 783 mulps %xmm12, %xmm4 784 addps %xmm4, %xmm0 785 pshufd $0xb1, %xmm6, %xmm7 786 mulps %xmm13, %xmm5 787 SUBPS %xmm5, %xmm0 788 789 mulps %xmm14, %xmm6 790 addps %xmm6, %xmm0 791 mulps %xmm15, %xmm7 792 SUBPS %xmm7, %xmm0 793 794 movaps %xmm0, -32 * SIZE(Y1) 795 movaps %xmm1, %xmm0 796 797 addq $4 * SIZE, A1 798 addq $4 * SIZE, A2 799 addq $4 * SIZE, Y1 800 ALIGN_3 801 802.L18: 803 testq $1, MM 804 je .L19 805 806 movsd -32 * SIZE(A1), %xmm4 807 movsd -32 * SIZE(A1, LDA), %xmm6 808 809 pshufd $0xb1, %xmm4, %xmm5 810 mulps %xmm8, %xmm4 811 addps %xmm4, %xmm0 812 movsd -32 * SIZE(A2), %xmm4 813 pshufd $0xb1, %xmm6, %xmm7 814 mulps %xmm9, %xmm5 815 SUBPS %xmm5, %xmm0 816 817 mulps %xmm10, %xmm6 818 addps %xmm6, %xmm0 819 movsd -32 * SIZE(A2, LDA), %xmm6 820 mulps %xmm11, %xmm7 821 SUBPS %xmm7, %xmm0 822 823 pshufd $0xb1, %xmm4, %xmm5 824 mulps %xmm12, %xmm4 825 addps %xmm4, %xmm0 826 pshufd $0xb1, %xmm6, %xmm7 827 mulps %xmm13, %xmm5 828 SUBPS %xmm5, %xmm0 829 830 mulps %xmm14, %xmm6 831 addps %xmm6, %xmm0 832 mulps %xmm15, %xmm7 833 SUBPS %xmm7, %xmm0 834 835 movlps %xmm0, -32 * SIZE(Y1) 836 ALIGN_3 837 838.L19: 839 cmpq $4, N 840 jge .L11 841 ALIGN_3 842 843.L20: 844#endif 845 846 cmpq $2, N 847 jl .L30 848 849#if GEMV_UNROLL == 2 850 ALIGN_3 851 852.L21: 853#endif 854 855 subq $2, N 856 857 leaq 32 * SIZE(BUFFER), Y1 858 movq A, A1 859 leaq (A, LDA, 1), A2 860 leaq (A, LDA, 2), A 861 862 movsd (X), %xmm13 863 addq INCX, X 864 movsd (X), %xmm15 865 addq INCX, X 866 867#ifdef HAVE_SSE3 868 movddup ALPHA, %xmm8 869#else 870 movsd ALPHA, %xmm8 871 unpcklpd %xmm8, %xmm8 872#endif 873 874 pshufd $0xb1, %xmm8, %xmm9 875 876 pcmpeqb %xmm11, %xmm11 877 psllq $63, %xmm11 878 879 pshufd $0x00, %xmm13, %xmm12 880 pshufd $0x55, %xmm13, %xmm13 881 pshufd $0x00, %xmm15, %xmm14 882 pshufd $0x55, %xmm15, %xmm15 883 884#ifndef XCONJ 885 xorps %xmm11, %xmm13 886 xorps %xmm11, %xmm15 887#else 888 xorps %xmm11, %xmm12 889 xorps %xmm11, %xmm14 890#endif 891 892 mulps %xmm8, %xmm12 893 mulps %xmm9, %xmm13 894 mulps %xmm8, %xmm14 895 mulps %xmm9, %xmm15 896 897#ifndef XCONJ 898 subps %xmm13, %xmm12 899 subps %xmm15, %xmm14 900#else 901 addps %xmm13, %xmm12 902 addps %xmm15, %xmm14 903#endif 904 905 pshufd $0x55, %xmm12, %xmm13 906 pshufd $0x00, %xmm12, %xmm12 907 pshufd $0x55, %xmm14, %xmm15 908 pshufd $0x00, %xmm14, %xmm14 909 910#ifndef CONJ 911 xorps %xmm11, %xmm13 912 xorps %xmm11, %xmm15 913#else 914 xorps %xmm11, %xmm12 915 xorps %xmm11, %xmm14 916#endif 917 918#ifdef ALIGNED_ACCESS 919 cmpq M, MM 920 je .L2X 921 922 movsd -32 * SIZE(A1), %xmm4 923 movsd -32 * SIZE(A2), %xmm6 924 925 movsd -32 * SIZE(Y1), %xmm0 926 927 pshufd $0xb1, %xmm4, %xmm5 928 pshufd $0xb1, %xmm6, %xmm7 929 930 mulps %xmm12, %xmm4 931 addps %xmm4, %xmm0 932 mulps %xmm13, %xmm5 933 SUBPS %xmm5, %xmm0 934 935 mulps %xmm14, %xmm6 936 addps %xmm6, %xmm0 937 mulps %xmm15, %xmm7 938 SUBPS %xmm7, %xmm0 939 940 movlps %xmm0, -32 * SIZE(Y1) 941 942 addq $2 * SIZE, A1 943 addq $2 * SIZE, A2 944 addq $2 * SIZE, Y1 945 ALIGN_3 946.L2X: 947#endif 948 949 movaps -32 * SIZE(Y1), %xmm0 950 movaps -28 * SIZE(Y1), %xmm1 951 movaps -24 * SIZE(Y1), %xmm2 952 movaps -20 * SIZE(Y1), %xmm3 953 ALIGN_3 954 955 movq MM, I 956 sarq $3, I 957 jle .L25 958 959 MOVUPS_A1(-32 * SIZE, A1, %xmm4) 960 MOVUPS_A1(-28 * SIZE, A1, %xmm6) 961 MOVUPS_A1(-24 * SIZE, A1, %xmm8) 962 MOVUPS_A1(-20 * SIZE, A1, %xmm10) 963 964 decq I 965 jle .L24 966 ALIGN_3 967 968.L23: 969#ifdef PREFETCH 970 PREFETCH (PREFETCHSIZE) * 2 - 128 + PREOFFSET(A2) 971#endif 972 973 pshufd $0xb1, %xmm4, %xmm5 974 mulps %xmm12, %xmm4 975 addps %xmm4, %xmm0 976 MOVUPS_A1(-32 * SIZE, A2, %xmm4) 977 pshufd $0xb1, %xmm6, %xmm7 978 mulps %xmm12, %xmm6 979 addps %xmm6, %xmm1 980 MOVUPS_A1(-28 * SIZE, A2, %xmm6) 981 982 pshufd $0xb1, %xmm8, %xmm9 983 mulps %xmm12, %xmm8 984 addps %xmm8, %xmm2 985 MOVUPS_A1(-24 * SIZE, A2, %xmm8) 986 pshufd $0xb1, %xmm10, %xmm11 987 mulps %xmm12, %xmm10 988 addps %xmm10, %xmm3 989 MOVUPS_A1(-20 * SIZE, A2, %xmm10) 990 991 mulps %xmm13, %xmm5 992 SUBPS %xmm5, %xmm0 993 mulps %xmm13, %xmm7 994 SUBPS %xmm7, %xmm1 995 996 mulps %xmm13, %xmm9 997 SUBPS %xmm9, %xmm2 998 mulps %xmm13, %xmm11 999 SUBPS %xmm11, %xmm3 1000 1001#ifdef PREFETCH 1002 PREFETCH (PREFETCHSIZE) * 2 - 128 + PREOFFSET(A1) 1003#endif 1004 1005 pshufd $0xb1, %xmm4, %xmm5 1006 mulps %xmm14, %xmm4 1007 addps %xmm4, %xmm0 1008 MOVUPS_A1(-16 * SIZE, A1, %xmm4) 1009 pshufd $0xb1, %xmm6, %xmm7 1010 mulps %xmm14, %xmm6 1011 addps %xmm6, %xmm1 1012 MOVUPS_A1(-12 * SIZE, A1, %xmm6) 1013 1014 pshufd $0xb1, %xmm8, %xmm9 1015 mulps %xmm14, %xmm8 1016 addps %xmm8, %xmm2 1017 MOVUPS_A1( -8 * SIZE, A1, %xmm8) 1018 pshufd $0xb1, %xmm10, %xmm11 1019 mulps %xmm14, %xmm10 1020 addps %xmm10, %xmm3 1021 MOVUPS_A1( -4 * SIZE, A1, %xmm10) 1022 1023 mulps %xmm15, %xmm5 1024 SUBPS %xmm5, %xmm0 1025 mulps %xmm15, %xmm7 1026 SUBPS %xmm7, %xmm1 1027 1028 mulps %xmm15, %xmm9 1029 SUBPS %xmm9, %xmm2 1030 mulps %xmm15, %xmm11 1031 SUBPS %xmm11, %xmm3 1032 1033#ifdef PREFETCHW 1034 PREFETCHW (PREFETCHSIZE) * 2 - 128 + PREOFFSET(Y1) 1035#endif 1036 1037 movaps %xmm0, -32 * SIZE(Y1) 1038 movaps %xmm1, -28 * SIZE(Y1) 1039 movaps %xmm2, -24 * SIZE(Y1) 1040 movaps %xmm3, -20 * SIZE(Y1) 1041 1042 movaps -16 * SIZE(Y1), %xmm0 1043 movaps -12 * SIZE(Y1), %xmm1 1044 movaps -8 * SIZE(Y1), %xmm2 1045 movaps -4 * SIZE(Y1), %xmm3 1046 1047 subq $-16 * SIZE, A1 1048 subq $-16 * SIZE, A2 1049 subq $-16 * SIZE, Y1 1050 1051 subq $1, I 1052 BRANCH 1053 jg .L23 1054 ALIGN_3 1055 1056.L24: 1057 pshufd $0xb1, %xmm4, %xmm5 1058 mulps %xmm12, %xmm4 1059 addps %xmm4, %xmm0 1060 MOVUPS_A1(-32 * SIZE, A2, %xmm4) 1061 pshufd $0xb1, %xmm6, %xmm7 1062 mulps %xmm12, %xmm6 1063 addps %xmm6, %xmm1 1064 MOVUPS_A1(-28 * SIZE, A2, %xmm6) 1065 1066 pshufd $0xb1, %xmm8, %xmm9 1067 mulps %xmm12, %xmm8 1068 addps %xmm8, %xmm2 1069 MOVUPS_A1(-24 * SIZE, A2, %xmm8) 1070 pshufd $0xb1, %xmm10, %xmm11 1071 mulps %xmm12, %xmm10 1072 addps %xmm10, %xmm3 1073 MOVUPS_A1(-20 * SIZE, A2, %xmm10) 1074 1075 mulps %xmm13, %xmm5 1076 SUBPS %xmm5, %xmm0 1077 mulps %xmm13, %xmm7 1078 SUBPS %xmm7, %xmm1 1079 1080 mulps %xmm13, %xmm9 1081 SUBPS %xmm9, %xmm2 1082 mulps %xmm13, %xmm11 1083 SUBPS %xmm11, %xmm3 1084 1085 pshufd $0xb1, %xmm4, %xmm5 1086 mulps %xmm14, %xmm4 1087 addps %xmm4, %xmm0 1088 pshufd $0xb1, %xmm6, %xmm7 1089 mulps %xmm14, %xmm6 1090 addps %xmm6, %xmm1 1091 1092 pshufd $0xb1, %xmm8, %xmm9 1093 mulps %xmm14, %xmm8 1094 addps %xmm8, %xmm2 1095 pshufd $0xb1, %xmm10, %xmm11 1096 mulps %xmm14, %xmm10 1097 addps %xmm10, %xmm3 1098 1099 mulps %xmm15, %xmm5 1100 SUBPS %xmm5, %xmm0 1101 mulps %xmm15, %xmm7 1102 SUBPS %xmm7, %xmm1 1103 1104 mulps %xmm15, %xmm9 1105 SUBPS %xmm9, %xmm2 1106 mulps %xmm15, %xmm11 1107 SUBPS %xmm11, %xmm3 1108 1109 movaps %xmm0, -32 * SIZE(Y1) 1110 movaps %xmm1, -28 * SIZE(Y1) 1111 movaps %xmm2, -24 * SIZE(Y1) 1112 movaps %xmm3, -20 * SIZE(Y1) 1113 1114 movaps -16 * SIZE(Y1), %xmm0 1115 movaps -12 * SIZE(Y1), %xmm1 1116 movaps -8 * SIZE(Y1), %xmm2 1117 movaps -4 * SIZE(Y1), %xmm3 1118 1119 subq $-16 * SIZE, A1 1120 subq $-16 * SIZE, A2 1121 subq $-16 * SIZE, Y1 1122 ALIGN_3 1123 1124.L25: 1125 testq $4, MM 1126 je .L27 1127 1128 MOVUPS_A1(-32 * SIZE, A1, %xmm4) 1129 MOVUPS_A1(-28 * SIZE, A1, %xmm6) 1130 MOVUPS_A1(-32 * SIZE, A2, %xmm8) 1131 MOVUPS_A1(-28 * SIZE, A2, %xmm10) 1132 1133 pshufd $0xb1, %xmm4, %xmm5 1134 pshufd $0xb1, %xmm6, %xmm7 1135 pshufd $0xb1, %xmm8, %xmm9 1136 pshufd $0xb1, %xmm10, %xmm11 1137 1138 mulps %xmm12, %xmm4 1139 addps %xmm4, %xmm0 1140 mulps %xmm12, %xmm6 1141 addps %xmm6, %xmm1 1142 1143 mulps %xmm13, %xmm5 1144 SUBPS %xmm5, %xmm0 1145 mulps %xmm13, %xmm7 1146 SUBPS %xmm7, %xmm1 1147 1148 mulps %xmm14, %xmm8 1149 addps %xmm8, %xmm0 1150 mulps %xmm14, %xmm10 1151 addps %xmm10, %xmm1 1152 1153 mulps %xmm15, %xmm9 1154 SUBPS %xmm9, %xmm0 1155 mulps %xmm15, %xmm11 1156 SUBPS %xmm11, %xmm1 1157 1158 movaps %xmm0, -32 * SIZE(Y1) 1159 movaps %xmm1, -28 * SIZE(Y1) 1160 1161 movaps %xmm2, %xmm0 1162 movaps %xmm3, %xmm1 1163 1164 addq $8 * SIZE, A1 1165 addq $8 * SIZE, A2 1166 addq $8 * SIZE, Y1 1167 ALIGN_3 1168 1169.L27: 1170 testq $2, MM 1171 je .L28 1172 1173 MOVUPS_A1(-32 * SIZE, A1, %xmm4) 1174 MOVUPS_A1(-32 * SIZE, A2, %xmm6) 1175 1176 pshufd $0xb1, %xmm4, %xmm5 1177 mulps %xmm12, %xmm4 1178 addps %xmm4, %xmm0 1179 pshufd $0xb1, %xmm6, %xmm7 1180 mulps %xmm13, %xmm5 1181 SUBPS %xmm5, %xmm0 1182 1183 mulps %xmm14, %xmm6 1184 addps %xmm6, %xmm0 1185 mulps %xmm15, %xmm7 1186 SUBPS %xmm7, %xmm0 1187 1188 movaps %xmm0, -32 * SIZE(Y1) 1189 movaps %xmm1, %xmm0 1190 1191 addq $4 * SIZE, A1 1192 addq $4 * SIZE, A2 1193 addq $4 * SIZE, Y1 1194 ALIGN_3 1195 1196.L28: 1197 testq $1, MM 1198#if GEMV_UNROLL == 2 1199 je .L29 1200#else 1201 je .L30 1202#endif 1203 1204 movsd -32 * SIZE(A1), %xmm4 1205 movsd -32 * SIZE(A2), %xmm6 1206 1207 pshufd $0xb1, %xmm4, %xmm5 1208 pshufd $0xb1, %xmm6, %xmm7 1209 1210 mulps %xmm12, %xmm4 1211 addps %xmm4, %xmm0 1212 mulps %xmm13, %xmm5 1213 SUBPS %xmm5, %xmm0 1214 1215 mulps %xmm14, %xmm6 1216 addps %xmm6, %xmm0 1217 mulps %xmm15, %xmm7 1218 SUBPS %xmm7, %xmm0 1219 1220 movlps %xmm0, -32 * SIZE(Y1) 1221 1222#if GEMV_UNROLL == 2 1223 ALIGN_3 1224 1225.L29: 1226 cmpq $2, N 1227 jge .L21 1228#endif 1229 ALIGN_3 1230 1231.L30: 1232 cmpq $1, N 1233 jl .L990 1234 1235 leaq 32 * SIZE(BUFFER), Y1 1236 movq A, A1 1237 1238 movsd (X), %xmm13 1239 addq INCX, X 1240 1241#ifdef HAVE_SSE3 1242 movddup ALPHA, %xmm8 1243#else 1244 movsd ALPHA, %xmm8 1245 unpcklpd %xmm8, %xmm8 1246#endif 1247 1248 pshufd $0xb1, %xmm8, %xmm9 1249 1250 pcmpeqb %xmm11, %xmm11 1251 psllq $63, %xmm11 1252 1253 pshufd $0x00, %xmm13, %xmm12 1254 pshufd $0x55, %xmm13, %xmm13 1255 1256#ifndef XCONJ 1257 xorps %xmm11, %xmm13 1258#else 1259 xorps %xmm11, %xmm12 1260#endif 1261 1262 mulps %xmm8, %xmm12 1263 mulps %xmm9, %xmm13 1264 1265#ifndef XCONJ 1266 subps %xmm13, %xmm12 1267#else 1268 addps %xmm13, %xmm12 1269#endif 1270 1271 pshufd $0x55, %xmm12, %xmm13 1272 pshufd $0x00, %xmm12, %xmm12 1273 1274#ifndef CONJ 1275 xorps %xmm11, %xmm13 1276#else 1277 xorps %xmm11, %xmm12 1278#endif 1279 1280#ifdef ALIGNED_ACCESS 1281 cmpq M, MM 1282 je .L3X 1283 1284 movsd -32 * SIZE(A1), %xmm4 1285 movsd -32 * SIZE(Y1), %xmm0 1286 1287 pshufd $0xb1, %xmm4, %xmm5 1288 1289 mulps %xmm12, %xmm4 1290 addps %xmm4, %xmm0 1291 mulps %xmm13, %xmm5 1292 SUBPS %xmm5, %xmm0 1293 1294 movlps %xmm0, -32 * SIZE(Y1) 1295 1296 addq $2 * SIZE, A1 1297 addq $2 * SIZE, Y1 1298 ALIGN_3 1299.L3X: 1300#endif 1301 1302 movaps -32 * SIZE(Y1), %xmm0 1303 movaps -28 * SIZE(Y1), %xmm1 1304 movaps -24 * SIZE(Y1), %xmm2 1305 movaps -20 * SIZE(Y1), %xmm3 1306 ALIGN_3 1307 1308 movq MM, I 1309 sarq $3, I 1310 jle .L35 1311 1312 MOVUPS_A1(-32 * SIZE, A1, %xmm4) 1313 MOVUPS_A1(-28 * SIZE, A1, %xmm6) 1314 MOVUPS_A1(-24 * SIZE, A1, %xmm8) 1315 MOVUPS_A1(-20 * SIZE, A1, %xmm10) 1316 1317 decq I 1318 jle .L34 1319 ALIGN_3 1320 1321.L33: 1322#ifdef PREFETCH 1323 PREFETCH (PREFETCHSIZE) * 4 - 128 + PREOFFSET(A1) 1324#endif 1325 1326 pshufd $0xb1, %xmm4, %xmm5 1327 mulps %xmm12, %xmm4 1328 addps %xmm4, %xmm0 1329 MOVUPS_A1(-16 * SIZE, A1, %xmm4) 1330 pshufd $0xb1, %xmm6, %xmm7 1331 mulps %xmm12, %xmm6 1332 addps %xmm6, %xmm1 1333 MOVUPS_A1(-12 * SIZE, A1, %xmm6) 1334 1335 pshufd $0xb1, %xmm8, %xmm9 1336 mulps %xmm12, %xmm8 1337 addps %xmm8, %xmm2 1338 MOVUPS_A1( -8 * SIZE, A1, %xmm8) 1339 pshufd $0xb1, %xmm10, %xmm11 1340 mulps %xmm12, %xmm10 1341 addps %xmm10, %xmm3 1342 MOVUPS_A1( -4 * SIZE, A1, %xmm10) 1343 1344 mulps %xmm13, %xmm5 1345 SUBPS %xmm5, %xmm0 1346 mulps %xmm13, %xmm7 1347 SUBPS %xmm7, %xmm1 1348 1349 mulps %xmm13, %xmm9 1350 SUBPS %xmm9, %xmm2 1351 mulps %xmm13, %xmm11 1352 SUBPS %xmm11, %xmm3 1353 1354#ifdef PREFETCHW 1355 PREFETCHW (PREFETCHSIZE) * 4 - 128 + PREOFFSET(Y1) 1356#endif 1357 1358 movaps %xmm0, -32 * SIZE(Y1) 1359 movaps %xmm1, -28 * SIZE(Y1) 1360 movaps %xmm2, -24 * SIZE(Y1) 1361 movaps %xmm3, -20 * SIZE(Y1) 1362 1363 movaps -16 * SIZE(Y1), %xmm0 1364 movaps -12 * SIZE(Y1), %xmm1 1365 movaps -8 * SIZE(Y1), %xmm2 1366 movaps -4 * SIZE(Y1), %xmm3 1367 1368 subq $-16 * SIZE, A1 1369 subq $-16 * SIZE, A2 1370 subq $-16 * SIZE, Y1 1371 1372 subq $1, I 1373 BRANCH 1374 jg .L33 1375 ALIGN_3 1376 1377.L34: 1378 pshufd $0xb1, %xmm4, %xmm5 1379 mulps %xmm12, %xmm4 1380 addps %xmm4, %xmm0 1381 pshufd $0xb1, %xmm6, %xmm7 1382 mulps %xmm12, %xmm6 1383 addps %xmm6, %xmm1 1384 1385 pshufd $0xb1, %xmm8, %xmm9 1386 mulps %xmm12, %xmm8 1387 addps %xmm8, %xmm2 1388 pshufd $0xb1, %xmm10, %xmm11 1389 mulps %xmm12, %xmm10 1390 addps %xmm10, %xmm3 1391 1392 mulps %xmm13, %xmm5 1393 SUBPS %xmm5, %xmm0 1394 mulps %xmm13, %xmm7 1395 SUBPS %xmm7, %xmm1 1396 1397 mulps %xmm13, %xmm9 1398 SUBPS %xmm9, %xmm2 1399 mulps %xmm13, %xmm11 1400 SUBPS %xmm11, %xmm3 1401 1402 movaps %xmm0, -32 * SIZE(Y1) 1403 movaps %xmm1, -28 * SIZE(Y1) 1404 movaps %xmm2, -24 * SIZE(Y1) 1405 movaps %xmm3, -20 * SIZE(Y1) 1406 1407 movaps -16 * SIZE(Y1), %xmm0 1408 movaps -12 * SIZE(Y1), %xmm1 1409 movaps -8 * SIZE(Y1), %xmm2 1410 movaps -4 * SIZE(Y1), %xmm3 1411 1412 subq $-16 * SIZE, A1 1413 subq $-16 * SIZE, Y1 1414 ALIGN_3 1415 1416.L35: 1417 testq $4, MM 1418 je .L37 1419 1420 MOVUPS_A1(-32 * SIZE, A1, %xmm4) 1421 MOVUPS_A1(-28 * SIZE, A1, %xmm6) 1422 1423 pshufd $0xb1, %xmm4, %xmm5 1424 mulps %xmm12, %xmm4 1425 addps %xmm4, %xmm0 1426 pshufd $0xb1, %xmm6, %xmm7 1427 mulps %xmm12, %xmm6 1428 addps %xmm6, %xmm1 1429 1430 mulps %xmm13, %xmm5 1431 SUBPS %xmm5, %xmm0 1432 mulps %xmm13, %xmm7 1433 SUBPS %xmm7, %xmm1 1434 1435 movaps %xmm0, -32 * SIZE(Y1) 1436 movaps %xmm1, -28 * SIZE(Y1) 1437 1438 movaps %xmm2, %xmm0 1439 movaps %xmm3, %xmm1 1440 1441 addq $8 * SIZE, A1 1442 addq $8 * SIZE, Y1 1443 ALIGN_3 1444 1445.L37: 1446 testq $2, MM 1447 je .L38 1448 1449 MOVUPS_A1(-32 * SIZE, A1, %xmm4) 1450 1451 pshufd $0xb1, %xmm4, %xmm5 1452 1453 mulps %xmm12, %xmm4 1454 addps %xmm4, %xmm0 1455 mulps %xmm13, %xmm5 1456 SUBPS %xmm5, %xmm0 1457 1458 movaps %xmm0, -32 * SIZE(Y1) 1459 movaps %xmm1, %xmm0 1460 1461 addq $4 * SIZE, A1 1462 addq $4 * SIZE, Y1 1463 ALIGN_3 1464 1465.L38: 1466 testq $1, MM 1467 je .L990 1468 1469 movsd -32 * SIZE(A1), %xmm4 1470 1471 pshufd $0xb1, %xmm4, %xmm5 1472 1473 mulps %xmm12, %xmm4 1474 addps %xmm4, %xmm0 1475 mulps %xmm13, %xmm5 1476 SUBPS %xmm5, %xmm0 1477 1478 movlps %xmm0, -32 * SIZE(Y1) 1479 1480#ifdef ALIGNED_ACCESS 1481 jmp .L990 1482 ALIGN_3 1483 1484.L100: 1485#if GEMV_UNROLL >= 4 1486 cmpq $4, N 1487 jl .L110 1488 ALIGN_3 1489 1490.L101: 1491 subq $4, N 1492 1493 leaq 32 * SIZE(BUFFER), Y1 1494 movq A, A1 1495 leaq (A, LDA, 2), A2 1496 leaq (A, LDA, 4), A 1497 1498 movsd (X), %xmm9 1499 addq INCX, X 1500 movsd (X), %xmm11 1501 addq INCX, X 1502 movsd (X), %xmm13 1503 addq INCX, X 1504 movsd (X), %xmm15 1505 addq INCX, X 1506 1507#ifdef HAVE_SSE3 1508 movddup ALPHA, %xmm6 1509#else 1510 movsd ALPHA, %xmm6 1511 unpcklpd %xmm6, %xmm6 1512#endif 1513 1514 pshufd $0xb1, %xmm6, %xmm5 1515 1516 pcmpeqb %xmm7, %xmm7 1517 psllq $63, %xmm7 1518 1519 pshufd $0x00, %xmm9, %xmm8 1520 pshufd $0x55, %xmm9, %xmm9 1521 pshufd $0x00, %xmm11, %xmm10 1522 pshufd $0x55, %xmm11, %xmm11 1523 pshufd $0x00, %xmm13, %xmm12 1524 pshufd $0x55, %xmm13, %xmm13 1525 pshufd $0x00, %xmm15, %xmm14 1526 pshufd $0x55, %xmm15, %xmm15 1527 1528#ifndef XCONJ 1529 xorps %xmm7, %xmm9 1530 xorps %xmm7, %xmm11 1531 xorps %xmm7, %xmm13 1532 xorps %xmm7, %xmm15 1533#else 1534 xorps %xmm7, %xmm8 1535 xorps %xmm7, %xmm10 1536 xorps %xmm7, %xmm12 1537 xorps %xmm7, %xmm14 1538#endif 1539 1540 mulps %xmm6, %xmm8 1541 mulps %xmm5, %xmm9 1542 mulps %xmm6, %xmm10 1543 mulps %xmm5, %xmm11 1544 mulps %xmm6, %xmm12 1545 mulps %xmm5, %xmm13 1546 mulps %xmm6, %xmm14 1547 mulps %xmm5, %xmm15 1548 1549#ifndef XCONJ 1550 subps %xmm9, %xmm8 1551 subps %xmm11, %xmm10 1552 subps %xmm13, %xmm12 1553 subps %xmm15, %xmm14 1554#else 1555 addps %xmm9, %xmm8 1556 addps %xmm11, %xmm10 1557 addps %xmm13, %xmm12 1558 addps %xmm15, %xmm14 1559#endif 1560 1561 pshufd $0x55, %xmm8, %xmm9 1562 pshufd $0x00, %xmm8, %xmm8 1563 pshufd $0x55, %xmm10, %xmm11 1564 pshufd $0x00, %xmm10, %xmm10 1565 pshufd $0x55, %xmm12, %xmm13 1566 pshufd $0x00, %xmm12, %xmm12 1567 pshufd $0x55, %xmm14, %xmm15 1568 pshufd $0x00, %xmm14, %xmm14 1569 1570#ifndef CONJ 1571 xorps %xmm7, %xmm9 1572 xorps %xmm7, %xmm11 1573 xorps %xmm7, %xmm13 1574 xorps %xmm7, %xmm15 1575#else 1576 xorps %xmm7, %xmm8 1577 xorps %xmm7, %xmm10 1578 xorps %xmm7, %xmm12 1579 xorps %xmm7, %xmm14 1580#endif 1581 1582#ifdef ALIGNED_ACCESS 1583 cmpq M, MM 1584 je .L10X 1585 1586 movsd -32 * SIZE(A1), %xmm4 1587 movsd -32 * SIZE(A1, LDA), %xmm6 1588 1589 movsd -32 * SIZE(Y1), %xmm0 1590 1591 pshufd $0xb1, %xmm4, %xmm5 1592 mulps %xmm8, %xmm4 1593 addps %xmm4, %xmm0 1594 movsd -32 * SIZE(A2), %xmm4 1595 pshufd $0xb1, %xmm6, %xmm7 1596 mulps %xmm9, %xmm5 1597 SUBPS %xmm5, %xmm0 1598 1599 mulps %xmm10, %xmm6 1600 addps %xmm6, %xmm0 1601 movsd -32 * SIZE(A2, LDA), %xmm6 1602 mulps %xmm11, %xmm7 1603 SUBPS %xmm7, %xmm0 1604 1605 pshufd $0xb1, %xmm4, %xmm5 1606 mulps %xmm12, %xmm4 1607 addps %xmm4, %xmm0 1608 pshufd $0xb1, %xmm6, %xmm7 1609 mulps %xmm13, %xmm5 1610 SUBPS %xmm5, %xmm0 1611 1612 mulps %xmm14, %xmm6 1613 addps %xmm6, %xmm0 1614 mulps %xmm15, %xmm7 1615 SUBPS %xmm7, %xmm0 1616 1617 movlps %xmm0, -32 * SIZE(Y1) 1618 1619 addq $2 * SIZE, A1 1620 addq $2 * SIZE, A2 1621 addq $2 * SIZE, Y1 1622 ALIGN_3 1623.L10X: 1624#endif 1625 1626 movaps -32 * SIZE(Y1), %xmm0 1627 movaps -28 * SIZE(Y1), %xmm1 1628 movaps -24 * SIZE(Y1), %xmm2 1629 movaps -20 * SIZE(Y1), %xmm3 1630 1631 movq MM, I 1632 sarq $3, I 1633 jle .L105 1634 1635 MOVUPS_A1(-32 * SIZE, A1, %xmm4) 1636 MOVUPS_A1(-28 * SIZE, A1, %xmm6) 1637 1638 decq I 1639 jle .L104 1640 ALIGN_3 1641 1642.L103: 1643#ifdef PREFETCH 1644 PREFETCH (PREFETCHSIZE) - 128 + PREOFFSET(A1) 1645#endif 1646 1647 pshufd $0xb1, %xmm4, %xmm5 1648 mulps %xmm8, %xmm4 1649 addps %xmm4, %xmm0 1650 MOVUPS_A1(-24 * SIZE, A1, %xmm4) 1651 pshufd $0xb1, %xmm6, %xmm7 1652 mulps %xmm8, %xmm6 1653 addps %xmm6, %xmm1 1654 MOVUPS_A1(-20 * SIZE, A1, %xmm6) 1655 1656 mulps %xmm9, %xmm5 1657 SUBPS %xmm5, %xmm0 1658 mulps %xmm9, %xmm7 1659 SUBPS %xmm7, %xmm1 1660 1661 pshufd $0xb1, %xmm4, %xmm5 1662 mulps %xmm8, %xmm4 1663 addps %xmm4, %xmm2 1664 movsd -32 * SIZE(A1, LDA), %xmm4 1665 movhps -30 * SIZE(A1, LDA), %xmm4 1666 pshufd $0xb1, %xmm6, %xmm7 1667 mulps %xmm8, %xmm6 1668 addps %xmm6, %xmm3 1669 movsd -28 * SIZE(A1, LDA), %xmm6 1670 movhps -26 * SIZE(A1, LDA), %xmm6 1671 1672 mulps %xmm9, %xmm5 1673 SUBPS %xmm5, %xmm2 1674 mulps %xmm9, %xmm7 1675 SUBPS %xmm7, %xmm3 1676 1677#ifdef PREFETCH 1678 PREFETCH (PREFETCHSIZE) - 128 + PREOFFSET(A1, LDA) 1679#endif 1680 1681 pshufd $0xb1, %xmm4, %xmm5 1682 mulps %xmm10, %xmm4 1683 addps %xmm4, %xmm0 1684 movsd -24 * SIZE(A1, LDA), %xmm4 1685 movhps -22 * SIZE(A1, LDA), %xmm4 1686 pshufd $0xb1, %xmm6, %xmm7 1687 mulps %xmm10, %xmm6 1688 addps %xmm6, %xmm1 1689 movsd -20 * SIZE(A1, LDA), %xmm6 1690 movhps -18 * SIZE(A1, LDA), %xmm6 1691 1692 mulps %xmm11, %xmm5 1693 SUBPS %xmm5, %xmm0 1694 mulps %xmm11, %xmm7 1695 SUBPS %xmm7, %xmm1 1696 1697 pshufd $0xb1, %xmm4, %xmm5 1698 mulps %xmm10, %xmm4 1699 addps %xmm4, %xmm2 1700 MOVUPS_A1(-32 * SIZE, A2, %xmm4) 1701 pshufd $0xb1, %xmm6, %xmm7 1702 mulps %xmm10, %xmm6 1703 addps %xmm6, %xmm3 1704 MOVUPS_A1(-28 * SIZE, A2, %xmm6) 1705 1706 mulps %xmm11, %xmm5 1707 SUBPS %xmm5, %xmm2 1708 mulps %xmm11, %xmm7 1709 SUBPS %xmm7, %xmm3 1710 1711#ifdef PREFETCH 1712 PREFETCH (PREFETCHSIZE) - 128 + PREOFFSET(A2) 1713#endif 1714 1715 pshufd $0xb1, %xmm4, %xmm5 1716 mulps %xmm12, %xmm4 1717 addps %xmm4, %xmm0 1718 MOVUPS_A1(-24 * SIZE, A2, %xmm4) 1719 pshufd $0xb1, %xmm6, %xmm7 1720 mulps %xmm12, %xmm6 1721 addps %xmm6, %xmm1 1722 MOVUPS_A1(-20 * SIZE, A2, %xmm6) 1723 1724 mulps %xmm13, %xmm5 1725 SUBPS %xmm5, %xmm0 1726 mulps %xmm13, %xmm7 1727 SUBPS %xmm7, %xmm1 1728 1729 pshufd $0xb1, %xmm4, %xmm5 1730 mulps %xmm12, %xmm4 1731 addps %xmm4, %xmm2 1732 movsd -32 * SIZE(A2, LDA), %xmm4 1733 movhps -30 * SIZE(A2, LDA), %xmm4 1734 pshufd $0xb1, %xmm6, %xmm7 1735 mulps %xmm12, %xmm6 1736 addps %xmm6, %xmm3 1737 movsd -28 * SIZE(A2, LDA), %xmm6 1738 movhps -26 * SIZE(A2, LDA), %xmm6 1739 1740 mulps %xmm13, %xmm5 1741 SUBPS %xmm5, %xmm2 1742 mulps %xmm13, %xmm7 1743 SUBPS %xmm7, %xmm3 1744 1745#ifdef PREFETCH 1746 PREFETCH (PREFETCHSIZE) - 128 + PREOFFSET(A2, LDA) 1747#endif 1748 1749 pshufd $0xb1, %xmm4, %xmm5 1750 mulps %xmm14, %xmm4 1751 addps %xmm4, %xmm0 1752 movsd -24 * SIZE(A2, LDA), %xmm4 1753 movhps -22 * SIZE(A2, LDA), %xmm4 1754 pshufd $0xb1, %xmm6, %xmm7 1755 mulps %xmm14, %xmm6 1756 addps %xmm6, %xmm1 1757 movsd -20 * SIZE(A2, LDA), %xmm6 1758 movhps -18 * SIZE(A2, LDA), %xmm6 1759 1760 mulps %xmm15, %xmm5 1761 SUBPS %xmm5, %xmm0 1762 mulps %xmm15, %xmm7 1763 SUBPS %xmm7, %xmm1 1764 1765 pshufd $0xb1, %xmm4, %xmm5 1766 mulps %xmm14, %xmm4 1767 addps %xmm4, %xmm2 1768 MOVUPS_A1(-16 * SIZE, A1, %xmm4) 1769 pshufd $0xb1, %xmm6, %xmm7 1770 mulps %xmm14, %xmm6 1771 addps %xmm6, %xmm3 1772 MOVUPS_A1(-12 * SIZE, A1, %xmm6) 1773 1774 mulps %xmm15, %xmm5 1775 SUBPS %xmm5, %xmm2 1776 mulps %xmm15, %xmm7 1777 SUBPS %xmm7, %xmm3 1778 1779#ifdef PREFETCHW 1780 PREFETCHW (PREFETCHSIZE) - 128 + PREOFFSET(Y1) 1781#endif 1782 1783 movaps %xmm0, -32 * SIZE(Y1) 1784 movaps %xmm1, -28 * SIZE(Y1) 1785 movaps %xmm2, -24 * SIZE(Y1) 1786 movaps %xmm3, -20 * SIZE(Y1) 1787 1788 movaps -16 * SIZE(Y1), %xmm0 1789 movaps -12 * SIZE(Y1), %xmm1 1790 movaps -8 * SIZE(Y1), %xmm2 1791 movaps -4 * SIZE(Y1), %xmm3 1792 1793 subq $-16 * SIZE, A1 1794 subq $-16 * SIZE, A2 1795 subq $-16 * SIZE, Y1 1796 1797 subq $1, I 1798 BRANCH 1799 jg .L103 1800 ALIGN_3 1801 1802.L104: 1803 pshufd $0xb1, %xmm4, %xmm5 1804 mulps %xmm8, %xmm4 1805 addps %xmm4, %xmm0 1806 MOVUPS_A1(-24 * SIZE, A1, %xmm4) 1807 pshufd $0xb1, %xmm6, %xmm7 1808 mulps %xmm8, %xmm6 1809 addps %xmm6, %xmm1 1810 MOVUPS_A1(-20 * SIZE, A1, %xmm6) 1811 1812 mulps %xmm9, %xmm5 1813 SUBPS %xmm5, %xmm0 1814 mulps %xmm9, %xmm7 1815 SUBPS %xmm7, %xmm1 1816 1817 pshufd $0xb1, %xmm4, %xmm5 1818 mulps %xmm8, %xmm4 1819 addps %xmm4, %xmm2 1820 movsd -32 * SIZE(A1, LDA), %xmm4 1821 movhps -30 * SIZE(A1, LDA), %xmm4 1822 pshufd $0xb1, %xmm6, %xmm7 1823 mulps %xmm8, %xmm6 1824 addps %xmm6, %xmm3 1825 movsd -28 * SIZE(A1, LDA), %xmm6 1826 movhps -26 * SIZE(A1, LDA), %xmm6 1827 1828 mulps %xmm9, %xmm5 1829 SUBPS %xmm5, %xmm2 1830 mulps %xmm9, %xmm7 1831 SUBPS %xmm7, %xmm3 1832 1833 pshufd $0xb1, %xmm4, %xmm5 1834 mulps %xmm10, %xmm4 1835 addps %xmm4, %xmm0 1836 movsd -24 * SIZE(A1, LDA), %xmm4 1837 movhps -22 * SIZE(A1, LDA), %xmm4 1838 pshufd $0xb1, %xmm6, %xmm7 1839 mulps %xmm10, %xmm6 1840 addps %xmm6, %xmm1 1841 movsd -20 * SIZE(A1, LDA), %xmm6 1842 movhps -18 * SIZE(A1, LDA), %xmm6 1843 1844 mulps %xmm11, %xmm5 1845 SUBPS %xmm5, %xmm0 1846 mulps %xmm11, %xmm7 1847 SUBPS %xmm7, %xmm1 1848 1849 pshufd $0xb1, %xmm4, %xmm5 1850 mulps %xmm10, %xmm4 1851 addps %xmm4, %xmm2 1852 MOVUPS_A1(-32 * SIZE, A2, %xmm4) 1853 pshufd $0xb1, %xmm6, %xmm7 1854 mulps %xmm10, %xmm6 1855 addps %xmm6, %xmm3 1856 MOVUPS_A1(-28 * SIZE, A2, %xmm6) 1857 1858 mulps %xmm11, %xmm5 1859 SUBPS %xmm5, %xmm2 1860 mulps %xmm11, %xmm7 1861 SUBPS %xmm7, %xmm3 1862 1863 pshufd $0xb1, %xmm4, %xmm5 1864 mulps %xmm12, %xmm4 1865 addps %xmm4, %xmm0 1866 MOVUPS_A1(-24 * SIZE, A2, %xmm4) 1867 pshufd $0xb1, %xmm6, %xmm7 1868 mulps %xmm12, %xmm6 1869 addps %xmm6, %xmm1 1870 MOVUPS_A1(-20 * SIZE, A2, %xmm6) 1871 1872 mulps %xmm13, %xmm5 1873 SUBPS %xmm5, %xmm0 1874 mulps %xmm13, %xmm7 1875 SUBPS %xmm7, %xmm1 1876 1877 pshufd $0xb1, %xmm4, %xmm5 1878 mulps %xmm12, %xmm4 1879 addps %xmm4, %xmm2 1880 movsd -32 * SIZE(A2, LDA), %xmm4 1881 movhps -30 * SIZE(A2, LDA), %xmm4 1882 pshufd $0xb1, %xmm6, %xmm7 1883 mulps %xmm12, %xmm6 1884 addps %xmm6, %xmm3 1885 movsd -28 * SIZE(A2, LDA), %xmm6 1886 movhps -26 * SIZE(A2, LDA), %xmm6 1887 1888 mulps %xmm13, %xmm5 1889 SUBPS %xmm5, %xmm2 1890 mulps %xmm13, %xmm7 1891 SUBPS %xmm7, %xmm3 1892 1893 pshufd $0xb1, %xmm4, %xmm5 1894 mulps %xmm14, %xmm4 1895 addps %xmm4, %xmm0 1896 movsd -24 * SIZE(A2, LDA), %xmm4 1897 movhps -22 * SIZE(A2, LDA), %xmm4 1898 pshufd $0xb1, %xmm6, %xmm7 1899 mulps %xmm14, %xmm6 1900 addps %xmm6, %xmm1 1901 movsd -20 * SIZE(A2, LDA), %xmm6 1902 movhps -18 * SIZE(A2, LDA), %xmm6 1903 1904 mulps %xmm15, %xmm5 1905 SUBPS %xmm5, %xmm0 1906 mulps %xmm15, %xmm7 1907 SUBPS %xmm7, %xmm1 1908 1909 pshufd $0xb1, %xmm4, %xmm5 1910 mulps %xmm14, %xmm4 1911 addps %xmm4, %xmm2 1912 pshufd $0xb1, %xmm6, %xmm7 1913 mulps %xmm14, %xmm6 1914 addps %xmm6, %xmm3 1915 1916 mulps %xmm15, %xmm5 1917 SUBPS %xmm5, %xmm2 1918 mulps %xmm15, %xmm7 1919 SUBPS %xmm7, %xmm3 1920 1921 movaps %xmm0, -32 * SIZE(Y1) 1922 movaps %xmm1, -28 * SIZE(Y1) 1923 movaps %xmm2, -24 * SIZE(Y1) 1924 movaps %xmm3, -20 * SIZE(Y1) 1925 1926 movaps -16 * SIZE(Y1), %xmm0 1927 movaps -12 * SIZE(Y1), %xmm1 1928 movaps -8 * SIZE(Y1), %xmm2 1929 movaps -4 * SIZE(Y1), %xmm3 1930 1931 subq $-16 * SIZE, A1 1932 subq $-16 * SIZE, A2 1933 subq $-16 * SIZE, Y1 1934 ALIGN_3 1935 1936.L105: 1937 testq $4, MM 1938 je .L107 1939 1940 MOVUPS_A1(-32 * SIZE, A1, %xmm4) 1941 MOVUPS_A1(-28 * SIZE, A1, %xmm6) 1942 1943 pshufd $0xb1, %xmm4, %xmm5 1944 mulps %xmm8, %xmm4 1945 addps %xmm4, %xmm0 1946 movsd -32 * SIZE(A1, LDA), %xmm4 1947 movhps -30 * SIZE(A1, LDA), %xmm4 1948 pshufd $0xb1, %xmm6, %xmm7 1949 mulps %xmm8, %xmm6 1950 addps %xmm6, %xmm1 1951 movsd -28 * SIZE(A1, LDA), %xmm6 1952 movhps -26 * SIZE(A1, LDA), %xmm6 1953 1954 mulps %xmm9, %xmm5 1955 SUBPS %xmm5, %xmm0 1956 mulps %xmm9, %xmm7 1957 SUBPS %xmm7, %xmm1 1958 1959 pshufd $0xb1, %xmm4, %xmm5 1960 mulps %xmm10, %xmm4 1961 addps %xmm4, %xmm0 1962 MOVUPS_A1(-32 * SIZE, A2, %xmm4) 1963 pshufd $0xb1, %xmm6, %xmm7 1964 mulps %xmm10, %xmm6 1965 addps %xmm6, %xmm1 1966 MOVUPS_A1(-28 * SIZE, A2, %xmm6) 1967 1968 mulps %xmm11, %xmm5 1969 SUBPS %xmm5, %xmm0 1970 mulps %xmm11, %xmm7 1971 SUBPS %xmm7, %xmm1 1972 1973 pshufd $0xb1, %xmm4, %xmm5 1974 mulps %xmm12, %xmm4 1975 addps %xmm4, %xmm0 1976 movsd -32 * SIZE(A2, LDA), %xmm4 1977 movhps -30 * SIZE(A2, LDA), %xmm4 1978 pshufd $0xb1, %xmm6, %xmm7 1979 mulps %xmm12, %xmm6 1980 addps %xmm6, %xmm1 1981 movsd -28 * SIZE(A2, LDA), %xmm6 1982 movhps -26 * SIZE(A2, LDA), %xmm6 1983 1984 mulps %xmm13, %xmm5 1985 SUBPS %xmm5, %xmm0 1986 mulps %xmm13, %xmm7 1987 SUBPS %xmm7, %xmm1 1988 1989 pshufd $0xb1, %xmm4, %xmm5 1990 mulps %xmm14, %xmm4 1991 addps %xmm4, %xmm0 1992 pshufd $0xb1, %xmm6, %xmm7 1993 mulps %xmm14, %xmm6 1994 addps %xmm6, %xmm1 1995 1996 mulps %xmm15, %xmm5 1997 SUBPS %xmm5, %xmm0 1998 mulps %xmm15, %xmm7 1999 SUBPS %xmm7, %xmm1 2000 2001 movaps %xmm0, -32 * SIZE(Y1) 2002 movaps %xmm1, -28 * SIZE(Y1) 2003 2004 movaps %xmm2, %xmm0 2005 movaps %xmm3, %xmm1 2006 2007 addq $8 * SIZE, A1 2008 addq $8 * SIZE, A2 2009 addq $8 * SIZE, Y1 2010 ALIGN_3 2011 2012.L107: 2013 testq $2, MM 2014 je .L108 2015 2016 MOVUPS_A1(-32 * SIZE, A1, %xmm4) 2017 movsd -32 * SIZE(A1, LDA), %xmm6 2018 movhps -30 * SIZE(A1, LDA), %xmm6 2019 2020 pshufd $0xb1, %xmm4, %xmm5 2021 mulps %xmm8, %xmm4 2022 addps %xmm4, %xmm0 2023 MOVUPS_A1(-32 * SIZE, A2, %xmm4) 2024 pshufd $0xb1, %xmm6, %xmm7 2025 mulps %xmm9, %xmm5 2026 SUBPS %xmm5, %xmm0 2027 2028 mulps %xmm10, %xmm6 2029 addps %xmm6, %xmm0 2030 movsd -32 * SIZE(A2, LDA), %xmm6 2031 movhps -30 * SIZE(A2, LDA), %xmm6 2032 mulps %xmm11, %xmm7 2033 SUBPS %xmm7, %xmm0 2034 2035 pshufd $0xb1, %xmm4, %xmm5 2036 mulps %xmm12, %xmm4 2037 addps %xmm4, %xmm0 2038 pshufd $0xb1, %xmm6, %xmm7 2039 mulps %xmm13, %xmm5 2040 SUBPS %xmm5, %xmm0 2041 2042 mulps %xmm14, %xmm6 2043 addps %xmm6, %xmm0 2044 mulps %xmm15, %xmm7 2045 SUBPS %xmm7, %xmm0 2046 2047 movaps %xmm0, -32 * SIZE(Y1) 2048 movaps %xmm1, %xmm0 2049 2050 addq $4 * SIZE, A1 2051 addq $4 * SIZE, A2 2052 addq $4 * SIZE, Y1 2053 ALIGN_3 2054 2055.L108: 2056 testq $1, MM 2057 je .L109 2058 2059 movsd -32 * SIZE(A1), %xmm4 2060 movsd -32 * SIZE(A1, LDA), %xmm6 2061 2062 pshufd $0xb1, %xmm4, %xmm5 2063 mulps %xmm8, %xmm4 2064 addps %xmm4, %xmm0 2065 movsd -32 * SIZE(A2), %xmm4 2066 pshufd $0xb1, %xmm6, %xmm7 2067 mulps %xmm9, %xmm5 2068 SUBPS %xmm5, %xmm0 2069 2070 mulps %xmm10, %xmm6 2071 addps %xmm6, %xmm0 2072 movsd -32 * SIZE(A2, LDA), %xmm6 2073 mulps %xmm11, %xmm7 2074 SUBPS %xmm7, %xmm0 2075 2076 pshufd $0xb1, %xmm4, %xmm5 2077 mulps %xmm12, %xmm4 2078 addps %xmm4, %xmm0 2079 pshufd $0xb1, %xmm6, %xmm7 2080 mulps %xmm13, %xmm5 2081 SUBPS %xmm5, %xmm0 2082 2083 mulps %xmm14, %xmm6 2084 addps %xmm6, %xmm0 2085 mulps %xmm15, %xmm7 2086 SUBPS %xmm7, %xmm0 2087 2088 movlps %xmm0, -32 * SIZE(Y1) 2089 ALIGN_3 2090 2091.L109: 2092 cmpq $4, N 2093 jge .L101 2094 ALIGN_3 2095 2096.L110: 2097#endif 2098 2099#if GEMV_UNROLL >= 2 2100 2101 cmpq $2, N 2102 jl .L120 2103 2104#if GEMV_UNROLL == 2 2105 ALIGN_3 2106 2107.L111: 2108#endif 2109 2110 subq $2, N 2111 2112 leaq 32 * SIZE(BUFFER), Y1 2113 movq A, A1 2114 leaq (A, LDA, 1), A2 2115 leaq (A, LDA, 2), A 2116 2117 movsd (X), %xmm13 2118 addq INCX, X 2119 movsd (X), %xmm15 2120 addq INCX, X 2121 2122#ifdef HAVE_SSE3 2123 movddup ALPHA, %xmm8 2124#else 2125 movsd ALPHA, %xmm8 2126 unpcklpd %xmm8, %xmm8 2127#endif 2128 2129 pshufd $0xb1, %xmm8, %xmm9 2130 2131 pcmpeqb %xmm11, %xmm11 2132 psllq $63, %xmm11 2133 2134 pshufd $0x00, %xmm13, %xmm12 2135 pshufd $0x55, %xmm13, %xmm13 2136 pshufd $0x00, %xmm15, %xmm14 2137 pshufd $0x55, %xmm15, %xmm15 2138 2139#ifndef XCONJ 2140 xorps %xmm11, %xmm13 2141 xorps %xmm11, %xmm15 2142#else 2143 xorps %xmm11, %xmm12 2144 xorps %xmm11, %xmm14 2145#endif 2146 2147 mulps %xmm8, %xmm12 2148 mulps %xmm9, %xmm13 2149 mulps %xmm8, %xmm14 2150 mulps %xmm9, %xmm15 2151 2152#ifndef XCONJ 2153 subps %xmm13, %xmm12 2154 subps %xmm15, %xmm14 2155#else 2156 addps %xmm13, %xmm12 2157 addps %xmm15, %xmm14 2158#endif 2159 2160 pshufd $0x55, %xmm12, %xmm13 2161 pshufd $0x00, %xmm12, %xmm12 2162 pshufd $0x55, %xmm14, %xmm15 2163 pshufd $0x00, %xmm14, %xmm14 2164 2165#ifndef CONJ 2166 xorps %xmm11, %xmm13 2167 xorps %xmm11, %xmm15 2168#else 2169 xorps %xmm11, %xmm12 2170 xorps %xmm11, %xmm14 2171#endif 2172 2173#ifdef ALIGNED_ACCESS 2174 cmpq M, MM 2175 je .L11X 2176 2177 movsd -32 * SIZE(A1), %xmm4 2178 movsd -32 * SIZE(A2), %xmm6 2179 2180 movsd -32 * SIZE(Y1), %xmm0 2181 2182 pshufd $0xb1, %xmm4, %xmm5 2183 pshufd $0xb1, %xmm6, %xmm7 2184 2185 mulps %xmm12, %xmm4 2186 addps %xmm4, %xmm0 2187 mulps %xmm13, %xmm5 2188 SUBPS %xmm5, %xmm0 2189 2190 mulps %xmm14, %xmm6 2191 addps %xmm6, %xmm0 2192 mulps %xmm15, %xmm7 2193 SUBPS %xmm7, %xmm0 2194 2195 movlps %xmm0, -32 * SIZE(Y1) 2196 2197 addq $2 * SIZE, A1 2198 addq $2 * SIZE, A2 2199 addq $2 * SIZE, Y1 2200 ALIGN_3 2201.L11X: 2202#endif 2203 2204 movaps -32 * SIZE(Y1), %xmm0 2205 movaps -28 * SIZE(Y1), %xmm1 2206 movaps -24 * SIZE(Y1), %xmm2 2207 movaps -20 * SIZE(Y1), %xmm3 2208 ALIGN_3 2209 2210 movq MM, I 2211 sarq $3, I 2212 jle .L115 2213 2214 MOVUPS_A1(-32 * SIZE, A1, %xmm4) 2215 MOVUPS_A1(-28 * SIZE, A1, %xmm6) 2216 MOVUPS_A1(-24 * SIZE, A1, %xmm8) 2217 MOVUPS_A1(-20 * SIZE, A1, %xmm10) 2218 2219 decq I 2220 jle .L114 2221 ALIGN_3 2222 2223.L113: 2224#ifdef PREFETCH 2225 PREFETCH (PREFETCHSIZE) * 2 - 128 + PREOFFSET(A2) 2226#endif 2227 2228 pshufd $0xb1, %xmm4, %xmm5 2229 mulps %xmm12, %xmm4 2230 addps %xmm4, %xmm0 2231 movsd -32 * SIZE(A2), %xmm4 2232 movhps -30 * SIZE(A2), %xmm4 2233 pshufd $0xb1, %xmm6, %xmm7 2234 mulps %xmm12, %xmm6 2235 addps %xmm6, %xmm1 2236 movsd -28 * SIZE(A2), %xmm6 2237 movhps -26 * SIZE(A2), %xmm6 2238 2239 pshufd $0xb1, %xmm8, %xmm9 2240 mulps %xmm12, %xmm8 2241 addps %xmm8, %xmm2 2242 movsd -24 * SIZE(A2), %xmm8 2243 movhps -22 * SIZE(A2), %xmm8 2244 pshufd $0xb1, %xmm10, %xmm11 2245 mulps %xmm12, %xmm10 2246 addps %xmm10, %xmm3 2247 movsd -20 * SIZE(A2), %xmm10 2248 movhps -18 * SIZE(A2), %xmm10 2249 2250 mulps %xmm13, %xmm5 2251 SUBPS %xmm5, %xmm0 2252 mulps %xmm13, %xmm7 2253 SUBPS %xmm7, %xmm1 2254 2255 mulps %xmm13, %xmm9 2256 SUBPS %xmm9, %xmm2 2257 mulps %xmm13, %xmm11 2258 SUBPS %xmm11, %xmm3 2259 2260#ifdef PREFETCH 2261 PREFETCH (PREFETCHSIZE) * 2 - 128 + PREOFFSET(A1) 2262#endif 2263 2264 pshufd $0xb1, %xmm4, %xmm5 2265 mulps %xmm14, %xmm4 2266 addps %xmm4, %xmm0 2267 MOVUPS_A1(-16 * SIZE, A1, %xmm4) 2268 pshufd $0xb1, %xmm6, %xmm7 2269 mulps %xmm14, %xmm6 2270 addps %xmm6, %xmm1 2271 MOVUPS_A1(-12 * SIZE, A1, %xmm6) 2272 2273 pshufd $0xb1, %xmm8, %xmm9 2274 mulps %xmm14, %xmm8 2275 addps %xmm8, %xmm2 2276 MOVUPS_A1( -8 * SIZE, A1, %xmm8) 2277 pshufd $0xb1, %xmm10, %xmm11 2278 mulps %xmm14, %xmm10 2279 addps %xmm10, %xmm3 2280 MOVUPS_A1( -4 * SIZE, A1, %xmm10) 2281 2282 mulps %xmm15, %xmm5 2283 SUBPS %xmm5, %xmm0 2284 mulps %xmm15, %xmm7 2285 SUBPS %xmm7, %xmm1 2286 2287 mulps %xmm15, %xmm9 2288 SUBPS %xmm9, %xmm2 2289 mulps %xmm15, %xmm11 2290 SUBPS %xmm11, %xmm3 2291 2292#ifdef PREFETCHW 2293 PREFETCHW (PREFETCHSIZE) * 2 - 128 + PREOFFSET(Y1) 2294#endif 2295 2296 movaps %xmm0, -32 * SIZE(Y1) 2297 movaps %xmm1, -28 * SIZE(Y1) 2298 movaps %xmm2, -24 * SIZE(Y1) 2299 movaps %xmm3, -20 * SIZE(Y1) 2300 2301 movaps -16 * SIZE(Y1), %xmm0 2302 movaps -12 * SIZE(Y1), %xmm1 2303 movaps -8 * SIZE(Y1), %xmm2 2304 movaps -4 * SIZE(Y1), %xmm3 2305 2306 subq $-16 * SIZE, A1 2307 subq $-16 * SIZE, A2 2308 subq $-16 * SIZE, Y1 2309 2310 subq $1, I 2311 BRANCH 2312 jg .L113 2313 ALIGN_3 2314 2315.L114: 2316 pshufd $0xb1, %xmm4, %xmm5 2317 mulps %xmm12, %xmm4 2318 addps %xmm4, %xmm0 2319 movsd -32 * SIZE(A2), %xmm4 2320 movhps -30 * SIZE(A2), %xmm4 2321 pshufd $0xb1, %xmm6, %xmm7 2322 mulps %xmm12, %xmm6 2323 addps %xmm6, %xmm1 2324 movsd -28 * SIZE(A2), %xmm6 2325 movhps -26 * SIZE(A2), %xmm6 2326 2327 pshufd $0xb1, %xmm8, %xmm9 2328 mulps %xmm12, %xmm8 2329 addps %xmm8, %xmm2 2330 movsd -24 * SIZE(A2), %xmm8 2331 movhps -22 * SIZE(A2), %xmm8 2332 pshufd $0xb1, %xmm10, %xmm11 2333 mulps %xmm12, %xmm10 2334 addps %xmm10, %xmm3 2335 movsd -20 * SIZE(A2), %xmm10 2336 movhps -18 * SIZE(A2), %xmm10 2337 2338 mulps %xmm13, %xmm5 2339 SUBPS %xmm5, %xmm0 2340 mulps %xmm13, %xmm7 2341 SUBPS %xmm7, %xmm1 2342 2343 mulps %xmm13, %xmm9 2344 SUBPS %xmm9, %xmm2 2345 mulps %xmm13, %xmm11 2346 SUBPS %xmm11, %xmm3 2347 2348 pshufd $0xb1, %xmm4, %xmm5 2349 mulps %xmm14, %xmm4 2350 addps %xmm4, %xmm0 2351 pshufd $0xb1, %xmm6, %xmm7 2352 mulps %xmm14, %xmm6 2353 addps %xmm6, %xmm1 2354 2355 pshufd $0xb1, %xmm8, %xmm9 2356 mulps %xmm14, %xmm8 2357 addps %xmm8, %xmm2 2358 pshufd $0xb1, %xmm10, %xmm11 2359 mulps %xmm14, %xmm10 2360 addps %xmm10, %xmm3 2361 2362 mulps %xmm15, %xmm5 2363 SUBPS %xmm5, %xmm0 2364 mulps %xmm15, %xmm7 2365 SUBPS %xmm7, %xmm1 2366 2367 mulps %xmm15, %xmm9 2368 SUBPS %xmm9, %xmm2 2369 mulps %xmm15, %xmm11 2370 SUBPS %xmm11, %xmm3 2371 2372 movaps %xmm0, -32 * SIZE(Y1) 2373 movaps %xmm1, -28 * SIZE(Y1) 2374 movaps %xmm2, -24 * SIZE(Y1) 2375 movaps %xmm3, -20 * SIZE(Y1) 2376 2377 movaps -16 * SIZE(Y1), %xmm0 2378 movaps -12 * SIZE(Y1), %xmm1 2379 movaps -8 * SIZE(Y1), %xmm2 2380 movaps -4 * SIZE(Y1), %xmm3 2381 2382 subq $-16 * SIZE, A1 2383 subq $-16 * SIZE, A2 2384 subq $-16 * SIZE, Y1 2385 ALIGN_3 2386 2387.L115: 2388 testq $4, MM 2389 je .L117 2390 2391 MOVUPS_A1(-32 * SIZE, A1, %xmm4) 2392 MOVUPS_A1(-28 * SIZE, A1, %xmm6) 2393 movsd -32 * SIZE(A2), %xmm8 2394 movhps -30 * SIZE(A2), %xmm8 2395 movsd -28 * SIZE(A2), %xmm10 2396 movhps -26 * SIZE(A2), %xmm10 2397 2398 pshufd $0xb1, %xmm4, %xmm5 2399 pshufd $0xb1, %xmm6, %xmm7 2400 pshufd $0xb1, %xmm8, %xmm9 2401 pshufd $0xb1, %xmm10, %xmm11 2402 2403 mulps %xmm12, %xmm4 2404 addps %xmm4, %xmm0 2405 mulps %xmm12, %xmm6 2406 addps %xmm6, %xmm1 2407 2408 mulps %xmm13, %xmm5 2409 SUBPS %xmm5, %xmm0 2410 mulps %xmm13, %xmm7 2411 SUBPS %xmm7, %xmm1 2412 2413 mulps %xmm14, %xmm8 2414 addps %xmm8, %xmm0 2415 mulps %xmm14, %xmm10 2416 addps %xmm10, %xmm1 2417 2418 mulps %xmm15, %xmm9 2419 SUBPS %xmm9, %xmm0 2420 mulps %xmm15, %xmm11 2421 SUBPS %xmm11, %xmm1 2422 2423 movaps %xmm0, -32 * SIZE(Y1) 2424 movaps %xmm1, -28 * SIZE(Y1) 2425 2426 movaps %xmm2, %xmm0 2427 movaps %xmm3, %xmm1 2428 2429 addq $8 * SIZE, A1 2430 addq $8 * SIZE, A2 2431 addq $8 * SIZE, Y1 2432 ALIGN_3 2433 2434.L117: 2435 testq $2, MM 2436 je .L118 2437 2438 MOVUPS_A1(-32 * SIZE, A1, %xmm4) 2439 movsd -32 * SIZE(A2), %xmm6 2440 movhps -30 * SIZE(A2), %xmm6 2441 2442 pshufd $0xb1, %xmm4, %xmm5 2443 mulps %xmm12, %xmm4 2444 addps %xmm4, %xmm0 2445 pshufd $0xb1, %xmm6, %xmm7 2446 mulps %xmm13, %xmm5 2447 SUBPS %xmm5, %xmm0 2448 2449 mulps %xmm14, %xmm6 2450 addps %xmm6, %xmm0 2451 mulps %xmm15, %xmm7 2452 SUBPS %xmm7, %xmm0 2453 2454 movaps %xmm0, -32 * SIZE(Y1) 2455 movaps %xmm1, %xmm0 2456 2457 addq $4 * SIZE, A1 2458 addq $4 * SIZE, A2 2459 addq $4 * SIZE, Y1 2460 ALIGN_3 2461 2462.L118: 2463 testq $1, MM 2464#if GEMV_UNROLL == 2 2465 je .L119 2466#else 2467 je .L120 2468#endif 2469 2470 movsd -32 * SIZE(A1), %xmm4 2471 movsd -32 * SIZE(A2), %xmm6 2472 2473 pshufd $0xb1, %xmm4, %xmm5 2474 pshufd $0xb1, %xmm6, %xmm7 2475 2476 mulps %xmm12, %xmm4 2477 addps %xmm4, %xmm0 2478 mulps %xmm13, %xmm5 2479 SUBPS %xmm5, %xmm0 2480 2481 mulps %xmm14, %xmm6 2482 addps %xmm6, %xmm0 2483 mulps %xmm15, %xmm7 2484 SUBPS %xmm7, %xmm0 2485 2486 movlps %xmm0, -32 * SIZE(Y1) 2487 2488#if GEMV_UNROLL == 2 2489 ALIGN_3 2490 2491.L119: 2492 cmpq $2, N 2493 jge .L111 2494#endif 2495 ALIGN_3 2496 2497.L120: 2498#endif 2499 2500 cmpq $1, N 2501 jl .L990 2502 2503 leaq 32 * SIZE(BUFFER), Y1 2504 movq A, A1 2505 2506 movsd (X), %xmm13 2507 addq INCX, X 2508 2509#ifdef HAVE_SSE3 2510 movddup ALPHA, %xmm8 2511#else 2512 movsd ALPHA, %xmm8 2513 unpcklpd %xmm8, %xmm8 2514#endif 2515 2516 pshufd $0xb1, %xmm8, %xmm9 2517 2518 pcmpeqb %xmm11, %xmm11 2519 psllq $63, %xmm11 2520 2521 pshufd $0x00, %xmm13, %xmm12 2522 pshufd $0x55, %xmm13, %xmm13 2523 2524#ifndef XCONJ 2525 xorps %xmm11, %xmm13 2526#else 2527 xorps %xmm11, %xmm12 2528#endif 2529 2530 mulps %xmm8, %xmm12 2531 mulps %xmm9, %xmm13 2532 2533#ifndef XCONJ 2534 subps %xmm13, %xmm12 2535#else 2536 addps %xmm13, %xmm12 2537#endif 2538 2539 pshufd $0x55, %xmm12, %xmm13 2540 pshufd $0x00, %xmm12, %xmm12 2541 2542#ifndef CONJ 2543 xorps %xmm11, %xmm13 2544#else 2545 xorps %xmm11, %xmm12 2546#endif 2547 2548#ifdef ALIGNED_ACCESS 2549 cmpq M, MM 2550 je .L12X 2551 2552 movsd -32 * SIZE(A1), %xmm4 2553 movsd -32 * SIZE(Y1), %xmm0 2554 2555 pshufd $0xb1, %xmm4, %xmm5 2556 2557 mulps %xmm12, %xmm4 2558 addps %xmm4, %xmm0 2559 mulps %xmm13, %xmm5 2560 SUBPS %xmm5, %xmm0 2561 2562 movlps %xmm0, -32 * SIZE(Y1) 2563 2564 addq $2 * SIZE, A1 2565 addq $2 * SIZE, Y1 2566 ALIGN_3 2567.L12X: 2568#endif 2569 2570 movaps -32 * SIZE(Y1), %xmm0 2571 movaps -28 * SIZE(Y1), %xmm1 2572 movaps -24 * SIZE(Y1), %xmm2 2573 movaps -20 * SIZE(Y1), %xmm3 2574 ALIGN_3 2575 2576 movq MM, I 2577 sarq $3, I 2578 jle .L125 2579 2580 MOVUPS_A1(-32 * SIZE, A1, %xmm4) 2581 MOVUPS_A1(-28 * SIZE, A1, %xmm6) 2582 MOVUPS_A1(-24 * SIZE, A1, %xmm8) 2583 MOVUPS_A1(-20 * SIZE, A1, %xmm10) 2584 2585 decq I 2586 jle .L124 2587 ALIGN_3 2588 2589.L123: 2590#ifdef PREFETCH 2591 PREFETCH (PREFETCHSIZE) * 4 - 128 + PREOFFSET(A1) 2592#endif 2593 2594 pshufd $0xb1, %xmm4, %xmm5 2595 mulps %xmm12, %xmm4 2596 addps %xmm4, %xmm0 2597 MOVUPS_A1(-16 * SIZE, A1, %xmm4) 2598 pshufd $0xb1, %xmm6, %xmm7 2599 mulps %xmm12, %xmm6 2600 addps %xmm6, %xmm1 2601 MOVUPS_A1(-12 * SIZE, A1, %xmm6) 2602 2603 pshufd $0xb1, %xmm8, %xmm9 2604 mulps %xmm12, %xmm8 2605 addps %xmm8, %xmm2 2606 MOVUPS_A1( -8 * SIZE, A1, %xmm8) 2607 pshufd $0xb1, %xmm10, %xmm11 2608 mulps %xmm12, %xmm10 2609 addps %xmm10, %xmm3 2610 MOVUPS_A1( -4 * SIZE, A1, %xmm10) 2611 2612 mulps %xmm13, %xmm5 2613 SUBPS %xmm5, %xmm0 2614 mulps %xmm13, %xmm7 2615 SUBPS %xmm7, %xmm1 2616 2617 mulps %xmm13, %xmm9 2618 SUBPS %xmm9, %xmm2 2619 mulps %xmm13, %xmm11 2620 SUBPS %xmm11, %xmm3 2621 2622#ifdef PREFETCHW 2623 PREFETCHW (PREFETCHSIZE) * 4 - 128 + PREOFFSET(Y1) 2624#endif 2625 2626 movaps %xmm0, -32 * SIZE(Y1) 2627 movaps %xmm1, -28 * SIZE(Y1) 2628 movaps %xmm2, -24 * SIZE(Y1) 2629 movaps %xmm3, -20 * SIZE(Y1) 2630 2631 movaps -16 * SIZE(Y1), %xmm0 2632 movaps -12 * SIZE(Y1), %xmm1 2633 movaps -8 * SIZE(Y1), %xmm2 2634 movaps -4 * SIZE(Y1), %xmm3 2635 2636 subq $-16 * SIZE, A1 2637 subq $-16 * SIZE, A2 2638 subq $-16 * SIZE, Y1 2639 2640 subq $1, I 2641 BRANCH 2642 jg .L123 2643 ALIGN_3 2644 2645.L124: 2646 pshufd $0xb1, %xmm4, %xmm5 2647 mulps %xmm12, %xmm4 2648 addps %xmm4, %xmm0 2649 pshufd $0xb1, %xmm6, %xmm7 2650 mulps %xmm12, %xmm6 2651 addps %xmm6, %xmm1 2652 2653 pshufd $0xb1, %xmm8, %xmm9 2654 mulps %xmm12, %xmm8 2655 addps %xmm8, %xmm2 2656 pshufd $0xb1, %xmm10, %xmm11 2657 mulps %xmm12, %xmm10 2658 addps %xmm10, %xmm3 2659 2660 mulps %xmm13, %xmm5 2661 SUBPS %xmm5, %xmm0 2662 mulps %xmm13, %xmm7 2663 SUBPS %xmm7, %xmm1 2664 2665 mulps %xmm13, %xmm9 2666 SUBPS %xmm9, %xmm2 2667 mulps %xmm13, %xmm11 2668 SUBPS %xmm11, %xmm3 2669 2670 movaps %xmm0, -32 * SIZE(Y1) 2671 movaps %xmm1, -28 * SIZE(Y1) 2672 movaps %xmm2, -24 * SIZE(Y1) 2673 movaps %xmm3, -20 * SIZE(Y1) 2674 2675 movaps -16 * SIZE(Y1), %xmm0 2676 movaps -12 * SIZE(Y1), %xmm1 2677 movaps -8 * SIZE(Y1), %xmm2 2678 movaps -4 * SIZE(Y1), %xmm3 2679 2680 subq $-16 * SIZE, A1 2681 subq $-16 * SIZE, Y1 2682 ALIGN_3 2683 2684.L125: 2685 testq $4, MM 2686 je .L127 2687 2688 MOVUPS_A1(-32 * SIZE, A1, %xmm4) 2689 MOVUPS_A1(-28 * SIZE, A1, %xmm6) 2690 2691 pshufd $0xb1, %xmm4, %xmm5 2692 mulps %xmm12, %xmm4 2693 addps %xmm4, %xmm0 2694 pshufd $0xb1, %xmm6, %xmm7 2695 mulps %xmm12, %xmm6 2696 addps %xmm6, %xmm1 2697 2698 mulps %xmm13, %xmm5 2699 SUBPS %xmm5, %xmm0 2700 mulps %xmm13, %xmm7 2701 SUBPS %xmm7, %xmm1 2702 2703 movaps %xmm0, -32 * SIZE(Y1) 2704 movaps %xmm1, -28 * SIZE(Y1) 2705 2706 movaps %xmm2, %xmm0 2707 movaps %xmm3, %xmm1 2708 2709 addq $8 * SIZE, A1 2710 addq $8 * SIZE, Y1 2711 ALIGN_3 2712 2713.L127: 2714 testq $2, MM 2715 je .L128 2716 2717 MOVUPS_A1(-32 * SIZE, A1, %xmm4) 2718 2719 pshufd $0xb1, %xmm4, %xmm5 2720 2721 mulps %xmm12, %xmm4 2722 addps %xmm4, %xmm0 2723 mulps %xmm13, %xmm5 2724 SUBPS %xmm5, %xmm0 2725 2726 movaps %xmm0, -32 * SIZE(Y1) 2727 movaps %xmm1, %xmm0 2728 2729 addq $4 * SIZE, A1 2730 addq $4 * SIZE, Y1 2731 ALIGN_3 2732 2733.L128: 2734 testq $1, MM 2735 je .L990 2736 2737 movsd -32 * SIZE(A1), %xmm4 2738 2739 pshufd $0xb1, %xmm4, %xmm5 2740 2741 mulps %xmm12, %xmm4 2742 addps %xmm4, %xmm0 2743 mulps %xmm13, %xmm5 2744 SUBPS %xmm5, %xmm0 2745 2746 movlps %xmm0, -32 * SIZE(Y1) 2747 2748 jmp .L990 2749 ALIGN_3 2750 2751.L200: 2752 testq $2 * SIZE, LDA 2753 jne .L300 2754 2755 cmpq $2, N 2756 jl .L210 2757 ALIGN_3 2758 2759.L201: 2760 subq $2, N 2761 2762 leaq 32 * SIZE(BUFFER), Y1 2763 movq A, A1 2764 leaq (A, LDA, 1), A2 2765 leaq (A, LDA, 2), A 2766 2767 movsd (X), %xmm13 2768 addq INCX, X 2769 movsd (X), %xmm15 2770 addq INCX, X 2771 2772#ifdef HAVE_SSE3 2773 movddup ALPHA, %xmm8 2774#else 2775 movsd ALPHA, %xmm8 2776 unpcklpd %xmm8, %xmm8 2777#endif 2778 2779 pshufd $0xb1, %xmm8, %xmm9 2780 2781 pcmpeqb %xmm11, %xmm11 2782 psllq $63, %xmm11 2783 2784 pshufd $0x00, %xmm13, %xmm12 2785 pshufd $0x55, %xmm13, %xmm13 2786 pshufd $0x00, %xmm15, %xmm14 2787 pshufd $0x55, %xmm15, %xmm15 2788 2789#ifndef XCONJ 2790 xorps %xmm11, %xmm13 2791 xorps %xmm11, %xmm15 2792#else 2793 xorps %xmm11, %xmm12 2794 xorps %xmm11, %xmm14 2795#endif 2796 2797 mulps %xmm8, %xmm12 2798 mulps %xmm9, %xmm13 2799 mulps %xmm8, %xmm14 2800 mulps %xmm9, %xmm15 2801 2802#ifndef XCONJ 2803 subps %xmm13, %xmm12 2804 subps %xmm15, %xmm14 2805#else 2806 addps %xmm13, %xmm12 2807 addps %xmm15, %xmm14 2808#endif 2809 2810 pshufd $0x55, %xmm12, %xmm13 2811 pshufd $0x00, %xmm12, %xmm12 2812 pshufd $0x55, %xmm14, %xmm15 2813 pshufd $0x00, %xmm14, %xmm14 2814 2815#ifndef CONJ 2816 xorps %xmm11, %xmm13 2817 xorps %xmm11, %xmm15 2818#else 2819 xorps %xmm11, %xmm12 2820 xorps %xmm11, %xmm14 2821#endif 2822 2823#ifdef ALIGNED_ACCESS 2824 cmpq M, MM 2825 je .L20X 2826 2827 movsd -32 * SIZE(A1), %xmm4 2828 movsd -32 * SIZE(A2), %xmm6 2829 2830 movsd -32 * SIZE(Y1), %xmm0 2831 2832 pshufd $0xb1, %xmm4, %xmm5 2833 pshufd $0xb1, %xmm6, %xmm7 2834 2835 mulps %xmm12, %xmm4 2836 addps %xmm4, %xmm0 2837 mulps %xmm13, %xmm5 2838 SUBPS %xmm5, %xmm0 2839 2840 mulps %xmm14, %xmm6 2841 addps %xmm6, %xmm0 2842 mulps %xmm15, %xmm7 2843 SUBPS %xmm7, %xmm0 2844 2845 movlps %xmm0, -32 * SIZE(Y1) 2846 2847 addq $2 * SIZE, A1 2848 addq $2 * SIZE, A2 2849 addq $2 * SIZE, Y1 2850 ALIGN_3 2851.L20X: 2852#endif 2853 2854 movaps -33 * SIZE(A1), %xmm4 2855 movaps -33 * SIZE(A2), %xmm6 2856 2857 movaps -32 * SIZE(Y1), %xmm0 2858 movaps -28 * SIZE(Y1), %xmm1 2859 movaps -24 * SIZE(Y1), %xmm2 2860 movaps -20 * SIZE(Y1), %xmm3 2861 2862 movq MM, I 2863 sarq $3, I 2864 jle .L205 2865 2866 movaps -29 * SIZE(A1), %xmm8 2867 movaps -25 * SIZE(A1), %xmm9 2868 movaps -21 * SIZE(A1), %xmm10 2869 2870 decq I 2871 jle .L204 2872 ALIGN_3 2873 2874.L203: 2875#ifdef PREFETCH 2876 PREFETCH (PREFETCHSIZE) * 2 - 128 + PREOFFSET(A2) 2877#endif 2878 2879 movss %xmm8, %xmm4 2880 shufps $0x39, %xmm4, %xmm4 2881 pshufd $0xb1, %xmm4, %xmm5 2882 mulps %xmm12, %xmm4 2883 addps %xmm4, %xmm0 2884 movaps -17 * SIZE(A1), %xmm4 2885 2886 movss %xmm9, %xmm8 2887 shufps $0x39, %xmm8, %xmm8 2888 pshufd $0xb1, %xmm8, %xmm7 2889 mulps %xmm12, %xmm8 2890 addps %xmm8, %xmm1 2891 movaps -29 * SIZE(A2), %xmm8 2892 2893 mulps %xmm13, %xmm5 2894 SUBPS %xmm5, %xmm0 2895 mulps %xmm13, %xmm7 2896 SUBPS %xmm7, %xmm1 2897 2898 movss %xmm10, %xmm9 2899 shufps $0x39, %xmm9, %xmm9 2900 pshufd $0xb1, %xmm9, %xmm5 2901 mulps %xmm12, %xmm9 2902 addps %xmm9, %xmm2 2903 movaps -25 * SIZE(A2), %xmm9 2904 2905 movss %xmm4, %xmm10 2906 shufps $0x39, %xmm10, %xmm10 2907 pshufd $0xb1, %xmm10, %xmm7 2908 mulps %xmm12, %xmm10 2909 addps %xmm10, %xmm3 2910 movaps -21 * SIZE(A2), %xmm10 2911 2912 mulps %xmm13, %xmm5 2913 SUBPS %xmm5, %xmm2 2914 mulps %xmm13, %xmm7 2915 SUBPS %xmm7, %xmm3 2916 2917#ifdef PREFETCH 2918 PREFETCH (PREFETCHSIZE) * 2 - 128 + PREOFFSET(A1) 2919#endif 2920 2921 movss %xmm8, %xmm6 2922 shufps $0x39, %xmm6, %xmm6 2923 pshufd $0xb1, %xmm6, %xmm5 2924 mulps %xmm14, %xmm6 2925 addps %xmm6, %xmm0 2926 movaps -17 * SIZE(A2), %xmm6 2927 2928 movss %xmm9, %xmm8 2929 shufps $0x39, %xmm8, %xmm8 2930 pshufd $0xb1, %xmm8, %xmm7 2931 mulps %xmm14, %xmm8 2932 addps %xmm8, %xmm1 2933 movaps -13 * SIZE(A1), %xmm8 2934 2935 mulps %xmm15, %xmm5 2936 SUBPS %xmm5, %xmm0 2937 mulps %xmm15, %xmm7 2938 SUBPS %xmm7, %xmm1 2939 2940 movss %xmm10, %xmm9 2941 shufps $0x39, %xmm9, %xmm9 2942 pshufd $0xb1, %xmm9, %xmm5 2943 mulps %xmm14, %xmm9 2944 addps %xmm9, %xmm2 2945 movaps -9 * SIZE(A1), %xmm9 2946 2947 movss %xmm6, %xmm10 2948 shufps $0x39, %xmm10, %xmm10 2949 pshufd $0xb1, %xmm10, %xmm7 2950 mulps %xmm14, %xmm10 2951 addps %xmm10, %xmm3 2952 movaps -5 * SIZE(A1), %xmm10 2953 2954 mulps %xmm15, %xmm5 2955 SUBPS %xmm5, %xmm2 2956 mulps %xmm15, %xmm7 2957 SUBPS %xmm7, %xmm3 2958 2959#ifdef PREFETCHW 2960 PREFETCHW (PREFETCHSIZE) * 2 - 128 + PREOFFSET(Y1) 2961#endif 2962 2963 movaps %xmm0, -32 * SIZE(Y1) 2964 movaps %xmm1, -28 * SIZE(Y1) 2965 movaps %xmm2, -24 * SIZE(Y1) 2966 movaps %xmm3, -20 * SIZE(Y1) 2967 2968 movaps -16 * SIZE(Y1), %xmm0 2969 movaps -12 * SIZE(Y1), %xmm1 2970 movaps -8 * SIZE(Y1), %xmm2 2971 movaps -4 * SIZE(Y1), %xmm3 2972 2973 subq $-16 * SIZE, A1 2974 subq $-16 * SIZE, A2 2975 subq $-16 * SIZE, Y1 2976 2977 subq $1, I 2978 BRANCH 2979 jg .L203 2980 ALIGN_3 2981 2982.L204: 2983 movss %xmm8, %xmm4 2984 shufps $0x39, %xmm4, %xmm4 2985 pshufd $0xb1, %xmm4, %xmm5 2986 mulps %xmm12, %xmm4 2987 addps %xmm4, %xmm0 2988 movaps -17 * SIZE(A1), %xmm4 2989 2990 movss %xmm9, %xmm8 2991 shufps $0x39, %xmm8, %xmm8 2992 pshufd $0xb1, %xmm8, %xmm7 2993 mulps %xmm12, %xmm8 2994 addps %xmm8, %xmm1 2995 movaps -29 * SIZE(A2), %xmm8 2996 2997 mulps %xmm13, %xmm5 2998 SUBPS %xmm5, %xmm0 2999 mulps %xmm13, %xmm7 3000 SUBPS %xmm7, %xmm1 3001 3002 movss %xmm10, %xmm9 3003 shufps $0x39, %xmm9, %xmm9 3004 pshufd $0xb1, %xmm9, %xmm5 3005 mulps %xmm12, %xmm9 3006 addps %xmm9, %xmm2 3007 movaps -25 * SIZE(A2), %xmm9 3008 3009 movss %xmm4, %xmm10 3010 shufps $0x39, %xmm10, %xmm10 3011 pshufd $0xb1, %xmm10, %xmm7 3012 mulps %xmm12, %xmm10 3013 addps %xmm10, %xmm3 3014 movaps -21 * SIZE(A2), %xmm10 3015 3016 mulps %xmm13, %xmm5 3017 SUBPS %xmm5, %xmm2 3018 mulps %xmm13, %xmm7 3019 SUBPS %xmm7, %xmm3 3020 3021 movss %xmm8, %xmm6 3022 shufps $0x39, %xmm6, %xmm6 3023 pshufd $0xb1, %xmm6, %xmm5 3024 mulps %xmm14, %xmm6 3025 addps %xmm6, %xmm0 3026 movaps -17 * SIZE(A2), %xmm6 3027 3028 movss %xmm9, %xmm8 3029 shufps $0x39, %xmm8, %xmm8 3030 pshufd $0xb1, %xmm8, %xmm7 3031 mulps %xmm14, %xmm8 3032 addps %xmm8, %xmm1 3033 3034 mulps %xmm15, %xmm5 3035 SUBPS %xmm5, %xmm0 3036 mulps %xmm15, %xmm7 3037 SUBPS %xmm7, %xmm1 3038 3039 movss %xmm10, %xmm9 3040 shufps $0x39, %xmm9, %xmm9 3041 pshufd $0xb1, %xmm9, %xmm5 3042 mulps %xmm14, %xmm9 3043 addps %xmm9, %xmm2 3044 3045 movss %xmm6, %xmm10 3046 shufps $0x39, %xmm10, %xmm10 3047 pshufd $0xb1, %xmm10, %xmm7 3048 mulps %xmm14, %xmm10 3049 addps %xmm10, %xmm3 3050 3051 mulps %xmm15, %xmm5 3052 SUBPS %xmm5, %xmm2 3053 mulps %xmm15, %xmm7 3054 SUBPS %xmm7, %xmm3 3055 3056 movaps %xmm0, -32 * SIZE(Y1) 3057 movaps %xmm1, -28 * SIZE(Y1) 3058 movaps %xmm2, -24 * SIZE(Y1) 3059 movaps %xmm3, -20 * SIZE(Y1) 3060 3061 movaps -16 * SIZE(Y1), %xmm0 3062 movaps -12 * SIZE(Y1), %xmm1 3063 movaps -8 * SIZE(Y1), %xmm2 3064 movaps -4 * SIZE(Y1), %xmm3 3065 3066 subq $-16 * SIZE, A1 3067 subq $-16 * SIZE, A2 3068 subq $-16 * SIZE, Y1 3069 ALIGN_3 3070 3071.L205: 3072 testq $4, MM 3073 je .L207 3074 3075 movaps -29 * SIZE(A1), %xmm8 3076 movaps -25 * SIZE(A1), %xmm9 3077 movaps -29 * SIZE(A2), %xmm10 3078 movaps -25 * SIZE(A2), %xmm11 3079 3080 movss %xmm8, %xmm4 3081 shufps $0x39, %xmm4, %xmm4 3082 pshufd $0xb1, %xmm4, %xmm5 3083 mulps %xmm12, %xmm4 3084 addps %xmm4, %xmm0 3085 3086 movss %xmm9, %xmm8 3087 shufps $0x39, %xmm8, %xmm8 3088 pshufd $0xb1, %xmm8, %xmm7 3089 mulps %xmm12, %xmm8 3090 addps %xmm8, %xmm1 3091 3092 mulps %xmm13, %xmm5 3093 SUBPS %xmm5, %xmm0 3094 mulps %xmm13, %xmm7 3095 SUBPS %xmm7, %xmm1 3096 3097 movss %xmm10, %xmm6 3098 shufps $0x39, %xmm6, %xmm6 3099 pshufd $0xb1, %xmm6, %xmm5 3100 mulps %xmm14, %xmm6 3101 addps %xmm6, %xmm0 3102 3103 movss %xmm11, %xmm10 3104 shufps $0x39, %xmm10, %xmm10 3105 pshufd $0xb1, %xmm10, %xmm7 3106 mulps %xmm14, %xmm10 3107 addps %xmm10, %xmm1 3108 3109 mulps %xmm15, %xmm5 3110 SUBPS %xmm5, %xmm0 3111 mulps %xmm15, %xmm7 3112 SUBPS %xmm7, %xmm1 3113 3114 movaps %xmm0, -32 * SIZE(Y1) 3115 movaps %xmm1, -28 * SIZE(Y1) 3116 3117 movaps %xmm9, %xmm4 3118 movaps %xmm11, %xmm6 3119 movaps %xmm2, %xmm0 3120 movaps %xmm3, %xmm1 3121 3122 addq $8 * SIZE, A1 3123 addq $8 * SIZE, A2 3124 addq $8 * SIZE, Y1 3125 ALIGN_3 3126 3127.L207: 3128 testq $2, MM 3129 je .L208 3130 3131 movaps -29 * SIZE(A1), %xmm8 3132 movaps -29 * SIZE(A2), %xmm9 3133 3134 movss %xmm8, %xmm4 3135 shufps $0x39, %xmm4, %xmm4 3136 movss %xmm9, %xmm6 3137 shufps $0x39, %xmm6, %xmm6 3138 3139 pshufd $0xb1, %xmm4, %xmm5 3140 mulps %xmm12, %xmm4 3141 addps %xmm4, %xmm0 3142 pshufd $0xb1, %xmm6, %xmm7 3143 mulps %xmm13, %xmm5 3144 SUBPS %xmm5, %xmm0 3145 3146 mulps %xmm14, %xmm6 3147 addps %xmm6, %xmm0 3148 mulps %xmm15, %xmm7 3149 SUBPS %xmm7, %xmm0 3150 3151 movaps %xmm0, -32 * SIZE(Y1) 3152 movaps %xmm1, %xmm0 3153 3154 addq $4 * SIZE, A1 3155 addq $4 * SIZE, A2 3156 addq $4 * SIZE, Y1 3157 ALIGN_3 3158 3159.L208: 3160 testq $1, MM 3161 je .L209 3162 3163 movsd -32 * SIZE(A1), %xmm4 3164 movsd -32 * SIZE(A2), %xmm6 3165 3166 pshufd $0xb1, %xmm4, %xmm5 3167 pshufd $0xb1, %xmm6, %xmm7 3168 3169 mulps %xmm12, %xmm4 3170 addps %xmm4, %xmm0 3171 mulps %xmm13, %xmm5 3172 SUBPS %xmm5, %xmm0 3173 3174 mulps %xmm14, %xmm6 3175 addps %xmm6, %xmm0 3176 mulps %xmm15, %xmm7 3177 SUBPS %xmm7, %xmm0 3178 3179 movlps %xmm0, -32 * SIZE(Y1) 3180 ALIGN_3 3181 3182.L209: 3183 cmpq $2, N 3184 jge .L201 3185 ALIGN_3 3186 3187.L210: 3188 cmpq $1, N 3189 jl .L990 3190 3191 leaq 32 * SIZE(BUFFER), Y1 3192 movq A, A1 3193 3194 movsd (X), %xmm13 3195 addq INCX, X 3196 3197#ifdef HAVE_SSE3 3198 movddup ALPHA, %xmm8 3199#else 3200 movsd ALPHA, %xmm8 3201 unpcklpd %xmm8, %xmm8 3202#endif 3203 3204 pshufd $0xb1, %xmm8, %xmm9 3205 3206 pcmpeqb %xmm11, %xmm11 3207 psllq $63, %xmm11 3208 3209 pshufd $0x00, %xmm13, %xmm12 3210 pshufd $0x55, %xmm13, %xmm13 3211 3212#ifndef XCONJ 3213 xorps %xmm11, %xmm13 3214#else 3215 xorps %xmm11, %xmm12 3216#endif 3217 3218 mulps %xmm8, %xmm12 3219 mulps %xmm9, %xmm13 3220 3221#ifndef XCONJ 3222 subps %xmm13, %xmm12 3223#else 3224 addps %xmm13, %xmm12 3225#endif 3226 3227 pshufd $0x55, %xmm12, %xmm13 3228 pshufd $0x00, %xmm12, %xmm12 3229 3230#ifndef CONJ 3231 xorps %xmm11, %xmm13 3232#else 3233 xorps %xmm11, %xmm12 3234#endif 3235 3236#ifdef ALIGNED_ACCESS 3237 cmpq M, MM 3238 je .L21X 3239 3240 movsd -32 * SIZE(A1), %xmm4 3241 movsd -32 * SIZE(Y1), %xmm0 3242 3243 pshufd $0xb1, %xmm4, %xmm5 3244 3245 mulps %xmm12, %xmm4 3246 addps %xmm4, %xmm0 3247 mulps %xmm13, %xmm5 3248 SUBPS %xmm5, %xmm0 3249 3250 movlps %xmm0, -32 * SIZE(Y1) 3251 3252 addq $2 * SIZE, A1 3253 addq $2 * SIZE, Y1 3254 ALIGN_3 3255.L21X: 3256#endif 3257 3258 movaps -33 * SIZE(A1), %xmm4 3259 3260 movaps -32 * SIZE(Y1), %xmm0 3261 movaps -28 * SIZE(Y1), %xmm1 3262 movaps -24 * SIZE(Y1), %xmm2 3263 movaps -20 * SIZE(Y1), %xmm3 3264 3265 movq MM, I 3266 sarq $3, I 3267 jle .L215 3268 3269 movaps -29 * SIZE(A1), %xmm6 3270 movaps -25 * SIZE(A1), %xmm8 3271 movaps -21 * SIZE(A1), %xmm10 3272 3273 decq I 3274 jle .L214 3275 ALIGN_3 3276 3277.L213: 3278#ifdef PREFETCH 3279 PREFETCH (PREFETCHSIZE) * 4 - 128 + PREOFFSET(A1) 3280#endif 3281 3282 movss %xmm6, %xmm4 3283 shufps $0x39, %xmm4, %xmm4 3284 pshufd $0xb1, %xmm4, %xmm5 3285 mulps %xmm12, %xmm4 3286 addps %xmm4, %xmm0 3287 movaps -17 * SIZE(A1), %xmm4 3288 3289 movss %xmm8, %xmm6 3290 shufps $0x39, %xmm6, %xmm6 3291 pshufd $0xb1, %xmm6, %xmm7 3292 mulps %xmm12, %xmm6 3293 addps %xmm6, %xmm1 3294 movaps -13 * SIZE(A1), %xmm6 3295 3296 movss %xmm10, %xmm8 3297 shufps $0x39, %xmm8, %xmm8 3298 pshufd $0xb1, %xmm8, %xmm9 3299 mulps %xmm12, %xmm8 3300 addps %xmm8, %xmm2 3301 movaps -9 * SIZE(A1), %xmm8 3302 3303 movss %xmm4, %xmm10 3304 shufps $0x39, %xmm10, %xmm10 3305 pshufd $0xb1, %xmm10, %xmm11 3306 mulps %xmm12, %xmm10 3307 addps %xmm10, %xmm3 3308 movaps -5 * SIZE(A1), %xmm10 3309 3310 mulps %xmm13, %xmm5 3311 SUBPS %xmm5, %xmm0 3312 mulps %xmm13, %xmm7 3313 SUBPS %xmm7, %xmm1 3314 3315 mulps %xmm13, %xmm9 3316 SUBPS %xmm9, %xmm2 3317 mulps %xmm13, %xmm11 3318 SUBPS %xmm11, %xmm3 3319 3320#ifdef PREFETCHW 3321 PREFETCHW (PREFETCHSIZE) * 4 - 128 + PREOFFSET(Y1) 3322#endif 3323 3324 movaps %xmm0, -32 * SIZE(Y1) 3325 movaps %xmm1, -28 * SIZE(Y1) 3326 movaps %xmm2, -24 * SIZE(Y1) 3327 movaps %xmm3, -20 * SIZE(Y1) 3328 3329 movaps -16 * SIZE(Y1), %xmm0 3330 movaps -12 * SIZE(Y1), %xmm1 3331 movaps -8 * SIZE(Y1), %xmm2 3332 movaps -4 * SIZE(Y1), %xmm3 3333 3334 subq $-16 * SIZE, A1 3335 subq $-16 * SIZE, A2 3336 subq $-16 * SIZE, Y1 3337 3338 subq $1, I 3339 BRANCH 3340 jg .L213 3341 ALIGN_3 3342 3343.L214: 3344 movss %xmm6, %xmm4 3345 shufps $0x39, %xmm4, %xmm4 3346 pshufd $0xb1, %xmm4, %xmm5 3347 mulps %xmm12, %xmm4 3348 addps %xmm4, %xmm0 3349 movaps -17 * SIZE(A1), %xmm4 3350 3351 movss %xmm8, %xmm6 3352 shufps $0x39, %xmm6, %xmm6 3353 pshufd $0xb1, %xmm6, %xmm7 3354 mulps %xmm12, %xmm6 3355 addps %xmm6, %xmm1 3356 3357 movss %xmm10, %xmm8 3358 shufps $0x39, %xmm8, %xmm8 3359 pshufd $0xb1, %xmm8, %xmm9 3360 mulps %xmm12, %xmm8 3361 addps %xmm8, %xmm2 3362 3363 movss %xmm4, %xmm10 3364 shufps $0x39, %xmm10, %xmm10 3365 pshufd $0xb1, %xmm10, %xmm11 3366 mulps %xmm12, %xmm10 3367 addps %xmm10, %xmm3 3368 3369 mulps %xmm13, %xmm5 3370 SUBPS %xmm5, %xmm0 3371 mulps %xmm13, %xmm7 3372 SUBPS %xmm7, %xmm1 3373 3374 mulps %xmm13, %xmm9 3375 SUBPS %xmm9, %xmm2 3376 mulps %xmm13, %xmm11 3377 SUBPS %xmm11, %xmm3 3378 3379 movaps %xmm0, -32 * SIZE(Y1) 3380 movaps %xmm1, -28 * SIZE(Y1) 3381 movaps %xmm2, -24 * SIZE(Y1) 3382 movaps %xmm3, -20 * SIZE(Y1) 3383 3384 movaps -16 * SIZE(Y1), %xmm0 3385 movaps -12 * SIZE(Y1), %xmm1 3386 movaps -8 * SIZE(Y1), %xmm2 3387 movaps -4 * SIZE(Y1), %xmm3 3388 3389 subq $-16 * SIZE, A1 3390 subq $-16 * SIZE, Y1 3391 ALIGN_3 3392 3393.L215: 3394 testq $4, MM 3395 je .L217 3396 3397 movaps -29 * SIZE(A1), %xmm6 3398 movaps -25 * SIZE(A1), %xmm8 3399 3400 movss %xmm6, %xmm4 3401 shufps $0x39, %xmm4, %xmm4 3402 pshufd $0xb1, %xmm4, %xmm5 3403 mulps %xmm12, %xmm4 3404 addps %xmm4, %xmm0 3405 3406 movss %xmm8, %xmm6 3407 shufps $0x39, %xmm6, %xmm6 3408 pshufd $0xb1, %xmm6, %xmm7 3409 mulps %xmm12, %xmm6 3410 addps %xmm6, %xmm1 3411 3412 mulps %xmm13, %xmm5 3413 SUBPS %xmm5, %xmm0 3414 mulps %xmm13, %xmm7 3415 SUBPS %xmm7, %xmm1 3416 3417 movaps %xmm0, -32 * SIZE(Y1) 3418 movaps %xmm1, -28 * SIZE(Y1) 3419 3420 movaps %xmm2, %xmm0 3421 movaps %xmm3, %xmm1 3422 movaps %xmm8, %xmm4 3423 3424 addq $8 * SIZE, A1 3425 addq $8 * SIZE, Y1 3426 ALIGN_3 3427 3428.L217: 3429 testq $2, MM 3430 je .L218 3431 3432 movaps -29 * SIZE(A1), %xmm6 3433 3434 movss %xmm6, %xmm4 3435 shufps $0x39, %xmm4, %xmm4 3436 3437 pshufd $0xb1, %xmm4, %xmm5 3438 mulps %xmm12, %xmm4 3439 addps %xmm4, %xmm0 3440 mulps %xmm13, %xmm5 3441 SUBPS %xmm5, %xmm0 3442 3443 movaps %xmm0, -32 * SIZE(Y1) 3444 movaps %xmm1, %xmm0 3445 3446 addq $4 * SIZE, A1 3447 addq $4 * SIZE, Y1 3448 ALIGN_3 3449 3450.L218: 3451 testq $1, MM 3452 je .L990 3453 3454 movsd -32 * SIZE(A1), %xmm4 3455 3456 pshufd $0xb1, %xmm4, %xmm5 3457 3458 mulps %xmm12, %xmm4 3459 addps %xmm4, %xmm0 3460 mulps %xmm13, %xmm5 3461 SUBPS %xmm5, %xmm0 3462 3463 movlps %xmm0, -32 * SIZE(Y1) 3464 jmp .L990 3465 ALIGN_3 3466 3467.L300: 3468 cmpq $2, N 3469 jl .L310 3470 ALIGN_3 3471 3472.L301: 3473 subq $2, N 3474 3475 leaq 32 * SIZE(BUFFER), Y1 3476 movq A, A1 3477 leaq (A, LDA, 1), A2 3478 leaq (A, LDA, 2), A 3479 3480 movsd (X), %xmm13 3481 addq INCX, X 3482 movsd (X), %xmm15 3483 addq INCX, X 3484 3485#ifdef HAVE_SSE3 3486 movddup ALPHA, %xmm8 3487#else 3488 movsd ALPHA, %xmm8 3489 unpcklpd %xmm8, %xmm8 3490#endif 3491 3492 pshufd $0xb1, %xmm8, %xmm9 3493 3494 pcmpeqb %xmm11, %xmm11 3495 psllq $63, %xmm11 3496 3497 pshufd $0x00, %xmm13, %xmm12 3498 pshufd $0x55, %xmm13, %xmm13 3499 pshufd $0x00, %xmm15, %xmm14 3500 pshufd $0x55, %xmm15, %xmm15 3501 3502#ifndef XCONJ 3503 xorps %xmm11, %xmm13 3504 xorps %xmm11, %xmm15 3505#else 3506 xorps %xmm11, %xmm12 3507 xorps %xmm11, %xmm14 3508#endif 3509 3510 mulps %xmm8, %xmm12 3511 mulps %xmm9, %xmm13 3512 mulps %xmm8, %xmm14 3513 mulps %xmm9, %xmm15 3514 3515#ifndef XCONJ 3516 subps %xmm13, %xmm12 3517 subps %xmm15, %xmm14 3518#else 3519 addps %xmm13, %xmm12 3520 addps %xmm15, %xmm14 3521#endif 3522 3523 pshufd $0x55, %xmm12, %xmm13 3524 pshufd $0x00, %xmm12, %xmm12 3525 pshufd $0x55, %xmm14, %xmm15 3526 pshufd $0x00, %xmm14, %xmm14 3527 3528#ifndef CONJ 3529 xorps %xmm11, %xmm13 3530 xorps %xmm11, %xmm15 3531#else 3532 xorps %xmm11, %xmm12 3533 xorps %xmm11, %xmm14 3534#endif 3535 3536#ifdef ALIGNED_ACCESS 3537 cmpq M, MM 3538 je .L30X 3539 3540 movsd -32 * SIZE(A1), %xmm4 3541 movsd -32 * SIZE(A2), %xmm6 3542 3543 movsd -32 * SIZE(Y1), %xmm0 3544 3545 pshufd $0xb1, %xmm4, %xmm5 3546 pshufd $0xb1, %xmm6, %xmm7 3547 3548 mulps %xmm12, %xmm4 3549 addps %xmm4, %xmm0 3550 mulps %xmm13, %xmm5 3551 SUBPS %xmm5, %xmm0 3552 3553 mulps %xmm14, %xmm6 3554 addps %xmm6, %xmm0 3555 mulps %xmm15, %xmm7 3556 SUBPS %xmm7, %xmm0 3557 3558 movlps %xmm0, -32 * SIZE(Y1) 3559 3560 addq $2 * SIZE, A1 3561 addq $2 * SIZE, A2 3562 addq $2 * SIZE, Y1 3563 ALIGN_3 3564.L30X: 3565#endif 3566 3567 movaps -33 * SIZE(A1), %xmm4 3568 movaps -35 * SIZE(A2), %xmm6 3569 3570 movaps -32 * SIZE(Y1), %xmm0 3571 movaps -28 * SIZE(Y1), %xmm1 3572 movaps -24 * SIZE(Y1), %xmm2 3573 movaps -20 * SIZE(Y1), %xmm3 3574 3575 movq MM, I 3576 sarq $3, I 3577 jle .L305 3578 3579 movaps -29 * SIZE(A1), %xmm8 3580 movaps -25 * SIZE(A1), %xmm9 3581 movaps -21 * SIZE(A1), %xmm10 3582 3583 decq I 3584 jle .L304 3585 ALIGN_3 3586 3587.L303: 3588#ifdef PREFETCH 3589 PREFETCH (PREFETCHSIZE) * 2 - 128 + PREOFFSET(A2) 3590#endif 3591 3592 movss %xmm8, %xmm4 3593 shufps $0x39, %xmm4, %xmm4 3594 pshufd $0xb1, %xmm4, %xmm5 3595 mulps %xmm12, %xmm4 3596 addps %xmm4, %xmm0 3597 movaps -17 * SIZE(A1), %xmm4 3598 3599 movss %xmm9, %xmm8 3600 shufps $0x39, %xmm8, %xmm8 3601 pshufd $0xb1, %xmm8, %xmm7 3602 mulps %xmm12, %xmm8 3603 addps %xmm8, %xmm1 3604 movaps -31 * SIZE(A2), %xmm8 3605 3606 mulps %xmm13, %xmm5 3607 SUBPS %xmm5, %xmm0 3608 mulps %xmm13, %xmm7 3609 SUBPS %xmm7, %xmm1 3610 3611 movss %xmm10, %xmm9 3612 shufps $0x39, %xmm9, %xmm9 3613 pshufd $0xb1, %xmm9, %xmm5 3614 mulps %xmm12, %xmm9 3615 addps %xmm9, %xmm2 3616 movaps -27 * SIZE(A2), %xmm9 3617 3618 movss %xmm4, %xmm10 3619 shufps $0x39, %xmm10, %xmm10 3620 pshufd $0xb1, %xmm10, %xmm7 3621 mulps %xmm12, %xmm10 3622 addps %xmm10, %xmm3 3623 movaps -23 * SIZE(A2), %xmm10 3624 3625 mulps %xmm13, %xmm5 3626 SUBPS %xmm5, %xmm2 3627 mulps %xmm13, %xmm7 3628 SUBPS %xmm7, %xmm3 3629 3630#ifdef PREFETCH 3631 PREFETCH (PREFETCHSIZE) * 2 - 128 + PREOFFSET(A1) 3632#endif 3633 3634 movss %xmm8, %xmm6 3635 shufps $0x93, %xmm8, %xmm6 3636 pshufd $0xb1, %xmm6, %xmm5 3637 mulps %xmm14, %xmm6 3638 addps %xmm6, %xmm0 3639 movaps -19 * SIZE(A2), %xmm6 3640 3641 movss %xmm9, %xmm8 3642 shufps $0x93, %xmm9, %xmm8 3643 pshufd $0xb1, %xmm8, %xmm7 3644 mulps %xmm14, %xmm8 3645 addps %xmm8, %xmm1 3646 movaps -13 * SIZE(A1), %xmm8 3647 3648 mulps %xmm15, %xmm5 3649 SUBPS %xmm5, %xmm0 3650 mulps %xmm15, %xmm7 3651 SUBPS %xmm7, %xmm1 3652 3653 movss %xmm10, %xmm9 3654 shufps $0x93, %xmm10, %xmm9 3655 pshufd $0xb1, %xmm9, %xmm5 3656 mulps %xmm14, %xmm9 3657 addps %xmm9, %xmm2 3658 movaps -9 * SIZE(A1), %xmm9 3659 3660 movss %xmm6, %xmm10 3661 shufps $0x93, %xmm6, %xmm10 3662 pshufd $0xb1, %xmm10, %xmm7 3663 mulps %xmm14, %xmm10 3664 addps %xmm10, %xmm3 3665 movaps -5 * SIZE(A1), %xmm10 3666 3667 mulps %xmm15, %xmm5 3668 SUBPS %xmm5, %xmm2 3669 mulps %xmm15, %xmm7 3670 SUBPS %xmm7, %xmm3 3671 3672#ifdef PREFETCHW 3673 PREFETCHW (PREFETCHSIZE) * 2 - 128 + PREOFFSET(Y1) 3674#endif 3675 3676 movaps %xmm0, -32 * SIZE(Y1) 3677 movaps %xmm1, -28 * SIZE(Y1) 3678 movaps %xmm2, -24 * SIZE(Y1) 3679 movaps %xmm3, -20 * SIZE(Y1) 3680 3681 movaps -16 * SIZE(Y1), %xmm0 3682 movaps -12 * SIZE(Y1), %xmm1 3683 movaps -8 * SIZE(Y1), %xmm2 3684 movaps -4 * SIZE(Y1), %xmm3 3685 3686 subq $-16 * SIZE, A1 3687 subq $-16 * SIZE, A2 3688 subq $-16 * SIZE, Y1 3689 3690 subq $1, I 3691 BRANCH 3692 jg .L303 3693 ALIGN_3 3694 3695.L304: 3696 movss %xmm8, %xmm4 3697 shufps $0x39, %xmm4, %xmm4 3698 pshufd $0xb1, %xmm4, %xmm5 3699 mulps %xmm12, %xmm4 3700 addps %xmm4, %xmm0 3701 movaps -17 * SIZE(A1), %xmm4 3702 3703 movss %xmm9, %xmm8 3704 shufps $0x39, %xmm8, %xmm8 3705 pshufd $0xb1, %xmm8, %xmm7 3706 mulps %xmm12, %xmm8 3707 addps %xmm8, %xmm1 3708 movaps -31 * SIZE(A2), %xmm8 3709 3710 mulps %xmm13, %xmm5 3711 SUBPS %xmm5, %xmm0 3712 mulps %xmm13, %xmm7 3713 SUBPS %xmm7, %xmm1 3714 3715 movss %xmm10, %xmm9 3716 shufps $0x39, %xmm9, %xmm9 3717 pshufd $0xb1, %xmm9, %xmm5 3718 mulps %xmm12, %xmm9 3719 addps %xmm9, %xmm2 3720 movaps -27 * SIZE(A2), %xmm9 3721 3722 movss %xmm4, %xmm10 3723 shufps $0x39, %xmm10, %xmm10 3724 pshufd $0xb1, %xmm10, %xmm7 3725 mulps %xmm12, %xmm10 3726 addps %xmm10, %xmm3 3727 movaps -23 * SIZE(A2), %xmm10 3728 3729 mulps %xmm13, %xmm5 3730 SUBPS %xmm5, %xmm2 3731 mulps %xmm13, %xmm7 3732 SUBPS %xmm7, %xmm3 3733 3734 movss %xmm8, %xmm6 3735 shufps $0x93, %xmm8, %xmm6 3736 pshufd $0xb1, %xmm6, %xmm5 3737 mulps %xmm14, %xmm6 3738 addps %xmm6, %xmm0 3739 movaps -19 * SIZE(A2), %xmm6 3740 3741 movss %xmm9, %xmm8 3742 shufps $0x93, %xmm9, %xmm8 3743 pshufd $0xb1, %xmm8, %xmm7 3744 mulps %xmm14, %xmm8 3745 addps %xmm8, %xmm1 3746 3747 mulps %xmm15, %xmm5 3748 SUBPS %xmm5, %xmm0 3749 mulps %xmm15, %xmm7 3750 SUBPS %xmm7, %xmm1 3751 3752 movss %xmm10, %xmm9 3753 shufps $0x93, %xmm10, %xmm9 3754 pshufd $0xb1, %xmm9, %xmm5 3755 mulps %xmm14, %xmm9 3756 addps %xmm9, %xmm2 3757 3758 movss %xmm6, %xmm10 3759 shufps $0x93, %xmm6, %xmm10 3760 pshufd $0xb1, %xmm10, %xmm7 3761 mulps %xmm14, %xmm10 3762 addps %xmm10, %xmm3 3763 3764 mulps %xmm15, %xmm5 3765 SUBPS %xmm5, %xmm2 3766 mulps %xmm15, %xmm7 3767 SUBPS %xmm7, %xmm3 3768 3769 movaps %xmm0, -32 * SIZE(Y1) 3770 movaps %xmm1, -28 * SIZE(Y1) 3771 movaps %xmm2, -24 * SIZE(Y1) 3772 movaps %xmm3, -20 * SIZE(Y1) 3773 3774 movaps -16 * SIZE(Y1), %xmm0 3775 movaps -12 * SIZE(Y1), %xmm1 3776 movaps -8 * SIZE(Y1), %xmm2 3777 movaps -4 * SIZE(Y1), %xmm3 3778 3779 subq $-16 * SIZE, A1 3780 subq $-16 * SIZE, A2 3781 subq $-16 * SIZE, Y1 3782 ALIGN_3 3783 3784.L305: 3785 testq $4, MM 3786 je .L307 3787 3788 movaps -29 * SIZE(A1), %xmm8 3789 movaps -25 * SIZE(A1), %xmm9 3790 movaps -31 * SIZE(A2), %xmm10 3791 movaps -27 * SIZE(A2), %xmm11 3792 3793 movss %xmm8, %xmm4 3794 shufps $0x39, %xmm4, %xmm4 3795 pshufd $0xb1, %xmm4, %xmm5 3796 mulps %xmm12, %xmm4 3797 addps %xmm4, %xmm0 3798 3799 movss %xmm9, %xmm8 3800 shufps $0x39, %xmm8, %xmm8 3801 pshufd $0xb1, %xmm8, %xmm7 3802 mulps %xmm12, %xmm8 3803 addps %xmm8, %xmm1 3804 3805 mulps %xmm13, %xmm5 3806 SUBPS %xmm5, %xmm0 3807 mulps %xmm13, %xmm7 3808 SUBPS %xmm7, %xmm1 3809 3810 movss %xmm10, %xmm6 3811 shufps $0x93, %xmm10, %xmm6 3812 pshufd $0xb1, %xmm6, %xmm5 3813 mulps %xmm14, %xmm6 3814 addps %xmm6, %xmm0 3815 3816 movss %xmm11, %xmm10 3817 shufps $0x93, %xmm11, %xmm10 3818 pshufd $0xb1, %xmm10, %xmm7 3819 mulps %xmm14, %xmm10 3820 addps %xmm10, %xmm1 3821 3822 mulps %xmm15, %xmm5 3823 SUBPS %xmm5, %xmm0 3824 mulps %xmm15, %xmm7 3825 SUBPS %xmm7, %xmm1 3826 3827 movaps %xmm0, -32 * SIZE(Y1) 3828 movaps %xmm1, -28 * SIZE(Y1) 3829 3830 movaps %xmm9, %xmm4 3831 movaps %xmm11, %xmm6 3832 movaps %xmm2, %xmm0 3833 movaps %xmm3, %xmm1 3834 3835 addq $8 * SIZE, A1 3836 addq $8 * SIZE, A2 3837 addq $8 * SIZE, Y1 3838 ALIGN_3 3839 3840.L307: 3841 testq $2, MM 3842 je .L308 3843 3844 movaps -29 * SIZE(A1), %xmm8 3845 movaps -31 * SIZE(A2), %xmm9 3846 3847 movss %xmm8, %xmm4 3848 shufps $0x39, %xmm4, %xmm4 3849 pshufd $0xb1, %xmm4, %xmm5 3850 mulps %xmm12, %xmm4 3851 addps %xmm4, %xmm0 3852 3853 movss %xmm9, %xmm6 3854 shufps $0x93, %xmm9, %xmm6 3855 pshufd $0xb1, %xmm6, %xmm7 3856 mulps %xmm13, %xmm5 3857 SUBPS %xmm5, %xmm0 3858 3859 mulps %xmm14, %xmm6 3860 addps %xmm6, %xmm0 3861 mulps %xmm15, %xmm7 3862 SUBPS %xmm7, %xmm0 3863 3864 movaps %xmm0, -32 * SIZE(Y1) 3865 movaps %xmm1, %xmm0 3866 3867 addq $4 * SIZE, A1 3868 addq $4 * SIZE, A2 3869 addq $4 * SIZE, Y1 3870 ALIGN_3 3871 3872.L308: 3873 testq $1, MM 3874 je .L309 3875 3876 movsd -32 * SIZE(A1), %xmm4 3877 movsd -32 * SIZE(A2), %xmm6 3878 3879 pshufd $0xb1, %xmm4, %xmm5 3880 pshufd $0xb1, %xmm6, %xmm7 3881 3882 mulps %xmm12, %xmm4 3883 addps %xmm4, %xmm0 3884 mulps %xmm13, %xmm5 3885 SUBPS %xmm5, %xmm0 3886 3887 mulps %xmm14, %xmm6 3888 addps %xmm6, %xmm0 3889 mulps %xmm15, %xmm7 3890 SUBPS %xmm7, %xmm0 3891 3892 movlps %xmm0, -32 * SIZE(Y1) 3893 ALIGN_3 3894 3895.L309: 3896 cmpq $2, N 3897 jge .L301 3898 ALIGN_3 3899 3900.L310: 3901 cmpq $1, N 3902 jl .L990 3903 3904 leaq 32 * SIZE(BUFFER), Y1 3905 movq A, A1 3906 3907 movsd (X), %xmm13 3908 addq INCX, X 3909 3910#ifdef HAVE_SSE3 3911 movddup ALPHA, %xmm8 3912#else 3913 movsd ALPHA, %xmm8 3914 unpcklpd %xmm8, %xmm8 3915#endif 3916 3917 pshufd $0xb1, %xmm8, %xmm9 3918 3919 pcmpeqb %xmm11, %xmm11 3920 psllq $63, %xmm11 3921 3922 pshufd $0x00, %xmm13, %xmm12 3923 pshufd $0x55, %xmm13, %xmm13 3924 3925#ifndef XCONJ 3926 xorps %xmm11, %xmm13 3927#else 3928 xorps %xmm11, %xmm12 3929#endif 3930 3931 mulps %xmm8, %xmm12 3932 mulps %xmm9, %xmm13 3933 3934#ifndef XCONJ 3935 subps %xmm13, %xmm12 3936#else 3937 addps %xmm13, %xmm12 3938#endif 3939 3940 pshufd $0x55, %xmm12, %xmm13 3941 pshufd $0x00, %xmm12, %xmm12 3942 3943#ifndef CONJ 3944 xorps %xmm11, %xmm13 3945#else 3946 xorps %xmm11, %xmm12 3947#endif 3948 3949#ifdef ALIGNED_ACCESS 3950 cmpq M, MM 3951 je .L31X 3952 3953 movsd -32 * SIZE(A1), %xmm4 3954 movsd -32 * SIZE(Y1), %xmm0 3955 3956 pshufd $0xb1, %xmm4, %xmm5 3957 3958 mulps %xmm12, %xmm4 3959 addps %xmm4, %xmm0 3960 mulps %xmm13, %xmm5 3961 SUBPS %xmm5, %xmm0 3962 3963 movlps %xmm0, -32 * SIZE(Y1) 3964 3965 addq $2 * SIZE, A1 3966 addq $2 * SIZE, Y1 3967 ALIGN_3 3968.L31X: 3969#endif 3970 3971 movaps -33 * SIZE(A1), %xmm4 3972 3973 movaps -32 * SIZE(Y1), %xmm0 3974 movaps -28 * SIZE(Y1), %xmm1 3975 movaps -24 * SIZE(Y1), %xmm2 3976 movaps -20 * SIZE(Y1), %xmm3 3977 3978 movq MM, I 3979 sarq $3, I 3980 jle .L315 3981 3982 movaps -29 * SIZE(A1), %xmm6 3983 movaps -25 * SIZE(A1), %xmm8 3984 movaps -21 * SIZE(A1), %xmm10 3985 3986 decq I 3987 jle .L314 3988 ALIGN_3 3989 3990.L313: 3991#ifdef PREFETCH 3992 PREFETCH (PREFETCHSIZE) * 4 - 128 + PREOFFSET(A1) 3993#endif 3994 3995 movss %xmm6, %xmm4 3996 shufps $0x39, %xmm4, %xmm4 3997 pshufd $0xb1, %xmm4, %xmm5 3998 mulps %xmm12, %xmm4 3999 addps %xmm4, %xmm0 4000 movaps -17 * SIZE(A1), %xmm4 4001 4002 movss %xmm8, %xmm6 4003 shufps $0x39, %xmm6, %xmm6 4004 pshufd $0xb1, %xmm6, %xmm7 4005 mulps %xmm12, %xmm6 4006 addps %xmm6, %xmm1 4007 movaps -13 * SIZE(A1), %xmm6 4008 4009 movss %xmm10, %xmm8 4010 shufps $0x39, %xmm8, %xmm8 4011 pshufd $0xb1, %xmm8, %xmm9 4012 mulps %xmm12, %xmm8 4013 addps %xmm8, %xmm2 4014 movaps -9 * SIZE(A1), %xmm8 4015 4016 movss %xmm4, %xmm10 4017 shufps $0x39, %xmm10, %xmm10 4018 pshufd $0xb1, %xmm10, %xmm11 4019 mulps %xmm12, %xmm10 4020 addps %xmm10, %xmm3 4021 movaps -5 * SIZE(A1), %xmm10 4022 4023 mulps %xmm13, %xmm5 4024 SUBPS %xmm5, %xmm0 4025 mulps %xmm13, %xmm7 4026 SUBPS %xmm7, %xmm1 4027 4028 mulps %xmm13, %xmm9 4029 SUBPS %xmm9, %xmm2 4030 mulps %xmm13, %xmm11 4031 SUBPS %xmm11, %xmm3 4032 4033#ifdef PREFETCHW 4034 PREFETCHW (PREFETCHSIZE) * 4 - 128 + PREOFFSET(Y1) 4035#endif 4036 4037 movaps %xmm0, -32 * SIZE(Y1) 4038 movaps %xmm1, -28 * SIZE(Y1) 4039 movaps %xmm2, -24 * SIZE(Y1) 4040 movaps %xmm3, -20 * SIZE(Y1) 4041 4042 movaps -16 * SIZE(Y1), %xmm0 4043 movaps -12 * SIZE(Y1), %xmm1 4044 movaps -8 * SIZE(Y1), %xmm2 4045 movaps -4 * SIZE(Y1), %xmm3 4046 4047 subq $-16 * SIZE, A1 4048 subq $-16 * SIZE, A2 4049 subq $-16 * SIZE, Y1 4050 4051 subq $1, I 4052 BRANCH 4053 jg .L313 4054 ALIGN_3 4055 4056.L314: 4057 movss %xmm6, %xmm4 4058 shufps $0x39, %xmm4, %xmm4 4059 pshufd $0xb1, %xmm4, %xmm5 4060 mulps %xmm12, %xmm4 4061 addps %xmm4, %xmm0 4062 movaps -17 * SIZE(A1), %xmm4 4063 4064 movss %xmm8, %xmm6 4065 shufps $0x39, %xmm6, %xmm6 4066 pshufd $0xb1, %xmm6, %xmm7 4067 mulps %xmm12, %xmm6 4068 addps %xmm6, %xmm1 4069 4070 movss %xmm10, %xmm8 4071 shufps $0x39, %xmm8, %xmm8 4072 pshufd $0xb1, %xmm8, %xmm9 4073 mulps %xmm12, %xmm8 4074 addps %xmm8, %xmm2 4075 4076 movss %xmm4, %xmm10 4077 shufps $0x39, %xmm10, %xmm10 4078 pshufd $0xb1, %xmm10, %xmm11 4079 mulps %xmm12, %xmm10 4080 addps %xmm10, %xmm3 4081 4082 mulps %xmm13, %xmm5 4083 SUBPS %xmm5, %xmm0 4084 mulps %xmm13, %xmm7 4085 SUBPS %xmm7, %xmm1 4086 4087 mulps %xmm13, %xmm9 4088 SUBPS %xmm9, %xmm2 4089 mulps %xmm13, %xmm11 4090 SUBPS %xmm11, %xmm3 4091 4092 movaps %xmm0, -32 * SIZE(Y1) 4093 movaps %xmm1, -28 * SIZE(Y1) 4094 movaps %xmm2, -24 * SIZE(Y1) 4095 movaps %xmm3, -20 * SIZE(Y1) 4096 4097 movaps -16 * SIZE(Y1), %xmm0 4098 movaps -12 * SIZE(Y1), %xmm1 4099 movaps -8 * SIZE(Y1), %xmm2 4100 movaps -4 * SIZE(Y1), %xmm3 4101 4102 subq $-16 * SIZE, A1 4103 subq $-16 * SIZE, Y1 4104 ALIGN_3 4105 4106.L315: 4107 testq $4, MM 4108 je .L317 4109 4110 movaps -29 * SIZE(A1), %xmm6 4111 movaps -25 * SIZE(A1), %xmm8 4112 4113 movss %xmm6, %xmm4 4114 shufps $0x39, %xmm4, %xmm4 4115 pshufd $0xb1, %xmm4, %xmm5 4116 mulps %xmm12, %xmm4 4117 addps %xmm4, %xmm0 4118 4119 movss %xmm8, %xmm6 4120 shufps $0x39, %xmm6, %xmm6 4121 pshufd $0xb1, %xmm6, %xmm7 4122 mulps %xmm12, %xmm6 4123 addps %xmm6, %xmm1 4124 4125 mulps %xmm13, %xmm5 4126 SUBPS %xmm5, %xmm0 4127 mulps %xmm13, %xmm7 4128 SUBPS %xmm7, %xmm1 4129 4130 movaps %xmm0, -32 * SIZE(Y1) 4131 movaps %xmm1, -28 * SIZE(Y1) 4132 4133 movaps %xmm2, %xmm0 4134 movaps %xmm3, %xmm1 4135 movaps %xmm8, %xmm4 4136 4137 addq $8 * SIZE, A1 4138 addq $8 * SIZE, Y1 4139 ALIGN_3 4140 4141.L317: 4142 testq $2, MM 4143 je .L318 4144 4145 movaps -29 * SIZE(A1), %xmm6 4146 4147 movss %xmm6, %xmm4 4148 shufps $0x39, %xmm4, %xmm4 4149 4150 pshufd $0xb1, %xmm4, %xmm5 4151 mulps %xmm12, %xmm4 4152 addps %xmm4, %xmm0 4153 mulps %xmm13, %xmm5 4154 SUBPS %xmm5, %xmm0 4155 4156 movaps %xmm0, -32 * SIZE(Y1) 4157 movaps %xmm1, %xmm0 4158 4159 addq $4 * SIZE, A1 4160 addq $4 * SIZE, Y1 4161 ALIGN_3 4162 4163.L318: 4164 testq $1, MM 4165 je .L990 4166 4167 movsd -32 * SIZE(A1), %xmm4 4168 4169 pshufd $0xb1, %xmm4, %xmm5 4170 4171 mulps %xmm12, %xmm4 4172 addps %xmm4, %xmm0 4173 mulps %xmm13, %xmm5 4174 SUBPS %xmm5, %xmm0 4175 4176 movlps %xmm0, -32 * SIZE(Y1) 4177#endif 4178 ALIGN_3 4179 4180.L990: 4181 movq Y, Y1 4182 4183#ifdef ALIGNED_ACCESS 4184 cmpq M, MM 4185 je .L991 4186 4187 movsd (Y), %xmm0 4188 addq INCY, Y 4189 4190 movsd (BUFFER), %xmm1 4191 addq $2 * SIZE, BUFFER 4192 4193 addps %xmm1, %xmm0 4194 4195 movlps %xmm0, (Y1) 4196 addq INCY, Y1 4197 ALIGN_3 4198 4199.L991: 4200#endif 4201 movq MM, %rax 4202 sarq $3, %rax 4203 jle .L994 4204 ALIGN_3 4205 4206.L992: 4207 movsd (Y), %xmm0 4208 addq INCY, Y 4209 movhps (Y), %xmm0 4210 addq INCY, Y 4211 4212 movsd (Y), %xmm1 4213 addq INCY, Y 4214 movhps (Y), %xmm1 4215 addq INCY, Y 4216 4217 movsd (Y), %xmm2 4218 addq INCY, Y 4219 movhps (Y), %xmm2 4220 addq INCY, Y 4221 4222 movsd (Y), %xmm3 4223 addq INCY, Y 4224 movhps (Y), %xmm3 4225 addq INCY, Y 4226 4227 addps 0 * SIZE(BUFFER), %xmm0 4228 addps 4 * SIZE(BUFFER), %xmm1 4229 addps 8 * SIZE(BUFFER), %xmm2 4230 addps 12 * SIZE(BUFFER), %xmm3 4231 4232 movlps %xmm0, (Y1) 4233 addq INCY, Y1 4234 movhps %xmm0, (Y1) 4235 addq INCY, Y1 4236 4237 movlps %xmm1, (Y1) 4238 addq INCY, Y1 4239 movhps %xmm1, (Y1) 4240 addq INCY, Y1 4241 4242 movlps %xmm2, (Y1) 4243 addq INCY, Y1 4244 movhps %xmm2, (Y1) 4245 addq INCY, Y1 4246 4247 movlps %xmm3, (Y1) 4248 addq INCY, Y1 4249 movhps %xmm3, (Y1) 4250 addq INCY, Y1 4251 4252 addq $16 * SIZE, BUFFER 4253 decq %rax 4254 jg .L992 4255 ALIGN_3 4256 4257.L994: 4258 testq $7, MM 4259 jle .L999 4260 4261 testq $4, MM 4262 jle .L995 4263 4264 movsd (Y), %xmm0 4265 addq INCY, Y 4266 movhps (Y), %xmm0 4267 addq INCY, Y 4268 4269 movsd (Y), %xmm1 4270 addq INCY, Y 4271 movhps (Y), %xmm1 4272 addq INCY, Y 4273 4274 addps 0 * SIZE(BUFFER), %xmm0 4275 addps 4 * SIZE(BUFFER), %xmm1 4276 4277 movlps %xmm0, (Y1) 4278 addq INCY, Y1 4279 movhps %xmm0, (Y1) 4280 addq INCY, Y1 4281 4282 movlps %xmm1, (Y1) 4283 addq INCY, Y1 4284 movhps %xmm1, (Y1) 4285 addq INCY, Y1 4286 4287 addq $8 * SIZE, BUFFER 4288 ALIGN_3 4289 4290.L995: 4291 testq $2, MM 4292 jle .L996 4293 4294 movsd (Y), %xmm0 4295 addq INCY, Y 4296 movhps (Y), %xmm0 4297 addq INCY, Y 4298 4299 addps 0 * SIZE(BUFFER), %xmm0 4300 4301 movlps %xmm0, (Y1) 4302 addq INCY, Y1 4303 movhps %xmm0, (Y1) 4304 addq INCY, Y1 4305 4306 addq $4 * SIZE, BUFFER 4307 ALIGN_3 4308 4309.L996: 4310 testq $1, MM 4311 jle .L999 4312 4313 movsd (Y), %xmm0 4314 4315 addps 0 * SIZE(BUFFER), %xmm0 4316 4317 movlps %xmm0, (Y1) 4318 ALIGN_3 4319 4320.L999: 4321 movq M, I 4322 salq $ZBASE_SHIFT,I 4323 addq I,AA 4324 jmp .L0t 4325.L999x: 4326 movq 0(%rsp), %rbx 4327 movq 8(%rsp), %rbp 4328 movq 16(%rsp), %r12 4329 movq 24(%rsp), %r13 4330 movq 32(%rsp), %r14 4331 movq 40(%rsp), %r15 4332 4333#ifdef WINDOWS_ABI 4334 movq 48(%rsp), %rdi 4335 movq 56(%rsp), %rsi 4336 movups 64(%rsp), %xmm6 4337 movups 80(%rsp), %xmm7 4338 movups 96(%rsp), %xmm8 4339 movups 112(%rsp), %xmm9 4340 movups 128(%rsp), %xmm10 4341 movups 144(%rsp), %xmm11 4342 movups 160(%rsp), %xmm12 4343 movups 176(%rsp), %xmm13 4344 movups 192(%rsp), %xmm14 4345 movups 208(%rsp), %xmm15 4346#endif 4347 4348 addq $STACKSIZE, %rsp 4349 ret 4350 4351 EPILOGUE 4352