123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481 |
- .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
|