1#if defined(__i386__) 2.file "crypto/cpu-x86-asm.S" 3.text 4.globl OPENSSL_ia32_cpuid 5.hidden OPENSSL_ia32_cpuid 6.type OPENSSL_ia32_cpuid,@function 7.align 16 8OPENSSL_ia32_cpuid: 9.L_OPENSSL_ia32_cpuid_begin: 10 pushl %ebp 11 pushl %ebx 12 pushl %esi 13 pushl %edi 14 xorl %edx,%edx 15 pushfl 16 popl %eax 17 movl %eax,%ecx 18 xorl $2097152,%eax 19 pushl %eax 20 popfl 21 pushfl 22 popl %eax 23 xorl %eax,%ecx 24 xorl %eax,%eax 25 btl $21,%ecx 26 jnc .L000nocpuid 27 movl 20(%esp),%esi 28 movl %eax,8(%esi) 29 .byte 0x0f,0xa2 30 movl %eax,%edi 31 xorl %eax,%eax 32 cmpl $1970169159,%ebx 33 setne %al 34 movl %eax,%ebp 35 cmpl $1231384169,%edx 36 setne %al 37 orl %eax,%ebp 38 cmpl $1818588270,%ecx 39 setne %al 40 orl %eax,%ebp 41 jz .L001intel 42 cmpl $1752462657,%ebx 43 setne %al 44 movl %eax,%esi 45 cmpl $1769238117,%edx 46 setne %al 47 orl %eax,%esi 48 cmpl $1145913699,%ecx 49 setne %al 50 orl %eax,%esi 51 jnz .L001intel 52 movl $2147483648,%eax 53 .byte 0x0f,0xa2 54 cmpl $2147483649,%eax 55 jb .L001intel 56 movl %eax,%esi 57 movl $2147483649,%eax 58 .byte 0x0f,0xa2 59 orl %ecx,%ebp 60 andl $2049,%ebp 61 cmpl $2147483656,%esi 62 jb .L001intel 63 movl $2147483656,%eax 64 .byte 0x0f,0xa2 65 movzbl %cl,%esi 66 incl %esi 67 movl $1,%eax 68 xorl %ecx,%ecx 69 .byte 0x0f,0xa2 70 btl $28,%edx 71 jnc .L002generic 72 shrl $16,%ebx 73 andl $255,%ebx 74 cmpl %esi,%ebx 75 ja .L002generic 76 andl $4026531839,%edx 77 jmp .L002generic 78.L001intel: 79 cmpl $7,%edi 80 jb .L003cacheinfo 81 movl 20(%esp),%esi 82 movl $7,%eax 83 xorl %ecx,%ecx 84 .byte 0x0f,0xa2 85 movl %ebx,8(%esi) 86.L003cacheinfo: 87 cmpl $4,%edi 88 movl $-1,%edi 89 jb .L004nocacheinfo 90 movl $4,%eax 91 movl $0,%ecx 92 .byte 0x0f,0xa2 93 movl %eax,%edi 94 shrl $14,%edi 95 andl $4095,%edi 96.L004nocacheinfo: 97 movl $1,%eax 98 xorl %ecx,%ecx 99 .byte 0x0f,0xa2 100 andl $3220176895,%edx 101 cmpl $0,%ebp 102 jne .L005notintel 103 orl $1073741824,%edx 104 andb $15,%ah 105 cmpb $15,%ah 106 jne .L005notintel 107 orl $1048576,%edx 108.L005notintel: 109 btl $28,%edx 110 jnc .L002generic 111 andl $4026531839,%edx 112 cmpl $0,%edi 113 je .L002generic 114 orl $268435456,%edx 115 shrl $16,%ebx 116 cmpb $1,%bl 117 ja .L002generic 118 andl $4026531839,%edx 119.L002generic: 120 andl $2048,%ebp 121 andl $4294965247,%ecx 122 movl %edx,%esi 123 orl %ecx,%ebp 124 btl $27,%ecx 125 jnc .L006clear_avx 126 xorl %ecx,%ecx 127.byte 15,1,208 128 andl $6,%eax 129 cmpl $6,%eax 130 je .L007done 131 cmpl $2,%eax 132 je .L006clear_avx 133.L008clear_xmm: 134 andl $4261412861,%ebp 135 andl $4278190079,%esi 136.L006clear_avx: 137 andl $4026525695,%ebp 138 movl 20(%esp),%edi 139 andl $4294967263,8(%edi) 140.L007done: 141 movl %esi,%eax 142 movl %ebp,%edx 143.L000nocpuid: 144 popl %edi 145 popl %esi 146 popl %ebx 147 popl %ebp 148 ret 149.size OPENSSL_ia32_cpuid,.-.L_OPENSSL_ia32_cpuid_begin 150.globl OPENSSL_rdtsc 151.hidden OPENSSL_rdtsc 152.type OPENSSL_rdtsc,@function 153.align 16 154OPENSSL_rdtsc: 155.L_OPENSSL_rdtsc_begin: 156 xorl %eax,%eax 157 xorl %edx,%edx 158 call .L009PIC_me_up 159.L009PIC_me_up: 160 popl %ecx 161 leal OPENSSL_ia32cap_P-.L009PIC_me_up(%ecx),%ecx 162 btl $4,(%ecx) 163 jnc .L010notsc 164 .byte 0x0f,0x31 165.L010notsc: 166 ret 167.size OPENSSL_rdtsc,.-.L_OPENSSL_rdtsc_begin 168.globl OPENSSL_instrument_halt 169.hidden OPENSSL_instrument_halt 170.type OPENSSL_instrument_halt,@function 171.align 16 172OPENSSL_instrument_halt: 173.L_OPENSSL_instrument_halt_begin: 174 call .L011PIC_me_up 175.L011PIC_me_up: 176 popl %ecx 177 leal OPENSSL_ia32cap_P-.L011PIC_me_up(%ecx),%ecx 178 btl $4,(%ecx) 179 jnc .L012nohalt 180.long 2421723150 181 andl $3,%eax 182 jnz .L012nohalt 183 pushfl 184 popl %eax 185 btl $9,%eax 186 jnc .L012nohalt 187 .byte 0x0f,0x31 188 pushl %edx 189 pushl %eax 190 hlt 191 .byte 0x0f,0x31 192 subl (%esp),%eax 193 sbbl 4(%esp),%edx 194 addl $8,%esp 195 ret 196.L012nohalt: 197 xorl %eax,%eax 198 xorl %edx,%edx 199 ret 200.size OPENSSL_instrument_halt,.-.L_OPENSSL_instrument_halt_begin 201.globl OPENSSL_far_spin 202.hidden OPENSSL_far_spin 203.type OPENSSL_far_spin,@function 204.align 16 205OPENSSL_far_spin: 206.L_OPENSSL_far_spin_begin: 207 pushfl 208 popl %eax 209 btl $9,%eax 210 jnc .L013nospin 211 movl 4(%esp),%eax 212 movl 8(%esp),%ecx 213.long 2430111262 214 xorl %eax,%eax 215 movl (%ecx),%edx 216 jmp .L014spin 217.align 16 218.L014spin: 219 incl %eax 220 cmpl (%ecx),%edx 221 je .L014spin 222.long 529567888 223 ret 224.L013nospin: 225 xorl %eax,%eax 226 xorl %edx,%edx 227 ret 228.size OPENSSL_far_spin,.-.L_OPENSSL_far_spin_begin 229.globl OPENSSL_wipe_cpu 230.hidden OPENSSL_wipe_cpu 231.type OPENSSL_wipe_cpu,@function 232.align 16 233OPENSSL_wipe_cpu: 234.L_OPENSSL_wipe_cpu_begin: 235 xorl %eax,%eax 236 xorl %edx,%edx 237 call .L015PIC_me_up 238.L015PIC_me_up: 239 popl %ecx 240 leal OPENSSL_ia32cap_P-.L015PIC_me_up(%ecx),%ecx 241 movl (%ecx),%ecx 242 btl $1,(%ecx) 243 jnc .L016no_x87 244.long 4007259865,4007259865,4007259865,4007259865,2430851995 245.L016no_x87: 246 leal 4(%esp),%eax 247 ret 248.size OPENSSL_wipe_cpu,.-.L_OPENSSL_wipe_cpu_begin 249.globl OPENSSL_atomic_add 250.hidden OPENSSL_atomic_add 251.type OPENSSL_atomic_add,@function 252.align 16 253OPENSSL_atomic_add: 254.L_OPENSSL_atomic_add_begin: 255 movl 4(%esp),%edx 256 movl 8(%esp),%ecx 257 pushl %ebx 258 nop 259 movl (%edx),%eax 260.L017spin: 261 leal (%eax,%ecx,1),%ebx 262 nop 263.long 447811568 264 jne .L017spin 265 movl %ebx,%eax 266 popl %ebx 267 ret 268.size OPENSSL_atomic_add,.-.L_OPENSSL_atomic_add_begin 269.globl OPENSSL_indirect_call 270.hidden OPENSSL_indirect_call 271.type OPENSSL_indirect_call,@function 272.align 16 273OPENSSL_indirect_call: 274.L_OPENSSL_indirect_call_begin: 275 pushl %ebp 276 movl %esp,%ebp 277 subl $28,%esp 278 movl 12(%ebp),%ecx 279 movl %ecx,(%esp) 280 movl 16(%ebp),%edx 281 movl %edx,4(%esp) 282 movl 20(%ebp),%eax 283 movl %eax,8(%esp) 284 movl 24(%ebp),%eax 285 movl %eax,12(%esp) 286 movl 28(%ebp),%eax 287 movl %eax,16(%esp) 288 movl 32(%ebp),%eax 289 movl %eax,20(%esp) 290 movl 36(%ebp),%eax 291 movl %eax,24(%esp) 292 call *8(%ebp) 293 movl %ebp,%esp 294 popl %ebp 295 ret 296.size OPENSSL_indirect_call,.-.L_OPENSSL_indirect_call_begin 297.globl OPENSSL_ia32_rdrand 298.hidden OPENSSL_ia32_rdrand 299.type OPENSSL_ia32_rdrand,@function 300.align 16 301OPENSSL_ia32_rdrand: 302.L_OPENSSL_ia32_rdrand_begin: 303 movl $8,%ecx 304.L018loop: 305.byte 15,199,240 306 jc .L019break 307 loop .L018loop 308.L019break: 309 cmpl $0,%eax 310 cmovel %ecx,%eax 311 ret 312.size OPENSSL_ia32_rdrand,.-.L_OPENSSL_ia32_rdrand_begin 313.hidden OPENSSL_ia32cap_P 314#endif 315