deps/openssl/asm/x64-elf-gas/x86_64cpuid.s

Summary

Maintainability
Test Coverage

.hidden    OPENSSL_cpuid_setup
.section    .init
    call    OPENSSL_cpuid_setup

.hidden    OPENSSL_ia32cap_P
.comm    OPENSSL_ia32cap_P,8,4

.text


.globl    OPENSSL_atomic_add
.type    OPENSSL_atomic_add,@function
.align    16
OPENSSL_atomic_add:
    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
.size    OPENSSL_atomic_add,.-OPENSSL_atomic_add

.globl    OPENSSL_rdtsc
.type    OPENSSL_rdtsc,@function
.align    16
OPENSSL_rdtsc:
    rdtsc
    shlq    $32,%rdx
    orq    %rdx,%rax
    .byte    0xf3,0xc3
.size    OPENSSL_rdtsc,.-OPENSSL_rdtsc

.globl    OPENSSL_ia32_cpuid
.type    OPENSSL_ia32_cpuid,@function
.align    16
OPENSSL_ia32_cpuid:
    movq    %rbx,%r8

    xorl    %eax,%eax
    cpuid
    movl    %eax,%r11d

    xorl    %eax,%eax
    cmpl    $1970169159,%ebx
    setne    %al
    movl    %eax,%r9d
    cmpl    $1231384169,%edx
    setne    %al
    orl    %eax,%r9d
    cmpl    $1818588270,%ecx
    setne    %al
    orl    %eax,%r9d
    jz    .Lintel

    cmpl    $1752462657,%ebx
    setne    %al
    movl    %eax,%r10d
    cmpl    $1769238117,%edx
    setne    %al
    orl    %eax,%r10d
    cmpl    $1145913699,%ecx
    setne    %al
    orl    %eax,%r10d
    jnz    .Lintel


    movl    $2147483648,%eax
    cpuid
    cmpl    $2147483649,%eax
    jb    .Lintel
    movl    %eax,%r10d
    movl    $2147483649,%eax
    cpuid
    orl    %ecx,%r9d
    andl    $2049,%r9d

    cmpl    $2147483656,%r10d
    jb    .Lintel

    movl    $2147483656,%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    $4026531839,%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    $4095,%r10d

.Lnocacheinfo:
    movl    $1,%eax
    cpuid
    andl    $3220176895,%edx
    cmpl    $0,%r9d
    jne    .Lnotintel
    orl    $1073741824,%edx
    andb    $15,%ah
    cmpb    $15,%ah
    jne    .Lnotintel
    orl    $1048576,%edx
.Lnotintel:
    btl    $28,%edx
    jnc    .Lgeneric
    andl    $4026531839,%edx
    cmpl    $0,%r10d
    je    .Lgeneric

    orl    $268435456,%edx
    shrl    $16,%ebx
    cmpb    $1,%bl
    ja    .Lgeneric
    andl    $4026531839,%edx
.Lgeneric:
    andl    $2048,%r9d
    andl    $4294965247,%ecx
    orl    %ecx,%r9d

    movl    %edx,%r10d
    btl    $27,%r9d
    jnc    .Lclear_avx
    xorl    %ecx,%ecx
.byte    0x0f,0x01,0xd0

    andl    $6,%eax
    cmpl    $6,%eax
    je    .Ldone
.Lclear_avx:
    movl    $4026525695,%eax
    andl    %eax,%r9d
.Ldone:
    shlq    $32,%r9
    movl    %r10d,%eax
    movq    %r8,%rbx
    orq    %r9,%rax
    .byte    0xf3,0xc3
.size    OPENSSL_ia32_cpuid,.-OPENSSL_ia32_cpuid

.globl    OPENSSL_cleanse
.type    OPENSSL_cleanse,@function
.align    16
OPENSSL_cleanse:
    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
.size    OPENSSL_cleanse,.-OPENSSL_cleanse
.globl    OPENSSL_wipe_cpu
.type    OPENSSL_wipe_cpu,@function
.align    16
OPENSSL_wipe_cpu:
    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
.size    OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu
.globl    OPENSSL_ia32_rdrand
.type    OPENSSL_ia32_rdrand,@function
.align    16
OPENSSL_ia32_rdrand:
    movl    $8,%ecx
.Loop_rdrand:
.byte    72,15,199,240
    jc    .Lbreak_rdrand
    loop    .Loop_rdrand
.Lbreak_rdrand:
    cmpq    $0,%rax
    cmoveq    %rcx,%rax
    .byte    0xf3,0xc3
.size    OPENSSL_ia32_rdrand,.-OPENSSL_ia32_rdrand