1/*********************************************************************/ 2/* */ 3/* Optimized BLAS libraries */ 4/* By Kazushige Goto <kgoto@tacc.utexas.edu> */ 5/* */ 6/* Copyright (c) The University of Texas, 2009. All rights reserved. */ 7/* UNIVERSITY EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES CONCERNING */ 8/* THIS SOFTWARE AND DOCUMENTATION, INCLUDING ANY WARRANTIES OF */ 9/* MERCHANTABILITY, FITNESS FOR ANY PARTICULAR PURPOSE, */ 10/* NON-INFRINGEMENT AND WARRANTIES OF PERFORMANCE, AND ANY WARRANTY */ 11/* THAT MIGHT OTHERWISE ARISE FROM COURSE OF DEALING OR USAGE OF */ 12/* TRADE. NO WARRANTY IS EITHER EXPRESS OR IMPLIED WITH RESPECT TO */ 13/* THE USE OF THE SOFTWARE OR DOCUMENTATION. */ 14/* Under no circumstances shall University be liable for incidental, */ 15/* special, indirect, direct or consequential damages or loss of */ 16/* profits, interruption of business, or related expenses which may */ 17/* arise from use of Software or Documentation, including but not */ 18/* limited to those resulting from defects in Software and/or */ 19/* Documentation, or loss or inaccuracy of data of any kind. */ 20/*********************************************************************/ 21 22#define ASSEMBLER 23#include "common.h" 24 25#define OLD_M %rdi 26#define OLD_N %rsi 27#define OLD_K %rdx 28 29#define M %r13 30#define N %r14 31#define K %r15 32 33#define A %rcx 34#define B %r8 35#define C %r9 36#define LDC %r10 37 38#define I %r11 39#define AO %rdi 40#define BO %rsi 41#define CO1 %rbx 42#define CO2 %rbp 43#define KK %rdx 44#define BB %r12 45 46#ifndef WINDOWS_ABI 47 48#define STACKSIZE 128 49 50#define OLD_LDC 8 + STACKSIZE(%rsp) 51#define OLD_OFFSET 16 + STACKSIZE(%rsp) 52 53#define OFFSET 48(%rsp) 54#define J 56(%rsp) 55#define KKK 64(%rsp) 56#define AORIG 72(%rsp) 57 58#else 59 60#define STACKSIZE 256 61 62#define OLD_ALPHA_I 40 + STACKSIZE(%rsp) 63#define OLD_A 48 + STACKSIZE(%rsp) 64#define OLD_B 56 + STACKSIZE(%rsp) 65#define OLD_C 64 + STACKSIZE(%rsp) 66#define OLD_LDC 72 + STACKSIZE(%rsp) 67#define OLD_OFFSET 80 + STACKSIZE(%rsp) 68 69#define OFFSET 224(%rsp) 70#define J 232(%rsp) 71#define KKK 240(%rsp) 72#define AORIG 248(%rsp) 73 74#endif 75 76#define PREFETCHSIZE (16 * 1 + 4) 77#define PREFETCH prefetcht0 78 79#define ADD1 addps 80#define ADD2 addps 81 82 PROLOGUE 83 PROFCODE 84 85 subq $STACKSIZE, %rsp 86 87 movq %rbx, 0(%rsp) 88 movq %rbp, 8(%rsp) 89 movq %r12, 16(%rsp) 90 movq %r13, 24(%rsp) 91 movq %r14, 32(%rsp) 92 movq %r15, 40(%rsp) 93 94#ifdef WINDOWS_ABI 95 movq %rdi, 48(%rsp) 96 movq %rsi, 56(%rsp) 97 movups %xmm6, 64(%rsp) 98 movups %xmm7, 80(%rsp) 99 movups %xmm8, 96(%rsp) 100 movups %xmm9, 112(%rsp) 101 movups %xmm10, 128(%rsp) 102 movups %xmm11, 144(%rsp) 103 movups %xmm12, 160(%rsp) 104 movups %xmm13, 176(%rsp) 105 movups %xmm14, 192(%rsp) 106 movups %xmm15, 208(%rsp) 107 108 movq ARG1, OLD_M 109 movq ARG2, OLD_N 110 movq ARG3, OLD_K 111 movq OLD_A, A 112 movq OLD_B, B 113 movq OLD_C, C 114#endif 115 116 subq $-32 * SIZE, A 117 subq $-32 * SIZE, B 118 119 movq OLD_M, M 120 movq OLD_N, N 121 movq OLD_K, K 122 movq OLD_LDC, LDC 123 movq OLD_OFFSET, KK 124 125 salq $ZBASE_SHIFT, LDC 126 127 movq KK, OFFSET 128 negq KK 129 130#ifdef LN 131 movq M, %rax 132 salq $ZBASE_SHIFT, %rax 133 addq %rax, C 134 imulq K, %rax 135 addq %rax, A 136#endif 137 138#ifdef RT 139 movq N, %rax 140 salq $ZBASE_SHIFT, %rax 141 imulq K, %rax 142 addq %rax, B 143 144 movq N, %rax 145 imulq LDC, %rax 146 addq %rax, C 147#endif 148 149#ifdef RT 150 movq N, KK 151 subq OFFSET, KK 152#endif 153 154 movq N, J 155 sarq $2, J 156 NOBRANCH 157 jle .L30 158 ALIGN_4 159 160.L01: 161#if defined(LT) || defined(RN) 162 movq A, AO 163#else 164 movq A, AORIG 165#endif 166 167#ifdef RT 168 movq K, %rax 169 salq $2 + ZBASE_SHIFT, %rax 170 subq %rax, B 171 172 leaq (, LDC, 4), %rax 173 subq %rax, C 174#endif 175 176 movq C, CO1 177 leaq (C, LDC, 2), CO2 178#ifndef RT 179 leaq (C, LDC, 4), C 180#endif 181 182#ifdef LN 183 movq OFFSET, KK 184 addq M, KK 185#endif 186 187 movq K, %rax 188 salq $ZBASE_SHIFT + 2, %rax 189 leaq (B, %rax), BB 190 191#ifdef LT 192 movq OFFSET, KK 193#endif 194 195 movq M, I 196 sarq $1, I 197 NOBRANCH 198 jle .L20 199 ALIGN_4 200 201.L11: 202#ifdef LN 203 movq K, %rax 204 salq $1 + ZBASE_SHIFT, %rax 205 subq %rax, AORIG 206#endif 207 208#if defined(LN) || defined(RT) 209 movq AORIG, AO 210 211 movq KK, %rax 212 salq $ZBASE_SHIFT, %rax 213 214 leaq (AO, %rax, 2), AO 215 leaq (B, %rax, 4), BO 216#else 217 movq B, BO 218#endif 219 220 prefetchnta -32 * SIZE(BB) 221 subq $-16 * SIZE, BB 222 223 xorps %xmm1, %xmm1 224 movaps -32 * SIZE(AO), %xmm0 225 xorps %xmm2, %xmm2 226 xorps %xmm3, %xmm3 227 xorps %xmm4, %xmm4 228 229 xorps %xmm8, %xmm8 230 prefetcht2 4 * SIZE(CO1) 231 xorps %xmm9, %xmm9 232 prefetcht2 4 * SIZE(CO1, LDC, 1) 233 xorps %xmm10, %xmm10 234 xorps %xmm11, %xmm11 235 236 xorps %xmm12, %xmm12 237 prefetcht2 4 * SIZE(CO2) 238 xorps %xmm13, %xmm13 239 prefetcht2 4 * SIZE(CO2, LDC, 1) 240 xorps %xmm14, %xmm14 241 xorps %xmm15, %xmm15 242 243#if defined(LT) || defined(RN) 244 movq KK, %rax 245#else 246 movq K, %rax 247 subq KK, %rax 248#endif 249 sarq $2, %rax 250 NOBRANCH 251 jle .L15 252 ALIGN_3 253 254.L12: 255 PREFETCH (PREFETCHSIZE + 0) * SIZE(AO) 256 257 ADD1 %xmm1, %xmm12 258 movaps -32 * SIZE(BO), %xmm1 259 ADD2 %xmm2, %xmm13 260 pshufd $0xb1, %xmm1, %xmm2 261 mulps %xmm0, %xmm1 262 pshufd $0x1b, %xmm2, %xmm5 263 mulps %xmm0, %xmm2 264 265 ADD1 %xmm3, %xmm14 266 ADD2 %xmm4, %xmm15 267 pshufd $0xb1, %xmm5, %xmm6 268 mulps %xmm0, %xmm5 269 mulps %xmm0, %xmm6 270 271 ADD1 %xmm1, %xmm8 272 movaps -28 * SIZE(BO), %xmm1 273 ADD2 %xmm2, %xmm9 274 pshufd $0xb1, %xmm1, %xmm2 275 mulps %xmm0, %xmm1 276 pshufd $0x1b, %xmm2, %xmm3 277 mulps %xmm0, %xmm2 278 279 ADD1 %xmm5, %xmm10 280 ADD2 %xmm6, %xmm11 281 pshufd $0xb1, %xmm3, %xmm4 282 mulps %xmm0, %xmm3 283 mulps %xmm0, %xmm4 284 285 movaps -28 * SIZE(AO), %xmm0 286 287 ADD1 %xmm1, %xmm12 288 movaps -24 * SIZE(BO), %xmm1 289 ADD2 %xmm2, %xmm13 290 pshufd $0xb1, %xmm1, %xmm2 291 mulps %xmm0, %xmm1 292 pshufd $0x1b, %xmm2, %xmm5 293 mulps %xmm0, %xmm2 294 295 ADD1 %xmm3, %xmm14 296 ADD2 %xmm4, %xmm15 297 pshufd $0xb1, %xmm5, %xmm6 298 mulps %xmm0, %xmm5 299 mulps %xmm0, %xmm6 300 301 ADD1 %xmm1, %xmm8 302 movaps -20 * SIZE(BO), %xmm1 303 ADD2 %xmm2, %xmm9 304 pshufd $0xb1, %xmm1, %xmm2 305 mulps %xmm0, %xmm1 306 pshufd $0x1b, %xmm2, %xmm3 307 mulps %xmm0, %xmm2 308 309 ADD1 %xmm5, %xmm10 310 ADD2 %xmm6, %xmm11 311 pshufd $0xb1, %xmm3, %xmm4 312 mulps %xmm0, %xmm3 313 mulps %xmm0, %xmm4 314 315 movaps -24 * SIZE(AO), %xmm0 316 317 ADD1 %xmm1, %xmm12 318 movaps -16 * SIZE(BO), %xmm1 319 ADD2 %xmm2, %xmm13 320 pshufd $0xb1, %xmm1, %xmm2 321 mulps %xmm0, %xmm1 322 pshufd $0x1b, %xmm2, %xmm5 323 mulps %xmm0, %xmm2 324 325 ADD1 %xmm3, %xmm14 326 ADD2 %xmm4, %xmm15 327 pshufd $0xb1, %xmm5, %xmm6 328 mulps %xmm0, %xmm5 329 mulps %xmm0, %xmm6 330 331 ADD1 %xmm1, %xmm8 332 movaps -12 * SIZE(BO), %xmm1 333 ADD2 %xmm2, %xmm9 334 pshufd $0xb1, %xmm1, %xmm2 335 mulps %xmm0, %xmm1 336 pshufd $0x1b, %xmm2, %xmm3 337 mulps %xmm0, %xmm2 338 339 ADD1 %xmm5, %xmm10 340 ADD2 %xmm6, %xmm11 341 pshufd $0xb1, %xmm3, %xmm4 342 mulps %xmm0, %xmm3 343 mulps %xmm0, %xmm4 344 345 movaps -20 * SIZE(AO), %xmm0 346 347 ADD1 %xmm1, %xmm12 348 movaps -8 * SIZE(BO), %xmm1 349 ADD2 %xmm2, %xmm13 350 pshufd $0xb1, %xmm1, %xmm2 351 mulps %xmm0, %xmm1 352 pshufd $0x1b, %xmm2, %xmm5 353 mulps %xmm0, %xmm2 354 355 ADD1 %xmm3, %xmm14 356 ADD2 %xmm4, %xmm15 357 pshufd $0xb1, %xmm5, %xmm6 358 mulps %xmm0, %xmm5 359 mulps %xmm0, %xmm6 360 361 ADD1 %xmm1, %xmm8 362 movaps -4 * SIZE(BO), %xmm1 363 ADD2 %xmm2, %xmm9 364 subq $-32 * SIZE, BO 365 pshufd $0xb1, %xmm1, %xmm2 366 mulps %xmm0, %xmm1 367 pshufd $0x1b, %xmm2, %xmm3 368 mulps %xmm0, %xmm2 369 370 ADD1 %xmm5, %xmm10 371 ADD2 %xmm6, %xmm11 372 pshufd $0xb1, %xmm3, %xmm4 373 mulps %xmm0, %xmm3 374 mulps %xmm0, %xmm4 375 376 movaps -16 * SIZE(AO), %xmm0 377 378 subq $-16 * SIZE, AO 379 subq $1, %rax 380 BRANCH 381 jg .L12 382 ALIGN_3 383 384.L15: 385#if defined(LT) || defined(RN) 386 movq KK, %rax 387#else 388 movq K, %rax 389 subq KK, %rax 390#endif 391 andq $3, %rax # if (k & 1) 392 BRANCH 393 je .L18 394 ALIGN_3 395 396.L16: 397 ADD1 %xmm1, %xmm12 398 movaps -32 * SIZE(BO), %xmm1 399 ADD2 %xmm2, %xmm13 400 pshufd $0xb1, %xmm1, %xmm2 401 mulps %xmm0, %xmm1 402 pshufd $0x1b, %xmm2, %xmm5 403 mulps %xmm0, %xmm2 404 405 ADD1 %xmm3, %xmm14 406 ADD2 %xmm4, %xmm15 407 pshufd $0xb1, %xmm5, %xmm6 408 mulps %xmm0, %xmm5 409 mulps %xmm0, %xmm6 410 411 ADD1 %xmm1, %xmm8 412 movaps -28 * SIZE(BO), %xmm1 413 ADD2 %xmm2, %xmm9 414 pshufd $0xb1, %xmm1, %xmm2 415 mulps %xmm0, %xmm1 416 pshufd $0x1b, %xmm2, %xmm3 417 mulps %xmm0, %xmm2 418 419 ADD1 %xmm5, %xmm10 420 ADD2 %xmm6, %xmm11 421 pshufd $0xb1, %xmm3, %xmm4 422 mulps %xmm0, %xmm3 423 mulps %xmm0, %xmm4 424 425 movaps -28 * SIZE(AO), %xmm0 426 427 addq $4 * SIZE, AO 428 addq $8 * SIZE, BO 429 430 subq $1, %rax 431 BRANCH 432 jg .L16 433 ALIGN_3 434 435.L18: 436#if defined(LN) || defined(RT) 437 movq KK, %rax 438#ifdef LN 439 subq $2, %rax 440#else 441 subq $4, %rax 442#endif 443 444 salq $ZBASE_SHIFT, %rax 445 446 movq AORIG, AO 447 leaq (AO, %rax, 2), AO 448 leaq (B, %rax, 4), BO 449#endif 450 451 ADD1 %xmm1, %xmm12 452 ADD2 %xmm2, %xmm13 453 ADD1 %xmm3, %xmm14 454 ADD2 %xmm4, %xmm15 455 456 pcmpeqb %xmm0, %xmm0 457 psllq $63, %xmm0 458 459#if defined(LN) || defined(LT) 460 461#ifndef CONJ 462 xorps %xmm0, %xmm8 463 xorps %xmm0, %xmm10 464 xorps %xmm0, %xmm12 465 xorps %xmm0, %xmm14 466#else 467 xorps %xmm0, %xmm9 468 xorps %xmm0, %xmm11 469 xorps %xmm0, %xmm13 470 xorps %xmm0, %xmm15 471#endif 472 473#else 474 475#ifndef CONJ 476 xorps %xmm0, %xmm8 477 xorps %xmm0, %xmm10 478 xorps %xmm0, %xmm12 479 xorps %xmm0, %xmm14 480#else 481 shufps $0xb1, %xmm0, %xmm0 482 483 xorps %xmm0, %xmm9 484 xorps %xmm0, %xmm11 485 xorps %xmm0, %xmm13 486 xorps %xmm0, %xmm15 487#endif 488 489#endif 490 491 haddps %xmm9, %xmm8 492 haddps %xmm11, %xmm10 493 haddps %xmm13, %xmm12 494 haddps %xmm15, %xmm14 495 496 shufps $0xd8, %xmm8, %xmm8 497 shufps $0xd8, %xmm10, %xmm10 498 shufps $0xd8, %xmm12, %xmm12 499 shufps $0xd8, %xmm14, %xmm14 500 501 movaps %xmm8, %xmm9 502 shufps $0xe4, %xmm10, %xmm8 503 shufps $0xe4, %xmm9, %xmm10 504 505 movaps %xmm12, %xmm13 506 shufps $0xe4, %xmm14, %xmm12 507 shufps $0xe4, %xmm13, %xmm14 508 509#if defined(LN) || defined(LT) 510 movaps %xmm8, %xmm9 511 movlhps %xmm10, %xmm8 512 movhlps %xmm9, %xmm10 513 514 movaps %xmm12, %xmm11 515 movlhps %xmm14, %xmm12 516 movhlps %xmm11, %xmm14 517 518 movaps -32 * SIZE(BO), %xmm9 519 movaps -28 * SIZE(BO), %xmm13 520 movaps -24 * SIZE(BO), %xmm11 521 movaps -20 * SIZE(BO), %xmm15 522 523 subps %xmm8, %xmm9 524 subps %xmm10, %xmm11 525 subps %xmm12, %xmm13 526 subps %xmm14, %xmm15 527#else 528 movaps -32 * SIZE(AO), %xmm9 529 movaps -28 * SIZE(AO), %xmm11 530 movaps -24 * SIZE(AO), %xmm13 531 movaps -20 * SIZE(AO), %xmm15 532 533 subps %xmm8, %xmm9 534 subps %xmm10, %xmm11 535 subps %xmm12, %xmm13 536 subps %xmm14, %xmm15 537#endif 538 539 pcmpeqb %xmm7, %xmm7 540 psllq $63, %xmm7 541 542#ifndef CONJ 543 shufps $0xb1, %xmm7, %xmm7 544#endif 545 546#ifdef LN 547 movaps -28 * SIZE(AO), %xmm5 548 549 pshufd $0xaa, %xmm5, %xmm0 550 pshufd $0xff, %xmm5, %xmm1 551 552 pshufd $0xb1, %xmm11, %xmm10 553 pshufd $0xb1, %xmm15, %xmm14 554 555 xorps %xmm7, %xmm10 556 xorps %xmm7, %xmm14 557 558 mulps %xmm0, %xmm11 559 mulps %xmm1, %xmm10 560 mulps %xmm0, %xmm15 561 mulps %xmm1, %xmm14 562 563 addps %xmm10, %xmm11 564 addps %xmm14, %xmm15 565 566 pshufd $0x00, %xmm5, %xmm0 567 pshufd $0x55, %xmm5, %xmm1 568 569 movaps %xmm11, %xmm3 570 pshufd $0xb1, %xmm11, %xmm2 571 movaps %xmm15, %xmm5 572 pshufd $0xb1, %xmm15, %xmm4 573 574 xorps %xmm7, %xmm2 575 xorps %xmm7, %xmm4 576 577 mulps %xmm0, %xmm3 578 mulps %xmm1, %xmm2 579 mulps %xmm0, %xmm5 580 mulps %xmm1, %xmm4 581 582 subps %xmm3, %xmm9 583 subps %xmm2, %xmm9 584 subps %xmm5, %xmm13 585 subps %xmm4, %xmm13 586 587 movaps -32 * SIZE(AO), %xmm5 588 589 pshufd $0x00, %xmm5, %xmm0 590 pshufd $0x55, %xmm5, %xmm1 591 592 pshufd $0xb1, %xmm9, %xmm10 593 pshufd $0xb1, %xmm13, %xmm14 594 595 xorps %xmm7, %xmm10 596 xorps %xmm7, %xmm14 597 598 mulps %xmm0, %xmm9 599 mulps %xmm1, %xmm10 600 mulps %xmm0, %xmm13 601 mulps %xmm1, %xmm14 602 603 addps %xmm10, %xmm9 604 addps %xmm14, %xmm13 605#endif 606 607#ifdef LT 608 movaps -32 * SIZE(AO), %xmm5 609 610 pshufd $0x00, %xmm5, %xmm0 611 pshufd $0x55, %xmm5, %xmm1 612 613 pshufd $0xb1, %xmm9, %xmm10 614 pshufd $0xb1, %xmm13, %xmm14 615 616 xorps %xmm7, %xmm10 617 xorps %xmm7, %xmm14 618 619 mulps %xmm0, %xmm9 620 mulps %xmm1, %xmm10 621 mulps %xmm0, %xmm13 622 mulps %xmm1, %xmm14 623 624 addps %xmm10, %xmm9 625 addps %xmm14, %xmm13 626 627 pshufd $0xaa, %xmm5, %xmm0 628 pshufd $0xff, %xmm5, %xmm1 629 630 movaps %xmm9, %xmm3 631 pshufd $0xb1, %xmm9, %xmm2 632 movaps %xmm13, %xmm5 633 pshufd $0xb1, %xmm13, %xmm4 634 635 xorps %xmm7, %xmm2 636 xorps %xmm7, %xmm4 637 638 mulps %xmm0, %xmm3 639 mulps %xmm1, %xmm2 640 mulps %xmm0, %xmm5 641 mulps %xmm1, %xmm4 642 643 subps %xmm3, %xmm11 644 subps %xmm2, %xmm11 645 subps %xmm5, %xmm15 646 subps %xmm4, %xmm15 647 648 movaps -28 * SIZE(AO), %xmm5 649 650 pshufd $0xaa, %xmm5, %xmm0 651 pshufd $0xff, %xmm5, %xmm1 652 653 pshufd $0xb1, %xmm11, %xmm10 654 pshufd $0xb1, %xmm15, %xmm14 655 656 xorps %xmm7, %xmm10 657 xorps %xmm7, %xmm14 658 659 mulps %xmm0, %xmm11 660 mulps %xmm1, %xmm10 661 mulps %xmm0, %xmm15 662 mulps %xmm1, %xmm14 663 664 addps %xmm10, %xmm11 665 addps %xmm14, %xmm15 666#endif 667 668#ifdef RN 669 movaps -32 * SIZE(BO), %xmm5 670 671 pshufd $0x00, %xmm5, %xmm0 672 pshufd $0x55, %xmm5, %xmm1 673 674 pshufd $0xb1, %xmm9, %xmm8 675 676 xorps %xmm7, %xmm8 677 678 mulps %xmm0, %xmm9 679 mulps %xmm1, %xmm8 680 681 addps %xmm8, %xmm9 682 683 movaps %xmm9, %xmm3 684 pshufd $0xb1, %xmm9, %xmm2 685 686 xorps %xmm7, %xmm2 687 688 pshufd $0xaa, %xmm5, %xmm0 689 pshufd $0xff, %xmm5, %xmm1 690 691 mulps %xmm3, %xmm0 692 mulps %xmm2, %xmm1 693 694 subps %xmm0, %xmm11 695 subps %xmm1, %xmm11 696 697 movaps -28 * SIZE(BO), %xmm5 698 699 pshufd $0x00, %xmm5, %xmm0 700 pshufd $0x55, %xmm5, %xmm1 701 702 mulps %xmm3, %xmm0 703 mulps %xmm2, %xmm1 704 705 subps %xmm0, %xmm13 706 subps %xmm1, %xmm13 707 708 pshufd $0xaa, %xmm5, %xmm0 709 pshufd $0xff, %xmm5, %xmm1 710 711 mulps %xmm3, %xmm0 712 mulps %xmm2, %xmm1 713 714 subps %xmm0, %xmm15 715 subps %xmm1, %xmm15 716 717 movaps -24 * SIZE(BO), %xmm5 718 719 pshufd $0xaa, %xmm5, %xmm0 720 pshufd $0xff, %xmm5, %xmm1 721 722 pshufd $0xb1, %xmm11, %xmm10 723 724 xorps %xmm7, %xmm10 725 726 mulps %xmm0, %xmm11 727 mulps %xmm1, %xmm10 728 729 addps %xmm10, %xmm11 730 731 movaps %xmm11, %xmm3 732 pshufd $0xb1, %xmm11, %xmm2 733 734 xorps %xmm7, %xmm2 735 736 movaps -20 * SIZE(BO), %xmm5 737 738 pshufd $0x00, %xmm5, %xmm0 739 pshufd $0x55, %xmm5, %xmm1 740 741 mulps %xmm3, %xmm0 742 mulps %xmm2, %xmm1 743 744 subps %xmm0, %xmm13 745 subps %xmm1, %xmm13 746 747 pshufd $0xaa, %xmm5, %xmm0 748 pshufd $0xff, %xmm5, %xmm1 749 750 mulps %xmm3, %xmm0 751 mulps %xmm2, %xmm1 752 753 subps %xmm0, %xmm15 754 subps %xmm1, %xmm15 755 756 movaps -12 * SIZE(BO), %xmm5 757 758 pshufd $0x00, %xmm5, %xmm0 759 pshufd $0x55, %xmm5, %xmm1 760 761 pshufd $0xb1, %xmm13, %xmm12 762 763 xorps %xmm7, %xmm12 764 765 mulps %xmm0, %xmm13 766 mulps %xmm1, %xmm12 767 768 addps %xmm12, %xmm13 769 770 movaps %xmm13, %xmm3 771 pshufd $0xb1, %xmm13, %xmm2 772 773 xorps %xmm7, %xmm2 774 775 pshufd $0xaa, %xmm5, %xmm0 776 pshufd $0xff, %xmm5, %xmm1 777 778 mulps %xmm3, %xmm0 779 mulps %xmm2, %xmm1 780 781 subps %xmm0, %xmm15 782 subps %xmm1, %xmm15 783 784 movaps -4 * SIZE(BO), %xmm5 785 786 pshufd $0xaa, %xmm5, %xmm0 787 pshufd $0xff, %xmm5, %xmm1 788 789 pshufd $0xb1, %xmm15, %xmm14 790 791 xorps %xmm7, %xmm14 792 793 mulps %xmm0, %xmm15 794 mulps %xmm1, %xmm14 795 796 addps %xmm14, %xmm15 797#endif 798 799#ifdef RT 800 movaps -4 * SIZE(BO), %xmm5 801 802 pshufd $0xaa, %xmm5, %xmm0 803 pshufd $0xff, %xmm5, %xmm1 804 805 pshufd $0xb1, %xmm15, %xmm14 806 807 xorps %xmm7, %xmm14 808 809 mulps %xmm0, %xmm15 810 mulps %xmm1, %xmm14 811 812 addps %xmm14, %xmm15 813 814 movaps %xmm15, %xmm3 815 pshufd $0xb1, %xmm15, %xmm2 816 817 xorps %xmm7, %xmm2 818 819 pshufd $0x00, %xmm5, %xmm0 820 pshufd $0x55, %xmm5, %xmm1 821 822 mulps %xmm3, %xmm0 823 mulps %xmm2, %xmm1 824 825 subps %xmm0, %xmm13 826 subps %xmm1, %xmm13 827 828 movaps -8 * SIZE(BO), %xmm5 829 830 pshufd $0xaa, %xmm5, %xmm0 831 pshufd $0xff, %xmm5, %xmm1 832 833 mulps %xmm3, %xmm0 834 mulps %xmm2, %xmm1 835 836 subps %xmm0, %xmm11 837 subps %xmm1, %xmm11 838 839 pshufd $0x00, %xmm5, %xmm0 840 pshufd $0x55, %xmm5, %xmm1 841 842 mulps %xmm3, %xmm0 843 mulps %xmm2, %xmm1 844 845 subps %xmm0, %xmm9 846 subps %xmm1, %xmm9 847 848 movaps -12 * SIZE(BO), %xmm5 849 850 pshufd $0x00, %xmm5, %xmm0 851 pshufd $0x55, %xmm5, %xmm1 852 853 pshufd $0xb1, %xmm13, %xmm12 854 855 xorps %xmm7, %xmm12 856 857 mulps %xmm0, %xmm13 858 mulps %xmm1, %xmm12 859 860 addps %xmm12, %xmm13 861 862 movaps %xmm13, %xmm3 863 pshufd $0xb1, %xmm13, %xmm2 864 865 xorps %xmm7, %xmm2 866 867 movaps -16 * SIZE(BO), %xmm5 868 869 pshufd $0xaa, %xmm5, %xmm0 870 pshufd $0xff, %xmm5, %xmm1 871 872 mulps %xmm3, %xmm0 873 mulps %xmm2, %xmm1 874 875 subps %xmm0, %xmm11 876 subps %xmm1, %xmm11 877 878 pshufd $0x00, %xmm5, %xmm0 879 pshufd $0x55, %xmm5, %xmm1 880 881 mulps %xmm3, %xmm0 882 mulps %xmm2, %xmm1 883 884 subps %xmm0, %xmm9 885 subps %xmm1, %xmm9 886 887 888 movaps -24 * SIZE(BO), %xmm5 889 890 pshufd $0xaa, %xmm5, %xmm0 891 pshufd $0xff, %xmm5, %xmm1 892 893 pshufd $0xb1, %xmm11, %xmm10 894 895 xorps %xmm7, %xmm10 896 897 mulps %xmm0, %xmm11 898 mulps %xmm1, %xmm10 899 900 addps %xmm10, %xmm11 901 902 movaps %xmm11, %xmm3 903 pshufd $0xb1, %xmm11, %xmm2 904 905 xorps %xmm7, %xmm2 906 907 pshufd $0x00, %xmm5, %xmm0 908 pshufd $0x55, %xmm5, %xmm1 909 910 mulps %xmm3, %xmm0 911 mulps %xmm2, %xmm1 912 913 subps %xmm0, %xmm9 914 subps %xmm1, %xmm9 915 916 movaps -32 * SIZE(BO), %xmm5 917 918 pshufd $0x00, %xmm5, %xmm0 919 pshufd $0x55, %xmm5, %xmm1 920 921 pshufd $0xb1, %xmm9, %xmm8 922 923 xorps %xmm7, %xmm8 924 925 mulps %xmm0, %xmm9 926 mulps %xmm1, %xmm8 927 928 addps %xmm8, %xmm9 929#endif 930 931#ifdef LN 932 subq $4 * SIZE, CO1 933 subq $4 * SIZE, CO2 934#endif 935 936#if defined(LN) || defined(LT) 937 movaps %xmm9, -32 * SIZE(BO) 938 movaps %xmm13, -28 * SIZE(BO) 939 movaps %xmm11, -24 * SIZE(BO) 940 movaps %xmm15, -20 * SIZE(BO) 941 942 movsd %xmm9, 0 * SIZE(CO1) 943 movsd %xmm11, 2 * SIZE(CO1) 944 movhps %xmm9, 0 * SIZE(CO1, LDC) 945 movhps %xmm11, 2 * SIZE(CO1, LDC) 946 947 movsd %xmm13, 0 * SIZE(CO2) 948 movsd %xmm15, 2 * SIZE(CO2) 949 movhps %xmm13, 0 * SIZE(CO2, LDC) 950 movhps %xmm15, 2 * SIZE(CO2, LDC) 951#else 952 movaps %xmm9, -32 * SIZE(AO) 953 movaps %xmm11, -28 * SIZE(AO) 954 movaps %xmm13, -24 * SIZE(AO) 955 movaps %xmm15, -20 * SIZE(AO) 956 957 movsd %xmm9, 0 * SIZE(CO1) 958 movhps %xmm9, 2 * SIZE(CO1) 959 movsd %xmm11, 0 * SIZE(CO1, LDC) 960 movhps %xmm11, 2 * SIZE(CO1, LDC) 961 movsd %xmm13, 0 * SIZE(CO2) 962 movhps %xmm13, 2 * SIZE(CO2) 963 movsd %xmm15, 0 * SIZE(CO2, LDC) 964 movhps %xmm15, 2 * SIZE(CO2, LDC) 965#endif 966 967#ifndef LN 968 addq $4 * SIZE, CO1 969 addq $4 * SIZE, CO2 970#endif 971 972#if defined(LT) || defined(RN) 973 movq K, %rax 974 subq KK, %rax 975 salq $ZBASE_SHIFT, %rax 976 leaq (AO, %rax, 2), AO 977 leaq (BO, %rax, 4), BO 978#endif 979 980#ifdef LN 981 subq $2, KK 982#endif 983 984#ifdef LT 985 addq $2, KK 986#endif 987 988#ifdef RT 989 movq K, %rax 990 salq $1 + ZBASE_SHIFT, %rax 991 addq %rax, AORIG 992#endif 993 994 decq I # i -- 995 BRANCH 996 jg .L11 997 ALIGN_4 998 999.L20: 1000 testq $1, M 1001 BRANCH 1002 jle .L29 1003 1004#ifdef LN 1005 movq K, %rax 1006 salq $ZBASE_SHIFT, %rax 1007 subq %rax, AORIG 1008#endif 1009 1010#if defined(LN) || defined(RT) 1011 movq AORIG, AO 1012 1013 movq KK, %rax 1014 salq $ZBASE_SHIFT, %rax 1015 1016 leaq (AO, %rax, 1), AO 1017 leaq (B, %rax, 4), BO 1018#else 1019 movq B, BO 1020#endif 1021 1022 xorps %xmm1, %xmm1 1023 movddup -32 * SIZE(AO), %xmm0 1024 xorps %xmm2, %xmm2 1025 movaps -32 * SIZE(BO), %xmm5 1026 xorps %xmm3, %xmm3 1027 xorps %xmm4, %xmm4 1028 1029 xorps %xmm8, %xmm8 1030 xorps %xmm9, %xmm9 1031 xorps %xmm10, %xmm10 1032 xorps %xmm11, %xmm11 1033 1034#if defined(LT) || defined(RN) 1035 movq KK, %rax 1036#else 1037 movq K, %rax 1038 subq KK, %rax 1039#endif 1040 sarq $2, %rax 1041 NOBRANCH 1042 jle .L25 1043 ALIGN_3 1044 1045.L22: 1046 ADD1 %xmm1, %xmm8 1047 pshufd $0xa0, %xmm5, %xmm1 1048 mulps %xmm0, %xmm1 1049 ADD2 %xmm2, %xmm9 1050 pshufd $0xf5, %xmm5, %xmm2 1051 movaps -28 * SIZE(BO), %xmm5 1052 mulps %xmm0, %xmm2 1053 ADD1 %xmm3, %xmm10 1054 pshufd $0xa0, %xmm5, %xmm3 1055 mulps %xmm0, %xmm3 1056 ADD2 %xmm4, %xmm11 1057 pshufd $0xf5, %xmm5, %xmm4 1058 movaps -24 * SIZE(BO), %xmm5 1059 mulps %xmm0, %xmm4 1060 movddup -30 * SIZE(AO), %xmm0 1061 1062 ADD1 %xmm1, %xmm8 1063 pshufd $0xa0, %xmm5, %xmm1 1064 mulps %xmm0, %xmm1 1065 ADD2 %xmm2, %xmm9 1066 pshufd $0xf5, %xmm5, %xmm2 1067 movaps -20 * SIZE(BO), %xmm5 1068 mulps %xmm0, %xmm2 1069 ADD1 %xmm3, %xmm10 1070 pshufd $0xa0, %xmm5, %xmm3 1071 mulps %xmm0, %xmm3 1072 ADD2 %xmm4, %xmm11 1073 pshufd $0xf5, %xmm5, %xmm4 1074 movaps -16 * SIZE(BO), %xmm5 1075 mulps %xmm0, %xmm4 1076 movddup -28 * SIZE(AO), %xmm0 1077 1078 ADD1 %xmm1, %xmm8 1079 pshufd $0xa0, %xmm5, %xmm1 1080 mulps %xmm0, %xmm1 1081 ADD2 %xmm2, %xmm9 1082 pshufd $0xf5, %xmm5, %xmm2 1083 movaps -12 * SIZE(BO), %xmm5 1084 mulps %xmm0, %xmm2 1085 ADD1 %xmm3, %xmm10 1086 pshufd $0xa0, %xmm5, %xmm3 1087 mulps %xmm0, %xmm3 1088 ADD2 %xmm4, %xmm11 1089 pshufd $0xf5, %xmm5, %xmm4 1090 movaps -8 * SIZE(BO), %xmm5 1091 mulps %xmm0, %xmm4 1092 movddup -26 * SIZE(AO), %xmm0 1093 1094 ADD1 %xmm1, %xmm8 1095 pshufd $0xa0, %xmm5, %xmm1 1096 mulps %xmm0, %xmm1 1097 ADD2 %xmm2, %xmm9 1098 pshufd $0xf5, %xmm5, %xmm2 1099 movaps -4 * SIZE(BO), %xmm5 1100 mulps %xmm0, %xmm2 1101 ADD1 %xmm3, %xmm10 1102 pshufd $0xa0, %xmm5, %xmm3 1103 mulps %xmm0, %xmm3 1104 ADD2 %xmm4, %xmm11 1105 pshufd $0xf5, %xmm5, %xmm4 1106 movaps 0 * SIZE(BO), %xmm5 1107 mulps %xmm0, %xmm4 1108 movddup -24 * SIZE(AO), %xmm0 1109 1110 subq $-32 * SIZE, BO 1111 subq $ -8 * SIZE, AO 1112 1113 subq $1, %rax 1114 BRANCH 1115 jg .L22 1116 ALIGN_3 1117 1118.L25: 1119#if defined(LT) || defined(RN) 1120 movq KK, %rax 1121#else 1122 movq K, %rax 1123 subq KK, %rax 1124#endif 1125 andq $3, %rax # if (k & 1) 1126 BRANCH 1127 je .L28 1128 ALIGN_3 1129 1130.L26: 1131 ADD1 %xmm1, %xmm8 1132 pshufd $0xa0, %xmm5, %xmm1 1133 mulps %xmm0, %xmm1 1134 ADD2 %xmm2, %xmm9 1135 pshufd $0xf5, %xmm5, %xmm2 1136 movaps -28 * SIZE(BO), %xmm5 1137 mulps %xmm0, %xmm2 1138 ADD1 %xmm3, %xmm10 1139 pshufd $0xa0, %xmm5, %xmm3 1140 mulps %xmm0, %xmm3 1141 ADD2 %xmm4, %xmm11 1142 pshufd $0xf5, %xmm5, %xmm4 1143 movaps -24 * SIZE(BO), %xmm5 1144 mulps %xmm0, %xmm4 1145 movddup -30 * SIZE(AO), %xmm0 1146 1147 addq $2 * SIZE, AO 1148 addq $8 * SIZE, BO 1149 1150 subq $1, %rax 1151 BRANCH 1152 jg .L26 1153 ALIGN_3 1154 1155.L28: 1156#if defined(LN) || defined(RT) 1157 movq KK, %rax 1158#ifdef LN 1159 subq $1, %rax 1160#else 1161 subq $4, %rax 1162#endif 1163 1164 salq $ZBASE_SHIFT, %rax 1165 1166 movq AORIG, AO 1167 leaq (AO, %rax, 1), AO 1168 leaq (B, %rax, 4), BO 1169#endif 1170 1171 ADD1 %xmm1, %xmm8 1172 ADD2 %xmm2, %xmm9 1173 ADD1 %xmm3, %xmm10 1174 ADD2 %xmm4, %xmm11 1175 1176 pcmpeqb %xmm0, %xmm0 1177 psllq $63, %xmm0 1178 1179#if defined(LN) || defined(LT) 1180 1181#ifndef CONJ 1182 xorps %xmm0, %xmm9 1183 xorps %xmm0, %xmm11 1184 shufps $0xb1, %xmm9, %xmm9 1185 shufps $0xb1, %xmm11, %xmm11 1186#else 1187 xorps %xmm0, %xmm8 1188 xorps %xmm0, %xmm10 1189 shufps $0xb1, %xmm9, %xmm9 1190 shufps $0xb1, %xmm11, %xmm11 1191#endif 1192 1193#else 1194 1195#ifndef CONJ 1196 xorps %xmm0, %xmm9 1197 xorps %xmm0, %xmm11 1198 shufps $0xb1, %xmm9, %xmm9 1199 shufps $0xb1, %xmm11, %xmm11 1200#else 1201 shufps $0xb1, %xmm9, %xmm9 1202 shufps $0xb1, %xmm11, %xmm11 1203 xorps %xmm0, %xmm9 1204 xorps %xmm0, %xmm11 1205#endif 1206 1207#endif 1208 1209 addps %xmm9, %xmm8 1210 addps %xmm11, %xmm10 1211 1212#if defined(LN) || defined(LT) 1213 movaps -32 * SIZE(BO), %xmm9 1214 movaps -28 * SIZE(BO), %xmm11 1215 1216 subps %xmm8, %xmm9 1217 subps %xmm10, %xmm11 1218#else 1219 movaps -32 * SIZE(AO), %xmm9 1220 movaps -28 * SIZE(AO), %xmm13 1221 1222 subps %xmm8, %xmm9 1223 subps %xmm10, %xmm13 1224 1225 movhlps %xmm9, %xmm11 1226 movhlps %xmm13, %xmm15 1227#endif 1228 1229 pcmpeqb %xmm7, %xmm7 1230 psllq $63, %xmm7 1231 1232#ifndef CONJ 1233 shufps $0xb1, %xmm7, %xmm7 1234#endif 1235 1236#if defined(LN) || defined(LT) 1237 movsd -32 * SIZE(AO), %xmm5 1238 1239 pshufd $0x00, %xmm5, %xmm0 1240 pshufd $0x55, %xmm5, %xmm1 1241 1242 pshufd $0xb1, %xmm9, %xmm10 1243 pshufd $0xb1, %xmm11, %xmm12 1244 1245 xorps %xmm7, %xmm10 1246 xorps %xmm7, %xmm12 1247 1248 mulps %xmm0, %xmm9 1249 mulps %xmm1, %xmm10 1250 mulps %xmm0, %xmm11 1251 mulps %xmm1, %xmm12 1252 1253 addps %xmm10, %xmm9 1254 addps %xmm12, %xmm11 1255#endif 1256 1257#ifdef RN 1258 movaps -32 * SIZE(BO), %xmm5 1259 1260 pshufd $0x00, %xmm5, %xmm0 1261 pshufd $0x55, %xmm5, %xmm1 1262 1263 pshufd $0xb1, %xmm9, %xmm8 1264 1265 xorps %xmm7, %xmm8 1266 1267 mulps %xmm0, %xmm9 1268 mulps %xmm1, %xmm8 1269 1270 addps %xmm8, %xmm9 1271 1272 movaps %xmm9, %xmm3 1273 pshufd $0xb1, %xmm9, %xmm2 1274 1275 xorps %xmm7, %xmm2 1276 1277 pshufd $0xaa, %xmm5, %xmm0 1278 pshufd $0xff, %xmm5, %xmm1 1279 1280 mulps %xmm3, %xmm0 1281 mulps %xmm2, %xmm1 1282 1283 subps %xmm0, %xmm11 1284 subps %xmm1, %xmm11 1285 1286 movaps -28 * SIZE(BO), %xmm5 1287 1288 pshufd $0x00, %xmm5, %xmm0 1289 pshufd $0x55, %xmm5, %xmm1 1290 1291 mulps %xmm3, %xmm0 1292 mulps %xmm2, %xmm1 1293 1294 subps %xmm0, %xmm13 1295 subps %xmm1, %xmm13 1296 1297 pshufd $0xaa, %xmm5, %xmm0 1298 pshufd $0xff, %xmm5, %xmm1 1299 1300 mulps %xmm3, %xmm0 1301 mulps %xmm2, %xmm1 1302 1303 subps %xmm0, %xmm15 1304 subps %xmm1, %xmm15 1305 1306 movaps -24 * SIZE(BO), %xmm5 1307 1308 pshufd $0xaa, %xmm5, %xmm0 1309 pshufd $0xff, %xmm5, %xmm1 1310 1311 pshufd $0xb1, %xmm11, %xmm10 1312 1313 xorps %xmm7, %xmm10 1314 1315 mulps %xmm0, %xmm11 1316 mulps %xmm1, %xmm10 1317 1318 addps %xmm10, %xmm11 1319 1320 movaps %xmm11, %xmm3 1321 pshufd $0xb1, %xmm11, %xmm2 1322 1323 xorps %xmm7, %xmm2 1324 1325 movaps -20 * SIZE(BO), %xmm5 1326 1327 pshufd $0x00, %xmm5, %xmm0 1328 pshufd $0x55, %xmm5, %xmm1 1329 1330 mulps %xmm3, %xmm0 1331 mulps %xmm2, %xmm1 1332 1333 subps %xmm0, %xmm13 1334 subps %xmm1, %xmm13 1335 1336 pshufd $0xaa, %xmm5, %xmm0 1337 pshufd $0xff, %xmm5, %xmm1 1338 1339 mulps %xmm3, %xmm0 1340 mulps %xmm2, %xmm1 1341 1342 subps %xmm0, %xmm15 1343 subps %xmm1, %xmm15 1344 1345 movaps -12 * SIZE(BO), %xmm5 1346 1347 pshufd $0x00, %xmm5, %xmm0 1348 pshufd $0x55, %xmm5, %xmm1 1349 1350 pshufd $0xb1, %xmm13, %xmm12 1351 1352 xorps %xmm7, %xmm12 1353 1354 mulps %xmm0, %xmm13 1355 mulps %xmm1, %xmm12 1356 1357 addps %xmm12, %xmm13 1358 1359 movaps %xmm13, %xmm3 1360 pshufd $0xb1, %xmm13, %xmm2 1361 1362 xorps %xmm7, %xmm2 1363 1364 pshufd $0xaa, %xmm5, %xmm0 1365 pshufd $0xff, %xmm5, %xmm1 1366 1367 mulps %xmm3, %xmm0 1368 mulps %xmm2, %xmm1 1369 1370 subps %xmm0, %xmm15 1371 subps %xmm1, %xmm15 1372 1373 movaps -4 * SIZE(BO), %xmm5 1374 1375 pshufd $0xaa, %xmm5, %xmm0 1376 pshufd $0xff, %xmm5, %xmm1 1377 1378 pshufd $0xb1, %xmm15, %xmm14 1379 1380 xorps %xmm7, %xmm14 1381 1382 mulps %xmm0, %xmm15 1383 mulps %xmm1, %xmm14 1384 1385 addps %xmm14, %xmm15 1386#endif 1387 1388#ifdef RT 1389 movaps -4 * SIZE(BO), %xmm5 1390 1391 pshufd $0xaa, %xmm5, %xmm0 1392 pshufd $0xff, %xmm5, %xmm1 1393 1394 pshufd $0xb1, %xmm15, %xmm14 1395 1396 xorps %xmm7, %xmm14 1397 1398 mulps %xmm0, %xmm15 1399 mulps %xmm1, %xmm14 1400 1401 addps %xmm14, %xmm15 1402 1403 movaps %xmm15, %xmm3 1404 pshufd $0xb1, %xmm15, %xmm2 1405 1406 xorps %xmm7, %xmm2 1407 1408 pshufd $0x00, %xmm5, %xmm0 1409 pshufd $0x55, %xmm5, %xmm1 1410 1411 mulps %xmm3, %xmm0 1412 mulps %xmm2, %xmm1 1413 1414 subps %xmm0, %xmm13 1415 subps %xmm1, %xmm13 1416 1417 movaps -8 * SIZE(BO), %xmm5 1418 1419 pshufd $0xaa, %xmm5, %xmm0 1420 pshufd $0xff, %xmm5, %xmm1 1421 1422 mulps %xmm3, %xmm0 1423 mulps %xmm2, %xmm1 1424 1425 subps %xmm0, %xmm11 1426 subps %xmm1, %xmm11 1427 1428 pshufd $0x00, %xmm5, %xmm0 1429 pshufd $0x55, %xmm5, %xmm1 1430 1431 mulps %xmm3, %xmm0 1432 mulps %xmm2, %xmm1 1433 1434 subps %xmm0, %xmm9 1435 subps %xmm1, %xmm9 1436 1437 movaps -12 * SIZE(BO), %xmm5 1438 1439 pshufd $0x00, %xmm5, %xmm0 1440 pshufd $0x55, %xmm5, %xmm1 1441 1442 pshufd $0xb1, %xmm13, %xmm12 1443 1444 xorps %xmm7, %xmm12 1445 1446 mulps %xmm0, %xmm13 1447 mulps %xmm1, %xmm12 1448 1449 addps %xmm12, %xmm13 1450 1451 movaps %xmm13, %xmm3 1452 pshufd $0xb1, %xmm13, %xmm2 1453 1454 xorps %xmm7, %xmm2 1455 1456 movaps -16 * SIZE(BO), %xmm5 1457 1458 pshufd $0xaa, %xmm5, %xmm0 1459 pshufd $0xff, %xmm5, %xmm1 1460 1461 mulps %xmm3, %xmm0 1462 mulps %xmm2, %xmm1 1463 1464 subps %xmm0, %xmm11 1465 subps %xmm1, %xmm11 1466 1467 pshufd $0x00, %xmm5, %xmm0 1468 pshufd $0x55, %xmm5, %xmm1 1469 1470 mulps %xmm3, %xmm0 1471 mulps %xmm2, %xmm1 1472 1473 subps %xmm0, %xmm9 1474 subps %xmm1, %xmm9 1475 1476 movaps -24 * SIZE(BO), %xmm5 1477 1478 pshufd $0xaa, %xmm5, %xmm0 1479 pshufd $0xff, %xmm5, %xmm1 1480 1481 pshufd $0xb1, %xmm11, %xmm10 1482 1483 xorps %xmm7, %xmm10 1484 1485 mulps %xmm0, %xmm11 1486 mulps %xmm1, %xmm10 1487 1488 addps %xmm10, %xmm11 1489 1490 movaps %xmm11, %xmm3 1491 pshufd $0xb1, %xmm11, %xmm2 1492 1493 xorps %xmm7, %xmm2 1494 1495 pshufd $0x00, %xmm5, %xmm0 1496 pshufd $0x55, %xmm5, %xmm1 1497 1498 mulps %xmm3, %xmm0 1499 mulps %xmm2, %xmm1 1500 1501 subps %xmm0, %xmm9 1502 subps %xmm1, %xmm9 1503 1504 movaps -32 * SIZE(BO), %xmm5 1505 1506 pshufd $0x00, %xmm5, %xmm0 1507 pshufd $0x55, %xmm5, %xmm1 1508 1509 pshufd $0xb1, %xmm9, %xmm8 1510 1511 xorps %xmm7, %xmm8 1512 1513 mulps %xmm0, %xmm9 1514 mulps %xmm1, %xmm8 1515 1516 addps %xmm8, %xmm9 1517#endif 1518 1519#ifdef LN 1520 subq $2 * SIZE, CO1 1521 subq $2 * SIZE, CO2 1522#endif 1523 1524#if defined(LN) || defined(LT) 1525 movaps %xmm9, -32 * SIZE(BO) 1526 movaps %xmm11, -28 * SIZE(BO) 1527 1528 movsd %xmm9, (CO1) 1529 movhps %xmm9, (CO1, LDC) 1530 movsd %xmm11, (CO2) 1531 movhps %xmm11, (CO2, LDC) 1532#else 1533 movlhps %xmm11, %xmm9 1534 movlhps %xmm15, %xmm13 1535 1536 movaps %xmm9, -32 * SIZE(AO) 1537 movaps %xmm13, -28 * SIZE(AO) 1538 1539 movlps %xmm9, (CO1) 1540 movlps %xmm11, (CO1, LDC) 1541 movlps %xmm13, (CO2) 1542 movlps %xmm15, (CO2, LDC) 1543#endif 1544 1545#ifndef LN 1546 addq $2 * SIZE, CO1 1547 addq $2 * SIZE, CO2 1548#endif 1549 1550#if defined(LT) || defined(RN) 1551 movq K, %rax 1552 subq KK, %rax 1553 salq $ZBASE_SHIFT, %rax 1554 leaq (AO, %rax, 1), AO 1555 leaq (BO, %rax, 4), BO 1556#endif 1557 1558#ifdef LN 1559 subq $1, KK 1560#endif 1561 1562#ifdef LT 1563 addq $1, KK 1564#endif 1565 1566#ifdef RT 1567 movq K, %rax 1568 salq $ZBASE_SHIFT, %rax 1569 addq %rax, AORIG 1570#endif 1571 ALIGN_4 1572 1573.L29: 1574#ifdef LN 1575 movq K, %rax 1576 salq $ZBASE_SHIFT, %rax 1577 leaq (B, %rax, 4), B 1578#endif 1579 1580#if defined(LT) || defined(RN) 1581 movq BO, B 1582#endif 1583 1584#ifdef RN 1585 addq $4, KK 1586#endif 1587 1588#ifdef RT 1589 subq $4, KK 1590#endif 1591 1592 subq $1, J 1593 BRANCH 1594 jg .L01 1595 ALIGN_4 1596 1597.L30: 1598 testq $2, N 1599 BRANCH 1600 jle .L50 1601 1602#if defined(LT) || defined(RN) 1603 movq A, AO 1604#else 1605 movq A, AORIG 1606#endif 1607 1608#ifdef RT 1609 movq K, %rax 1610 salq $1 + ZBASE_SHIFT, %rax 1611 subq %rax, B 1612 1613 leaq (, LDC, 2), %rax 1614 subq %rax, C 1615#endif 1616 1617 movq C, CO1 1618 leaq (C, LDC, 1), CO2 1619#ifndef RT 1620 leaq (C, LDC, 2), C 1621#endif 1622 1623#ifdef LN 1624 movq OFFSET, KK 1625 addq M, KK 1626#endif 1627 1628#ifdef LT 1629 movq OFFSET, KK 1630#endif 1631 1632 movq M, I 1633 sarq $1, I 1634 NOBRANCH 1635 jle .L40 1636 ALIGN_4 1637 1638.L31: 1639#ifdef LN 1640 movq K, %rax 1641 salq $1 + ZBASE_SHIFT, %rax 1642 subq %rax, AORIG 1643#endif 1644 1645#if defined(LN) || defined(RT) 1646 movq AORIG, AO 1647 1648 movq KK, %rax 1649 salq $ZBASE_SHIFT, %rax 1650 1651 leaq (AO, %rax, 2), AO 1652 leaq (B, %rax, 2), BO 1653#else 1654 movq B, BO 1655#endif 1656 1657 xorps %xmm1, %xmm1 1658 movaps -32 * SIZE(AO), %xmm0 1659 xorps %xmm2, %xmm2 1660 xorps %xmm3, %xmm3 1661 xorps %xmm4, %xmm4 1662 1663 xorps %xmm8, %xmm8 1664 prefetcht2 4 * SIZE(CO1) 1665 xorps %xmm9, %xmm9 1666 prefetcht2 4 * SIZE(CO2) 1667 xorps %xmm10, %xmm10 1668 xorps %xmm11, %xmm11 1669 1670#if defined(LT) || defined(RN) 1671 movq KK, %rax 1672#else 1673 movq K, %rax 1674 subq KK, %rax 1675#endif 1676 sarq $2, %rax 1677 NOBRANCH 1678 jle .L35 1679 ALIGN_3 1680 1681.L32: 1682 PREFETCH (PREFETCHSIZE + 0) * SIZE(AO) 1683 1684 ADD1 %xmm1, %xmm8 1685 movaps -32 * SIZE(BO), %xmm1 1686 ADD2 %xmm2, %xmm9 1687 pshufd $0xb1, %xmm1, %xmm2 1688 mulps %xmm0, %xmm1 1689 ADD1 %xmm3, %xmm10 1690 pshufd $0x1b, %xmm2, %xmm3 1691 mulps %xmm0, %xmm2 1692 ADD2 %xmm4, %xmm11 1693 pshufd $0xb1, %xmm3, %xmm4 1694 mulps %xmm0, %xmm3 1695 mulps %xmm0, %xmm4 1696 movaps -28 * SIZE(AO), %xmm0 1697 1698 ADD1 %xmm1, %xmm8 1699 movaps -28 * SIZE(BO), %xmm1 1700 ADD2 %xmm2, %xmm9 1701 pshufd $0xb1, %xmm1, %xmm2 1702 mulps %xmm0, %xmm1 1703 ADD1 %xmm3, %xmm10 1704 pshufd $0x1b, %xmm2, %xmm3 1705 mulps %xmm0, %xmm2 1706 ADD2 %xmm4, %xmm11 1707 pshufd $0xb1, %xmm3, %xmm4 1708 mulps %xmm0, %xmm3 1709 mulps %xmm0, %xmm4 1710 movaps -24 * SIZE(AO), %xmm0 1711 1712 ADD1 %xmm1, %xmm8 1713 movaps -24 * SIZE(BO), %xmm1 1714 ADD2 %xmm2, %xmm9 1715 pshufd $0xb1, %xmm1, %xmm2 1716 mulps %xmm0, %xmm1 1717 ADD1 %xmm3, %xmm10 1718 pshufd $0x1b, %xmm2, %xmm3 1719 mulps %xmm0, %xmm2 1720 ADD2 %xmm4, %xmm11 1721 pshufd $0xb1, %xmm3, %xmm4 1722 mulps %xmm0, %xmm3 1723 mulps %xmm0, %xmm4 1724 movaps -20 * SIZE(AO), %xmm0 1725 1726 ADD1 %xmm1, %xmm8 1727 movaps -20 * SIZE(BO), %xmm1 1728 ADD2 %xmm2, %xmm9 1729 pshufd $0xb1, %xmm1, %xmm2 1730 mulps %xmm0, %xmm1 1731 ADD1 %xmm3, %xmm10 1732 pshufd $0x1b, %xmm2, %xmm3 1733 mulps %xmm0, %xmm2 1734 ADD2 %xmm4, %xmm11 1735 pshufd $0xb1, %xmm3, %xmm4 1736 mulps %xmm0, %xmm3 1737 mulps %xmm0, %xmm4 1738 movaps -16 * SIZE(AO), %xmm0 1739 1740 subq $-16 * SIZE, BO 1741 subq $-16 * SIZE, AO 1742 1743 subq $1, %rax 1744 BRANCH 1745 jg .L32 1746 ALIGN_3 1747 1748.L35: 1749#if defined(LT) || defined(RN) 1750 movq KK, %rax 1751#else 1752 movq K, %rax 1753 subq KK, %rax 1754#endif 1755 andq $3, %rax # if (k & 1) 1756 BRANCH 1757 je .L38 1758 ALIGN_3 1759 1760.L36: 1761 ADD1 %xmm1, %xmm8 1762 movaps -32 * SIZE(BO), %xmm1 1763 ADD2 %xmm2, %xmm9 1764 pshufd $0xb1, %xmm1, %xmm2 1765 mulps %xmm0, %xmm1 1766 ADD1 %xmm3, %xmm10 1767 pshufd $0x1b, %xmm2, %xmm3 1768 mulps %xmm0, %xmm2 1769 ADD2 %xmm4, %xmm11 1770 pshufd $0xb1, %xmm3, %xmm4 1771 mulps %xmm0, %xmm3 1772 mulps %xmm0, %xmm4 1773 movaps -28 * SIZE(AO), %xmm0 1774 1775 addq $4 * SIZE, AO 1776 addq $4 * SIZE, BO 1777 1778 subq $1, %rax 1779 BRANCH 1780 jg .L36 1781 ALIGN_3 1782 1783.L38: 1784#if defined(LN) || defined(RT) 1785 movq KK, %rax 1786#ifdef LN 1787 subq $2, %rax 1788#else 1789 subq $2, %rax 1790#endif 1791 1792 salq $ZBASE_SHIFT, %rax 1793 1794 movq AORIG, AO 1795 leaq (AO, %rax, 2), AO 1796 leaq (B, %rax, 2), BO 1797#endif 1798 1799 ADD1 %xmm1, %xmm8 1800 ADD2 %xmm2, %xmm9 1801 ADD1 %xmm3, %xmm10 1802 ADD2 %xmm4, %xmm11 1803 1804 pcmpeqb %xmm0, %xmm0 1805 psllq $63, %xmm0 1806 1807#if defined(LN) || defined(LT) 1808 1809#ifndef CONJ 1810 xorps %xmm0, %xmm8 1811 xorps %xmm0, %xmm10 1812#else 1813 xorps %xmm0, %xmm9 1814 xorps %xmm0, %xmm11 1815#endif 1816 1817#else 1818 1819#ifndef CONJ 1820 xorps %xmm0, %xmm8 1821 xorps %xmm0, %xmm10 1822#else 1823 shufps $0xb1, %xmm0, %xmm0 1824 1825 xorps %xmm0, %xmm9 1826 xorps %xmm0, %xmm11 1827#endif 1828 1829#endif 1830 1831 haddps %xmm9, %xmm8 1832 haddps %xmm11, %xmm10 1833 1834 shufps $0xd8, %xmm8, %xmm8 1835 shufps $0xd8, %xmm10, %xmm10 1836 1837 movaps %xmm8, %xmm9 1838 shufps $0xe4, %xmm10, %xmm8 1839 shufps $0xe4, %xmm9, %xmm10 1840 1841#if defined(LN) || defined(LT) 1842 movaps %xmm8, %xmm9 1843 movlhps %xmm10, %xmm8 1844 movhlps %xmm9, %xmm10 1845 1846 movaps -32 * SIZE(BO), %xmm9 1847 movaps -28 * SIZE(BO), %xmm11 1848 1849 subps %xmm8, %xmm9 1850 subps %xmm10, %xmm11 1851#else 1852 movaps -32 * SIZE(AO), %xmm9 1853 movaps -28 * SIZE(AO), %xmm11 1854 1855 subps %xmm8, %xmm9 1856 subps %xmm10, %xmm11 1857#endif 1858 1859 pcmpeqb %xmm7, %xmm7 1860 psllq $63, %xmm7 1861 1862#ifndef CONJ 1863 shufps $0xb1, %xmm7, %xmm7 1864#endif 1865 1866#ifdef LN 1867 movaps -28 * SIZE(AO), %xmm5 1868 1869 pshufd $0xaa, %xmm5, %xmm0 1870 pshufd $0xff, %xmm5, %xmm1 1871 1872 pshufd $0xb1, %xmm11, %xmm10 1873 1874 xorps %xmm7, %xmm10 1875 1876 mulps %xmm0, %xmm11 1877 mulps %xmm1, %xmm10 1878 1879 addps %xmm10, %xmm11 1880 1881 pshufd $0x00, %xmm5, %xmm0 1882 pshufd $0x55, %xmm5, %xmm1 1883 1884 movaps %xmm11, %xmm3 1885 pshufd $0xb1, %xmm11, %xmm2 1886 1887 xorps %xmm7, %xmm2 1888 1889 mulps %xmm0, %xmm3 1890 mulps %xmm1, %xmm2 1891 1892 subps %xmm3, %xmm9 1893 subps %xmm2, %xmm9 1894 1895 movaps -32 * SIZE(AO), %xmm5 1896 1897 pshufd $0x00, %xmm5, %xmm0 1898 pshufd $0x55, %xmm5, %xmm1 1899 1900 pshufd $0xb1, %xmm9, %xmm10 1901 1902 xorps %xmm7, %xmm10 1903 1904 mulps %xmm0, %xmm9 1905 mulps %xmm1, %xmm10 1906 1907 addps %xmm10, %xmm9 1908#endif 1909 1910#ifdef LT 1911 movaps -32 * SIZE(AO), %xmm5 1912 1913 pshufd $0x00, %xmm5, %xmm0 1914 pshufd $0x55, %xmm5, %xmm1 1915 1916 pshufd $0xb1, %xmm9, %xmm10 1917 1918 xorps %xmm7, %xmm10 1919 1920 mulps %xmm0, %xmm9 1921 mulps %xmm1, %xmm10 1922 1923 addps %xmm10, %xmm9 1924 1925 pshufd $0xaa, %xmm5, %xmm0 1926 pshufd $0xff, %xmm5, %xmm1 1927 1928 movaps %xmm9, %xmm3 1929 pshufd $0xb1, %xmm9, %xmm2 1930 1931 xorps %xmm7, %xmm2 1932 1933 mulps %xmm0, %xmm3 1934 mulps %xmm1, %xmm2 1935 1936 subps %xmm3, %xmm11 1937 subps %xmm2, %xmm11 1938 1939 movaps -28 * SIZE(AO), %xmm5 1940 1941 pshufd $0xaa, %xmm5, %xmm0 1942 pshufd $0xff, %xmm5, %xmm1 1943 1944 pshufd $0xb1, %xmm11, %xmm10 1945 1946 xorps %xmm7, %xmm10 1947 1948 mulps %xmm0, %xmm11 1949 mulps %xmm1, %xmm10 1950 1951 addps %xmm10, %xmm11 1952#endif 1953 1954#ifdef RN 1955 movaps -32 * SIZE(BO), %xmm5 1956 1957 pshufd $0x00, %xmm5, %xmm0 1958 pshufd $0x55, %xmm5, %xmm1 1959 1960 pshufd $0xb1, %xmm9, %xmm8 1961 1962 xorps %xmm7, %xmm8 1963 1964 mulps %xmm0, %xmm9 1965 mulps %xmm1, %xmm8 1966 1967 addps %xmm8, %xmm9 1968 1969 movaps %xmm9, %xmm3 1970 pshufd $0xb1, %xmm9, %xmm2 1971 1972 xorps %xmm7, %xmm2 1973 1974 pshufd $0xaa, %xmm5, %xmm0 1975 pshufd $0xff, %xmm5, %xmm1 1976 1977 mulps %xmm3, %xmm0 1978 mulps %xmm2, %xmm1 1979 1980 subps %xmm0, %xmm11 1981 subps %xmm1, %xmm11 1982 1983 movaps -28 * SIZE(BO), %xmm5 1984 1985 pshufd $0xaa, %xmm5, %xmm0 1986 pshufd $0xff, %xmm5, %xmm1 1987 1988 pshufd $0xb1, %xmm11, %xmm10 1989 1990 xorps %xmm7, %xmm10 1991 1992 mulps %xmm0, %xmm11 1993 mulps %xmm1, %xmm10 1994 1995 addps %xmm10, %xmm11 1996#endif 1997 1998#ifdef RT 1999 movaps -28 * SIZE(BO), %xmm5 2000 2001 pshufd $0xaa, %xmm5, %xmm0 2002 pshufd $0xff, %xmm5, %xmm1 2003 2004 pshufd $0xb1, %xmm11, %xmm10 2005 2006 xorps %xmm7, %xmm10 2007 2008 mulps %xmm0, %xmm11 2009 mulps %xmm1, %xmm10 2010 2011 addps %xmm10, %xmm11 2012 2013 movaps %xmm11, %xmm3 2014 pshufd $0xb1, %xmm11, %xmm2 2015 2016 xorps %xmm7, %xmm2 2017 2018 pshufd $0x00, %xmm5, %xmm0 2019 pshufd $0x55, %xmm5, %xmm1 2020 2021 mulps %xmm3, %xmm0 2022 mulps %xmm2, %xmm1 2023 2024 subps %xmm0, %xmm9 2025 subps %xmm1, %xmm9 2026 2027 movaps -32 * SIZE(BO), %xmm5 2028 2029 pshufd $0x00, %xmm5, %xmm0 2030 pshufd $0x55, %xmm5, %xmm1 2031 2032 pshufd $0xb1, %xmm9, %xmm8 2033 2034 xorps %xmm7, %xmm8 2035 2036 mulps %xmm0, %xmm9 2037 mulps %xmm1, %xmm8 2038 2039 addps %xmm8, %xmm9 2040#endif 2041 2042#ifdef LN 2043 subq $4 * SIZE, CO1 2044 subq $4 * SIZE, CO2 2045#endif 2046 2047#if defined(LN) || defined(LT) 2048 movaps %xmm9, -32 * SIZE(BO) 2049 movaps %xmm11, -28 * SIZE(BO) 2050 2051 movsd %xmm9, 0 * SIZE(CO1) 2052 movsd %xmm11, 2 * SIZE(CO1) 2053 movhps %xmm9, 0 * SIZE(CO2) 2054 movhps %xmm11, 2 * SIZE(CO2) 2055#else 2056 movaps %xmm9, -32 * SIZE(AO) 2057 movaps %xmm11, -28 * SIZE(AO) 2058 2059 movsd %xmm9, 0 * SIZE(CO1) 2060 movhps %xmm9, 2 * SIZE(CO1) 2061 movsd %xmm11, 0 * SIZE(CO2) 2062 movhps %xmm11, 2 * SIZE(CO2) 2063#endif 2064 2065#ifndef LN 2066 addq $4 * SIZE, CO1 2067 addq $4 * SIZE, CO2 2068#endif 2069 2070#if defined(LT) || defined(RN) 2071 movq K, %rax 2072 subq KK, %rax 2073 salq $ZBASE_SHIFT, %rax 2074 leaq (AO, %rax, 2), AO 2075 leaq (BO, %rax, 2), BO 2076#endif 2077 2078#ifdef LN 2079 subq $2, KK 2080#endif 2081 2082#ifdef LT 2083 addq $2, KK 2084#endif 2085 2086#ifdef RT 2087 movq K, %rax 2088 salq $1 + ZBASE_SHIFT, %rax 2089 addq %rax, AORIG 2090#endif 2091 2092 decq I # i -- 2093 BRANCH 2094 jg .L31 2095 ALIGN_4 2096 2097.L40: 2098 testq $1, M 2099 BRANCH 2100 jle .L49 2101 2102#ifdef LN 2103 movq K, %rax 2104 salq $ZBASE_SHIFT, %rax 2105 subq %rax, AORIG 2106#endif 2107 2108#if defined(LN) || defined(RT) 2109 movq AORIG, AO 2110 2111 movq KK, %rax 2112 salq $ZBASE_SHIFT, %rax 2113 2114 leaq (AO, %rax, 1), AO 2115 leaq (B, %rax, 2), BO 2116#else 2117 movq B, BO 2118#endif 2119 2120 xorps %xmm1, %xmm1 2121 movddup -32 * SIZE(AO), %xmm0 2122 xorps %xmm2, %xmm2 2123 movaps -32 * SIZE(BO), %xmm5 2124 xorps %xmm3, %xmm3 2125 xorps %xmm4, %xmm4 2126 2127 xorps %xmm8, %xmm8 2128 xorps %xmm9, %xmm9 2129 xorps %xmm10, %xmm10 2130 xorps %xmm11, %xmm11 2131 2132#if defined(LT) || defined(RN) 2133 movq KK, %rax 2134#else 2135 movq K, %rax 2136 subq KK, %rax 2137#endif 2138 sarq $2, %rax 2139 NOBRANCH 2140 jle .L45 2141 ALIGN_3 2142 2143.L42: 2144 ADD1 %xmm1, %xmm8 2145 pshufd $0xa0, %xmm5, %xmm1 2146 mulps %xmm0, %xmm1 2147 ADD2 %xmm2, %xmm9 2148 pshufd $0xf5, %xmm5, %xmm2 2149 movaps -28 * SIZE(BO), %xmm5 2150 mulps %xmm0, %xmm2 2151 movddup -30 * SIZE(AO), %xmm0 2152 2153 ADD1 %xmm1, %xmm8 2154 pshufd $0xa0, %xmm5, %xmm1 2155 mulps %xmm0, %xmm1 2156 ADD2 %xmm2, %xmm9 2157 pshufd $0xf5, %xmm5, %xmm2 2158 movaps -24 * SIZE(BO), %xmm5 2159 mulps %xmm0, %xmm2 2160 movddup -28 * SIZE(AO), %xmm0 2161 2162 ADD1 %xmm1, %xmm8 2163 pshufd $0xa0, %xmm5, %xmm1 2164 mulps %xmm0, %xmm1 2165 ADD2 %xmm2, %xmm9 2166 pshufd $0xf5, %xmm5, %xmm2 2167 movaps -20 * SIZE(BO), %xmm5 2168 mulps %xmm0, %xmm2 2169 movddup -26 * SIZE(AO), %xmm0 2170 2171 ADD1 %xmm1, %xmm8 2172 pshufd $0xa0, %xmm5, %xmm1 2173 mulps %xmm0, %xmm1 2174 ADD2 %xmm2, %xmm9 2175 pshufd $0xf5, %xmm5, %xmm2 2176 movaps -16 * SIZE(BO), %xmm5 2177 mulps %xmm0, %xmm2 2178 movddup -24 * SIZE(AO), %xmm0 2179 2180 subq $-16 * SIZE, BO 2181 subq $ -8 * SIZE, AO 2182 2183 subq $1, %rax 2184 BRANCH 2185 jg .L42 2186 ALIGN_3 2187 2188.L45: 2189#if defined(LT) || defined(RN) 2190 movq KK, %rax 2191#else 2192 movq K, %rax 2193 subq KK, %rax 2194#endif 2195 andq $3, %rax # if (k & 1) 2196 BRANCH 2197 je .L48 2198 ALIGN_3 2199 2200.L46: 2201 ADD1 %xmm1, %xmm8 2202 pshufd $0xa0, %xmm5, %xmm1 2203 mulps %xmm0, %xmm1 2204 ADD2 %xmm2, %xmm9 2205 pshufd $0xf5, %xmm5, %xmm2 2206 movaps -28 * SIZE(BO), %xmm5 2207 mulps %xmm0, %xmm2 2208 movddup -30 * SIZE(AO), %xmm0 2209 2210 addq $2 * SIZE, AO 2211 addq $4 * SIZE, BO 2212 2213 subq $1, %rax 2214 BRANCH 2215 jg .L46 2216 ALIGN_3 2217 2218.L48: 2219#if defined(LN) || defined(RT) 2220 movq KK, %rax 2221#ifdef LN 2222 subq $1, %rax 2223#else 2224 subq $2, %rax 2225#endif 2226 2227 salq $ZBASE_SHIFT, %rax 2228 2229 movq AORIG, AO 2230 leaq (AO, %rax, 1), AO 2231 leaq (B, %rax, 2), BO 2232#endif 2233 2234 ADD1 %xmm1, %xmm8 2235 ADD2 %xmm2, %xmm9 2236 2237 pcmpeqb %xmm0, %xmm0 2238 psllq $63, %xmm0 2239 2240#if defined(LN) || defined(LT) 2241 2242#ifndef CONJ 2243 xorps %xmm0, %xmm9 2244 shufps $0xb1, %xmm9, %xmm9 2245#else 2246 xorps %xmm0, %xmm8 2247 shufps $0xb1, %xmm9, %xmm9 2248#endif 2249 2250#else 2251 2252#ifndef CONJ 2253 xorps %xmm0, %xmm9 2254 shufps $0xb1, %xmm9, %xmm9 2255#else 2256 shufps $0xb1, %xmm9, %xmm9 2257 xorps %xmm0, %xmm9 2258#endif 2259 2260#endif 2261 2262 addps %xmm9, %xmm8 2263 2264#if defined(LN) || defined(LT) 2265 movaps -32 * SIZE(BO), %xmm9 2266 2267 subps %xmm8, %xmm9 2268#else 2269 movaps -32 * SIZE(AO), %xmm9 2270 2271 subps %xmm8, %xmm9 2272 movhlps %xmm9, %xmm11 2273#endif 2274 2275 pcmpeqb %xmm7, %xmm7 2276 psllq $63, %xmm7 2277 2278#ifndef CONJ 2279 shufps $0xb1, %xmm7, %xmm7 2280#endif 2281 2282#if defined(LN) || defined(LT) 2283 movsd -32 * SIZE(AO), %xmm5 2284 2285 pshufd $0x00, %xmm5, %xmm0 2286 pshufd $0x55, %xmm5, %xmm1 2287 2288 pshufd $0xb1, %xmm9, %xmm10 2289 2290 xorps %xmm7, %xmm10 2291 2292 mulps %xmm0, %xmm9 2293 mulps %xmm1, %xmm10 2294 2295 addps %xmm10, %xmm9 2296#endif 2297 2298#ifdef RN 2299 movaps -32 * SIZE(BO), %xmm5 2300 2301 pshufd $0x00, %xmm5, %xmm0 2302 pshufd $0x55, %xmm5, %xmm1 2303 2304 pshufd $0xb1, %xmm9, %xmm8 2305 2306 xorps %xmm7, %xmm8 2307 2308 mulps %xmm0, %xmm9 2309 mulps %xmm1, %xmm8 2310 2311 addps %xmm8, %xmm9 2312 2313 movaps %xmm9, %xmm3 2314 pshufd $0xb1, %xmm9, %xmm2 2315 2316 xorps %xmm7, %xmm2 2317 2318 pshufd $0xaa, %xmm5, %xmm0 2319 pshufd $0xff, %xmm5, %xmm1 2320 2321 mulps %xmm3, %xmm0 2322 mulps %xmm2, %xmm1 2323 2324 subps %xmm0, %xmm11 2325 subps %xmm1, %xmm11 2326 2327 movaps -28 * SIZE(BO), %xmm5 2328 2329 pshufd $0xaa, %xmm5, %xmm0 2330 pshufd $0xff, %xmm5, %xmm1 2331 2332 pshufd $0xb1, %xmm11, %xmm10 2333 2334 xorps %xmm7, %xmm10 2335 2336 mulps %xmm0, %xmm11 2337 mulps %xmm1, %xmm10 2338 2339 addps %xmm10, %xmm11 2340#endif 2341 2342#ifdef RT 2343 movaps -28 * SIZE(BO), %xmm5 2344 2345 pshufd $0xaa, %xmm5, %xmm0 2346 pshufd $0xff, %xmm5, %xmm1 2347 2348 pshufd $0xb1, %xmm11, %xmm10 2349 2350 xorps %xmm7, %xmm10 2351 2352 mulps %xmm0, %xmm11 2353 mulps %xmm1, %xmm10 2354 2355 addps %xmm10, %xmm11 2356 2357 movaps %xmm11, %xmm3 2358 pshufd $0xb1, %xmm11, %xmm2 2359 2360 xorps %xmm7, %xmm2 2361 2362 pshufd $0x00, %xmm5, %xmm0 2363 pshufd $0x55, %xmm5, %xmm1 2364 2365 mulps %xmm3, %xmm0 2366 mulps %xmm2, %xmm1 2367 2368 subps %xmm0, %xmm9 2369 subps %xmm1, %xmm9 2370 2371 movaps -32 * SIZE(BO), %xmm5 2372 2373 pshufd $0x00, %xmm5, %xmm0 2374 pshufd $0x55, %xmm5, %xmm1 2375 2376 pshufd $0xb1, %xmm9, %xmm8 2377 2378 xorps %xmm7, %xmm8 2379 2380 mulps %xmm0, %xmm9 2381 mulps %xmm1, %xmm8 2382 2383 addps %xmm8, %xmm9 2384#endif 2385 2386#ifdef LN 2387 subq $2 * SIZE, CO1 2388 subq $2 * SIZE, CO2 2389#endif 2390 2391#if defined(LN) || defined(LT) 2392 movaps %xmm9, -32 * SIZE(BO) 2393 2394 movlps %xmm9, (CO1) 2395 movhps %xmm9, (CO2) 2396#else 2397 movlps %xmm9, -32 * SIZE(AO) 2398 movlps %xmm11, -30 * SIZE(AO) 2399 2400 movlps %xmm9, (CO1) 2401 movlps %xmm11, (CO2) 2402#endif 2403 2404#ifndef LN 2405 addq $2 * SIZE, CO1 2406 addq $2 * SIZE, CO2 2407#endif 2408 2409#if defined(LT) || defined(RN) 2410 movq K, %rax 2411 subq KK, %rax 2412 salq $ZBASE_SHIFT, %rax 2413 leaq (AO, %rax, 1), AO 2414 leaq (BO, %rax, 2), BO 2415#endif 2416 2417#ifdef LN 2418 subq $1, KK 2419#endif 2420 2421#ifdef LT 2422 addq $1, KK 2423#endif 2424 2425#ifdef RT 2426 movq K, %rax 2427 salq $ZBASE_SHIFT, %rax 2428 addq %rax, AORIG 2429#endif 2430 ALIGN_4 2431 2432.L49: 2433#ifdef LN 2434 movq K, %rax 2435 salq $ZBASE_SHIFT, %rax 2436 leaq (B, %rax, 2), B 2437#endif 2438 2439#if defined(LT) || defined(RN) 2440 movq BO, B 2441#endif 2442 2443#ifdef RN 2444 addq $2, KK 2445#endif 2446 2447#ifdef RT 2448 subq $2, KK 2449#endif 2450 ALIGN_4 2451 2452.L50: 2453 testq $1, N 2454 BRANCH 2455 jle .L999 2456 2457#if defined(LT) || defined(RN) 2458 movq A, AO 2459#else 2460 movq A, AORIG 2461#endif 2462 2463#ifdef RT 2464 movq K, %rax 2465 salq $ZBASE_SHIFT, %rax 2466 subq %rax, B 2467 2468 subq LDC, C 2469#endif 2470 2471 movq C, CO1 2472#ifndef RT 2473 addq LDC, C 2474#endif 2475 2476#ifdef LN 2477 movq OFFSET, KK 2478 addq M, KK 2479#endif 2480 2481#ifdef LT 2482 movq OFFSET, KK 2483#endif 2484 2485 movq M, I 2486 sarq $1, I 2487 NOBRANCH 2488 jle .L60 2489 ALIGN_4 2490 2491.L51: 2492#ifdef LN 2493 movq K, %rax 2494 salq $1 + ZBASE_SHIFT, %rax 2495 subq %rax, AORIG 2496#endif 2497 2498#if defined(LN) || defined(RT) 2499 movq AORIG, AO 2500 2501 movq KK, %rax 2502 salq $ZBASE_SHIFT, %rax 2503 2504 leaq (AO, %rax, 2), AO 2505 leaq (B, %rax, 1), BO 2506#else 2507 movq B, BO 2508#endif 2509 2510 xorps %xmm1, %xmm1 2511 movaps -32 * SIZE(AO), %xmm0 2512 xorps %xmm2, %xmm2 2513 xorps %xmm3, %xmm3 2514 xorps %xmm4, %xmm4 2515 2516 xorps %xmm8, %xmm8 2517 prefetcht2 4 * SIZE(CO1) 2518 xorps %xmm9, %xmm9 2519 xorps %xmm10, %xmm10 2520 xorps %xmm11, %xmm11 2521 2522#if defined(LT) || defined(RN) 2523 movq KK, %rax 2524#else 2525 movq K, %rax 2526 subq KK, %rax 2527#endif 2528 sarq $2, %rax 2529 NOBRANCH 2530 jle .L55 2531 ALIGN_3 2532 2533.L52: 2534 PREFETCH (PREFETCHSIZE + 0) * SIZE(AO) 2535 2536 ADD1 %xmm1, %xmm8 2537 movddup -32 * SIZE(BO), %xmm1 2538 ADD2 %xmm2, %xmm9 2539 pshufd $0xb1, %xmm1, %xmm2 2540 mulps %xmm0, %xmm1 2541 mulps %xmm0, %xmm2 2542 movaps -28 * SIZE(AO), %xmm0 2543 2544 ADD1 %xmm1, %xmm8 2545 movddup -30 * SIZE(BO), %xmm1 2546 ADD2 %xmm2, %xmm9 2547 pshufd $0xb1, %xmm1, %xmm2 2548 mulps %xmm0, %xmm1 2549 mulps %xmm0, %xmm2 2550 movaps -24 * SIZE(AO), %xmm0 2551 2552 ADD1 %xmm1, %xmm8 2553 movddup -28 * SIZE(BO), %xmm1 2554 ADD2 %xmm2, %xmm9 2555 pshufd $0xb1, %xmm1, %xmm2 2556 mulps %xmm0, %xmm1 2557 mulps %xmm0, %xmm2 2558 movaps -20 * SIZE(AO), %xmm0 2559 2560 ADD1 %xmm1, %xmm8 2561 movddup -26 * SIZE(BO), %xmm1 2562 ADD2 %xmm2, %xmm9 2563 pshufd $0xb1, %xmm1, %xmm2 2564 mulps %xmm0, %xmm1 2565 mulps %xmm0, %xmm2 2566 movaps -16 * SIZE(AO), %xmm0 2567 2568 subq $ -8 * SIZE, BO 2569 subq $-16 * SIZE, AO 2570 2571 subq $1, %rax 2572 BRANCH 2573 jg .L52 2574 ALIGN_3 2575 2576.L55: 2577#if defined(LT) || defined(RN) 2578 movq KK, %rax 2579#else 2580 movq K, %rax 2581 subq KK, %rax 2582#endif 2583 andq $3, %rax # if (k & 1) 2584 BRANCH 2585 je .L58 2586 ALIGN_3 2587 2588.L56: 2589 ADD1 %xmm1, %xmm8 2590 movddup -32 * SIZE(BO), %xmm1 2591 ADD2 %xmm2, %xmm9 2592 pshufd $0xb1, %xmm1, %xmm2 2593 mulps %xmm0, %xmm1 2594 mulps %xmm0, %xmm2 2595 movaps -28 * SIZE(AO), %xmm0 2596 2597 addq $4 * SIZE, AO 2598 addq $2 * SIZE, BO 2599 2600 subq $1, %rax 2601 BRANCH 2602 jg .L56 2603 ALIGN_3 2604 2605.L58: 2606#if defined(LN) || defined(RT) 2607 movq KK, %rax 2608#ifdef LN 2609 subq $2, %rax 2610#else 2611 subq $1, %rax 2612#endif 2613 2614 salq $ZBASE_SHIFT, %rax 2615 2616 movq AORIG, AO 2617 leaq (AO, %rax, 2), AO 2618 leaq (B, %rax, 1), BO 2619#endif 2620 2621 ADD1 %xmm1, %xmm8 2622 ADD2 %xmm2, %xmm9 2623 2624 pcmpeqb %xmm0, %xmm0 2625 psllq $63, %xmm0 2626 2627#if defined(LN) || defined(LT) 2628 2629#ifndef CONJ 2630 xorps %xmm0, %xmm8 2631#else 2632 xorps %xmm0, %xmm9 2633#endif 2634 2635#else 2636 2637#ifndef CONJ 2638 xorps %xmm0, %xmm8 2639#else 2640 shufps $0xb1, %xmm0, %xmm0 2641 2642 xorps %xmm0, %xmm9 2643#endif 2644 2645#endif 2646 2647 haddps %xmm9, %xmm8 2648 2649 shufps $0xd8, %xmm8, %xmm8 2650 2651#if defined(LN) || defined(LT) 2652 movaps -32 * SIZE(BO), %xmm9 2653 2654 subps %xmm8, %xmm9 2655 movhlps %xmm9, %xmm11 2656#else 2657 movaps -32 * SIZE(AO), %xmm9 2658 2659 subps %xmm8, %xmm9 2660#endif 2661 2662 pcmpeqb %xmm7, %xmm7 2663 psllq $63, %xmm7 2664 2665#ifndef CONJ 2666 shufps $0xb1, %xmm7, %xmm7 2667#endif 2668 2669#ifdef LN 2670 movaps -28 * SIZE(AO), %xmm5 2671 2672 pshufd $0xaa, %xmm5, %xmm0 2673 pshufd $0xff, %xmm5, %xmm1 2674 2675 pshufd $0xb1, %xmm11, %xmm10 2676 2677 xorps %xmm7, %xmm10 2678 2679 mulps %xmm0, %xmm11 2680 mulps %xmm1, %xmm10 2681 2682 addps %xmm10, %xmm11 2683 2684 pshufd $0x00, %xmm5, %xmm0 2685 pshufd $0x55, %xmm5, %xmm1 2686 2687 movaps %xmm11, %xmm3 2688 pshufd $0xb1, %xmm11, %xmm2 2689 2690 xorps %xmm7, %xmm2 2691 2692 mulps %xmm0, %xmm3 2693 mulps %xmm1, %xmm2 2694 2695 subps %xmm3, %xmm9 2696 subps %xmm2, %xmm9 2697 2698 movaps -32 * SIZE(AO), %xmm5 2699 2700 pshufd $0x00, %xmm5, %xmm0 2701 pshufd $0x55, %xmm5, %xmm1 2702 2703 pshufd $0xb1, %xmm9, %xmm10 2704 2705 xorps %xmm7, %xmm10 2706 2707 mulps %xmm0, %xmm9 2708 mulps %xmm1, %xmm10 2709 2710 addps %xmm10, %xmm9 2711#endif 2712 2713#ifdef LT 2714 movaps -32 * SIZE(AO), %xmm5 2715 2716 pshufd $0x00, %xmm5, %xmm0 2717 pshufd $0x55, %xmm5, %xmm1 2718 2719 pshufd $0xb1, %xmm9, %xmm10 2720 2721 xorps %xmm7, %xmm10 2722 2723 mulps %xmm0, %xmm9 2724 mulps %xmm1, %xmm10 2725 2726 addps %xmm10, %xmm9 2727 2728 pshufd $0xaa, %xmm5, %xmm0 2729 pshufd $0xff, %xmm5, %xmm1 2730 2731 movaps %xmm9, %xmm3 2732 pshufd $0xb1, %xmm9, %xmm2 2733 2734 xorps %xmm7, %xmm2 2735 2736 mulps %xmm0, %xmm3 2737 mulps %xmm1, %xmm2 2738 2739 subps %xmm3, %xmm11 2740 subps %xmm2, %xmm11 2741 2742 movaps -28 * SIZE(AO), %xmm5 2743 2744 pshufd $0xaa, %xmm5, %xmm0 2745 pshufd $0xff, %xmm5, %xmm1 2746 2747 pshufd $0xb1, %xmm11, %xmm10 2748 2749 xorps %xmm7, %xmm10 2750 2751 mulps %xmm0, %xmm11 2752 mulps %xmm1, %xmm10 2753 2754 addps %xmm10, %xmm11 2755#endif 2756 2757#if defined(RN) || defined(RT) 2758 movaps -32 * SIZE(BO), %xmm5 2759 2760 pshufd $0x00, %xmm5, %xmm0 2761 pshufd $0x55, %xmm5, %xmm1 2762 2763 pshufd $0xb1, %xmm9, %xmm8 2764 2765 xorps %xmm7, %xmm8 2766 2767 mulps %xmm0, %xmm9 2768 mulps %xmm1, %xmm8 2769 2770 addps %xmm8, %xmm9 2771#endif 2772 2773#ifdef LN 2774 subq $4 * SIZE, CO1 2775#endif 2776 2777#if defined(LN) || defined(LT) 2778 movlps %xmm9, -32 * SIZE(BO) 2779 movlps %xmm11, -30 * SIZE(BO) 2780 2781 movlps %xmm9, 0 * SIZE(CO1) 2782 movlps %xmm11, 2 * SIZE(CO1) 2783#else 2784 movaps %xmm9, -32 * SIZE(AO) 2785 2786 movlps %xmm9, 0 * SIZE(CO1) 2787 movhps %xmm9, 2 * SIZE(CO1) 2788#endif 2789 2790#ifndef LN 2791 addq $4 * SIZE, CO1 2792#endif 2793 2794#if defined(LT) || defined(RN) 2795 movq K, %rax 2796 subq KK, %rax 2797 salq $ZBASE_SHIFT, %rax 2798 leaq (AO, %rax, 2), AO 2799 leaq (BO, %rax, 1), BO 2800#endif 2801 2802#ifdef LN 2803 subq $2, KK 2804#endif 2805 2806#ifdef LT 2807 addq $2, KK 2808#endif 2809 2810#ifdef RT 2811 movq K, %rax 2812 salq $1 + ZBASE_SHIFT, %rax 2813 addq %rax, AORIG 2814#endif 2815 2816 decq I # i -- 2817 BRANCH 2818 jg .L51 2819 ALIGN_4 2820 2821.L60: 2822 testq $1, M 2823 BRANCH 2824 jle .L69 2825 2826#ifdef LN 2827 movq K, %rax 2828 salq $ZBASE_SHIFT, %rax 2829 subq %rax, AORIG 2830#endif 2831 2832#if defined(LN) || defined(RT) 2833 movq AORIG, AO 2834 2835 movq KK, %rax 2836 salq $ZBASE_SHIFT, %rax 2837 2838 leaq (AO, %rax, 1), AO 2839 leaq (B, %rax, 1), BO 2840#else 2841 movq B, BO 2842#endif 2843 2844 xorps %xmm1, %xmm1 2845 movddup -32 * SIZE(AO), %xmm0 2846 xorps %xmm2, %xmm2 2847 movsd -32 * SIZE(BO), %xmm5 2848 xorps %xmm8, %xmm8 2849 xorps %xmm9, %xmm9 2850 2851#if defined(LT) || defined(RN) 2852 movq KK, %rax 2853#else 2854 movq K, %rax 2855 subq KK, %rax 2856#endif 2857 sarq $2, %rax 2858 NOBRANCH 2859 jle .L65 2860 ALIGN_3 2861 2862.L62: 2863 ADD1 %xmm1, %xmm8 2864 pshufd $0xa0, %xmm5, %xmm1 2865 mulps %xmm0, %xmm1 2866 ADD2 %xmm2, %xmm9 2867 pshufd $0xf5, %xmm5, %xmm2 2868 movsd -30 * SIZE(BO), %xmm5 2869 mulps %xmm0, %xmm2 2870 movddup -30 * SIZE(AO), %xmm0 2871 2872 ADD1 %xmm1, %xmm8 2873 pshufd $0xa0, %xmm5, %xmm1 2874 mulps %xmm0, %xmm1 2875 ADD2 %xmm2, %xmm9 2876 pshufd $0xf5, %xmm5, %xmm2 2877 movsd -28 * SIZE(BO), %xmm5 2878 mulps %xmm0, %xmm2 2879 movddup -28 * SIZE(AO), %xmm0 2880 2881 ADD1 %xmm1, %xmm8 2882 pshufd $0xa0, %xmm5, %xmm1 2883 mulps %xmm0, %xmm1 2884 ADD2 %xmm2, %xmm9 2885 pshufd $0xf5, %xmm5, %xmm2 2886 movsd -26 * SIZE(BO), %xmm5 2887 mulps %xmm0, %xmm2 2888 movddup -26 * SIZE(AO), %xmm0 2889 2890 ADD1 %xmm1, %xmm8 2891 pshufd $0xa0, %xmm5, %xmm1 2892 mulps %xmm0, %xmm1 2893 ADD2 %xmm2, %xmm9 2894 pshufd $0xf5, %xmm5, %xmm2 2895 movsd -24 * SIZE(BO), %xmm5 2896 mulps %xmm0, %xmm2 2897 movddup -24 * SIZE(AO), %xmm0 2898 2899 subq $-8 * SIZE, BO 2900 subq $-8 * SIZE, AO 2901 2902 subq $1, %rax 2903 BRANCH 2904 jg .L62 2905 ALIGN_3 2906 2907.L65: 2908#if defined(LT) || defined(RN) 2909 movq KK, %rax 2910#else 2911 movq K, %rax 2912 subq KK, %rax 2913#endif 2914 andq $3, %rax # if (k & 1) 2915 BRANCH 2916 je .L68 2917 ALIGN_3 2918 2919.L66: 2920 ADD1 %xmm1, %xmm8 2921 pshufd $0xa0, %xmm5, %xmm1 2922 mulps %xmm0, %xmm1 2923 ADD2 %xmm2, %xmm9 2924 pshufd $0xf5, %xmm5, %xmm2 2925 movsd -30 * SIZE(BO), %xmm5 2926 mulps %xmm0, %xmm2 2927 movddup -30 * SIZE(AO), %xmm0 2928 2929 addq $2 * SIZE, AO 2930 addq $2 * SIZE, BO 2931 2932 subq $1, %rax 2933 BRANCH 2934 jg .L66 2935 ALIGN_3 2936 2937.L68: 2938#if defined(LN) || defined(RT) 2939 movq KK, %rax 2940 subq $1, %rax 2941 2942 salq $ZBASE_SHIFT, %rax 2943 2944 movq AORIG, AO 2945 leaq (AO, %rax, 1), AO 2946 leaq (B, %rax, 1), BO 2947#endif 2948 2949 ADD1 %xmm1, %xmm8 2950 ADD2 %xmm2, %xmm9 2951 2952 pcmpeqb %xmm0, %xmm0 2953 psllq $63, %xmm0 2954 2955#if defined(LN) || defined(LT) 2956 2957#ifndef CONJ 2958 xorps %xmm0, %xmm9 2959 shufps $0xb1, %xmm9, %xmm9 2960#else 2961 xorps %xmm0, %xmm8 2962 shufps $0xb1, %xmm9, %xmm9 2963#endif 2964 2965#else 2966 2967#ifndef CONJ 2968 xorps %xmm0, %xmm9 2969 shufps $0xb1, %xmm9, %xmm9 2970#else 2971 shufps $0xb1, %xmm9, %xmm9 2972 xorps %xmm0, %xmm9 2973#endif 2974 2975#endif 2976 2977 addps %xmm9, %xmm8 2978 2979#if defined(LN) || defined(LT) 2980 movsd -32 * SIZE(BO), %xmm9 2981#else 2982 movsd -32 * SIZE(AO), %xmm9 2983#endif 2984 2985 subps %xmm8, %xmm9 2986 2987 pcmpeqb %xmm7, %xmm7 2988 psllq $63, %xmm7 2989 2990#ifndef CONJ 2991 shufps $0xb1, %xmm7, %xmm7 2992#endif 2993 2994#if defined(LN) || defined(LT) 2995 movsd -32 * SIZE(AO), %xmm5 2996#endif 2997 2998#if defined(RN) || defined(RT) 2999 movsd -32 * SIZE(BO), %xmm5 3000#endif 3001 3002 pshufd $0x00, %xmm5, %xmm0 3003 pshufd $0x55, %xmm5, %xmm1 3004 3005 pshufd $0xb1, %xmm9, %xmm10 3006 3007 xorps %xmm7, %xmm10 3008 3009 mulps %xmm0, %xmm9 3010 mulps %xmm1, %xmm10 3011 3012 addps %xmm10, %xmm9 3013 3014#ifdef LN 3015 subq $2 * SIZE, CO1 3016#endif 3017 3018#if defined(LN) || defined(LT) 3019 movlps %xmm9, -32 * SIZE(BO) 3020#else 3021 movlps %xmm9, -32 * SIZE(AO) 3022#endif 3023 3024 movlps %xmm9, (CO1) 3025 3026#ifndef LN 3027 addq $2 * SIZE, CO1 3028#endif 3029 3030#if defined(LT) || defined(RN) 3031 movq K, %rax 3032 subq KK, %rax 3033 salq $ZBASE_SHIFT, %rax 3034 leaq (AO, %rax, 1), AO 3035 leaq (BO, %rax, 1), BO 3036#endif 3037 3038#ifdef LN 3039 subq $1, KK 3040#endif 3041 3042#ifdef LT 3043 addq $1, KK 3044#endif 3045 3046#ifdef RT 3047 movq K, %rax 3048 salq $ZBASE_SHIFT, %rax 3049 addq %rax, AORIG 3050#endif 3051 ALIGN_4 3052 3053.L69: 3054#ifdef LN 3055 movq K, %rax 3056 salq $ZBASE_SHIFT, %rax 3057 leaq (B, %rax, 1), B 3058#endif 3059 3060#if defined(LT) || defined(RN) 3061 movq BO, B 3062#endif 3063 3064#ifdef RN 3065 addq $1, KK 3066#endif 3067 3068#ifdef RT 3069 subq $1, KK 3070#endif 3071 ALIGN_4 3072 3073.L999: 3074 movq 0(%rsp), %rbx 3075 movq 8(%rsp), %rbp 3076 movq 16(%rsp), %r12 3077 movq 24(%rsp), %r13 3078 movq 32(%rsp), %r14 3079 movq 40(%rsp), %r15 3080 3081#ifdef WINDOWS_ABI 3082 movq 48(%rsp), %rdi 3083 movq 56(%rsp), %rsi 3084 movups 64(%rsp), %xmm6 3085 movups 80(%rsp), %xmm7 3086 movups 96(%rsp), %xmm8 3087 movups 112(%rsp), %xmm9 3088 movups 128(%rsp), %xmm10 3089 movups 144(%rsp), %xmm11 3090 movups 160(%rsp), %xmm12 3091 movups 176(%rsp), %xmm13 3092 movups 192(%rsp), %xmm14 3093 movups 208(%rsp), %xmm15 3094#endif 3095 3096 addq $STACKSIZE, %rsp 3097 ret 3098 3099 EPILOGUE 3100