1 1.1 christos #include <machine/asm.h> 2 1.1 christos .text 3 1.1 christos .globl OPENSSL_ia32_cpuid 4 1.1 christos .type OPENSSL_ia32_cpuid,@function 5 1.1 christos .align 16 6 1.1 christos OPENSSL_ia32_cpuid: 7 1.1 christos .L_OPENSSL_ia32_cpuid_begin: 8 1.1 christos pushl %ebp 9 1.1 christos pushl %ebx 10 1.1 christos pushl %esi 11 1.1 christos pushl %edi 12 1.1 christos xorl %edx,%edx 13 1.1 christos pushfl 14 1.1 christos popl %eax 15 1.1 christos movl %eax,%ecx 16 1.1 christos xorl $2097152,%eax 17 1.1 christos pushl %eax 18 1.1 christos popfl 19 1.1 christos pushfl 20 1.1 christos popl %eax 21 1.1 christos xorl %eax,%ecx 22 1.1 christos xorl %eax,%eax 23 1.1 christos movl 20(%esp),%esi 24 1.1 christos movl %eax,8(%esi) 25 1.1.1.2 christos btl $21,%ecx 26 1.1.1.2 christos jnc .L000nocpuid 27 1.1 christos .byte 0x0f,0xa2 28 1.1 christos movl %eax,%edi 29 1.1 christos xorl %eax,%eax 30 1.1 christos cmpl $1970169159,%ebx 31 1.1 christos setne %al 32 1.1 christos movl %eax,%ebp 33 1.1 christos cmpl $1231384169,%edx 34 1.1 christos setne %al 35 1.1 christos orl %eax,%ebp 36 1.1 christos cmpl $1818588270,%ecx 37 1.1 christos setne %al 38 1.1 christos orl %eax,%ebp 39 1.1 christos jz .L001intel 40 1.1 christos cmpl $1752462657,%ebx 41 1.1 christos setne %al 42 1.1 christos movl %eax,%esi 43 1.1 christos cmpl $1769238117,%edx 44 1.1 christos setne %al 45 1.1 christos orl %eax,%esi 46 1.1 christos cmpl $1145913699,%ecx 47 1.1 christos setne %al 48 1.1 christos orl %eax,%esi 49 1.1 christos jnz .L001intel 50 1.1 christos movl $2147483648,%eax 51 1.1 christos .byte 0x0f,0xa2 52 1.1 christos cmpl $2147483649,%eax 53 1.1 christos jb .L001intel 54 1.1 christos movl %eax,%esi 55 1.1 christos movl $2147483649,%eax 56 1.1 christos .byte 0x0f,0xa2 57 1.1 christos orl %ecx,%ebp 58 1.1 christos andl $2049,%ebp 59 1.1 christos cmpl $2147483656,%esi 60 1.1 christos jb .L001intel 61 1.1 christos movl $2147483656,%eax 62 1.1 christos .byte 0x0f,0xa2 63 1.1 christos movzbl %cl,%esi 64 1.1 christos incl %esi 65 1.1 christos movl $1,%eax 66 1.1 christos xorl %ecx,%ecx 67 1.1 christos .byte 0x0f,0xa2 68 1.1 christos btl $28,%edx 69 1.1 christos jnc .L002generic 70 1.1 christos shrl $16,%ebx 71 1.1 christos andl $255,%ebx 72 1.1 christos cmpl %esi,%ebx 73 1.1 christos ja .L002generic 74 1.1 christos andl $4026531839,%edx 75 1.1 christos jmp .L002generic 76 1.1 christos .L001intel: 77 1.1 christos cmpl $4,%edi 78 1.1.1.2 christos movl $-1,%esi 79 1.1.1.2 christos jb .L003nocacheinfo 80 1.1 christos movl $4,%eax 81 1.1 christos movl $0,%ecx 82 1.1 christos .byte 0x0f,0xa2 83 1.1.1.2 christos movl %eax,%esi 84 1.1.1.2 christos shrl $14,%esi 85 1.1.1.2 christos andl $4095,%esi 86 1.1.1.2 christos .L003nocacheinfo: 87 1.1 christos movl $1,%eax 88 1.1 christos xorl %ecx,%ecx 89 1.1 christos .byte 0x0f,0xa2 90 1.1 christos andl $3220176895,%edx 91 1.1 christos cmpl $0,%ebp 92 1.1.1.2 christos jne .L004notintel 93 1.1 christos orl $1073741824,%edx 94 1.1 christos andb $15,%ah 95 1.1 christos cmpb $15,%ah 96 1.1.1.2 christos jne .L004notintel 97 1.1 christos orl $1048576,%edx 98 1.1.1.2 christos .L004notintel: 99 1.1 christos btl $28,%edx 100 1.1 christos jnc .L002generic 101 1.1 christos andl $4026531839,%edx 102 1.1.1.2 christos cmpl $0,%esi 103 1.1 christos je .L002generic 104 1.1 christos orl $268435456,%edx 105 1.1 christos shrl $16,%ebx 106 1.1 christos cmpb $1,%bl 107 1.1 christos ja .L002generic 108 1.1 christos andl $4026531839,%edx 109 1.1 christos .L002generic: 110 1.1 christos andl $2048,%ebp 111 1.1 christos andl $4294965247,%ecx 112 1.1 christos movl %edx,%esi 113 1.1 christos orl %ecx,%ebp 114 1.1.1.2 christos cmpl $7,%edi 115 1.1.1.2 christos movl 20(%esp),%edi 116 1.1.1.2 christos jb .L005no_extended_info 117 1.1.1.2 christos movl $7,%eax 118 1.1.1.2 christos xorl %ecx,%ecx 119 1.1.1.2 christos .byte 0x0f,0xa2 120 1.1.1.2 christos movl %ebx,8(%edi) 121 1.1.1.2 christos .L005no_extended_info: 122 1.1.1.2 christos btl $27,%ebp 123 1.1 christos jnc .L006clear_avx 124 1.1 christos xorl %ecx,%ecx 125 1.1 christos .byte 15,1,208 126 1.1 christos andl $6,%eax 127 1.1 christos cmpl $6,%eax 128 1.1 christos je .L007done 129 1.1 christos cmpl $2,%eax 130 1.1 christos je .L006clear_avx 131 1.1 christos .L008clear_xmm: 132 1.1 christos andl $4261412861,%ebp 133 1.1 christos andl $4278190079,%esi 134 1.1 christos .L006clear_avx: 135 1.1 christos andl $4026525695,%ebp 136 1.1 christos andl $4294967263,8(%edi) 137 1.1 christos .L007done: 138 1.1 christos movl %esi,%eax 139 1.1 christos movl %ebp,%edx 140 1.1 christos .L000nocpuid: 141 1.1 christos popl %edi 142 1.1 christos popl %esi 143 1.1 christos popl %ebx 144 1.1 christos popl %ebp 145 1.1 christos ret 146 1.1 christos .size OPENSSL_ia32_cpuid,.-.L_OPENSSL_ia32_cpuid_begin 147 1.1 christos .globl OPENSSL_rdtsc 148 1.1 christos .type OPENSSL_rdtsc,@function 149 1.1 christos .align 16 150 1.1 christos OPENSSL_rdtsc: 151 1.1 christos .L_OPENSSL_rdtsc_begin: 152 1.1 christos xorl %eax,%eax 153 1.1 christos xorl %edx,%edx 154 1.1 christos call .L009PIC_me_up 155 1.1 christos .L009PIC_me_up: 156 1.1 christos popl %ecx 157 1.1 christos leal OPENSSL_ia32cap_P-.L009PIC_me_up(%ecx),%ecx 158 1.1 christos btl $4,(%ecx) 159 1.1 christos jnc .L010notsc 160 1.1 christos .byte 0x0f,0x31 161 1.1 christos .L010notsc: 162 1.1 christos ret 163 1.1 christos .size OPENSSL_rdtsc,.-.L_OPENSSL_rdtsc_begin 164 1.1 christos .globl OPENSSL_instrument_halt 165 1.1 christos .type OPENSSL_instrument_halt,@function 166 1.1 christos .align 16 167 1.1 christos OPENSSL_instrument_halt: 168 1.1 christos .L_OPENSSL_instrument_halt_begin: 169 1.1 christos call .L011PIC_me_up 170 1.1 christos .L011PIC_me_up: 171 1.1 christos popl %ecx 172 1.1 christos leal OPENSSL_ia32cap_P-.L011PIC_me_up(%ecx),%ecx 173 1.1 christos btl $4,(%ecx) 174 1.1 christos jnc .L012nohalt 175 1.1 christos .long 2421723150 176 1.1 christos andl $3,%eax 177 1.1 christos jnz .L012nohalt 178 1.1 christos pushfl 179 1.1 christos popl %eax 180 1.1 christos btl $9,%eax 181 1.1 christos jnc .L012nohalt 182 1.1 christos .byte 0x0f,0x31 183 1.1 christos pushl %edx 184 1.1 christos pushl %eax 185 1.1 christos hlt 186 1.1 christos .byte 0x0f,0x31 187 1.1 christos subl (%esp),%eax 188 1.1 christos sbbl 4(%esp),%edx 189 1.1 christos addl $8,%esp 190 1.1 christos ret 191 1.1 christos .L012nohalt: 192 1.1 christos xorl %eax,%eax 193 1.1 christos xorl %edx,%edx 194 1.1 christos ret 195 1.1 christos .size OPENSSL_instrument_halt,.-.L_OPENSSL_instrument_halt_begin 196 1.1 christos .globl OPENSSL_far_spin 197 1.1 christos .type OPENSSL_far_spin,@function 198 1.1 christos .align 16 199 1.1 christos OPENSSL_far_spin: 200 1.1 christos .L_OPENSSL_far_spin_begin: 201 1.1 christos pushfl 202 1.1 christos popl %eax 203 1.1 christos btl $9,%eax 204 1.1 christos jnc .L013nospin 205 1.1 christos movl 4(%esp),%eax 206 1.1 christos movl 8(%esp),%ecx 207 1.1 christos .long 2430111262 208 1.1 christos xorl %eax,%eax 209 1.1 christos movl (%ecx),%edx 210 1.1 christos jmp .L014spin 211 1.1 christos .align 16 212 1.1 christos .L014spin: 213 1.1 christos incl %eax 214 1.1 christos cmpl (%ecx),%edx 215 1.1 christos je .L014spin 216 1.1 christos .long 529567888 217 1.1 christos ret 218 1.1 christos .L013nospin: 219 1.1 christos xorl %eax,%eax 220 1.1 christos xorl %edx,%edx 221 1.1 christos ret 222 1.1 christos .size OPENSSL_far_spin,.-.L_OPENSSL_far_spin_begin 223 1.1 christos .globl OPENSSL_wipe_cpu 224 1.1 christos .type OPENSSL_wipe_cpu,@function 225 1.1 christos .align 16 226 1.1 christos OPENSSL_wipe_cpu: 227 1.1 christos .L_OPENSSL_wipe_cpu_begin: 228 1.1 christos xorl %eax,%eax 229 1.1 christos xorl %edx,%edx 230 1.1 christos call .L015PIC_me_up 231 1.1 christos .L015PIC_me_up: 232 1.1 christos popl %ecx 233 1.1 christos leal OPENSSL_ia32cap_P-.L015PIC_me_up(%ecx),%ecx 234 1.1 christos movl (%ecx),%ecx 235 1.1 christos btl $1,(%ecx) 236 1.1 christos jnc .L016no_x87 237 1.1 christos andl $83886080,%ecx 238 1.1 christos cmpl $83886080,%ecx 239 1.1 christos jne .L017no_sse2 240 1.1 christos pxor %xmm0,%xmm0 241 1.1 christos pxor %xmm1,%xmm1 242 1.1 christos pxor %xmm2,%xmm2 243 1.1 christos pxor %xmm3,%xmm3 244 1.1 christos pxor %xmm4,%xmm4 245 1.1 christos pxor %xmm5,%xmm5 246 1.1 christos pxor %xmm6,%xmm6 247 1.1 christos pxor %xmm7,%xmm7 248 1.1 christos .L017no_sse2: 249 1.1 christos .long 4007259865,4007259865,4007259865,4007259865,2430851995 250 1.1 christos .L016no_x87: 251 1.1 christos leal 4(%esp),%eax 252 1.1 christos ret 253 1.1 christos .size OPENSSL_wipe_cpu,.-.L_OPENSSL_wipe_cpu_begin 254 1.1 christos .globl OPENSSL_atomic_add 255 1.1 christos .type OPENSSL_atomic_add,@function 256 1.1 christos .align 16 257 1.1 christos OPENSSL_atomic_add: 258 1.1 christos .L_OPENSSL_atomic_add_begin: 259 1.1 christos movl 4(%esp),%edx 260 1.1 christos movl 8(%esp),%ecx 261 1.1 christos pushl %ebx 262 1.1 christos nop 263 1.1 christos movl (%edx),%eax 264 1.1 christos .L018spin: 265 1.1 christos leal (%eax,%ecx,1),%ebx 266 1.1 christos nop 267 1.1 christos .long 447811568 268 1.1 christos jne .L018spin 269 1.1 christos movl %ebx,%eax 270 1.1 christos popl %ebx 271 1.1 christos ret 272 1.1 christos .size OPENSSL_atomic_add,.-.L_OPENSSL_atomic_add_begin 273 1.1 christos .globl OPENSSL_cleanse 274 1.1 christos .type OPENSSL_cleanse,@function 275 1.1 christos .align 16 276 1.1 christos OPENSSL_cleanse: 277 1.1 christos .L_OPENSSL_cleanse_begin: 278 1.1 christos movl 4(%esp),%edx 279 1.1 christos movl 8(%esp),%ecx 280 1.1 christos xorl %eax,%eax 281 1.1 christos cmpl $7,%ecx 282 1.1 christos jae .L019lot 283 1.1 christos cmpl $0,%ecx 284 1.1 christos je .L020ret 285 1.1 christos .L021little: 286 1.1 christos movb %al,(%edx) 287 1.1 christos subl $1,%ecx 288 1.1 christos leal 1(%edx),%edx 289 1.1 christos jnz .L021little 290 1.1 christos .L020ret: 291 1.1 christos ret 292 1.1 christos .align 16 293 1.1 christos .L019lot: 294 1.1 christos testl $3,%edx 295 1.1 christos jz .L022aligned 296 1.1 christos movb %al,(%edx) 297 1.1 christos leal -1(%ecx),%ecx 298 1.1 christos leal 1(%edx),%edx 299 1.1 christos jmp .L019lot 300 1.1 christos .L022aligned: 301 1.1 christos movl %eax,(%edx) 302 1.1 christos leal -4(%ecx),%ecx 303 1.1 christos testl $-4,%ecx 304 1.1 christos leal 4(%edx),%edx 305 1.1 christos jnz .L022aligned 306 1.1 christos cmpl $0,%ecx 307 1.1 christos jne .L021little 308 1.1 christos ret 309 1.1 christos .size OPENSSL_cleanse,.-.L_OPENSSL_cleanse_begin 310 1.1.1.2 christos .globl CRYPTO_memcmp 311 1.1.1.2 christos .type CRYPTO_memcmp,@function 312 1.1.1.2 christos .align 16 313 1.1.1.2 christos CRYPTO_memcmp: 314 1.1.1.2 christos .L_CRYPTO_memcmp_begin: 315 1.1.1.2 christos pushl %esi 316 1.1.1.2 christos pushl %edi 317 1.1.1.2 christos movl 12(%esp),%esi 318 1.1.1.2 christos movl 16(%esp),%edi 319 1.1.1.2 christos movl 20(%esp),%ecx 320 1.1.1.2 christos xorl %eax,%eax 321 1.1.1.2 christos xorl %edx,%edx 322 1.1.1.2 christos cmpl $0,%ecx 323 1.1.1.2 christos je .L023no_data 324 1.1.1.2 christos .L024loop: 325 1.1.1.2 christos movb (%esi),%dl 326 1.1.1.2 christos leal 1(%esi),%esi 327 1.1.1.2 christos xorb (%edi),%dl 328 1.1.1.2 christos leal 1(%edi),%edi 329 1.1.1.2 christos orb %dl,%al 330 1.1.1.2 christos decl %ecx 331 1.1.1.2 christos jnz .L024loop 332 1.1.1.2 christos negl %eax 333 1.1.1.2 christos shrl $31,%eax 334 1.1.1.2 christos .L023no_data: 335 1.1.1.2 christos popl %edi 336 1.1.1.2 christos popl %esi 337 1.1.1.2 christos ret 338 1.1.1.2 christos .size CRYPTO_memcmp,.-.L_CRYPTO_memcmp_begin 339 1.1.1.2 christos .globl OPENSSL_instrument_bus 340 1.1.1.2 christos .type OPENSSL_instrument_bus,@function 341 1.1.1.2 christos .align 16 342 1.1.1.2 christos OPENSSL_instrument_bus: 343 1.1.1.2 christos .L_OPENSSL_instrument_bus_begin: 344 1.1.1.2 christos pushl %ebp 345 1.1.1.2 christos pushl %ebx 346 1.1.1.2 christos pushl %esi 347 1.1.1.2 christos pushl %edi 348 1.1.1.2 christos movl $0,%eax 349 1.1.1.2 christos call .L025PIC_me_up 350 1.1.1.2 christos .L025PIC_me_up: 351 1.1.1.2 christos popl %edx 352 1.1.1.2 christos leal OPENSSL_ia32cap_P-.L025PIC_me_up(%edx),%edx 353 1.1.1.2 christos btl $4,(%edx) 354 1.1.1.2 christos jnc .L026nogo 355 1.1.1.2 christos btl $19,(%edx) 356 1.1.1.2 christos jnc .L026nogo 357 1.1.1.2 christos movl 20(%esp),%edi 358 1.1.1.2 christos movl 24(%esp),%ecx 359 1.1.1.2 christos .byte 0x0f,0x31 360 1.1.1.2 christos movl %eax,%esi 361 1.1.1.2 christos movl $0,%ebx 362 1.1.1.2 christos clflush (%edi) 363 1.1.1.2 christos .byte 240 364 1.1.1.2 christos addl %ebx,(%edi) 365 1.1.1.2 christos jmp .L027loop 366 1.1.1.2 christos .align 16 367 1.1.1.2 christos .L027loop: 368 1.1.1.2 christos .byte 0x0f,0x31 369 1.1.1.2 christos movl %eax,%edx 370 1.1.1.2 christos subl %esi,%eax 371 1.1.1.2 christos movl %edx,%esi 372 1.1.1.2 christos movl %eax,%ebx 373 1.1.1.2 christos clflush (%edi) 374 1.1.1.2 christos .byte 240 375 1.1.1.2 christos addl %eax,(%edi) 376 1.1.1.2 christos leal 4(%edi),%edi 377 1.1.1.2 christos subl $1,%ecx 378 1.1.1.2 christos jnz .L027loop 379 1.1.1.2 christos movl 24(%esp),%eax 380 1.1.1.2 christos .L026nogo: 381 1.1.1.2 christos popl %edi 382 1.1.1.2 christos popl %esi 383 1.1.1.2 christos popl %ebx 384 1.1.1.2 christos popl %ebp 385 1.1.1.2 christos ret 386 1.1.1.2 christos .size OPENSSL_instrument_bus,.-.L_OPENSSL_instrument_bus_begin 387 1.1.1.2 christos .globl OPENSSL_instrument_bus2 388 1.1.1.2 christos .type OPENSSL_instrument_bus2,@function 389 1.1 christos .align 16 390 1.1.1.2 christos OPENSSL_instrument_bus2: 391 1.1.1.2 christos .L_OPENSSL_instrument_bus2_begin: 392 1.1.1.2 christos pushl %ebp 393 1.1.1.2 christos pushl %ebx 394 1.1.1.2 christos pushl %esi 395 1.1.1.2 christos pushl %edi 396 1.1.1.2 christos movl $0,%eax 397 1.1.1.2 christos call .L028PIC_me_up 398 1.1.1.2 christos .L028PIC_me_up: 399 1.1.1.2 christos popl %edx 400 1.1.1.2 christos leal OPENSSL_ia32cap_P-.L028PIC_me_up(%edx),%edx 401 1.1.1.2 christos btl $4,(%edx) 402 1.1.1.2 christos jnc .L029nogo 403 1.1.1.2 christos btl $19,(%edx) 404 1.1.1.2 christos jnc .L029nogo 405 1.1.1.2 christos movl 20(%esp),%edi 406 1.1.1.2 christos movl 24(%esp),%ecx 407 1.1.1.2 christos movl 28(%esp),%ebp 408 1.1.1.2 christos .byte 0x0f,0x31 409 1.1.1.2 christos movl %eax,%esi 410 1.1.1.2 christos movl $0,%ebx 411 1.1.1.2 christos clflush (%edi) 412 1.1.1.2 christos .byte 240 413 1.1.1.2 christos addl %ebx,(%edi) 414 1.1.1.2 christos .byte 0x0f,0x31 415 1.1.1.2 christos movl %eax,%edx 416 1.1.1.2 christos subl %esi,%eax 417 1.1.1.2 christos movl %edx,%esi 418 1.1.1.2 christos movl %eax,%ebx 419 1.1.1.2 christos jmp .L030loop2 420 1.1.1.2 christos .align 16 421 1.1.1.2 christos .L030loop2: 422 1.1.1.2 christos clflush (%edi) 423 1.1.1.2 christos .byte 240 424 1.1.1.2 christos addl %eax,(%edi) 425 1.1.1.2 christos subl $1,%ebp 426 1.1.1.2 christos jz .L031done2 427 1.1.1.2 christos .byte 0x0f,0x31 428 1.1.1.2 christos movl %eax,%edx 429 1.1.1.2 christos subl %esi,%eax 430 1.1.1.2 christos movl %edx,%esi 431 1.1.1.2 christos cmpl %ebx,%eax 432 1.1.1.2 christos movl %eax,%ebx 433 1.1.1.2 christos movl $0,%edx 434 1.1.1.2 christos setne %dl 435 1.1.1.2 christos subl %edx,%ecx 436 1.1.1.2 christos leal (%edi,%edx,4),%edi 437 1.1.1.2 christos jnz .L030loop2 438 1.1.1.2 christos .L031done2: 439 1.1.1.2 christos movl 24(%esp),%eax 440 1.1.1.2 christos subl %ecx,%eax 441 1.1.1.2 christos .L029nogo: 442 1.1.1.2 christos popl %edi 443 1.1.1.2 christos popl %esi 444 1.1.1.2 christos popl %ebx 445 1.1.1.2 christos popl %ebp 446 1.1.1.2 christos ret 447 1.1.1.2 christos .size OPENSSL_instrument_bus2,.-.L_OPENSSL_instrument_bus2_begin 448 1.1.1.2 christos .globl OPENSSL_ia32_rdrand_bytes 449 1.1.1.2 christos .type OPENSSL_ia32_rdrand_bytes,@function 450 1.1.1.2 christos .align 16 451 1.1.1.2 christos OPENSSL_ia32_rdrand_bytes: 452 1.1.1.2 christos .L_OPENSSL_ia32_rdrand_bytes_begin: 453 1.1.1.2 christos pushl %edi 454 1.1.1.2 christos pushl %ebx 455 1.1.1.2 christos xorl %eax,%eax 456 1.1.1.2 christos movl 12(%esp),%edi 457 1.1.1.2 christos movl 16(%esp),%ebx 458 1.1.1.2 christos cmpl $0,%ebx 459 1.1.1.2 christos je .L032done 460 1.1.1.2 christos movl $8,%ecx 461 1.1.1.2 christos .L033loop: 462 1.1.1.2 christos .byte 15,199,242 463 1.1.1.2 christos jc .L034break 464 1.1.1.2 christos loop .L033loop 465 1.1.1.2 christos jmp .L032done 466 1.1.1.2 christos .align 16 467 1.1.1.2 christos .L034break: 468 1.1.1.2 christos cmpl $4,%ebx 469 1.1.1.2 christos jb .L035tail 470 1.1.1.2 christos movl %edx,(%edi) 471 1.1.1.2 christos leal 4(%edi),%edi 472 1.1.1.2 christos addl $4,%eax 473 1.1.1.2 christos subl $4,%ebx 474 1.1.1.2 christos jz .L032done 475 1.1 christos movl $8,%ecx 476 1.1.1.2 christos jmp .L033loop 477 1.1 christos .align 16 478 1.1.1.2 christos .L035tail: 479 1.1.1.2 christos movb %dl,(%edi) 480 1.1.1.2 christos leal 1(%edi),%edi 481 1.1.1.2 christos incl %eax 482 1.1.1.2 christos shrl $8,%edx 483 1.1.1.2 christos decl %ebx 484 1.1.1.2 christos jnz .L035tail 485 1.1.1.2 christos .L032done: 486 1.1.1.2 christos xorl %edx,%edx 487 1.1.1.2 christos popl %ebx 488 1.1.1.2 christos popl %edi 489 1.1.1.2 christos ret 490 1.1.1.2 christos .size OPENSSL_ia32_rdrand_bytes,.-.L_OPENSSL_ia32_rdrand_bytes_begin 491 1.1.1.2 christos .globl OPENSSL_ia32_rdseed_bytes 492 1.1.1.2 christos .type OPENSSL_ia32_rdseed_bytes,@function 493 1.1.1.2 christos .align 16 494 1.1.1.2 christos OPENSSL_ia32_rdseed_bytes: 495 1.1.1.2 christos .L_OPENSSL_ia32_rdseed_bytes_begin: 496 1.1.1.2 christos pushl %edi 497 1.1.1.2 christos pushl %ebx 498 1.1.1.2 christos xorl %eax,%eax 499 1.1.1.2 christos movl 12(%esp),%edi 500 1.1.1.2 christos movl 16(%esp),%ebx 501 1.1.1.2 christos cmpl $0,%ebx 502 1.1.1.2 christos je .L036done 503 1.1 christos movl $8,%ecx 504 1.1.1.2 christos .L037loop: 505 1.1.1.2 christos .byte 15,199,250 506 1.1.1.2 christos jc .L038break 507 1.1.1.2 christos loop .L037loop 508 1.1.1.2 christos jmp .L036done 509 1.1.1.2 christos .align 16 510 1.1.1.2 christos .L038break: 511 1.1.1.2 christos cmpl $4,%ebx 512 1.1.1.2 christos jb .L039tail 513 1.1.1.2 christos movl %edx,(%edi) 514 1.1.1.2 christos leal 4(%edi),%edi 515 1.1.1.2 christos addl $4,%eax 516 1.1.1.2 christos subl $4,%ebx 517 1.1.1.2 christos jz .L036done 518 1.1.1.2 christos movl $8,%ecx 519 1.1.1.2 christos jmp .L037loop 520 1.1.1.2 christos .align 16 521 1.1.1.2 christos .L039tail: 522 1.1.1.2 christos movb %dl,(%edi) 523 1.1.1.2 christos leal 1(%edi),%edi 524 1.1.1.2 christos incl %eax 525 1.1.1.2 christos shrl $8,%edx 526 1.1.1.2 christos decl %ebx 527 1.1.1.2 christos jnz .L039tail 528 1.1.1.2 christos .L036done: 529 1.1.1.2 christos xorl %edx,%edx 530 1.1.1.2 christos popl %ebx 531 1.1.1.2 christos popl %edi 532 1.1 christos ret 533 1.1.1.2 christos .size OPENSSL_ia32_rdseed_bytes,.-.L_OPENSSL_ia32_rdseed_bytes_begin 534 1.1 christos .hidden OPENSSL_cpuid_setup 535 1.1 christos .hidden OPENSSL_ia32cap_P 536 1.1 christos .comm OPENSSL_ia32cap_P,16,4 537 1.1 christos .section .init 538 1.1 christos PIC_PROLOGUE 539 1.1 christos call PIC_PLT(OPENSSL_cpuid_setup) 540 1.1 christos PIC_EPILOGUE 541