1/* Do not modify. This file is auto-generated from x86_64cpuid.pl. */ 2 3 4.hidden OPENSSL_cpuid_setup 5.section .init 6 call OPENSSL_cpuid_setup 7 8.hidden OPENSSL_ia32cap_P 9.comm OPENSSL_ia32cap_P,40,4 10.text 11 12.globl OPENSSL_atomic_add 13.type OPENSSL_atomic_add,@function 14.align 16 15OPENSSL_atomic_add: 16.cfi_startproc 17.byte 243,15,30,250 18 movl (%rdi),%eax 19.Lspin: leaq (%rsi,%rax,1),%r8 20.byte 0xf0 21 cmpxchgl %r8d,(%rdi) 22 jne .Lspin 23 movl %r8d,%eax 24.byte 0x48,0x98 25 .byte 0xf3,0xc3 26.cfi_endproc 27.size OPENSSL_atomic_add,.-OPENSSL_atomic_add 28 29.globl OPENSSL_rdtsc 30.type OPENSSL_rdtsc,@function 31.align 16 32OPENSSL_rdtsc: 33.cfi_startproc 34.byte 243,15,30,250 35 rdtsc 36 shlq $32,%rdx 37 orq %rdx,%rax 38 .byte 0xf3,0xc3 39.cfi_endproc 40.size OPENSSL_rdtsc,.-OPENSSL_rdtsc 41 42.globl OPENSSL_ia32_cpuid 43.type OPENSSL_ia32_cpuid,@function 44.align 16 45OPENSSL_ia32_cpuid: 46.cfi_startproc 47.byte 243,15,30,250 48 movq %rbx,%r8 49.cfi_register %rbx,%r8 50 51 xorl %eax,%eax 52 movq %rax,8(%rdi) 53 cpuid 54 movl %eax,%r11d 55 56 xorl %eax,%eax 57 cmpl $0x756e6547,%ebx 58 setne %al 59 movl %eax,%r9d 60 cmpl $0x49656e69,%edx 61 setne %al 62 orl %eax,%r9d 63 cmpl $0x6c65746e,%ecx 64 setne %al 65 orl %eax,%r9d 66 jz .Lintel 67 68 cmpl $0x68747541,%ebx 69 setne %al 70 movl %eax,%r10d 71 cmpl $0x69746E65,%edx 72 setne %al 73 orl %eax,%r10d 74 cmpl $0x444D4163,%ecx 75 setne %al 76 orl %eax,%r10d 77 jnz .Lintel 78 79 80 movl $0x80000000,%eax 81 cpuid 82 cmpl $0x80000001,%eax 83 jb .Lintel 84 movl %eax,%r10d 85 movl $0x80000001,%eax 86 cpuid 87 orl %ecx,%r9d 88 andl $0x00000801,%r9d 89 90 cmpl $0x80000008,%r10d 91 jb .Lintel 92 93 movl $0x80000008,%eax 94 cpuid 95 movzbq %cl,%r10 96 incq %r10 97 98 movl $1,%eax 99 cpuid 100 btl $28,%edx 101 jnc .Lgeneric 102 shrl $16,%ebx 103 cmpb %r10b,%bl 104 ja .Lgeneric 105 andl $0xefffffff,%edx 106 jmp .Lgeneric 107 108.Lintel: 109 cmpl $4,%r11d 110 movl $-1,%r10d 111 jb .Lnocacheinfo 112 113 movl $4,%eax 114 movl $0,%ecx 115 cpuid 116 movl %eax,%r10d 117 shrl $14,%r10d 118 andl $0xfff,%r10d 119 120.Lnocacheinfo: 121 movl $1,%eax 122 cpuid 123 movd %eax,%xmm0 124 andl $0xbfefffff,%edx 125 cmpl $0,%r9d 126 jne .Lnotintel 127 orl $0x40000000,%edx 128 andb $15,%ah 129 cmpb $15,%ah 130 jne .LnotP4 131 orl $0x00100000,%edx 132.LnotP4: 133 cmpb $6,%ah 134 jne .Lnotintel 135 andl $0x0fff0ff0,%eax 136 cmpl $0x00050670,%eax 137 je .Lknights 138 cmpl $0x00080650,%eax 139 jne .Lnotintel 140.Lknights: 141 andl $0xfbffffff,%ecx 142 143.Lnotintel: 144 btl $28,%edx 145 jnc .Lgeneric 146 andl $0xefffffff,%edx 147 cmpl $0,%r10d 148 je .Lgeneric 149 150 orl $0x10000000,%edx 151 shrl $16,%ebx 152 cmpb $1,%bl 153 ja .Lgeneric 154 andl $0xefffffff,%edx 155.Lgeneric: 156 andl $0x00000800,%r9d 157 andl $0xfffff7ff,%ecx 158 orl %ecx,%r9d 159 160 movl %edx,%r10d 161 162 cmpl $7,%r11d 163 jb .Lno_extended_info 164 movl $7,%eax 165 xorl %ecx,%ecx 166 cpuid 167 movd %eax,%xmm1 168 btl $26,%r9d 169 jc .Lnotknights 170 andl $0xfff7ffff,%ebx 171.Lnotknights: 172 movd %xmm0,%eax 173 andl $0x0fff0ff0,%eax 174 cmpl $0x00050650,%eax 175 jne .Lnotskylakex 176 andl $0xfffeffff,%ebx 177 178 179.Lnotskylakex: 180 movl %ebx,8(%rdi) 181 movl %ecx,12(%rdi) 182 movl %edx,16(%rdi) 183 184 movd %xmm1,%eax 185 cmpl $0x1,%eax 186 jb .Lno_extended_info 187 movl $0x7,%eax 188 movl $0x1,%ecx 189 cpuid 190 movl %eax,20(%rdi) 191 movl %edx,24(%rdi) 192 movl %ebx,28(%rdi) 193 movl %ecx,32(%rdi) 194 195 andl $0x80000,%edx 196 cmpl $0x0,%edx 197 je .Lno_extended_info 198 movl $0x24,%eax 199 movl $0x0,%ecx 200 cpuid 201 movl %ebx,36(%rdi) 202 203.Lno_extended_info: 204 205 btl $27,%r9d 206 jnc .Lclear_avx 207 xorl %ecx,%ecx 208.byte 0x0f,0x01,0xd0 209 andl $0xe6,%eax 210 cmpl $0xe6,%eax 211 je .Ldone 212 andl $0x3fdeffff,8(%rdi) 213 214 215 216 217 andl $6,%eax 218 cmpl $6,%eax 219 je .Ldone 220.Lclear_avx: 221 andl $0xff7fffff,20(%rdi) 222 223 224 movl $0xefffe7ff,%eax 225 andl %eax,%r9d 226 movl $0x3fdeffdf,%eax 227 andl %eax,8(%rdi) 228.Ldone: 229 shlq $32,%r9 230 movl %r10d,%eax 231 movq %r8,%rbx 232.cfi_restore %rbx 233 orq %r9,%rax 234 .byte 0xf3,0xc3 235.cfi_endproc 236.size OPENSSL_ia32_cpuid,.-OPENSSL_ia32_cpuid 237 238.globl OPENSSL_cleanse 239.type OPENSSL_cleanse,@function 240.align 16 241OPENSSL_cleanse: 242.cfi_startproc 243.byte 243,15,30,250 244 xorq %rax,%rax 245 cmpq $15,%rsi 246 jae .Lot 247 cmpq $0,%rsi 248 je .Lret 249.Little: 250 movb %al,(%rdi) 251 subq $1,%rsi 252 leaq 1(%rdi),%rdi 253 jnz .Little 254.Lret: 255 .byte 0xf3,0xc3 256.align 16 257.Lot: 258 testq $7,%rdi 259 jz .Laligned 260 movb %al,(%rdi) 261 leaq -1(%rsi),%rsi 262 leaq 1(%rdi),%rdi 263 jmp .Lot 264.Laligned: 265 movq %rax,(%rdi) 266 leaq -8(%rsi),%rsi 267 testq $-8,%rsi 268 leaq 8(%rdi),%rdi 269 jnz .Laligned 270 cmpq $0,%rsi 271 jne .Little 272 .byte 0xf3,0xc3 273.cfi_endproc 274.size OPENSSL_cleanse,.-OPENSSL_cleanse 275 276.globl CRYPTO_memcmp 277.type CRYPTO_memcmp,@function 278.align 16 279CRYPTO_memcmp: 280.cfi_startproc 281.byte 243,15,30,250 282 xorq %rax,%rax 283 xorq %r10,%r10 284 cmpq $0,%rdx 285 je .Lno_data 286 cmpq $16,%rdx 287 jne .Loop_cmp 288 movq (%rdi),%r10 289 movq 8(%rdi),%r11 290 movq $1,%rdx 291 xorq (%rsi),%r10 292 xorq 8(%rsi),%r11 293 orq %r11,%r10 294 cmovnzq %rdx,%rax 295 .byte 0xf3,0xc3 296 297.align 16 298.Loop_cmp: 299 movb (%rdi),%r10b 300 leaq 1(%rdi),%rdi 301 xorb (%rsi),%r10b 302 leaq 1(%rsi),%rsi 303 orb %r10b,%al 304 decq %rdx 305 jnz .Loop_cmp 306 negq %rax 307 shrq $63,%rax 308.Lno_data: 309 .byte 0xf3,0xc3 310.cfi_endproc 311.size CRYPTO_memcmp,.-CRYPTO_memcmp 312.globl OPENSSL_wipe_cpu 313.type OPENSSL_wipe_cpu,@function 314.align 16 315OPENSSL_wipe_cpu: 316.cfi_startproc 317.byte 243,15,30,250 318 pxor %xmm0,%xmm0 319 pxor %xmm1,%xmm1 320 pxor %xmm2,%xmm2 321 pxor %xmm3,%xmm3 322 pxor %xmm4,%xmm4 323 pxor %xmm5,%xmm5 324 pxor %xmm6,%xmm6 325 pxor %xmm7,%xmm7 326 pxor %xmm8,%xmm8 327 pxor %xmm9,%xmm9 328 pxor %xmm10,%xmm10 329 pxor %xmm11,%xmm11 330 pxor %xmm12,%xmm12 331 pxor %xmm13,%xmm13 332 pxor %xmm14,%xmm14 333 pxor %xmm15,%xmm15 334 xorq %rcx,%rcx 335 xorq %rdx,%rdx 336 xorq %rsi,%rsi 337 xorq %rdi,%rdi 338 xorq %r8,%r8 339 xorq %r9,%r9 340 xorq %r10,%r10 341 xorq %r11,%r11 342 leaq 8(%rsp),%rax 343 .byte 0xf3,0xc3 344.cfi_endproc 345.size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu 346.globl OPENSSL_instrument_bus 347.type OPENSSL_instrument_bus,@function 348.align 16 349OPENSSL_instrument_bus: 350.cfi_startproc 351.byte 243,15,30,250 352 movq %rdi,%r10 353 movq %rsi,%rcx 354 movq %rsi,%r11 355 356 rdtsc 357 movl %eax,%r8d 358 movl $0,%r9d 359 clflush (%r10) 360.byte 0xf0 361 addl %r9d,(%r10) 362 jmp .Loop 363.align 16 364.Loop: rdtsc 365 movl %eax,%edx 366 subl %r8d,%eax 367 movl %edx,%r8d 368 movl %eax,%r9d 369 clflush (%r10) 370.byte 0xf0 371 addl %eax,(%r10) 372 leaq 4(%r10),%r10 373 subq $1,%rcx 374 jnz .Loop 375 376 movq %r11,%rax 377 .byte 0xf3,0xc3 378.cfi_endproc 379.size OPENSSL_instrument_bus,.-OPENSSL_instrument_bus 380 381.globl OPENSSL_instrument_bus2 382.type OPENSSL_instrument_bus2,@function 383.align 16 384OPENSSL_instrument_bus2: 385.cfi_startproc 386.byte 243,15,30,250 387 movq %rdi,%r10 388 movq %rsi,%rcx 389 movq %rdx,%r11 390 movq %rcx,8(%rsp) 391 392 rdtsc 393 movl %eax,%r8d 394 movl $0,%r9d 395 396 clflush (%r10) 397.byte 0xf0 398 addl %r9d,(%r10) 399 400 rdtsc 401 movl %eax,%edx 402 subl %r8d,%eax 403 movl %edx,%r8d 404 movl %eax,%r9d 405.Loop2: 406 clflush (%r10) 407.byte 0xf0 408 addl %eax,(%r10) 409 410 subq $1,%r11 411 jz .Ldone2 412 413 rdtsc 414 movl %eax,%edx 415 subl %r8d,%eax 416 movl %edx,%r8d 417 cmpl %r9d,%eax 418 movl %eax,%r9d 419 movl $0,%edx 420 setne %dl 421 subq %rdx,%rcx 422 leaq (%r10,%rdx,4),%r10 423 jnz .Loop2 424 425.Ldone2: 426 movq 8(%rsp),%rax 427 subq %rcx,%rax 428 .byte 0xf3,0xc3 429.cfi_endproc 430.size OPENSSL_instrument_bus2,.-OPENSSL_instrument_bus2 431.globl OPENSSL_ia32_rdrand_bytes 432.type OPENSSL_ia32_rdrand_bytes,@function 433.align 16 434OPENSSL_ia32_rdrand_bytes: 435.cfi_startproc 436.byte 243,15,30,250 437 xorq %rax,%rax 438 cmpq $0,%rsi 439 je .Ldone_rdrand_bytes 440 441 movq $8,%r11 442.Loop_rdrand_bytes: 443.byte 73,15,199,242 444 jc .Lbreak_rdrand_bytes 445 decq %r11 446 jnz .Loop_rdrand_bytes 447 jmp .Ldone_rdrand_bytes 448 449.align 16 450.Lbreak_rdrand_bytes: 451 cmpq $8,%rsi 452 jb .Ltail_rdrand_bytes 453 movq %r10,(%rdi) 454 leaq 8(%rdi),%rdi 455 addq $8,%rax 456 subq $8,%rsi 457 jz .Ldone_rdrand_bytes 458 movq $8,%r11 459 jmp .Loop_rdrand_bytes 460 461.align 16 462.Ltail_rdrand_bytes: 463 movb %r10b,(%rdi) 464 leaq 1(%rdi),%rdi 465 incq %rax 466 shrq $8,%r10 467 decq %rsi 468 jnz .Ltail_rdrand_bytes 469 470.Ldone_rdrand_bytes: 471 xorq %r10,%r10 472 .byte 0xf3,0xc3 473.cfi_endproc 474.size OPENSSL_ia32_rdrand_bytes,.-OPENSSL_ia32_rdrand_bytes 475.globl OPENSSL_ia32_rdseed_bytes 476.type OPENSSL_ia32_rdseed_bytes,@function 477.align 16 478OPENSSL_ia32_rdseed_bytes: 479.cfi_startproc 480.byte 243,15,30,250 481 xorq %rax,%rax 482 cmpq $0,%rsi 483 je .Ldone_rdseed_bytes 484 485 movq $8,%r11 486.Loop_rdseed_bytes: 487.byte 73,15,199,250 488 jc .Lbreak_rdseed_bytes 489 decq %r11 490 jnz .Loop_rdseed_bytes 491 jmp .Ldone_rdseed_bytes 492 493.align 16 494.Lbreak_rdseed_bytes: 495 cmpq $8,%rsi 496 jb .Ltail_rdseed_bytes 497 movq %r10,(%rdi) 498 leaq 8(%rdi),%rdi 499 addq $8,%rax 500 subq $8,%rsi 501 jz .Ldone_rdseed_bytes 502 movq $8,%r11 503 jmp .Loop_rdseed_bytes 504 505.align 16 506.Ltail_rdseed_bytes: 507 movb %r10b,(%rdi) 508 leaq 1(%rdi),%rdi 509 incq %rax 510 shrq $8,%r10 511 decq %rsi 512 jnz .Ltail_rdseed_bytes 513 514.Ldone_rdseed_bytes: 515 xorq %r10,%r10 516 .byte 0xf3,0xc3 517.cfi_endproc 518.size OPENSSL_ia32_rdseed_bytes,.-OPENSSL_ia32_rdseed_bytes 519 .section ".note.gnu.property", "a" 520 .p2align 3 521 .long 1f - 0f 522 .long 4f - 1f 523 .long 5 5240: 525 # "GNU" encoded with .byte, since .asciz isn't supported 526 # on Solaris. 527 .byte 0x47 528 .byte 0x4e 529 .byte 0x55 530 .byte 0 5311: 532 .p2align 3 533 .long 0xc0000002 534 .long 3f - 2f 5352: 536 .long 3 5373: 538 .p2align 3 5394: 540