1.file "x86cpuid.s" 2.text 3.globl OPENSSL_ia32_cpuid 4.type OPENSSL_ia32_cpuid,@function 5.align 16 6OPENSSL_ia32_cpuid: 7.L_OPENSSL_ia32_cpuid_begin: 8 pushl %ebp 9 pushl %ebx 10 pushl %esi 11 pushl %edi 12 xorl %edx,%edx 13 pushfl 14 popl %eax 15 movl %eax,%ecx 16 xorl $2097152,%eax 17 pushl %eax 18 popfl 19 pushfl 20 popl %eax 21 xorl %eax,%ecx 22 btl $21,%ecx 23 jnc .L000done 24 xorl %eax,%eax 25 .byte 0x0f,0xa2 26 movl %eax,%edi 27 xorl %eax,%eax 28 cmpl $1970169159,%ebx 29 setne %al 30 movl %eax,%ebp 31 cmpl $1231384169,%edx 32 setne %al 33 orl %eax,%ebp 34 cmpl $1818588270,%ecx 35 setne %al 36 orl %eax,%ebp 37 jz .L001intel 38 cmpl $1752462657,%ebx 39 setne %al 40 movl %eax,%esi 41 cmpl $1769238117,%edx 42 setne %al 43 orl %eax,%esi 44 cmpl $1145913699,%ecx 45 setne %al 46 orl %eax,%esi 47 jnz .L001intel 48 movl $2147483648,%eax 49 .byte 0x0f,0xa2 50 cmpl $2147483656,%eax 51 jb .L001intel 52 movl $2147483656,%eax 53 .byte 0x0f,0xa2 54 movzbl %cl,%esi 55 incl %esi 56 movl $1,%eax 57 .byte 0x0f,0xa2 58 btl $28,%edx 59 jnc .L000done 60 shrl $16,%ebx 61 andl $255,%ebx 62 cmpl %esi,%ebx 63 ja .L000done 64 andl $4026531839,%edx 65 jmp .L000done 66.L001intel: 67 cmpl $4,%edi 68 movl $-1,%edi 69 jb .L002nocacheinfo 70 movl $4,%eax 71 movl $0,%ecx 72 .byte 0x0f,0xa2 73 movl %eax,%edi 74 shrl $14,%edi 75 andl $4095,%edi 76.L002nocacheinfo: 77 movl $1,%eax 78 .byte 0x0f,0xa2 79 cmpl $0,%ebp 80 jne .L003notP4 81 andb $15,%ah 82 cmpb $15,%ah 83 jne .L003notP4 84 orl $1048576,%edx 85.L003notP4: 86 btl $28,%edx 87 jnc .L000done 88 andl $4026531839,%edx 89 cmpl $0,%edi 90 je .L000done 91 orl $268435456,%edx 92 shrl $16,%ebx 93 cmpb $1,%bl 94 ja .L000done 95 andl $4026531839,%edx 96.L000done: 97 movl %edx,%eax 98 movl %ecx,%edx 99 popl %edi 100 popl %esi 101 popl %ebx 102 popl %ebp 103 ret 104.size OPENSSL_ia32_cpuid,.-.L_OPENSSL_ia32_cpuid_begin 105.globl OPENSSL_rdtsc 106.type OPENSSL_rdtsc,@function 107.align 16 108OPENSSL_rdtsc: 109.L_OPENSSL_rdtsc_begin: 110 xorl %eax,%eax 111 xorl %edx,%edx 112 call .L004PIC_me_up 113.L004PIC_me_up: 114 popl %ecx 115 leal _GLOBAL_OFFSET_TABLE_+[.-.L004PIC_me_up](%ecx),%ecx 116 movl OPENSSL_ia32cap_P@GOT(%ecx),%ecx 117 btl $4,(%ecx) 118 jnc .L005notsc 119 .byte 0x0f,0x31 120.L005notsc: 121 ret 122.size OPENSSL_rdtsc,.-.L_OPENSSL_rdtsc_begin 123.globl OPENSSL_instrument_halt 124.type OPENSSL_instrument_halt,@function 125.align 16 126OPENSSL_instrument_halt: 127.L_OPENSSL_instrument_halt_begin: 128 call .L006PIC_me_up 129.L006PIC_me_up: 130 popl %ecx 131 leal _GLOBAL_OFFSET_TABLE_+[.-.L006PIC_me_up](%ecx),%ecx 132 movl OPENSSL_ia32cap_P@GOT(%ecx),%ecx 133 btl $4,(%ecx) 134 jnc .L007nohalt 135.long 2421723150 136 andl $3,%eax 137 jnz .L007nohalt 138 pushfl 139 popl %eax 140 btl $9,%eax 141 jnc .L007nohalt 142 .byte 0x0f,0x31 143 pushl %edx 144 pushl %eax 145 hlt 146 .byte 0x0f,0x31 147 subl (%esp),%eax 148 sbbl 4(%esp),%edx 149 addl $8,%esp 150 ret 151.L007nohalt: 152 xorl %eax,%eax 153 xorl %edx,%edx 154 ret 155.size OPENSSL_instrument_halt,.-.L_OPENSSL_instrument_halt_begin 156.globl OPENSSL_far_spin 157.type OPENSSL_far_spin,@function 158.align 16 159OPENSSL_far_spin: 160.L_OPENSSL_far_spin_begin: 161 pushfl 162 popl %eax 163 btl $9,%eax 164 jnc .L008nospin 165 movl 4(%esp),%eax 166 movl 8(%esp),%ecx 167.long 2430111262 168 xorl %eax,%eax 169 movl (%ecx),%edx 170 jmp .L009spin 171.align 16 172.L009spin: 173 incl %eax 174 cmpl (%ecx),%edx 175 je .L009spin 176.long 529567888 177 ret 178.L008nospin: 179 xorl %eax,%eax 180 xorl %edx,%edx 181 ret 182.size OPENSSL_far_spin,.-.L_OPENSSL_far_spin_begin 183.globl OPENSSL_wipe_cpu 184.type OPENSSL_wipe_cpu,@function 185.align 16 186OPENSSL_wipe_cpu: 187.L_OPENSSL_wipe_cpu_begin: 188 xorl %eax,%eax 189 xorl %edx,%edx 190 call .L010PIC_me_up 191.L010PIC_me_up: 192 popl %ecx 193 leal _GLOBAL_OFFSET_TABLE_+[.-.L010PIC_me_up](%ecx),%ecx 194 movl OPENSSL_ia32cap_P@GOT(%ecx),%ecx 195 movl (%ecx),%ecx 196 btl $1,(%ecx) 197 jnc .L011no_x87 198.long 4007259865,4007259865,4007259865,4007259865,2430851995 199.L011no_x87: 200 leal 4(%esp),%eax 201 ret 202.size OPENSSL_wipe_cpu,.-.L_OPENSSL_wipe_cpu_begin 203.globl OPENSSL_atomic_add 204.type OPENSSL_atomic_add,@function 205.align 16 206OPENSSL_atomic_add: 207.L_OPENSSL_atomic_add_begin: 208 movl 4(%esp),%edx 209 movl 8(%esp),%ecx 210 pushl %ebx 211 nop 212 movl (%edx),%eax 213.L012spin: 214 leal (%eax,%ecx,1),%ebx 215 nop 216.long 447811568 217 jne .L012spin 218 movl %ebx,%eax 219 popl %ebx 220 ret 221.size OPENSSL_atomic_add,.-.L_OPENSSL_atomic_add_begin 222.globl OPENSSL_indirect_call 223.type OPENSSL_indirect_call,@function 224.align 16 225OPENSSL_indirect_call: 226.L_OPENSSL_indirect_call_begin: 227 pushl %ebp 228 movl %esp,%ebp 229 subl $28,%esp 230 movl 12(%ebp),%ecx 231 movl %ecx,(%esp) 232 movl 16(%ebp),%edx 233 movl %edx,4(%esp) 234 movl 20(%ebp),%eax 235 movl %eax,8(%esp) 236 movl 24(%ebp),%eax 237 movl %eax,12(%esp) 238 movl 28(%ebp),%eax 239 movl %eax,16(%esp) 240 movl 32(%ebp),%eax 241 movl %eax,20(%esp) 242 movl 36(%ebp),%eax 243 movl %eax,24(%esp) 244 call *8(%ebp) 245 movl %ebp,%esp 246 popl %ebp 247 ret 248.size OPENSSL_indirect_call,.-.L_OPENSSL_indirect_call_begin 249.globl OPENSSL_cleanse 250.type OPENSSL_cleanse,@function 251.align 16 252OPENSSL_cleanse: 253.L_OPENSSL_cleanse_begin: 254 movl 4(%esp),%edx 255 movl 8(%esp),%ecx 256 xorl %eax,%eax 257 cmpl $7,%ecx 258 jae .L013lot 259 cmpl $0,%ecx 260 je .L014ret 261.L015little: 262 movb %al,(%edx) 263 subl $1,%ecx 264 leal 1(%edx),%edx 265 jnz .L015little 266.L014ret: 267 ret 268.align 16 269.L013lot: 270 testl $3,%edx 271 jz .L016aligned 272 movb %al,(%edx) 273 leal -1(%ecx),%ecx 274 leal 1(%edx),%edx 275 jmp .L013lot 276.L016aligned: 277 movl %eax,(%edx) 278 leal -4(%ecx),%ecx 279 testl $-4,%ecx 280 leal 4(%edx),%edx 281 jnz .L016aligned 282 cmpl $0,%ecx 283 jne .L015little 284 ret 285.size OPENSSL_cleanse,.-.L_OPENSSL_cleanse_begin 286.comm OPENSSL_ia32cap_P,4,4 287.section .init 288 call OPENSSL_cpuid_setup 289 jmp .Linitalign 290.align 16 291.Linitalign: 292