1 2.hidden OPENSSL_cpuid_setup 3.section .init 4 call OPENSSL_cpuid_setup 5 6.hidden OPENSSL_ia32cap_P 7.comm OPENSSL_ia32cap_P,8,4 8 9.text 10 11.globl OPENSSL_atomic_add 12.type OPENSSL_atomic_add,@function 13.align 16 14OPENSSL_atomic_add: 15 movl (%rdi),%eax 16.Lspin: leaq (%rsi,%rax,1),%r8 17.byte 0xf0 18 cmpxchgl %r8d,(%rdi) 19 jne .Lspin 20 movl %r8d,%eax 21.byte 0x48,0x98 22 .byte 0xf3,0xc3 23.size OPENSSL_atomic_add,.-OPENSSL_atomic_add 24 25.globl OPENSSL_ia32_cpuid 26.type OPENSSL_ia32_cpuid,@function 27.align 16 28OPENSSL_ia32_cpuid: 29 movq %rbx,%r8 30 31 xorl %eax,%eax 32 cpuid 33 movl %eax,%r11d 34 35 xorl %eax,%eax 36 cmpl $1970169159,%ebx 37 setne %al 38 movl %eax,%r9d 39 cmpl $1231384169,%edx 40 setne %al 41 orl %eax,%r9d 42 cmpl $1818588270,%ecx 43 setne %al 44 orl %eax,%r9d 45 jz .Lintel 46 47 cmpl $1752462657,%ebx 48 setne %al 49 movl %eax,%r10d 50 cmpl $1769238117,%edx 51 setne %al 52 orl %eax,%r10d 53 cmpl $1145913699,%ecx 54 setne %al 55 orl %eax,%r10d 56 jnz .Lintel 57 58 59 movl $2147483648,%eax 60 cpuid 61 cmpl $2147483649,%eax 62 jb .Lintel 63 movl %eax,%r10d 64 movl $2147483649,%eax 65 cpuid 66 orl %ecx,%r9d 67 andl $2049,%r9d 68 69 cmpl $2147483656,%r10d 70 jb .Lintel 71 72 movl $2147483656,%eax 73 cpuid 74 movzbq %cl,%r10 75 incq %r10 76 77 movl $1,%eax 78 cpuid 79 btl $28,%edx 80 jnc .Lgeneric 81 shrl $16,%ebx 82 cmpb %r10b,%bl 83 ja .Lgeneric 84 andl $4026531839,%edx 85 jmp .Lgeneric 86 87.Lintel: 88 cmpl $4,%r11d 89 movl $-1,%r10d 90 jb .Lnocacheinfo 91 92 movl $4,%eax 93 movl $0,%ecx 94 cpuid 95 movl %eax,%r10d 96 shrl $14,%r10d 97 andl $4095,%r10d 98 99.Lnocacheinfo: 100 movl $1,%eax 101 cpuid 102 andl $3220176895,%edx 103 cmpl $0,%r9d 104 jne .Lnotintel 105 orl $1073741824,%edx 106 andb $15,%ah 107 cmpb $15,%ah 108 jne .Lnotintel 109 orl $1048576,%edx 110.Lnotintel: 111 btl $28,%edx 112 jnc .Lgeneric 113 andl $4026531839,%edx 114 cmpl $0,%r10d 115 je .Lgeneric 116 117 orl $268435456,%edx 118 shrl $16,%ebx 119 cmpb $1,%bl 120 ja .Lgeneric 121 andl $4026531839,%edx 122.Lgeneric: 123 andl $2048,%r9d 124 andl $4294965247,%ecx 125 orl %ecx,%r9d 126 127 movl %edx,%r10d 128 btl $27,%r9d 129 jnc .Lclear_avx 130 xorl %ecx,%ecx 131.byte 0x0f,0x01,0xd0 132 andl $6,%eax 133 cmpl $6,%eax 134 je .Ldone 135.Lclear_avx: 136 movl $4026525695,%eax 137 andl %eax,%r9d 138.Ldone: 139 shlq $32,%r9 140 movl %r10d,%eax 141 movq %r8,%rbx 142 orq %r9,%rax 143 .byte 0xf3,0xc3 144.size OPENSSL_ia32_cpuid,.-OPENSSL_ia32_cpuid 145.globl OPENSSL_wipe_cpu 146.type OPENSSL_wipe_cpu,@function 147.align 16 148OPENSSL_wipe_cpu: 149 pxor %xmm0,%xmm0 150 pxor %xmm1,%xmm1 151 pxor %xmm2,%xmm2 152 pxor %xmm3,%xmm3 153 pxor %xmm4,%xmm4 154 pxor %xmm5,%xmm5 155 pxor %xmm6,%xmm6 156 pxor %xmm7,%xmm7 157 pxor %xmm8,%xmm8 158 pxor %xmm9,%xmm9 159 pxor %xmm10,%xmm10 160 pxor %xmm11,%xmm11 161 pxor %xmm12,%xmm12 162 pxor %xmm13,%xmm13 163 pxor %xmm14,%xmm14 164 pxor %xmm15,%xmm15 165 xorq %rcx,%rcx 166 xorq %rdx,%rdx 167 xorq %rsi,%rsi 168 xorq %rdi,%rdi 169 xorq %r8,%r8 170 xorq %r9,%r9 171 xorq %r10,%r10 172 xorq %r11,%r11 173 leaq 8(%rsp),%rax 174 .byte 0xf3,0xc3 175.size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu 176#if defined(HAVE_GNU_STACK) 177.section .note.GNU-stack,"",%progbits 178#endif 179