1/* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22/* 23 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27/* 28 * Copyright (c) 2008, Intel Corporation 29 * All rights reserved. 30 */ 31 32/* 33 * Portions Copyright 2009 Advanced Micro Devices, Inc. 34 */ 35 36 .file "memset.s" 37 38#include <sys/asm_linkage.h> 39 40 ANSI_PRAGMA_WEAK(memset,function) 41 42#include "cache.h" 43#include "proc64_id.h" 44 45#define L(s) .memset/**/s 46 47/* 48 * memset algorithm overview: 49 * 50 * Thresholds used below were determined experimentally. 51 * 52 * Pseudo code: 53 * 54 * NOTE: On AMD NO_SSE is always set. Performance on Opteron did not improve 55 * using 16-byte stores. Setting NO_SSE on AMD should be re-evaluated on 56 * future AMD processors. 57 * 58 * 59 * If (size <= 144 bytes) { 60 * do unrolled code (primarily 8-byte stores) regardless of alignment. 61 * } else { 62 * Align destination to 16-byte boundary 63 * 64 * if (NO_SSE) { 65 * If (size > largest level cache) { 66 * Use 8-byte non-temporal stores (64-bytes/loop) 67 * } else { 68 * if (size >= 2K) { 69 * Use rep sstoq 70 * } else { 71 * Use 8-byte stores (128 bytes per loop) 72 * } 73 * } 74 * 75 * } else { **USE SSE** 76 * If (size <= 192 bytes) { 77 * do unrolled code using primarily 16-byte stores (SSE2) 78 * } else { 79 * If (size > largest level cache) { 80 * Use 16-byte non-temporal stores (128-bytes/loop) 81 * } else { 82 * Use 16-byte stores (128 bytes per loop) 83 * } 84 * } 85 * } 86 * 87 * Finish any remaining bytes via unrolled code above. 88 * } 89 */ 90 91 ENTRY(memset) # (void *, const void*, size_t) 92 cmp $0x1,%rdx 93 mov %rdi,%rax # memset returns the dest address 94 jne L(ck2) 95 mov %sil,(%rdi) 96 ret 97L(ck2): 98 mov $0x0101010101010101,%r9 99 mov %rdx,%r8 100 movzbq %sil,%rdx 101 imul %r9,%rdx # clone value 8 times 102 103 cmp $0x90,%r8 # 144 104 jge L(ck_align) 105 106 lea L(setPxQx)(%rip),%r11 107 add %r8,%rdi 108 109 movslq (%r11,%r8,4),%rcx 110 lea (%rcx,%r11,1),%r11 111 jmpq *%r11 112 113 .balign 16 114L(setPxQx): .int L(P0Q0)-L(setPxQx) 115 .int L(P1Q0)-L(setPxQx) 116 .int L(P2Q0)-L(setPxQx) 117 .int L(P3Q0)-L(setPxQx) 118 .int L(P4Q0)-L(setPxQx) 119 .int L(P5Q0)-L(setPxQx) 120 .int L(P6Q0)-L(setPxQx) 121 .int L(P7Q0)-L(setPxQx) 122 123 .int L(P0Q1)-L(setPxQx) 124 .int L(P1Q1)-L(setPxQx) 125 .int L(P2Q1)-L(setPxQx) 126 .int L(P3Q1)-L(setPxQx) 127 .int L(P4Q1)-L(setPxQx) 128 .int L(P5Q1)-L(setPxQx) 129 .int L(P6Q1)-L(setPxQx) 130 .int L(P7Q1)-L(setPxQx) 131 132 .int L(P0Q2)-L(setPxQx) 133 .int L(P1Q2)-L(setPxQx) 134 .int L(P2Q2)-L(setPxQx) 135 .int L(P3Q2)-L(setPxQx) 136 .int L(P4Q2)-L(setPxQx) 137 .int L(P5Q2)-L(setPxQx) 138 .int L(P6Q2)-L(setPxQx) 139 .int L(P7Q2)-L(setPxQx) 140 141 .int L(P0Q3)-L(setPxQx) 142 .int L(P1Q3)-L(setPxQx) 143 .int L(P2Q3)-L(setPxQx) 144 .int L(P3Q3)-L(setPxQx) 145 .int L(P4Q3)-L(setPxQx) 146 .int L(P5Q3)-L(setPxQx) 147 .int L(P6Q3)-L(setPxQx) 148 .int L(P7Q3)-L(setPxQx) 149 150 .int L(P0Q4)-L(setPxQx) 151 .int L(P1Q4)-L(setPxQx) 152 .int L(P2Q4)-L(setPxQx) 153 .int L(P3Q4)-L(setPxQx) 154 .int L(P4Q4)-L(setPxQx) 155 .int L(P5Q4)-L(setPxQx) 156 .int L(P6Q4)-L(setPxQx) 157 .int L(P7Q4)-L(setPxQx) 158 159 .int L(P0Q5)-L(setPxQx) 160 .int L(P1Q5)-L(setPxQx) 161 .int L(P2Q5)-L(setPxQx) 162 .int L(P3Q5)-L(setPxQx) 163 .int L(P4Q5)-L(setPxQx) 164 .int L(P5Q5)-L(setPxQx) 165 .int L(P6Q5)-L(setPxQx) 166 .int L(P7Q5)-L(setPxQx) 167 168 .int L(P0Q6)-L(setPxQx) 169 .int L(P1Q6)-L(setPxQx) 170 .int L(P2Q6)-L(setPxQx) 171 .int L(P3Q6)-L(setPxQx) 172 .int L(P4Q6)-L(setPxQx) 173 .int L(P5Q6)-L(setPxQx) 174 .int L(P6Q6)-L(setPxQx) 175 .int L(P7Q6)-L(setPxQx) 176 177 .int L(P0Q7)-L(setPxQx) 178 .int L(P1Q7)-L(setPxQx) 179 .int L(P2Q7)-L(setPxQx) 180 .int L(P3Q7)-L(setPxQx) 181 .int L(P4Q7)-L(setPxQx) 182 .int L(P5Q7)-L(setPxQx) 183 .int L(P6Q7)-L(setPxQx) 184 .int L(P7Q7)-L(setPxQx) 185 186 .int L(P0Q8)-L(setPxQx) 187 .int L(P1Q8)-L(setPxQx) 188 .int L(P2Q8)-L(setPxQx) 189 .int L(P3Q8)-L(setPxQx) 190 .int L(P4Q8)-L(setPxQx) 191 .int L(P5Q8)-L(setPxQx) 192 .int L(P6Q8)-L(setPxQx) 193 .int L(P7Q8)-L(setPxQx) 194 195 .int L(P0Q9)-L(setPxQx) 196 .int L(P1Q9)-L(setPxQx) 197 .int L(P2Q9)-L(setPxQx) 198 .int L(P3Q9)-L(setPxQx) 199 .int L(P4Q9)-L(setPxQx) 200 .int L(P5Q9)-L(setPxQx) 201 .int L(P6Q9)-L(setPxQx) 202 .int L(P7Q9)-L(setPxQx) 203 204 .int L(P0QA)-L(setPxQx) 205 .int L(P1QA)-L(setPxQx) 206 .int L(P2QA)-L(setPxQx) 207 .int L(P3QA)-L(setPxQx) 208 .int L(P4QA)-L(setPxQx) 209 .int L(P5QA)-L(setPxQx) 210 .int L(P6QA)-L(setPxQx) 211 .int L(P7QA)-L(setPxQx) 212 213 .int L(P0QB)-L(setPxQx) 214 .int L(P1QB)-L(setPxQx) 215 .int L(P2QB)-L(setPxQx) 216 .int L(P3QB)-L(setPxQx) 217 .int L(P4QB)-L(setPxQx) 218 .int L(P5QB)-L(setPxQx) 219 .int L(P6QB)-L(setPxQx) 220 .int L(P7QB)-L(setPxQx) 221 222 .int L(P0QC)-L(setPxQx) 223 .int L(P1QC)-L(setPxQx) 224 .int L(P2QC)-L(setPxQx) 225 .int L(P3QC)-L(setPxQx) 226 .int L(P4QC)-L(setPxQx) 227 .int L(P5QC)-L(setPxQx) 228 .int L(P6QC)-L(setPxQx) 229 .int L(P7QC)-L(setPxQx) 230 231 .int L(P0QD)-L(setPxQx) 232 .int L(P1QD)-L(setPxQx) 233 .int L(P2QD)-L(setPxQx) 234 .int L(P3QD)-L(setPxQx) 235 .int L(P4QD)-L(setPxQx) 236 .int L(P5QD)-L(setPxQx) 237 .int L(P6QD)-L(setPxQx) 238 .int L(P7QD)-L(setPxQx) 239 240 .int L(P0QE)-L(setPxQx) # 112 241 .int L(P1QE)-L(setPxQx) 242 .int L(P2QE)-L(setPxQx) 243 .int L(P3QE)-L(setPxQx) 244 .int L(P4QE)-L(setPxQx) 245 .int L(P5QE)-L(setPxQx) 246 .int L(P6QE)-L(setPxQx) 247 .int L(P7QE)-L(setPxQx) 248 249 .int L(P0QF)-L(setPxQx) #120 250 .int L(P1QF)-L(setPxQx) 251 .int L(P2QF)-L(setPxQx) 252 .int L(P3QF)-L(setPxQx) 253 .int L(P4QF)-L(setPxQx) 254 .int L(P5QF)-L(setPxQx) 255 .int L(P6QF)-L(setPxQx) 256 .int L(P7QF)-L(setPxQx) 257 258 .int L(P0QG)-L(setPxQx) #128 259 .int L(P1QG)-L(setPxQx) 260 .int L(P2QG)-L(setPxQx) 261 .int L(P3QG)-L(setPxQx) 262 .int L(P4QG)-L(setPxQx) 263 .int L(P5QG)-L(setPxQx) 264 .int L(P6QG)-L(setPxQx) 265 .int L(P7QG)-L(setPxQx) 266 267 .int L(P0QH)-L(setPxQx) #136 268 .int L(P1QH)-L(setPxQx) 269 .int L(P2QH)-L(setPxQx) 270 .int L(P3QH)-L(setPxQx) 271 .int L(P4QH)-L(setPxQx) 272 .int L(P5QH)-L(setPxQx) 273 .int L(P6QH)-L(setPxQx) 274 .int L(P7QH)-L(setPxQx) #143 275 276 .balign 16 277L(P1QH): mov %rdx,-0x89(%rdi) 278L(P1QG): mov %rdx,-0x81(%rdi) 279 .balign 16 280L(P1QF): mov %rdx,-0x79(%rdi) 281L(P1QE): mov %rdx,-0x71(%rdi) 282L(P1QD): mov %rdx,-0x69(%rdi) 283L(P1QC): mov %rdx,-0x61(%rdi) 284L(P1QB): mov %rdx,-0x59(%rdi) 285L(P1QA): mov %rdx,-0x51(%rdi) 286L(P1Q9): mov %rdx,-0x49(%rdi) 287L(P1Q8): mov %rdx,-0x41(%rdi) 288L(P1Q7): mov %rdx,-0x39(%rdi) 289L(P1Q6): mov %rdx,-0x31(%rdi) 290L(P1Q5): mov %rdx,-0x29(%rdi) 291L(P1Q4): mov %rdx,-0x21(%rdi) 292L(P1Q3): mov %rdx,-0x19(%rdi) 293L(P1Q2): mov %rdx,-0x11(%rdi) 294L(P1Q1): mov %rdx,-0x9(%rdi) 295L(P1Q0): mov %dl,-0x1(%rdi) 296 ret 297 298 .balign 16 299L(P0QH): mov %rdx,-0x88(%rdi) 300 .balign 16 301L(P0QG): mov %rdx,-0x80(%rdi) 302L(P0QF): mov %rdx,-0x78(%rdi) 303L(P0QE): mov %rdx,-0x70(%rdi) 304L(P0QD): mov %rdx,-0x68(%rdi) 305L(P0QC): mov %rdx,-0x60(%rdi) 306L(P0QB): mov %rdx,-0x58(%rdi) 307L(P0QA): mov %rdx,-0x50(%rdi) 308L(P0Q9): mov %rdx,-0x48(%rdi) 309L(P0Q8): mov %rdx,-0x40(%rdi) 310L(P0Q7): mov %rdx,-0x38(%rdi) 311L(P0Q6): mov %rdx,-0x30(%rdi) 312L(P0Q5): mov %rdx,-0x28(%rdi) 313L(P0Q4): mov %rdx,-0x20(%rdi) 314L(P0Q3): mov %rdx,-0x18(%rdi) 315L(P0Q2): mov %rdx,-0x10(%rdi) 316L(P0Q1): mov %rdx,-0x8(%rdi) 317L(P0Q0): ret 318 319 .balign 16 320L(P2QH): mov %rdx,-0x8a(%rdi) 321L(P2QG): mov %rdx,-0x82(%rdi) 322 .balign 16 323L(P2QF): mov %rdx,-0x7a(%rdi) 324L(P2QE): mov %rdx,-0x72(%rdi) 325L(P2QD): mov %rdx,-0x6a(%rdi) 326L(P2QC): mov %rdx,-0x62(%rdi) 327L(P2QB): mov %rdx,-0x5a(%rdi) 328L(P2QA): mov %rdx,-0x52(%rdi) 329L(P2Q9): mov %rdx,-0x4a(%rdi) 330L(P2Q8): mov %rdx,-0x42(%rdi) 331L(P2Q7): mov %rdx,-0x3a(%rdi) 332L(P2Q6): mov %rdx,-0x32(%rdi) 333L(P2Q5): mov %rdx,-0x2a(%rdi) 334L(P2Q4): mov %rdx,-0x22(%rdi) 335L(P2Q3): mov %rdx,-0x1a(%rdi) 336L(P2Q2): mov %rdx,-0x12(%rdi) 337L(P2Q1): mov %rdx,-0xa(%rdi) 338L(P2Q0): mov %dx,-0x2(%rdi) 339 ret 340 341 .balign 16 342L(P3QH): mov %rdx,-0x8b(%rdi) 343L(P3QG): mov %rdx,-0x83(%rdi) 344 .balign 16 345L(P3QF): mov %rdx,-0x7b(%rdi) 346L(P3QE): mov %rdx,-0x73(%rdi) 347L(P3QD): mov %rdx,-0x6b(%rdi) 348L(P3QC): mov %rdx,-0x63(%rdi) 349L(P3QB): mov %rdx,-0x5b(%rdi) 350L(P3QA): mov %rdx,-0x53(%rdi) 351L(P3Q9): mov %rdx,-0x4b(%rdi) 352L(P3Q8): mov %rdx,-0x43(%rdi) 353L(P3Q7): mov %rdx,-0x3b(%rdi) 354L(P3Q6): mov %rdx,-0x33(%rdi) 355L(P3Q5): mov %rdx,-0x2b(%rdi) 356L(P3Q4): mov %rdx,-0x23(%rdi) 357L(P3Q3): mov %rdx,-0x1b(%rdi) 358L(P3Q2): mov %rdx,-0x13(%rdi) 359L(P3Q1): mov %rdx,-0xb(%rdi) 360L(P3Q0): mov %dx,-0x3(%rdi) 361 mov %dl,-0x1(%rdi) 362 ret 363 364 .balign 16 365L(P4QH): mov %rdx,-0x8c(%rdi) 366L(P4QG): mov %rdx,-0x84(%rdi) 367 .balign 16 368L(P4QF): mov %rdx,-0x7c(%rdi) 369L(P4QE): mov %rdx,-0x74(%rdi) 370L(P4QD): mov %rdx,-0x6c(%rdi) 371L(P4QC): mov %rdx,-0x64(%rdi) 372L(P4QB): mov %rdx,-0x5c(%rdi) 373L(P4QA): mov %rdx,-0x54(%rdi) 374L(P4Q9): mov %rdx,-0x4c(%rdi) 375L(P4Q8): mov %rdx,-0x44(%rdi) 376L(P4Q7): mov %rdx,-0x3c(%rdi) 377L(P4Q6): mov %rdx,-0x34(%rdi) 378L(P4Q5): mov %rdx,-0x2c(%rdi) 379L(P4Q4): mov %rdx,-0x24(%rdi) 380L(P4Q3): mov %rdx,-0x1c(%rdi) 381L(P4Q2): mov %rdx,-0x14(%rdi) 382L(P4Q1): mov %rdx,-0xc(%rdi) 383L(P4Q0): mov %edx,-0x4(%rdi) 384 ret 385 386 .balign 16 387L(P5QH): mov %rdx,-0x8d(%rdi) 388L(P5QG): mov %rdx,-0x85(%rdi) 389 .balign 16 390L(P5QF): mov %rdx,-0x7d(%rdi) 391L(P5QE): mov %rdx,-0x75(%rdi) 392L(P5QD): mov %rdx,-0x6d(%rdi) 393L(P5QC): mov %rdx,-0x65(%rdi) 394L(P5QB): mov %rdx,-0x5d(%rdi) 395L(P5QA): mov %rdx,-0x55(%rdi) 396L(P5Q9): mov %rdx,-0x4d(%rdi) 397L(P5Q8): mov %rdx,-0x45(%rdi) 398L(P5Q7): mov %rdx,-0x3d(%rdi) 399L(P5Q6): mov %rdx,-0x35(%rdi) 400L(P5Q5): mov %rdx,-0x2d(%rdi) 401L(P5Q4): mov %rdx,-0x25(%rdi) 402L(P5Q3): mov %rdx,-0x1d(%rdi) 403L(P5Q2): mov %rdx,-0x15(%rdi) 404L(P5Q1): mov %rdx,-0xd(%rdi) 405L(P5Q0): mov %edx,-0x5(%rdi) 406 mov %dl,-0x1(%rdi) 407 ret 408 409 .balign 16 410L(P6QH): mov %rdx,-0x8e(%rdi) 411L(P6QG): mov %rdx,-0x86(%rdi) 412 .balign 16 413L(P6QF): mov %rdx,-0x7e(%rdi) 414L(P6QE): mov %rdx,-0x76(%rdi) 415L(P6QD): mov %rdx,-0x6e(%rdi) 416L(P6QC): mov %rdx,-0x66(%rdi) 417L(P6QB): mov %rdx,-0x5e(%rdi) 418L(P6QA): mov %rdx,-0x56(%rdi) 419L(P6Q9): mov %rdx,-0x4e(%rdi) 420L(P6Q8): mov %rdx,-0x46(%rdi) 421L(P6Q7): mov %rdx,-0x3e(%rdi) 422L(P6Q6): mov %rdx,-0x36(%rdi) 423L(P6Q5): mov %rdx,-0x2e(%rdi) 424L(P6Q4): mov %rdx,-0x26(%rdi) 425L(P6Q3): mov %rdx,-0x1e(%rdi) 426L(P6Q2): mov %rdx,-0x16(%rdi) 427L(P6Q1): mov %rdx,-0xe(%rdi) 428L(P6Q0): mov %edx,-0x6(%rdi) 429 mov %dx,-0x2(%rdi) 430 ret 431 432 .balign 16 433L(P7QH): mov %rdx,-0x8f(%rdi) 434L(P7QG): mov %rdx,-0x87(%rdi) 435 .balign 16 436L(P7QF): mov %rdx,-0x7f(%rdi) 437L(P7QE): mov %rdx,-0x77(%rdi) 438L(P7QD): mov %rdx,-0x6f(%rdi) 439L(P7QC): mov %rdx,-0x67(%rdi) 440L(P7QB): mov %rdx,-0x5f(%rdi) 441L(P7QA): mov %rdx,-0x57(%rdi) 442L(P7Q9): mov %rdx,-0x4f(%rdi) 443L(P7Q8): mov %rdx,-0x47(%rdi) 444L(P7Q7): mov %rdx,-0x3f(%rdi) 445L(P7Q6): mov %rdx,-0x37(%rdi) 446L(P7Q5): mov %rdx,-0x2f(%rdi) 447L(P7Q4): mov %rdx,-0x27(%rdi) 448L(P7Q3): mov %rdx,-0x1f(%rdi) 449L(P7Q2): mov %rdx,-0x17(%rdi) 450L(P7Q1): mov %rdx,-0xf(%rdi) 451L(P7Q0): mov %edx,-0x7(%rdi) 452 mov %dx,-0x3(%rdi) 453 mov %dl,-0x1(%rdi) 454 ret 455 456 .balign 16 457L(ck_align): 458 /* 459 * Align to 16 byte boundary first 460 */ 461 lea L(AliPxQx)(%rip),%r11 462 mov $0x10,%r10 463 mov %rdi,%r9 464 and $0xf,%r9 465 sub %r9,%r10 466 and $0xf,%r10 467 add %r10,%rdi 468 sub %r10,%r8 469 470 movslq (%r11,%r10,4),%rcx 471 lea (%rcx,%r11,1),%r11 472 jmpq *%r11 # align dest to 16-byte boundary 473 474 .balign 16 475L(AliPxQx): .int L(aligned_now)-L(AliPxQx) 476 .int L(A1Q0)-L(AliPxQx) 477 .int L(A2Q0)-L(AliPxQx) 478 .int L(A3Q0)-L(AliPxQx) 479 .int L(A4Q0)-L(AliPxQx) 480 .int L(A5Q0)-L(AliPxQx) 481 .int L(A6Q0)-L(AliPxQx) 482 .int L(A7Q0)-L(AliPxQx) 483 484 .int L(A0Q1)-L(AliPxQx) 485 .int L(A1Q1)-L(AliPxQx) 486 .int L(A2Q1)-L(AliPxQx) 487 .int L(A3Q1)-L(AliPxQx) 488 .int L(A4Q1)-L(AliPxQx) 489 .int L(A5Q1)-L(AliPxQx) 490 .int L(A6Q1)-L(AliPxQx) 491 .int L(A7Q1)-L(AliPxQx) 492 493 .balign 16 494L(A5Q1): mov %dl,-0xd(%rdi) 495L(A4Q1): mov %edx,-0xc(%rdi) 496L(A0Q1): mov %rdx,-0x8(%rdi) 497 jmp L(aligned_now) 498 499 .balign 16 500L(A1Q1): mov %dl,-0x9(%rdi) 501 mov %rdx,-0x8(%rdi) 502 jmp L(aligned_now) 503 504 .balign 16 505L(A1Q0): mov %dl,-0x1(%rdi) 506 jmp L(aligned_now) 507 508 .balign 16 509L(A3Q1): mov %dl,-0xb(%rdi) 510L(A2Q1): mov %dx,-0xa(%rdi) 511 mov %rdx,-0x8(%rdi) 512 jmp L(aligned_now) 513 514 .balign 16 515L(A3Q0): mov %dl,-0x3(%rdi) 516L(A2Q0): mov %dx,-0x2(%rdi) 517 jmp L(aligned_now) 518 519 .balign 16 520L(A5Q0): mov %dl,-0x5(%rdi) 521L(A4Q0): mov %edx,-0x4(%rdi) 522 jmp L(aligned_now) 523 524 .balign 16 525L(A7Q1): mov %dl,-0xf(%rdi) 526L(A6Q1): mov %dx,-0xe(%rdi) 527 mov %edx,-0xc(%rdi) 528 mov %rdx,-0x8(%rdi) 529 jmp L(aligned_now) 530 531 .balign 16 532L(A7Q0): mov %dl,-0x7(%rdi) 533L(A6Q0): mov %dx,-0x6(%rdi) 534 mov %edx,-0x4(%rdi) 535 #jmp L(aligned_now) # Fall thru... 536 537 .balign 16 538L(aligned_now): 539 /* 540 * Check memops method 541 */ 542 cmpl $NO_SSE,.memops_method(%rip) 543 je L(Loop8byte_pre) 544 545 /* 546 * Use SSE2 instructions 547 */ 548 movd %rdx,%xmm0 549 lea L(SSExDx)(%rip),%r9 # after dest alignment 550 punpcklqdq %xmm0,%xmm0 # fill RegXMM0 with the pattern 551 cmp $0xc0,%r8 # 192 552 jge L(byte32sse2_pre) 553 554 add %r8,%rdi 555 556 movslq (%r9,%r8,4),%rcx 557 lea (%rcx,%r9,1),%r9 558 jmpq *%r9 559 560 .balign 16 561L(SSE0QB): movdqa %xmm0,-0xb0(%rdi) 562L(SSE0QA): movdqa %xmm0,-0xa0(%rdi) 563L(SSE0Q9): movdqa %xmm0,-0x90(%rdi) 564L(SSE0Q8): movdqa %xmm0,-0x80(%rdi) 565L(SSE0Q7): movdqa %xmm0,-0x70(%rdi) 566L(SSE0Q6): movdqa %xmm0,-0x60(%rdi) 567L(SSE0Q5): movdqa %xmm0,-0x50(%rdi) 568L(SSE0Q4): movdqa %xmm0,-0x40(%rdi) 569L(SSE0Q3): movdqa %xmm0,-0x30(%rdi) 570L(SSE0Q2): movdqa %xmm0,-0x20(%rdi) 571L(SSE0Q1): movdqa %xmm0,-0x10(%rdi) 572L(SSE0Q0): ret 573 574 .balign 16 575L(SSE1QB): movdqa %xmm0,-0xb1(%rdi) 576L(SSE1QA): movdqa %xmm0,-0xa1(%rdi) 577L(SSE1Q9): movdqa %xmm0,-0x91(%rdi) 578L(SSE1Q8): movdqa %xmm0,-0x81(%rdi) 579L(SSE1Q7): movdqa %xmm0,-0x71(%rdi) 580L(SSE1Q6): movdqa %xmm0,-0x61(%rdi) 581L(SSE1Q5): movdqa %xmm0,-0x51(%rdi) 582L(SSE1Q4): movdqa %xmm0,-0x41(%rdi) 583L(SSE1Q3): movdqa %xmm0,-0x31(%rdi) 584L(SSE1Q2): movdqa %xmm0,-0x21(%rdi) 585L(SSE1Q1): movdqa %xmm0,-0x11(%rdi) 586L(SSE1Q0): mov %dl,-0x1(%rdi) 587 ret 588 589 .balign 16 590L(SSE2QB): movdqa %xmm0,-0xb2(%rdi) 591L(SSE2QA): movdqa %xmm0,-0xa2(%rdi) 592L(SSE2Q9): movdqa %xmm0,-0x92(%rdi) 593L(SSE2Q8): movdqa %xmm0,-0x82(%rdi) 594L(SSE2Q7): movdqa %xmm0,-0x72(%rdi) 595L(SSE2Q6): movdqa %xmm0,-0x62(%rdi) 596L(SSE2Q5): movdqa %xmm0,-0x52(%rdi) 597L(SSE2Q4): movdqa %xmm0,-0x42(%rdi) 598L(SSE2Q3): movdqa %xmm0,-0x32(%rdi) 599L(SSE2Q2): movdqa %xmm0,-0x22(%rdi) 600L(SSE2Q1): movdqa %xmm0,-0x12(%rdi) 601L(SSE2Q0): mov %dx,-0x2(%rdi) 602 ret 603 604 .balign 16 605L(SSE3QB): movdqa %xmm0,-0xb3(%rdi) 606L(SSE3QA): movdqa %xmm0,-0xa3(%rdi) 607L(SSE3Q9): movdqa %xmm0,-0x93(%rdi) 608L(SSE3Q8): movdqa %xmm0,-0x83(%rdi) 609L(SSE3Q7): movdqa %xmm0,-0x73(%rdi) 610L(SSE3Q6): movdqa %xmm0,-0x63(%rdi) 611L(SSE3Q5): movdqa %xmm0,-0x53(%rdi) 612L(SSE3Q4): movdqa %xmm0,-0x43(%rdi) 613L(SSE3Q3): movdqa %xmm0,-0x33(%rdi) 614L(SSE3Q2): movdqa %xmm0,-0x23(%rdi) 615L(SSE3Q1): movdqa %xmm0,-0x13(%rdi) 616L(SSE3Q0): mov %dx,-0x3(%rdi) 617 mov %dl,-0x1(%rdi) 618 ret 619 620 .balign 16 621L(SSE4QB): movdqa %xmm0,-0xb4(%rdi) 622L(SSE4QA): movdqa %xmm0,-0xa4(%rdi) 623L(SSE4Q9): movdqa %xmm0,-0x94(%rdi) 624L(SSE4Q8): movdqa %xmm0,-0x84(%rdi) 625L(SSE4Q7): movdqa %xmm0,-0x74(%rdi) 626L(SSE4Q6): movdqa %xmm0,-0x64(%rdi) 627L(SSE4Q5): movdqa %xmm0,-0x54(%rdi) 628L(SSE4Q4): movdqa %xmm0,-0x44(%rdi) 629L(SSE4Q3): movdqa %xmm0,-0x34(%rdi) 630L(SSE4Q2): movdqa %xmm0,-0x24(%rdi) 631L(SSE4Q1): movdqa %xmm0,-0x14(%rdi) 632L(SSE4Q0): mov %edx,-0x4(%rdi) 633 ret 634 635 .balign 16 636L(SSE5QB): movdqa %xmm0,-0xb5(%rdi) 637L(SSE5QA): movdqa %xmm0,-0xa5(%rdi) 638L(SSE5Q9): movdqa %xmm0,-0x95(%rdi) 639L(SSE5Q8): movdqa %xmm0,-0x85(%rdi) 640L(SSE5Q7): movdqa %xmm0,-0x75(%rdi) 641L(SSE5Q6): movdqa %xmm0,-0x65(%rdi) 642L(SSE5Q5): movdqa %xmm0,-0x55(%rdi) 643L(SSE5Q4): movdqa %xmm0,-0x45(%rdi) 644L(SSE5Q3): movdqa %xmm0,-0x35(%rdi) 645L(SSE5Q2): movdqa %xmm0,-0x25(%rdi) 646L(SSE5Q1): movdqa %xmm0,-0x15(%rdi) 647L(SSE5Q0): mov %edx,-0x5(%rdi) 648 mov %dl,-0x1(%rdi) 649 ret 650 651 .balign 16 652L(SSE6QB): movdqa %xmm0,-0xb6(%rdi) 653L(SSE6QA): movdqa %xmm0,-0xa6(%rdi) 654L(SSE6Q9): movdqa %xmm0,-0x96(%rdi) 655L(SSE6Q8): movdqa %xmm0,-0x86(%rdi) 656L(SSE6Q7): movdqa %xmm0,-0x76(%rdi) 657L(SSE6Q6): movdqa %xmm0,-0x66(%rdi) 658L(SSE6Q5): movdqa %xmm0,-0x56(%rdi) 659L(SSE6Q4): movdqa %xmm0,-0x46(%rdi) 660L(SSE6Q3): movdqa %xmm0,-0x36(%rdi) 661L(SSE6Q2): movdqa %xmm0,-0x26(%rdi) 662L(SSE6Q1): movdqa %xmm0,-0x16(%rdi) 663L(SSE6Q0): mov %edx,-0x6(%rdi) 664 mov %dx,-0x2(%rdi) 665 ret 666 667 .balign 16 668L(SSE7QB): movdqa %xmm0,-0xb7(%rdi) 669L(SSE7QA): movdqa %xmm0,-0xa7(%rdi) 670L(SSE7Q9): movdqa %xmm0,-0x97(%rdi) 671L(SSE7Q8): movdqa %xmm0,-0x87(%rdi) 672L(SSE7Q7): movdqa %xmm0,-0x77(%rdi) 673L(SSE7Q6): movdqa %xmm0,-0x67(%rdi) 674L(SSE7Q5): movdqa %xmm0,-0x57(%rdi) 675L(SSE7Q4): movdqa %xmm0,-0x47(%rdi) 676L(SSE7Q3): movdqa %xmm0,-0x37(%rdi) 677L(SSE7Q2): movdqa %xmm0,-0x27(%rdi) 678L(SSE7Q1): movdqa %xmm0,-0x17(%rdi) 679L(SSE7Q0): mov %edx,-0x7(%rdi) 680 mov %dx,-0x3(%rdi) 681 mov %dl,-0x1(%rdi) 682 ret 683 684 .balign 16 685L(SSE8QB): movdqa %xmm0,-0xb8(%rdi) 686L(SSE8QA): movdqa %xmm0,-0xa8(%rdi) 687L(SSE8Q9): movdqa %xmm0,-0x98(%rdi) 688L(SSE8Q8): movdqa %xmm0,-0x88(%rdi) 689L(SSE8Q7): movdqa %xmm0,-0x78(%rdi) 690L(SSE8Q6): movdqa %xmm0,-0x68(%rdi) 691L(SSE8Q5): movdqa %xmm0,-0x58(%rdi) 692L(SSE8Q4): movdqa %xmm0,-0x48(%rdi) 693L(SSE8Q3): movdqa %xmm0,-0x38(%rdi) 694L(SSE8Q2): movdqa %xmm0,-0x28(%rdi) 695L(SSE8Q1): movdqa %xmm0,-0x18(%rdi) 696L(SSE8Q0): mov %rdx,-0x8(%rdi) 697 ret 698 699 .balign 16 700L(SSE9QB): movdqa %xmm0,-0xb9(%rdi) 701L(SSE9QA): movdqa %xmm0,-0xa9(%rdi) 702L(SSE9Q9): movdqa %xmm0,-0x99(%rdi) 703L(SSE9Q8): movdqa %xmm0,-0x89(%rdi) 704L(SSE9Q7): movdqa %xmm0,-0x79(%rdi) 705L(SSE9Q6): movdqa %xmm0,-0x69(%rdi) 706L(SSE9Q5): movdqa %xmm0,-0x59(%rdi) 707L(SSE9Q4): movdqa %xmm0,-0x49(%rdi) 708L(SSE9Q3): movdqa %xmm0,-0x39(%rdi) 709L(SSE9Q2): movdqa %xmm0,-0x29(%rdi) 710L(SSE9Q1): movdqa %xmm0,-0x19(%rdi) 711L(SSE9Q0): mov %rdx,-0x9(%rdi) 712 mov %dl,-0x1(%rdi) 713 ret 714 715 .balign 16 716L(SSE10QB): movdqa %xmm0,-0xba(%rdi) 717L(SSE10QA): movdqa %xmm0,-0xaa(%rdi) 718L(SSE10Q9): movdqa %xmm0,-0x9a(%rdi) 719L(SSE10Q8): movdqa %xmm0,-0x8a(%rdi) 720L(SSE10Q7): movdqa %xmm0,-0x7a(%rdi) 721L(SSE10Q6): movdqa %xmm0,-0x6a(%rdi) 722L(SSE10Q5): movdqa %xmm0,-0x5a(%rdi) 723L(SSE10Q4): movdqa %xmm0,-0x4a(%rdi) 724L(SSE10Q3): movdqa %xmm0,-0x3a(%rdi) 725L(SSE10Q2): movdqa %xmm0,-0x2a(%rdi) 726L(SSE10Q1): movdqa %xmm0,-0x1a(%rdi) 727L(SSE10Q0): mov %rdx,-0xa(%rdi) 728 mov %dx,-0x2(%rdi) 729 ret 730 731 .balign 16 732L(SSE11QB): movdqa %xmm0,-0xbb(%rdi) 733L(SSE11QA): movdqa %xmm0,-0xab(%rdi) 734L(SSE11Q9): movdqa %xmm0,-0x9b(%rdi) 735L(SSE11Q8): movdqa %xmm0,-0x8b(%rdi) 736L(SSE11Q7): movdqa %xmm0,-0x7b(%rdi) 737L(SSE11Q6): movdqa %xmm0,-0x6b(%rdi) 738L(SSE11Q5): movdqa %xmm0,-0x5b(%rdi) 739L(SSE11Q4): movdqa %xmm0,-0x4b(%rdi) 740L(SSE11Q3): movdqa %xmm0,-0x3b(%rdi) 741L(SSE11Q2): movdqa %xmm0,-0x2b(%rdi) 742L(SSE11Q1): movdqa %xmm0,-0x1b(%rdi) 743L(SSE11Q0): mov %rdx,-0xb(%rdi) 744 mov %dx,-0x3(%rdi) 745 mov %dl,-0x1(%rdi) 746 ret 747 748 .balign 16 749L(SSE12QB): movdqa %xmm0,-0xbc(%rdi) 750L(SSE12QA): movdqa %xmm0,-0xac(%rdi) 751L(SSE12Q9): movdqa %xmm0,-0x9c(%rdi) 752L(SSE12Q8): movdqa %xmm0,-0x8c(%rdi) 753L(SSE12Q7): movdqa %xmm0,-0x7c(%rdi) 754L(SSE12Q6): movdqa %xmm0,-0x6c(%rdi) 755L(SSE12Q5): movdqa %xmm0,-0x5c(%rdi) 756L(SSE12Q4): movdqa %xmm0,-0x4c(%rdi) 757L(SSE12Q3): movdqa %xmm0,-0x3c(%rdi) 758L(SSE12Q2): movdqa %xmm0,-0x2c(%rdi) 759L(SSE12Q1): movdqa %xmm0,-0x1c(%rdi) 760L(SSE12Q0): mov %rdx,-0xc(%rdi) 761 mov %edx,-0x4(%rdi) 762 ret 763 764 .balign 16 765L(SSE13QB): movdqa %xmm0,-0xbd(%rdi) 766L(SSE13QA): movdqa %xmm0,-0xad(%rdi) 767L(SSE13Q9): movdqa %xmm0,-0x9d(%rdi) 768L(SSE13Q8): movdqa %xmm0,-0x8d(%rdi) 769L(SSE13Q7): movdqa %xmm0,-0x7d(%rdi) 770L(SSE13Q6): movdqa %xmm0,-0x6d(%rdi) 771L(SSE13Q5): movdqa %xmm0,-0x5d(%rdi) 772L(SSE13Q4): movdqa %xmm0,-0x4d(%rdi) 773L(SSE13Q3): movdqa %xmm0,-0x3d(%rdi) 774L(SSE13Q2): movdqa %xmm0,-0x2d(%rdi) 775L(SSE13Q1): movdqa %xmm0,-0x1d(%rdi) 776L(SSE13Q0): mov %rdx,-0xd(%rdi) 777 mov %edx,-0x5(%rdi) 778 mov %dl,-0x1(%rdi) 779 ret 780 781 .balign 16 782L(SSE14QB): movdqa %xmm0,-0xbe(%rdi) 783L(SSE14QA): movdqa %xmm0,-0xae(%rdi) 784L(SSE14Q9): movdqa %xmm0,-0x9e(%rdi) 785L(SSE14Q8): movdqa %xmm0,-0x8e(%rdi) 786L(SSE14Q7): movdqa %xmm0,-0x7e(%rdi) 787L(SSE14Q6): movdqa %xmm0,-0x6e(%rdi) 788L(SSE14Q5): movdqa %xmm0,-0x5e(%rdi) 789L(SSE14Q4): movdqa %xmm0,-0x4e(%rdi) 790L(SSE14Q3): movdqa %xmm0,-0x3e(%rdi) 791L(SSE14Q2): movdqa %xmm0,-0x2e(%rdi) 792L(SSE14Q1): movdqa %xmm0,-0x1e(%rdi) 793L(SSE14Q0): mov %rdx,-0xe(%rdi) 794 mov %edx,-0x6(%rdi) 795 mov %dx,-0x2(%rdi) 796 ret 797 798 .balign 16 799L(SSE15QB): movdqa %xmm0,-0xbf(%rdi) 800L(SSE15QA): movdqa %xmm0,-0xaf(%rdi) 801L(SSE15Q9): movdqa %xmm0,-0x9f(%rdi) 802L(SSE15Q8): movdqa %xmm0,-0x8f(%rdi) 803L(SSE15Q7): movdqa %xmm0,-0x7f(%rdi) 804L(SSE15Q6): movdqa %xmm0,-0x6f(%rdi) 805L(SSE15Q5): movdqa %xmm0,-0x5f(%rdi) 806L(SSE15Q4): movdqa %xmm0,-0x4f(%rdi) 807L(SSE15Q3): movdqa %xmm0,-0x3f(%rdi) 808L(SSE15Q2): movdqa %xmm0,-0x2f(%rdi) 809L(SSE15Q1): movdqa %xmm0,-0x1f(%rdi) 810L(SSE15Q0): mov %rdx,-0xf(%rdi) 811 mov %edx,-0x7(%rdi) 812 mov %dx,-0x3(%rdi) 813 mov %dl,-0x1(%rdi) 814 ret 815 816 .balign 16 817L(byte32sse2_pre): 818 mov .largest_level_cache_size(%rip),%r9d 819 cmp %r9,%r8 820 jg L(sse2_nt_move) 821 #jmp L(byte32sse2) # Fall thru... 822 823 .balign 16 824L(byte32sse2): 825 lea -0x80(%r8),%r8 # 128 826 cmp $0x80,%r8 827 movdqa %xmm0,(%rdi) 828 movdqa %xmm0,0x10(%rdi) 829 movdqa %xmm0,0x20(%rdi) 830 movdqa %xmm0,0x30(%rdi) 831 movdqa %xmm0,0x40(%rdi) 832 movdqa %xmm0,0x50(%rdi) 833 movdqa %xmm0,0x60(%rdi) 834 movdqa %xmm0,0x70(%rdi) 835 836 lea 0x80(%rdi),%rdi 837 jge L(byte32sse2) 838 839 lea L(SSExDx)(%rip),%r11 840 add %r8,%rdi 841 movslq (%r11,%r8,4),%rcx 842 lea (%rcx,%r11,1),%r11 843 jmpq *%r11 844 845 .balign 16 846L(sse2_nt_move): 847 sub $0x80,%r8 # 128 848 movntdq %xmm0,(%rdi) 849 movntdq %xmm0,0x10(%rdi) 850 movntdq %xmm0,0x20(%rdi) 851 movntdq %xmm0,0x30(%rdi) 852 movntdq %xmm0,0x40(%rdi) 853 movntdq %xmm0,0x50(%rdi) 854 movntdq %xmm0,0x60(%rdi) 855 movntdq %xmm0,0x70(%rdi) 856 add $0x80,%rdi 857 cmp $0x80,%r8 858 jge L(sse2_nt_move) 859 860 sfence 861 lea L(SSExDx)(%rip),%r11 862 add %r8,%rdi 863 movslq (%r11,%r8,4),%rcx 864 lea (%rcx,%r11,1),%r11 865 jmpq *%r11 866 867 /* 868 * Don't use SSE 869 */ 870 .balign 16 871L(Loop8byte_pre): 872 mov .largest_level_cache_size(%rip),%r9d 873 cmp %r9,%r8 874 jg L(Loop8byte_nt_move) 875 cmp $0x800,%r8 # Use rep sstoq 876 jge L(use_rep) 877 878 .balign 16 879L(Loop8byte): 880 lea -0x80(%r8),%r8 # 128 881 mov %rdx,(%rdi) 882 mov %rdx,0x8(%rdi) 883 mov %rdx,0x10(%rdi) 884 mov %rdx,0x18(%rdi) 885 mov %rdx,0x20(%rdi) 886 mov %rdx,0x28(%rdi) 887 mov %rdx,0x30(%rdi) 888 mov %rdx,0x38(%rdi) 889 cmp $0x80,%r8 890 mov %rdx,0x40(%rdi) 891 mov %rdx,0x48(%rdi) 892 mov %rdx,0x50(%rdi) 893 mov %rdx,0x58(%rdi) 894 mov %rdx,0x60(%rdi) 895 mov %rdx,0x68(%rdi) 896 mov %rdx,0x70(%rdi) 897 mov %rdx,0x78(%rdi) 898 lea 0x80(%rdi),%rdi 899 jge L(Loop8byte) 900 9011: 902 lea L(setPxQx)(%rip),%r11 903 lea (%rdi,%r8,1),%rdi 904 905 movslq (%r11,%r8,4),%rcx 906 lea (%rcx,%r11,1),%r11 907 jmpq *%r11 908 909 /* 910 * Use rep sstoq for sizes > 2K 911 */ 912 .balign 16 913L(use_rep): 914 movq %r8,%rcx # get size in bytes 915 xchg %rax,%rdx 916 shrq $3,%rcx 917 rep 918 sstoq 919 xchg %rax,%rdx 920 andq $7,%r8 # remaining bytes 921 jnz 1b 922 ret 923 924 .balign 16 925L(Loop8byte_nt_move): 926 lea -0x80(%r8),%r8 # 128 927 movnti %rdx,(%rdi) 928 movnti %rdx,0x8(%rdi) 929 movnti %rdx,0x10(%rdi) 930 movnti %rdx,0x18(%rdi) 931 movnti %rdx,0x20(%rdi) 932 movnti %rdx,0x28(%rdi) 933 movnti %rdx,0x30(%rdi) 934 movnti %rdx,0x38(%rdi) 935 cmp $0x80,%r8 936 movnti %rdx,0x40(%rdi) 937 movnti %rdx,0x48(%rdi) 938 movnti %rdx,0x50(%rdi) 939 movnti %rdx,0x58(%rdi) 940 movnti %rdx,0x60(%rdi) 941 movnti %rdx,0x68(%rdi) 942 movnti %rdx,0x70(%rdi) 943 movnti %rdx,0x78(%rdi) 944 lea 0x80(%rdi),%rdi 945 jge L(Loop8byte_nt_move) 946 947 sfence 948 lea L(setPxQx)(%rip),%r11 949 lea (%rdi,%r8,1),%rdi 950 951 movslq (%r11,%r8,4),%rcx 952 lea (%rcx,%r11,1),%r11 953 jmpq *%r11 954 955 .balign 16 956L(SSExDx): .int L(SSE0Q0) -L(SSExDx) 957 .int L(SSE1Q0) -L(SSExDx) 958 .int L(SSE2Q0) -L(SSExDx) 959 .int L(SSE3Q0) -L(SSExDx) 960 .int L(SSE4Q0) -L(SSExDx) 961 .int L(SSE5Q0) -L(SSExDx) 962 .int L(SSE6Q0) -L(SSExDx) 963 .int L(SSE7Q0) -L(SSExDx) 964 965 .int L(SSE8Q0) -L(SSExDx) 966 .int L(SSE9Q0) -L(SSExDx) 967 .int L(SSE10Q0)-L(SSExDx) 968 .int L(SSE11Q0)-L(SSExDx) 969 .int L(SSE12Q0)-L(SSExDx) 970 .int L(SSE13Q0)-L(SSExDx) 971 .int L(SSE14Q0)-L(SSExDx) 972 .int L(SSE15Q0)-L(SSExDx) 973 974 .int L(SSE0Q1) -L(SSExDx) 975 .int L(SSE1Q1) -L(SSExDx) 976 .int L(SSE2Q1) -L(SSExDx) 977 .int L(SSE3Q1) -L(SSExDx) 978 .int L(SSE4Q1) -L(SSExDx) 979 .int L(SSE5Q1) -L(SSExDx) 980 .int L(SSE6Q1) -L(SSExDx) 981 .int L(SSE7Q1) -L(SSExDx) 982 983 .int L(SSE8Q1) -L(SSExDx) 984 .int L(SSE9Q1) -L(SSExDx) 985 .int L(SSE10Q1)-L(SSExDx) 986 .int L(SSE11Q1)-L(SSExDx) 987 .int L(SSE12Q1)-L(SSExDx) 988 .int L(SSE13Q1)-L(SSExDx) 989 .int L(SSE14Q1)-L(SSExDx) 990 .int L(SSE15Q1)-L(SSExDx) 991 992 .int L(SSE0Q2) -L(SSExDx) 993 .int L(SSE1Q2) -L(SSExDx) 994 .int L(SSE2Q2) -L(SSExDx) 995 .int L(SSE3Q2) -L(SSExDx) 996 .int L(SSE4Q2) -L(SSExDx) 997 .int L(SSE5Q2) -L(SSExDx) 998 .int L(SSE6Q2) -L(SSExDx) 999 .int L(SSE7Q2) -L(SSExDx) 1000 1001 .int L(SSE8Q2) -L(SSExDx) 1002 .int L(SSE9Q2) -L(SSExDx) 1003 .int L(SSE10Q2)-L(SSExDx) 1004 .int L(SSE11Q2)-L(SSExDx) 1005 .int L(SSE12Q2)-L(SSExDx) 1006 .int L(SSE13Q2)-L(SSExDx) 1007 .int L(SSE14Q2)-L(SSExDx) 1008 .int L(SSE15Q2)-L(SSExDx) 1009 1010 .int L(SSE0Q3) -L(SSExDx) 1011 .int L(SSE1Q3) -L(SSExDx) 1012 .int L(SSE2Q3) -L(SSExDx) 1013 .int L(SSE3Q3) -L(SSExDx) 1014 .int L(SSE4Q3) -L(SSExDx) 1015 .int L(SSE5Q3) -L(SSExDx) 1016 .int L(SSE6Q3) -L(SSExDx) 1017 .int L(SSE7Q3) -L(SSExDx) 1018 1019 .int L(SSE8Q3) -L(SSExDx) 1020 .int L(SSE9Q3) -L(SSExDx) 1021 .int L(SSE10Q3)-L(SSExDx) 1022 .int L(SSE11Q3)-L(SSExDx) 1023 .int L(SSE12Q3)-L(SSExDx) 1024 .int L(SSE13Q3)-L(SSExDx) 1025 .int L(SSE14Q3)-L(SSExDx) 1026 .int L(SSE15Q3)-L(SSExDx) 1027 1028 .int L(SSE0Q4) -L(SSExDx) 1029 .int L(SSE1Q4) -L(SSExDx) 1030 .int L(SSE2Q4) -L(SSExDx) 1031 .int L(SSE3Q4) -L(SSExDx) 1032 .int L(SSE4Q4) -L(SSExDx) 1033 .int L(SSE5Q4) -L(SSExDx) 1034 .int L(SSE6Q4) -L(SSExDx) 1035 .int L(SSE7Q4) -L(SSExDx) 1036 1037 .int L(SSE8Q4) -L(SSExDx) 1038 .int L(SSE9Q4) -L(SSExDx) 1039 .int L(SSE10Q4)-L(SSExDx) 1040 .int L(SSE11Q4)-L(SSExDx) 1041 .int L(SSE12Q4)-L(SSExDx) 1042 .int L(SSE13Q4)-L(SSExDx) 1043 .int L(SSE14Q4)-L(SSExDx) 1044 .int L(SSE15Q4)-L(SSExDx) 1045 1046 .int L(SSE0Q5) -L(SSExDx) 1047 .int L(SSE1Q5) -L(SSExDx) 1048 .int L(SSE2Q5) -L(SSExDx) 1049 .int L(SSE3Q5) -L(SSExDx) 1050 .int L(SSE4Q5) -L(SSExDx) 1051 .int L(SSE5Q5) -L(SSExDx) 1052 .int L(SSE6Q5) -L(SSExDx) 1053 .int L(SSE7Q5) -L(SSExDx) 1054 1055 .int L(SSE8Q5) -L(SSExDx) 1056 .int L(SSE9Q5) -L(SSExDx) 1057 .int L(SSE10Q5)-L(SSExDx) 1058 .int L(SSE11Q5)-L(SSExDx) 1059 .int L(SSE12Q5)-L(SSExDx) 1060 .int L(SSE13Q5)-L(SSExDx) 1061 .int L(SSE14Q5)-L(SSExDx) 1062 .int L(SSE15Q5)-L(SSExDx) 1063 1064 .int L(SSE0Q6) -L(SSExDx) 1065 .int L(SSE1Q6) -L(SSExDx) 1066 .int L(SSE2Q6) -L(SSExDx) 1067 .int L(SSE3Q6) -L(SSExDx) 1068 .int L(SSE4Q6) -L(SSExDx) 1069 .int L(SSE5Q6) -L(SSExDx) 1070 .int L(SSE6Q6) -L(SSExDx) 1071 .int L(SSE7Q6) -L(SSExDx) 1072 1073 .int L(SSE8Q6) -L(SSExDx) 1074 .int L(SSE9Q6) -L(SSExDx) 1075 .int L(SSE10Q6)-L(SSExDx) 1076 .int L(SSE11Q6)-L(SSExDx) 1077 .int L(SSE12Q6)-L(SSExDx) 1078 .int L(SSE13Q6)-L(SSExDx) 1079 .int L(SSE14Q6)-L(SSExDx) 1080 .int L(SSE15Q6)-L(SSExDx) 1081 1082 .int L(SSE0Q7) -L(SSExDx) 1083 .int L(SSE1Q7) -L(SSExDx) 1084 .int L(SSE2Q7) -L(SSExDx) 1085 .int L(SSE3Q7) -L(SSExDx) 1086 .int L(SSE4Q7) -L(SSExDx) 1087 .int L(SSE5Q7) -L(SSExDx) 1088 .int L(SSE6Q7) -L(SSExDx) 1089 .int L(SSE7Q7) -L(SSExDx) 1090 1091 .int L(SSE8Q7) -L(SSExDx) 1092 .int L(SSE9Q7) -L(SSExDx) 1093 .int L(SSE10Q7)-L(SSExDx) 1094 .int L(SSE11Q7)-L(SSExDx) 1095 .int L(SSE12Q7)-L(SSExDx) 1096 .int L(SSE13Q7)-L(SSExDx) 1097 .int L(SSE14Q7)-L(SSExDx) 1098 .int L(SSE15Q7)-L(SSExDx) 1099 1100 .int L(SSE0Q8) -L(SSExDx) 1101 .int L(SSE1Q8) -L(SSExDx) 1102 .int L(SSE2Q8) -L(SSExDx) 1103 .int L(SSE3Q8) -L(SSExDx) 1104 .int L(SSE4Q8) -L(SSExDx) 1105 .int L(SSE5Q8) -L(SSExDx) 1106 .int L(SSE6Q8) -L(SSExDx) 1107 .int L(SSE7Q8) -L(SSExDx) 1108 1109 .int L(SSE8Q8) -L(SSExDx) 1110 .int L(SSE9Q8) -L(SSExDx) 1111 .int L(SSE10Q8)-L(SSExDx) 1112 .int L(SSE11Q8)-L(SSExDx) 1113 .int L(SSE12Q8)-L(SSExDx) 1114 .int L(SSE13Q8)-L(SSExDx) 1115 .int L(SSE14Q8)-L(SSExDx) 1116 .int L(SSE15Q8)-L(SSExDx) 1117 1118 .int L(SSE0Q9) -L(SSExDx) 1119 .int L(SSE1Q9) -L(SSExDx) 1120 .int L(SSE2Q9) -L(SSExDx) 1121 .int L(SSE3Q9) -L(SSExDx) 1122 .int L(SSE4Q9) -L(SSExDx) 1123 .int L(SSE5Q9) -L(SSExDx) 1124 .int L(SSE6Q9) -L(SSExDx) 1125 .int L(SSE7Q9) -L(SSExDx) 1126 1127 .int L(SSE8Q9) -L(SSExDx) 1128 .int L(SSE9Q9) -L(SSExDx) 1129 .int L(SSE10Q9)-L(SSExDx) 1130 .int L(SSE11Q9)-L(SSExDx) 1131 .int L(SSE12Q9)-L(SSExDx) 1132 .int L(SSE13Q9)-L(SSExDx) 1133 .int L(SSE14Q9)-L(SSExDx) 1134 .int L(SSE15Q9)-L(SSExDx) 1135 1136 .int L(SSE0QA) -L(SSExDx) 1137 .int L(SSE1QA) -L(SSExDx) 1138 .int L(SSE2QA) -L(SSExDx) 1139 .int L(SSE3QA) -L(SSExDx) 1140 .int L(SSE4QA) -L(SSExDx) 1141 .int L(SSE5QA) -L(SSExDx) 1142 .int L(SSE6QA) -L(SSExDx) 1143 .int L(SSE7QA) -L(SSExDx) 1144 1145 .int L(SSE8QA) -L(SSExDx) 1146 .int L(SSE9QA) -L(SSExDx) 1147 .int L(SSE10QA)-L(SSExDx) 1148 .int L(SSE11QA)-L(SSExDx) 1149 .int L(SSE12QA)-L(SSExDx) 1150 .int L(SSE13QA)-L(SSExDx) 1151 .int L(SSE14QA)-L(SSExDx) 1152 .int L(SSE15QA)-L(SSExDx) 1153 1154 .int L(SSE0QB) -L(SSExDx) 1155 .int L(SSE1QB) -L(SSExDx) 1156 .int L(SSE2QB) -L(SSExDx) 1157 .int L(SSE3QB) -L(SSExDx) 1158 .int L(SSE4QB) -L(SSExDx) 1159 .int L(SSE5QB) -L(SSExDx) 1160 .int L(SSE6QB) -L(SSExDx) 1161 .int L(SSE7QB) -L(SSExDx) 1162 1163 .int L(SSE8QB) -L(SSExDx) 1164 .int L(SSE9QB) -L(SSExDx) 1165 .int L(SSE10QB)-L(SSExDx) 1166 .int L(SSE11QB)-L(SSExDx) 1167 .int L(SSE12QB)-L(SSExDx) 1168 .int L(SSE13QB)-L(SSExDx) 1169 .int L(SSE14QB)-L(SSExDx) 1170 .int L(SSE15QB)-L(SSExDx) 1171 1172 SET_SIZE(memset) 1173