# WARNING: do not edit! | |
# Generated from openssl/crypto/x86_64cpuid.pl | |
# | |
# Copyright 2005-2020 The OpenSSL Project Authors. All Rights Reserved. | |
# | |
# Licensed under the OpenSSL license (the "License"). You may not use | |
# this file except in compliance with the License. You can obtain a copy | |
# in the file LICENSE in the source distribution or at | |
# https://www.openssl.org/source/license.html | |
.hidden OPENSSL_cpuid_setup | |
.section .init | |
call OPENSSL_cpuid_setup | |
.hidden OPENSSL_ia32cap_P | |
.comm OPENSSL_ia32cap_P,16,4 | |
.text | |
.globl OPENSSL_atomic_add | |
.type OPENSSL_atomic_add,@function | |
.align 16 | |
OPENSSL_atomic_add: | |
.cfi_startproc | |
movl (%rdi),%eax | |
.Lspin: leaq (%rsi,%rax,1),%r8 | |
.byte 0xf0 | |
cmpxchgl %r8d,(%rdi) | |
jne .Lspin | |
movl %r8d,%eax | |
.byte 0x48,0x98 | |
.byte 0xf3,0xc3 | |
.cfi_endproc | |
.size OPENSSL_atomic_add,.-OPENSSL_atomic_add | |
.globl OPENSSL_rdtsc | |
.type OPENSSL_rdtsc,@function | |
.align 16 | |
OPENSSL_rdtsc: | |
.cfi_startproc | |
rdtsc | |
shlq $32,%rdx | |
orq %rdx,%rax | |
.byte 0xf3,0xc3 | |
.cfi_endproc | |
.size OPENSSL_rdtsc,.-OPENSSL_rdtsc | |
.globl OPENSSL_ia32_cpuid | |
.type OPENSSL_ia32_cpuid,@function | |
.align 16 | |
OPENSSL_ia32_cpuid: | |
.cfi_startproc | |
movq %rbx,%r8 | |
.cfi_register %rbx,%r8 | |
xorl %eax,%eax | |
movq %rax,8(%rdi) | |
cpuid | |
movl %eax,%r11d | |
xorl %eax,%eax | |
cmpl $0x756e6547,%ebx | |
setne %al | |
movl %eax,%r9d | |
cmpl $0x49656e69,%edx | |
setne %al | |
orl %eax,%r9d | |
cmpl $0x6c65746e,%ecx | |
setne %al | |
orl %eax,%r9d | |
jz .Lintel | |
cmpl $0x68747541,%ebx | |
setne %al | |
movl %eax,%r10d | |
cmpl $0x69746E65,%edx | |
setne %al | |
orl %eax,%r10d | |
cmpl $0x444D4163,%ecx | |
setne %al | |
orl %eax,%r10d | |
jnz .Lintel | |
movl $0x80000000,%eax | |
cpuid | |
cmpl $0x80000001,%eax | |
jb .Lintel | |
movl %eax,%r10d | |
movl $0x80000001,%eax | |
cpuid | |
orl %ecx,%r9d | |
andl $0x00000801,%r9d | |
cmpl $0x80000008,%r10d | |
jb .Lintel | |
movl $0x80000008,%eax | |
cpuid | |
movzbq %cl,%r10 | |
incq %r10 | |
movl $1,%eax | |
cpuid | |
btl $28,%edx | |
jnc .Lgeneric | |
shrl $16,%ebx | |
cmpb %r10b,%bl | |
ja .Lgeneric | |
andl $0xefffffff,%edx | |
jmp .Lgeneric | |
.Lintel: | |
cmpl $4,%r11d | |
movl $-1,%r10d | |
jb .Lnocacheinfo | |
movl $4,%eax | |
movl $0,%ecx | |
cpuid | |
movl %eax,%r10d | |
shrl $14,%r10d | |
andl $0xfff,%r10d | |
.Lnocacheinfo: | |
movl $1,%eax | |
cpuid | |
movd %eax,%xmm0 | |
andl $0xbfefffff,%edx | |
cmpl $0,%r9d | |
jne .Lnotintel | |
orl $0x40000000,%edx | |
andb $15,%ah | |
cmpb $15,%ah | |
jne .LnotP4 | |
orl $0x00100000,%edx | |
.LnotP4: | |
cmpb $6,%ah | |
jne .Lnotintel | |
andl $0x0fff0ff0,%eax | |
cmpl $0x00050670,%eax | |
je .Lknights | |
cmpl $0x00080650,%eax | |
jne .Lnotintel | |
.Lknights: | |
andl $0xfbffffff,%ecx | |
.Lnotintel: | |
btl $28,%edx | |
jnc .Lgeneric | |
andl $0xefffffff,%edx | |
cmpl $0,%r10d | |
je .Lgeneric | |
orl $0x10000000,%edx | |
shrl $16,%ebx | |
cmpb $1,%bl | |
ja .Lgeneric | |
andl $0xefffffff,%edx | |
.Lgeneric: | |
andl $0x00000800,%r9d | |
andl $0xfffff7ff,%ecx | |
orl %ecx,%r9d | |
movl %edx,%r10d | |
cmpl $7,%r11d | |
jb .Lno_extended_info | |
movl $7,%eax | |
xorl %ecx,%ecx | |
cpuid | |
btl $26,%r9d | |
jc .Lnotknights | |
andl $0xfff7ffff,%ebx | |
.Lnotknights: | |
movd %xmm0,%eax | |
andl $0x0fff0ff0,%eax | |
cmpl $0x00050650,%eax | |
jne .Lnotskylakex | |
andl $0xfffeffff,%ebx | |
.Lnotskylakex: | |
movl %ebx,8(%rdi) | |
movl %ecx,12(%rdi) | |
.Lno_extended_info: | |
btl $27,%r9d | |
jnc .Lclear_avx | |
xorl %ecx,%ecx | |
.byte 0x0f,0x01,0xd0 | |
andl $0xe6,%eax | |
cmpl $0xe6,%eax | |
je .Ldone | |
andl $0x3fdeffff,8(%rdi) | |
andl $6,%eax | |
cmpl $6,%eax | |
je .Ldone | |
.Lclear_avx: | |
movl $0xefffe7ff,%eax | |
andl %eax,%r9d | |
movl $0x3fdeffdf,%eax | |
andl %eax,8(%rdi) | |
.Ldone: | |
shlq $32,%r9 | |
movl %r10d,%eax | |
movq %r8,%rbx | |
.cfi_restore %rbx | |
orq %r9,%rax | |
.byte 0xf3,0xc3 | |
.cfi_endproc | |
.size OPENSSL_ia32_cpuid,.-OPENSSL_ia32_cpuid | |
.globl OPENSSL_cleanse | |
.type OPENSSL_cleanse,@function | |
.align 16 | |
OPENSSL_cleanse: | |
.cfi_startproc | |
xorq %rax,%rax | |
cmpq $15,%rsi | |
jae .Lot | |
cmpq $0,%rsi | |
je .Lret | |
.Little: | |
movb %al,(%rdi) | |
subq $1,%rsi | |
leaq 1(%rdi),%rdi | |
jnz .Little | |
.Lret: | |
.byte 0xf3,0xc3 | |
.align 16 | |
.Lot: | |
testq $7,%rdi | |
jz .Laligned | |
movb %al,(%rdi) | |
leaq -1(%rsi),%rsi | |
leaq 1(%rdi),%rdi | |
jmp .Lot | |
.Laligned: | |
movq %rax,(%rdi) | |
leaq -8(%rsi),%rsi | |
testq $-8,%rsi | |
leaq 8(%rdi),%rdi | |
jnz .Laligned | |
cmpq $0,%rsi | |
jne .Little | |
.byte 0xf3,0xc3 | |
.cfi_endproc | |
.size OPENSSL_cleanse,.-OPENSSL_cleanse | |
.globl CRYPTO_memcmp | |
.type CRYPTO_memcmp,@function | |
.align 16 | |
CRYPTO_memcmp: | |
.cfi_startproc | |
xorq %rax,%rax | |
xorq %r10,%r10 | |
cmpq $0,%rdx | |
je .Lno_data | |
cmpq $16,%rdx | |
jne .Loop_cmp | |
movq (%rdi),%r10 | |
movq 8(%rdi),%r11 | |
movq $1,%rdx | |
xorq (%rsi),%r10 | |
xorq 8(%rsi),%r11 | |
orq %r11,%r10 | |
cmovnzq %rdx,%rax | |
.byte 0xf3,0xc3 | |
.align 16 | |
.Loop_cmp: | |
movb (%rdi),%r10b | |
leaq 1(%rdi),%rdi | |
xorb (%rsi),%r10b | |
leaq 1(%rsi),%rsi | |
orb %r10b,%al | |
decq %rdx | |
jnz .Loop_cmp | |
negq %rax | |
shrq $63,%rax | |
.Lno_data: | |
.byte 0xf3,0xc3 | |
.cfi_endproc | |
.size CRYPTO_memcmp,.-CRYPTO_memcmp | |
.globl OPENSSL_wipe_cpu | |
.type OPENSSL_wipe_cpu,@function | |
.align 16 | |
OPENSSL_wipe_cpu: | |
.cfi_startproc | |
pxor %xmm0,%xmm0 | |
pxor %xmm1,%xmm1 | |
pxor %xmm2,%xmm2 | |
pxor %xmm3,%xmm3 | |
pxor %xmm4,%xmm4 | |
pxor %xmm5,%xmm5 | |
pxor %xmm6,%xmm6 | |
pxor %xmm7,%xmm7 | |
pxor %xmm8,%xmm8 | |
pxor %xmm9,%xmm9 | |
pxor %xmm10,%xmm10 | |
pxor %xmm11,%xmm11 | |
pxor %xmm12,%xmm12 | |
pxor %xmm13,%xmm13 | |
pxor %xmm14,%xmm14 | |
pxor %xmm15,%xmm15 | |
xorq %rcx,%rcx | |
xorq %rdx,%rdx | |
xorq %rsi,%rsi | |
xorq %rdi,%rdi | |
xorq %r8,%r8 | |
xorq %r9,%r9 | |
xorq %r10,%r10 | |
xorq %r11,%r11 | |
leaq 8(%rsp),%rax | |
.byte 0xf3,0xc3 | |
.cfi_endproc | |
.size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu | |
.globl OPENSSL_instrument_bus | |
.type OPENSSL_instrument_bus,@function | |
.align 16 | |
OPENSSL_instrument_bus: | |
.cfi_startproc | |
movq %rdi,%r10 | |
movq %rsi,%rcx | |
movq %rsi,%r11 | |
rdtsc | |
movl %eax,%r8d | |
movl $0,%r9d | |
clflush (%r10) | |
.byte 0xf0 | |
addl %r9d,(%r10) | |
jmp .Loop | |
.align 16 | |
.Loop: rdtsc | |
movl %eax,%edx | |
subl %r8d,%eax | |
movl %edx,%r8d | |
movl %eax,%r9d | |
clflush (%r10) | |
.byte 0xf0 | |
addl %eax,(%r10) | |
leaq 4(%r10),%r10 | |
subq $1,%rcx | |
jnz .Loop | |
movq %r11,%rax | |
.byte 0xf3,0xc3 | |
.cfi_endproc | |
.size OPENSSL_instrument_bus,.-OPENSSL_instrument_bus | |
.globl OPENSSL_instrument_bus2 | |
.type OPENSSL_instrument_bus2,@function | |
.align 16 | |
OPENSSL_instrument_bus2: | |
.cfi_startproc | |
movq %rdi,%r10 | |
movq %rsi,%rcx | |
movq %rdx,%r11 | |
movq %rcx,8(%rsp) | |
rdtsc | |
movl %eax,%r8d | |
movl $0,%r9d | |
clflush (%r10) | |
.byte 0xf0 | |
addl %r9d,(%r10) | |
rdtsc | |
movl %eax,%edx | |
subl %r8d,%eax | |
movl %edx,%r8d | |
movl %eax,%r9d | |
.Loop2: | |
clflush (%r10) | |
.byte 0xf0 | |
addl %eax,(%r10) | |
subq $1,%r11 | |
jz .Ldone2 | |
rdtsc | |
movl %eax,%edx | |
subl %r8d,%eax | |
movl %edx,%r8d | |
cmpl %r9d,%eax | |
movl %eax,%r9d | |
movl $0,%edx | |
setne %dl | |
subq %rdx,%rcx | |
leaq (%r10,%rdx,4),%r10 | |
jnz .Loop2 | |
.Ldone2: | |
movq 8(%rsp),%rax | |
subq %rcx,%rax | |
.byte 0xf3,0xc3 | |
.cfi_endproc | |
.size OPENSSL_instrument_bus2,.-OPENSSL_instrument_bus2 | |
.globl OPENSSL_ia32_rdrand_bytes | |
.type OPENSSL_ia32_rdrand_bytes,@function | |
.align 16 | |
OPENSSL_ia32_rdrand_bytes: | |
.cfi_startproc | |
xorq %rax,%rax | |
cmpq $0,%rsi | |
je .Ldone_rdrand_bytes | |
movq $8,%r11 | |
.Loop_rdrand_bytes: | |
.byte 73,15,199,242 | |
jc .Lbreak_rdrand_bytes | |
decq %r11 | |
jnz .Loop_rdrand_bytes | |
jmp .Ldone_rdrand_bytes | |
.align 16 | |
.Lbreak_rdrand_bytes: | |
cmpq $8,%rsi | |
jb .Ltail_rdrand_bytes | |
movq %r10,(%rdi) | |
leaq 8(%rdi),%rdi | |
addq $8,%rax | |
subq $8,%rsi | |
jz .Ldone_rdrand_bytes | |
movq $8,%r11 | |
jmp .Loop_rdrand_bytes | |
.align 16 | |
.Ltail_rdrand_bytes: | |
movb %r10b,(%rdi) | |
leaq 1(%rdi),%rdi | |
incq %rax | |
shrq $8,%r10 | |
decq %rsi | |
jnz .Ltail_rdrand_bytes | |
.Ldone_rdrand_bytes: | |
xorq %r10,%r10 | |
.byte 0xf3,0xc3 | |
.cfi_endproc | |
.size OPENSSL_ia32_rdrand_bytes,.-OPENSSL_ia32_rdrand_bytes | |
.globl OPENSSL_ia32_rdseed_bytes | |
.type OPENSSL_ia32_rdseed_bytes,@function | |
.align 16 | |
OPENSSL_ia32_rdseed_bytes: | |
.cfi_startproc | |
xorq %rax,%rax | |
cmpq $0,%rsi | |
je .Ldone_rdseed_bytes | |
movq $8,%r11 | |
.Loop_rdseed_bytes: | |
.byte 73,15,199,250 | |
jc .Lbreak_rdseed_bytes | |
decq %r11 | |
jnz .Loop_rdseed_bytes | |
jmp .Ldone_rdseed_bytes | |
.align 16 | |
.Lbreak_rdseed_bytes: | |
cmpq $8,%rsi | |
jb .Ltail_rdseed_bytes | |
movq %r10,(%rdi) | |
leaq 8(%rdi),%rdi | |
addq $8,%rax | |
subq $8,%rsi | |
jz .Ldone_rdseed_bytes | |
movq $8,%r11 | |
jmp .Loop_rdseed_bytes | |
.align 16 | |
.Ltail_rdseed_bytes: | |
movb %r10b,(%rdi) | |
leaq 1(%rdi),%rdi | |
incq %rax | |
shrq $8,%r10 | |
decq %rsi | |
jnz .Ltail_rdseed_bytes | |
.Ldone_rdseed_bytes: | |
xorq %r10,%r10 | |
.byte 0xf3,0xc3 | |
.cfi_endproc | |
.size OPENSSL_ia32_rdseed_bytes,.-OPENSSL_ia32_rdseed_bytes |