Path: blob/main/sys/crypto/openssl/amd64/x86_64cpuid.S
39482 views
/* Do not modify. This file is auto-generated from x86_64cpuid.pl. */123.hidden OPENSSL_cpuid_setup4.section .init5call OPENSSL_cpuid_setup67.hidden OPENSSL_ia32cap_P8.comm OPENSSL_ia32cap_P,40,49.text1011.globl OPENSSL_atomic_add12.type OPENSSL_atomic_add,@function13.align 1614OPENSSL_atomic_add:15.cfi_startproc16.byte 243,15,30,25017movl (%rdi),%eax18.Lspin: leaq (%rsi,%rax,1),%r819.byte 0xf020cmpxchgl %r8d,(%rdi)21jne .Lspin22movl %r8d,%eax23.byte 0x48,0x9824.byte 0xf3,0xc325.cfi_endproc26.size OPENSSL_atomic_add,.-OPENSSL_atomic_add2728.globl OPENSSL_rdtsc29.type OPENSSL_rdtsc,@function30.align 1631OPENSSL_rdtsc:32.cfi_startproc33.byte 243,15,30,25034rdtsc35shlq $32,%rdx36orq %rdx,%rax37.byte 0xf3,0xc338.cfi_endproc39.size OPENSSL_rdtsc,.-OPENSSL_rdtsc4041.globl OPENSSL_ia32_cpuid42.type OPENSSL_ia32_cpuid,@function43.align 1644OPENSSL_ia32_cpuid:45.cfi_startproc46.byte 243,15,30,25047movq %rbx,%r848.cfi_register %rbx,%r84950xorl %eax,%eax51movq %rax,8(%rdi)52cpuid53movl %eax,%r11d5455xorl %eax,%eax56cmpl $0x756e6547,%ebx57setne %al58movl %eax,%r9d59cmpl $0x49656e69,%edx60setne %al61orl %eax,%r9d62cmpl $0x6c65746e,%ecx63setne %al64orl %eax,%r9d65jz .Lintel6667cmpl $0x68747541,%ebx68setne %al69movl %eax,%r10d70cmpl $0x69746E65,%edx71setne %al72orl %eax,%r10d73cmpl $0x444D4163,%ecx74setne %al75orl %eax,%r10d76jnz .Lintel777879movl $0x80000000,%eax80cpuid81cmpl $0x80000001,%eax82jb .Lintel83movl %eax,%r10d84movl $0x80000001,%eax85cpuid86orl %ecx,%r9d87andl $0x00000801,%r9d8889cmpl $0x80000008,%r10d90jb .Lintel9192movl $0x80000008,%eax93cpuid94movzbq %cl,%r1095incq %r109697movl $1,%eax98cpuid99btl $28,%edx100jnc .Lgeneric101shrl $16,%ebx102cmpb %r10b,%bl103ja .Lgeneric104andl $0xefffffff,%edx105jmp .Lgeneric106107.Lintel:108cmpl $4,%r11d109movl $-1,%r10d110jb .Lnocacheinfo111112movl $4,%eax113movl $0,%ecx114cpuid115movl %eax,%r10d116shrl $14,%r10d117andl $0xfff,%r10d118119.Lnocacheinfo:120movl $1,%eax121cpuid122movd %eax,%xmm0123andl $0xbfefffff,%edx124cmpl $0,%r9d125jne .Lnotintel126orl $0x40000000,%edx127andb $15,%ah128cmpb $15,%ah129jne .LnotP4130orl $0x00100000,%edx131.LnotP4:132cmpb $6,%ah133jne .Lnotintel134andl $0x0fff0ff0,%eax135cmpl $0x00050670,%eax136je .Lknights137cmpl $0x00080650,%eax138jne .Lnotintel139.Lknights:140andl $0xfbffffff,%ecx141142.Lnotintel:143btl $28,%edx144jnc .Lgeneric145andl $0xefffffff,%edx146cmpl $0,%r10d147je .Lgeneric148149orl $0x10000000,%edx150shrl $16,%ebx151cmpb $1,%bl152ja .Lgeneric153andl $0xefffffff,%edx154.Lgeneric:155andl $0x00000800,%r9d156andl $0xfffff7ff,%ecx157orl %ecx,%r9d158159movl %edx,%r10d160161cmpl $7,%r11d162jb .Lno_extended_info163movl $7,%eax164xorl %ecx,%ecx165cpuid166movd %eax,%xmm1167btl $26,%r9d168jc .Lnotknights169andl $0xfff7ffff,%ebx170.Lnotknights:171movd %xmm0,%eax172andl $0x0fff0ff0,%eax173cmpl $0x00050650,%eax174jne .Lnotskylakex175andl $0xfffeffff,%ebx176177178.Lnotskylakex:179movl %ebx,8(%rdi)180movl %ecx,12(%rdi)181movl %edx,16(%rdi)182183movd %xmm1,%eax184cmpl $0x1,%eax185jb .Lno_extended_info186movl $0x7,%eax187movl $0x1,%ecx188cpuid189movl %eax,20(%rdi)190movl %edx,24(%rdi)191movl %ebx,28(%rdi)192movl %ecx,32(%rdi)193194andl $0x80000,%edx195cmpl $0x0,%edx196je .Lno_extended_info197movl $0x24,%eax198movl $0x0,%ecx199cpuid200movl %ebx,36(%rdi)201202.Lno_extended_info:203204btl $27,%r9d205jnc .Lclear_avx206xorl %ecx,%ecx207.byte 0x0f,0x01,0xd0208andl $0xe6,%eax209cmpl $0xe6,%eax210je .Ldone211andl $0x3fdeffff,8(%rdi)212213214215216andl $6,%eax217cmpl $6,%eax218je .Ldone219.Lclear_avx:220andl $0xff7fffff,20(%rdi)221222223movl $0xefffe7ff,%eax224andl %eax,%r9d225movl $0x3fdeffdf,%eax226andl %eax,8(%rdi)227.Ldone:228shlq $32,%r9229movl %r10d,%eax230movq %r8,%rbx231.cfi_restore %rbx232orq %r9,%rax233.byte 0xf3,0xc3234.cfi_endproc235.size OPENSSL_ia32_cpuid,.-OPENSSL_ia32_cpuid236237.globl OPENSSL_cleanse238.type OPENSSL_cleanse,@function239.align 16240OPENSSL_cleanse:241.cfi_startproc242.byte 243,15,30,250243xorq %rax,%rax244cmpq $15,%rsi245jae .Lot246cmpq $0,%rsi247je .Lret248.Little:249movb %al,(%rdi)250subq $1,%rsi251leaq 1(%rdi),%rdi252jnz .Little253.Lret:254.byte 0xf3,0xc3255.align 16256.Lot:257testq $7,%rdi258jz .Laligned259movb %al,(%rdi)260leaq -1(%rsi),%rsi261leaq 1(%rdi),%rdi262jmp .Lot263.Laligned:264movq %rax,(%rdi)265leaq -8(%rsi),%rsi266testq $-8,%rsi267leaq 8(%rdi),%rdi268jnz .Laligned269cmpq $0,%rsi270jne .Little271.byte 0xf3,0xc3272.cfi_endproc273.size OPENSSL_cleanse,.-OPENSSL_cleanse274275.globl CRYPTO_memcmp276.type CRYPTO_memcmp,@function277.align 16278CRYPTO_memcmp:279.cfi_startproc280.byte 243,15,30,250281xorq %rax,%rax282xorq %r10,%r10283cmpq $0,%rdx284je .Lno_data285cmpq $16,%rdx286jne .Loop_cmp287movq (%rdi),%r10288movq 8(%rdi),%r11289movq $1,%rdx290xorq (%rsi),%r10291xorq 8(%rsi),%r11292orq %r11,%r10293cmovnzq %rdx,%rax294.byte 0xf3,0xc3295296.align 16297.Loop_cmp:298movb (%rdi),%r10b299leaq 1(%rdi),%rdi300xorb (%rsi),%r10b301leaq 1(%rsi),%rsi302orb %r10b,%al303decq %rdx304jnz .Loop_cmp305negq %rax306shrq $63,%rax307.Lno_data:308.byte 0xf3,0xc3309.cfi_endproc310.size CRYPTO_memcmp,.-CRYPTO_memcmp311.globl OPENSSL_wipe_cpu312.type OPENSSL_wipe_cpu,@function313.align 16314OPENSSL_wipe_cpu:315.cfi_startproc316.byte 243,15,30,250317pxor %xmm0,%xmm0318pxor %xmm1,%xmm1319pxor %xmm2,%xmm2320pxor %xmm3,%xmm3321pxor %xmm4,%xmm4322pxor %xmm5,%xmm5323pxor %xmm6,%xmm6324pxor %xmm7,%xmm7325pxor %xmm8,%xmm8326pxor %xmm9,%xmm9327pxor %xmm10,%xmm10328pxor %xmm11,%xmm11329pxor %xmm12,%xmm12330pxor %xmm13,%xmm13331pxor %xmm14,%xmm14332pxor %xmm15,%xmm15333xorq %rcx,%rcx334xorq %rdx,%rdx335xorq %rsi,%rsi336xorq %rdi,%rdi337xorq %r8,%r8338xorq %r9,%r9339xorq %r10,%r10340xorq %r11,%r11341leaq 8(%rsp),%rax342.byte 0xf3,0xc3343.cfi_endproc344.size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu345.globl OPENSSL_instrument_bus346.type OPENSSL_instrument_bus,@function347.align 16348OPENSSL_instrument_bus:349.cfi_startproc350.byte 243,15,30,250351movq %rdi,%r10352movq %rsi,%rcx353movq %rsi,%r11354355rdtsc356movl %eax,%r8d357movl $0,%r9d358clflush (%r10)359.byte 0xf0360addl %r9d,(%r10)361jmp .Loop362.align 16363.Loop: rdtsc364movl %eax,%edx365subl %r8d,%eax366movl %edx,%r8d367movl %eax,%r9d368clflush (%r10)369.byte 0xf0370addl %eax,(%r10)371leaq 4(%r10),%r10372subq $1,%rcx373jnz .Loop374375movq %r11,%rax376.byte 0xf3,0xc3377.cfi_endproc378.size OPENSSL_instrument_bus,.-OPENSSL_instrument_bus379380.globl OPENSSL_instrument_bus2381.type OPENSSL_instrument_bus2,@function382.align 16383OPENSSL_instrument_bus2:384.cfi_startproc385.byte 243,15,30,250386movq %rdi,%r10387movq %rsi,%rcx388movq %rdx,%r11389movq %rcx,8(%rsp)390391rdtsc392movl %eax,%r8d393movl $0,%r9d394395clflush (%r10)396.byte 0xf0397addl %r9d,(%r10)398399rdtsc400movl %eax,%edx401subl %r8d,%eax402movl %edx,%r8d403movl %eax,%r9d404.Loop2:405clflush (%r10)406.byte 0xf0407addl %eax,(%r10)408409subq $1,%r11410jz .Ldone2411412rdtsc413movl %eax,%edx414subl %r8d,%eax415movl %edx,%r8d416cmpl %r9d,%eax417movl %eax,%r9d418movl $0,%edx419setne %dl420subq %rdx,%rcx421leaq (%r10,%rdx,4),%r10422jnz .Loop2423424.Ldone2:425movq 8(%rsp),%rax426subq %rcx,%rax427.byte 0xf3,0xc3428.cfi_endproc429.size OPENSSL_instrument_bus2,.-OPENSSL_instrument_bus2430.globl OPENSSL_ia32_rdrand_bytes431.type OPENSSL_ia32_rdrand_bytes,@function432.align 16433OPENSSL_ia32_rdrand_bytes:434.cfi_startproc435.byte 243,15,30,250436xorq %rax,%rax437cmpq $0,%rsi438je .Ldone_rdrand_bytes439440movq $8,%r11441.Loop_rdrand_bytes:442.byte 73,15,199,242443jc .Lbreak_rdrand_bytes444decq %r11445jnz .Loop_rdrand_bytes446jmp .Ldone_rdrand_bytes447448.align 16449.Lbreak_rdrand_bytes:450cmpq $8,%rsi451jb .Ltail_rdrand_bytes452movq %r10,(%rdi)453leaq 8(%rdi),%rdi454addq $8,%rax455subq $8,%rsi456jz .Ldone_rdrand_bytes457movq $8,%r11458jmp .Loop_rdrand_bytes459460.align 16461.Ltail_rdrand_bytes:462movb %r10b,(%rdi)463leaq 1(%rdi),%rdi464incq %rax465shrq $8,%r10466decq %rsi467jnz .Ltail_rdrand_bytes468469.Ldone_rdrand_bytes:470xorq %r10,%r10471.byte 0xf3,0xc3472.cfi_endproc473.size OPENSSL_ia32_rdrand_bytes,.-OPENSSL_ia32_rdrand_bytes474.globl OPENSSL_ia32_rdseed_bytes475.type OPENSSL_ia32_rdseed_bytes,@function476.align 16477OPENSSL_ia32_rdseed_bytes:478.cfi_startproc479.byte 243,15,30,250480xorq %rax,%rax481cmpq $0,%rsi482je .Ldone_rdseed_bytes483484movq $8,%r11485.Loop_rdseed_bytes:486.byte 73,15,199,250487jc .Lbreak_rdseed_bytes488decq %r11489jnz .Loop_rdseed_bytes490jmp .Ldone_rdseed_bytes491492.align 16493.Lbreak_rdseed_bytes:494cmpq $8,%rsi495jb .Ltail_rdseed_bytes496movq %r10,(%rdi)497leaq 8(%rdi),%rdi498addq $8,%rax499subq $8,%rsi500jz .Ldone_rdseed_bytes501movq $8,%r11502jmp .Loop_rdseed_bytes503504.align 16505.Ltail_rdseed_bytes:506movb %r10b,(%rdi)507leaq 1(%rdi),%rdi508incq %rax509shrq $8,%r10510decq %rsi511jnz .Ltail_rdseed_bytes512513.Ldone_rdseed_bytes:514xorq %r10,%r10515.byte 0xf3,0xc3516.cfi_endproc517.size OPENSSL_ia32_rdseed_bytes,.-OPENSSL_ia32_rdseed_bytes518.section ".note.gnu.property", "a"519.p2align 3520.long 1f - 0f521.long 4f - 1f522.long 55230:524# "GNU" encoded with .byte, since .asciz isn't supported525# on Solaris.526.byte 0x47527.byte 0x4e528.byte 0x55529.byte 05301:531.p2align 3532.long 0xc0000002533.long 3f - 2f5342:535.long 35363:537.p2align 35384:539540541