OLD | NEW |
(Empty) | |
| 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 |
| 8 OPENSSL_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 .L005notintel: |
| 105 btl $28,%edx |
| 106 jnc .L002generic |
| 107 andl $4026531839,%edx |
| 108 cmpl $0,%edi |
| 109 je .L002generic |
| 110 orl $268435456,%edx |
| 111 shrl $16,%ebx |
| 112 cmpb $1,%bl |
| 113 ja .L002generic |
| 114 andl $4026531839,%edx |
| 115 .L002generic: |
| 116 andl $2048,%ebp |
| 117 andl $4294965247,%ecx |
| 118 movl %edx,%esi |
| 119 orl %ecx,%ebp |
| 120 btl $27,%ecx |
| 121 jnc .L006clear_avx |
| 122 xorl %ecx,%ecx |
| 123 .byte 15,1,208 |
| 124 andl $6,%eax |
| 125 cmpl $6,%eax |
| 126 je .L007done |
| 127 cmpl $2,%eax |
| 128 je .L006clear_avx |
| 129 .L008clear_xmm: |
| 130 andl $4261412861,%ebp |
| 131 andl $4278190079,%esi |
| 132 .L006clear_avx: |
| 133 andl $4026525695,%ebp |
| 134 movl 20(%esp),%edi |
| 135 andl $4294967263,8(%edi) |
| 136 .L007done: |
| 137 movl %esi,%eax |
| 138 movl %ebp,%edx |
| 139 .L000nocpuid: |
| 140 popl %edi |
| 141 popl %esi |
| 142 popl %ebx |
| 143 popl %ebp |
| 144 ret |
| 145 .size OPENSSL_ia32_cpuid,.-.L_OPENSSL_ia32_cpuid_begin |
| 146 .globl OPENSSL_rdtsc |
| 147 .hidden OPENSSL_rdtsc |
| 148 .type OPENSSL_rdtsc,@function |
| 149 .align 16 |
| 150 OPENSSL_rdtsc: |
| 151 .L_OPENSSL_rdtsc_begin: |
| 152 xorl %eax,%eax |
| 153 xorl %edx,%edx |
| 154 call .L009PIC_me_up |
| 155 .L009PIC_me_up: |
| 156 popl %ecx |
| 157 leal OPENSSL_ia32cap_P-.L009PIC_me_up(%ecx),%ecx |
| 158 btl $4,(%ecx) |
| 159 jnc .L010notsc |
| 160 .byte 0x0f,0x31 |
| 161 .L010notsc: |
| 162 ret |
| 163 .size OPENSSL_rdtsc,.-.L_OPENSSL_rdtsc_begin |
| 164 .globl OPENSSL_instrument_halt |
| 165 .hidden OPENSSL_instrument_halt |
| 166 .type OPENSSL_instrument_halt,@function |
| 167 .align 16 |
| 168 OPENSSL_instrument_halt: |
| 169 .L_OPENSSL_instrument_halt_begin: |
| 170 call .L011PIC_me_up |
| 171 .L011PIC_me_up: |
| 172 popl %ecx |
| 173 leal OPENSSL_ia32cap_P-.L011PIC_me_up(%ecx),%ecx |
| 174 btl $4,(%ecx) |
| 175 jnc .L012nohalt |
| 176 .long 2421723150 |
| 177 andl $3,%eax |
| 178 jnz .L012nohalt |
| 179 pushfl |
| 180 popl %eax |
| 181 btl $9,%eax |
| 182 jnc .L012nohalt |
| 183 .byte 0x0f,0x31 |
| 184 pushl %edx |
| 185 pushl %eax |
| 186 hlt |
| 187 .byte 0x0f,0x31 |
| 188 subl (%esp),%eax |
| 189 sbbl 4(%esp),%edx |
| 190 addl $8,%esp |
| 191 ret |
| 192 .L012nohalt: |
| 193 xorl %eax,%eax |
| 194 xorl %edx,%edx |
| 195 ret |
| 196 .size OPENSSL_instrument_halt,.-.L_OPENSSL_instrument_halt_begin |
| 197 .globl OPENSSL_far_spin |
| 198 .hidden OPENSSL_far_spin |
| 199 .type OPENSSL_far_spin,@function |
| 200 .align 16 |
| 201 OPENSSL_far_spin: |
| 202 .L_OPENSSL_far_spin_begin: |
| 203 pushfl |
| 204 popl %eax |
| 205 btl $9,%eax |
| 206 jnc .L013nospin |
| 207 movl 4(%esp),%eax |
| 208 movl 8(%esp),%ecx |
| 209 .long 2430111262 |
| 210 xorl %eax,%eax |
| 211 movl (%ecx),%edx |
| 212 jmp .L014spin |
| 213 .align 16 |
| 214 .L014spin: |
| 215 incl %eax |
| 216 cmpl (%ecx),%edx |
| 217 je .L014spin |
| 218 .long 529567888 |
| 219 ret |
| 220 .L013nospin: |
| 221 xorl %eax,%eax |
| 222 xorl %edx,%edx |
| 223 ret |
| 224 .size OPENSSL_far_spin,.-.L_OPENSSL_far_spin_begin |
| 225 .globl OPENSSL_wipe_cpu |
| 226 .hidden OPENSSL_wipe_cpu |
| 227 .type OPENSSL_wipe_cpu,@function |
| 228 .align 16 |
| 229 OPENSSL_wipe_cpu: |
| 230 .L_OPENSSL_wipe_cpu_begin: |
| 231 xorl %eax,%eax |
| 232 xorl %edx,%edx |
| 233 call .L015PIC_me_up |
| 234 .L015PIC_me_up: |
| 235 popl %ecx |
| 236 leal OPENSSL_ia32cap_P-.L015PIC_me_up(%ecx),%ecx |
| 237 movl (%ecx),%ecx |
| 238 btl $1,(%ecx) |
| 239 jnc .L016no_x87 |
| 240 andl $83886080,%ecx |
| 241 cmpl $83886080,%ecx |
| 242 jne .L017no_sse2 |
| 243 pxor %xmm0,%xmm0 |
| 244 pxor %xmm1,%xmm1 |
| 245 pxor %xmm2,%xmm2 |
| 246 pxor %xmm3,%xmm3 |
| 247 pxor %xmm4,%xmm4 |
| 248 pxor %xmm5,%xmm5 |
| 249 pxor %xmm6,%xmm6 |
| 250 pxor %xmm7,%xmm7 |
| 251 .L017no_sse2: |
| 252 .long 4007259865,4007259865,4007259865,4007259865,2430851995 |
| 253 .L016no_x87: |
| 254 leal 4(%esp),%eax |
| 255 ret |
| 256 .size OPENSSL_wipe_cpu,.-.L_OPENSSL_wipe_cpu_begin |
| 257 .globl OPENSSL_atomic_add |
| 258 .hidden OPENSSL_atomic_add |
| 259 .type OPENSSL_atomic_add,@function |
| 260 .align 16 |
| 261 OPENSSL_atomic_add: |
| 262 .L_OPENSSL_atomic_add_begin: |
| 263 movl 4(%esp),%edx |
| 264 movl 8(%esp),%ecx |
| 265 pushl %ebx |
| 266 nop |
| 267 movl (%edx),%eax |
| 268 .L018spin: |
| 269 leal (%eax,%ecx,1),%ebx |
| 270 nop |
| 271 .long 447811568 |
| 272 jne .L018spin |
| 273 movl %ebx,%eax |
| 274 popl %ebx |
| 275 ret |
| 276 .size OPENSSL_atomic_add,.-.L_OPENSSL_atomic_add_begin |
| 277 .globl OPENSSL_indirect_call |
| 278 .hidden OPENSSL_indirect_call |
| 279 .type OPENSSL_indirect_call,@function |
| 280 .align 16 |
| 281 OPENSSL_indirect_call: |
| 282 .L_OPENSSL_indirect_call_begin: |
| 283 pushl %ebp |
| 284 movl %esp,%ebp |
| 285 subl $28,%esp |
| 286 movl 12(%ebp),%ecx |
| 287 movl %ecx,(%esp) |
| 288 movl 16(%ebp),%edx |
| 289 movl %edx,4(%esp) |
| 290 movl 20(%ebp),%eax |
| 291 movl %eax,8(%esp) |
| 292 movl 24(%ebp),%eax |
| 293 movl %eax,12(%esp) |
| 294 movl 28(%ebp),%eax |
| 295 movl %eax,16(%esp) |
| 296 movl 32(%ebp),%eax |
| 297 movl %eax,20(%esp) |
| 298 movl 36(%ebp),%eax |
| 299 movl %eax,24(%esp) |
| 300 call *8(%ebp) |
| 301 movl %ebp,%esp |
| 302 popl %ebp |
| 303 ret |
| 304 .size OPENSSL_indirect_call,.-.L_OPENSSL_indirect_call_begin |
| 305 .globl OPENSSL_ia32_rdrand |
| 306 .hidden OPENSSL_ia32_rdrand |
| 307 .type OPENSSL_ia32_rdrand,@function |
| 308 .align 16 |
| 309 OPENSSL_ia32_rdrand: |
| 310 .L_OPENSSL_ia32_rdrand_begin: |
| 311 movl $8,%ecx |
| 312 .L019loop: |
| 313 .byte 15,199,240 |
| 314 jc .L020break |
| 315 loop .L019loop |
| 316 .L020break: |
| 317 cmpl $0,%eax |
| 318 cmovel %ecx,%eax |
| 319 ret |
| 320 .size OPENSSL_ia32_rdrand,.-.L_OPENSSL_ia32_rdrand_begin |
| 321 .hidden OPENSSL_ia32cap_P |
| 322 #endif |
OLD | NEW |