1305153Sjkim/* $FreeBSD: stable/11/secure/lib/libcrypto/i386/x86cpuid.S 325335 2017-11-02 18:22:53Z jkim $ */ 2305153Sjkim/* Do not modify. This file is auto-generated from x86cpuid.pl. */ 3299389Sjkim#ifdef PIC 4299389Sjkim.file "x86cpuid.S" 5238405Sjkim.text 6238405Sjkim.globl OPENSSL_ia32_cpuid 7238405Sjkim.type OPENSSL_ia32_cpuid,@function 8238405Sjkim.align 16 9238405SjkimOPENSSL_ia32_cpuid: 10238405Sjkim.L_OPENSSL_ia32_cpuid_begin: 11238405Sjkim pushl %ebp 12238405Sjkim pushl %ebx 13238405Sjkim pushl %esi 14238405Sjkim pushl %edi 15238405Sjkim xorl %edx,%edx 16238405Sjkim pushfl 17238405Sjkim popl %eax 18238405Sjkim movl %eax,%ecx 19238405Sjkim xorl $2097152,%eax 20238405Sjkim pushl %eax 21238405Sjkim popfl 22238405Sjkim pushfl 23238405Sjkim popl %eax 24238405Sjkim xorl %eax,%ecx 25238405Sjkim xorl %eax,%eax 26325335Sjkim movl 20(%esp),%esi 27325335Sjkim movl %eax,8(%esi) 28238405Sjkim btl $21,%ecx 29238405Sjkim jnc .L000nocpuid 30238405Sjkim .byte 0x0f,0xa2 31238405Sjkim movl %eax,%edi 32238405Sjkim xorl %eax,%eax 33238405Sjkim cmpl $1970169159,%ebx 34238405Sjkim setne %al 35238405Sjkim movl %eax,%ebp 36238405Sjkim cmpl $1231384169,%edx 37238405Sjkim setne %al 38238405Sjkim orl %eax,%ebp 39238405Sjkim cmpl $1818588270,%ecx 40238405Sjkim setne %al 41238405Sjkim orl %eax,%ebp 42238405Sjkim jz .L001intel 43238405Sjkim cmpl $1752462657,%ebx 44238405Sjkim setne %al 45238405Sjkim movl %eax,%esi 46238405Sjkim cmpl $1769238117,%edx 47238405Sjkim setne %al 48238405Sjkim orl %eax,%esi 49238405Sjkim cmpl $1145913699,%ecx 50238405Sjkim setne %al 51238405Sjkim orl %eax,%esi 52238405Sjkim jnz .L001intel 53238405Sjkim movl $2147483648,%eax 54238405Sjkim .byte 0x0f,0xa2 55238405Sjkim cmpl $2147483649,%eax 56238405Sjkim jb .L001intel 57238405Sjkim movl %eax,%esi 58238405Sjkim movl $2147483649,%eax 59238405Sjkim .byte 0x0f,0xa2 60238405Sjkim orl %ecx,%ebp 61238405Sjkim andl $2049,%ebp 62238405Sjkim cmpl $2147483656,%esi 63238405Sjkim jb .L001intel 64238405Sjkim movl $2147483656,%eax 65238405Sjkim .byte 0x0f,0xa2 66238405Sjkim movzbl %cl,%esi 67238405Sjkim incl %esi 68238405Sjkim movl $1,%eax 69261037Sjkim xorl %ecx,%ecx 70238405Sjkim .byte 0x0f,0xa2 71238405Sjkim btl $28,%edx 72238405Sjkim jnc .L002generic 73238405Sjkim shrl $16,%ebx 74238405Sjkim andl $255,%ebx 75238405Sjkim cmpl %esi,%ebx 76238405Sjkim ja .L002generic 77238405Sjkim andl $4026531839,%edx 78238405Sjkim jmp .L002generic 79238405Sjkim.L001intel: 80238405Sjkim cmpl $4,%edi 81325335Sjkim movl $-1,%esi 82325335Sjkim jb .L003nocacheinfo 83238405Sjkim movl $4,%eax 84238405Sjkim movl $0,%ecx 85238405Sjkim .byte 0x0f,0xa2 86325335Sjkim movl %eax,%esi 87325335Sjkim shrl $14,%esi 88325335Sjkim andl $4095,%esi 89325335Sjkim.L003nocacheinfo: 90238405Sjkim movl $1,%eax 91261037Sjkim xorl %ecx,%ecx 92238405Sjkim .byte 0x0f,0xa2 93238405Sjkim andl $3220176895,%edx 94238405Sjkim cmpl $0,%ebp 95325335Sjkim jne .L004notintel 96238405Sjkim orl $1073741824,%edx 97238405Sjkim andb $15,%ah 98238405Sjkim cmpb $15,%ah 99325335Sjkim jne .L004notintel 100238405Sjkim orl $1048576,%edx 101325335Sjkim.L004notintel: 102238405Sjkim btl $28,%edx 103238405Sjkim jnc .L002generic 104238405Sjkim andl $4026531839,%edx 105325335Sjkim cmpl $0,%esi 106238405Sjkim je .L002generic 107238405Sjkim orl $268435456,%edx 108238405Sjkim shrl $16,%ebx 109238405Sjkim cmpb $1,%bl 110238405Sjkim ja .L002generic 111238405Sjkim andl $4026531839,%edx 112238405Sjkim.L002generic: 113238405Sjkim andl $2048,%ebp 114238405Sjkim andl $4294965247,%ecx 115238405Sjkim movl %edx,%esi 116238405Sjkim orl %ecx,%ebp 117325335Sjkim cmpl $7,%edi 118325335Sjkim movl 20(%esp),%edi 119325335Sjkim jb .L005no_extended_info 120325335Sjkim movl $7,%eax 121325335Sjkim xorl %ecx,%ecx 122325335Sjkim .byte 0x0f,0xa2 123325335Sjkim movl %ebx,8(%edi) 124325335Sjkim.L005no_extended_info: 125325335Sjkim btl $27,%ebp 126290207Sjkim jnc .L006clear_avx 127238405Sjkim xorl %ecx,%ecx 128238405Sjkim.byte 15,1,208 129238405Sjkim andl $6,%eax 130238405Sjkim cmpl $6,%eax 131290207Sjkim je .L007done 132238405Sjkim cmpl $2,%eax 133290207Sjkim je .L006clear_avx 134290207Sjkim.L008clear_xmm: 135238405Sjkim andl $4261412861,%ebp 136238405Sjkim andl $4278190079,%esi 137290207Sjkim.L006clear_avx: 138238405Sjkim andl $4026525695,%ebp 139290207Sjkim andl $4294967263,8(%edi) 140290207Sjkim.L007done: 141238405Sjkim movl %esi,%eax 142238405Sjkim movl %ebp,%edx 143238405Sjkim.L000nocpuid: 144238405Sjkim popl %edi 145238405Sjkim popl %esi 146238405Sjkim popl %ebx 147238405Sjkim popl %ebp 148238405Sjkim ret 149238405Sjkim.size OPENSSL_ia32_cpuid,.-.L_OPENSSL_ia32_cpuid_begin 150238405Sjkim.globl OPENSSL_rdtsc 151238405Sjkim.type OPENSSL_rdtsc,@function 152238405Sjkim.align 16 153238405SjkimOPENSSL_rdtsc: 154238405Sjkim.L_OPENSSL_rdtsc_begin: 155238405Sjkim xorl %eax,%eax 156238405Sjkim xorl %edx,%edx 157299389Sjkim call .L009PIC_me_up 158299389Sjkim.L009PIC_me_up: 159299389Sjkim popl %ecx 160299389Sjkim leal OPENSSL_ia32cap_P-.L009PIC_me_up(%ecx),%ecx 161299389Sjkim btl $4,(%ecx) 162299389Sjkim jnc .L010notsc 163299389Sjkim .byte 0x0f,0x31 164299389Sjkim.L010notsc: 165299389Sjkim ret 166299389Sjkim.size OPENSSL_rdtsc,.-.L_OPENSSL_rdtsc_begin 167299389Sjkim.globl OPENSSL_instrument_halt 168299389Sjkim.type OPENSSL_instrument_halt,@function 169299389Sjkim.align 16 170299389SjkimOPENSSL_instrument_halt: 171299389Sjkim.L_OPENSSL_instrument_halt_begin: 172299389Sjkim call .L011PIC_me_up 173299389Sjkim.L011PIC_me_up: 174299389Sjkim popl %ecx 175299389Sjkim leal OPENSSL_ia32cap_P-.L011PIC_me_up(%ecx),%ecx 176299389Sjkim btl $4,(%ecx) 177299389Sjkim jnc .L012nohalt 178299389Sjkim.long 2421723150 179299389Sjkim andl $3,%eax 180299389Sjkim jnz .L012nohalt 181299389Sjkim pushfl 182299389Sjkim popl %eax 183299389Sjkim btl $9,%eax 184299389Sjkim jnc .L012nohalt 185299389Sjkim .byte 0x0f,0x31 186299389Sjkim pushl %edx 187299389Sjkim pushl %eax 188299389Sjkim hlt 189299389Sjkim .byte 0x0f,0x31 190299389Sjkim subl (%esp),%eax 191299389Sjkim sbbl 4(%esp),%edx 192299389Sjkim addl $8,%esp 193299389Sjkim ret 194299389Sjkim.L012nohalt: 195299389Sjkim xorl %eax,%eax 196299389Sjkim xorl %edx,%edx 197299389Sjkim ret 198299389Sjkim.size OPENSSL_instrument_halt,.-.L_OPENSSL_instrument_halt_begin 199299389Sjkim.globl OPENSSL_far_spin 200299389Sjkim.type OPENSSL_far_spin,@function 201299389Sjkim.align 16 202299389SjkimOPENSSL_far_spin: 203299389Sjkim.L_OPENSSL_far_spin_begin: 204299389Sjkim pushfl 205299389Sjkim popl %eax 206299389Sjkim btl $9,%eax 207299389Sjkim jnc .L013nospin 208299389Sjkim movl 4(%esp),%eax 209299389Sjkim movl 8(%esp),%ecx 210299389Sjkim.long 2430111262 211299389Sjkim xorl %eax,%eax 212299389Sjkim movl (%ecx),%edx 213299389Sjkim jmp .L014spin 214299389Sjkim.align 16 215299389Sjkim.L014spin: 216299389Sjkim incl %eax 217299389Sjkim cmpl (%ecx),%edx 218299389Sjkim je .L014spin 219299389Sjkim.long 529567888 220299389Sjkim ret 221299389Sjkim.L013nospin: 222299389Sjkim xorl %eax,%eax 223299389Sjkim xorl %edx,%edx 224299389Sjkim ret 225299389Sjkim.size OPENSSL_far_spin,.-.L_OPENSSL_far_spin_begin 226299389Sjkim.globl OPENSSL_wipe_cpu 227299389Sjkim.type OPENSSL_wipe_cpu,@function 228299389Sjkim.align 16 229299389SjkimOPENSSL_wipe_cpu: 230299389Sjkim.L_OPENSSL_wipe_cpu_begin: 231299389Sjkim xorl %eax,%eax 232299389Sjkim xorl %edx,%edx 233299389Sjkim call .L015PIC_me_up 234299389Sjkim.L015PIC_me_up: 235299389Sjkim popl %ecx 236299389Sjkim leal OPENSSL_ia32cap_P-.L015PIC_me_up(%ecx),%ecx 237299389Sjkim movl (%ecx),%ecx 238299389Sjkim btl $1,(%ecx) 239299389Sjkim jnc .L016no_x87 240299389Sjkim andl $83886080,%ecx 241299389Sjkim cmpl $83886080,%ecx 242299389Sjkim jne .L017no_sse2 243299389Sjkim pxor %xmm0,%xmm0 244299389Sjkim pxor %xmm1,%xmm1 245299389Sjkim pxor %xmm2,%xmm2 246299389Sjkim pxor %xmm3,%xmm3 247299389Sjkim pxor %xmm4,%xmm4 248299389Sjkim pxor %xmm5,%xmm5 249299389Sjkim pxor %xmm6,%xmm6 250299389Sjkim pxor %xmm7,%xmm7 251299389Sjkim.L017no_sse2: 252299389Sjkim.long 4007259865,4007259865,4007259865,4007259865,2430851995 253299389Sjkim.L016no_x87: 254299389Sjkim leal 4(%esp),%eax 255299389Sjkim ret 256299389Sjkim.size OPENSSL_wipe_cpu,.-.L_OPENSSL_wipe_cpu_begin 257299389Sjkim.globl OPENSSL_atomic_add 258299389Sjkim.type OPENSSL_atomic_add,@function 259299389Sjkim.align 16 260299389SjkimOPENSSL_atomic_add: 261299389Sjkim.L_OPENSSL_atomic_add_begin: 262299389Sjkim movl 4(%esp),%edx 263299389Sjkim movl 8(%esp),%ecx 264299389Sjkim pushl %ebx 265299389Sjkim nop 266299389Sjkim movl (%edx),%eax 267299389Sjkim.L018spin: 268299389Sjkim leal (%eax,%ecx,1),%ebx 269299389Sjkim nop 270299389Sjkim.long 447811568 271299389Sjkim jne .L018spin 272299389Sjkim movl %ebx,%eax 273299389Sjkim popl %ebx 274299389Sjkim ret 275299389Sjkim.size OPENSSL_atomic_add,.-.L_OPENSSL_atomic_add_begin 276299389Sjkim.globl OPENSSL_indirect_call 277299389Sjkim.type OPENSSL_indirect_call,@function 278299389Sjkim.align 16 279299389SjkimOPENSSL_indirect_call: 280299389Sjkim.L_OPENSSL_indirect_call_begin: 281299389Sjkim pushl %ebp 282299389Sjkim movl %esp,%ebp 283299389Sjkim subl $28,%esp 284299389Sjkim movl 12(%ebp),%ecx 285299389Sjkim movl %ecx,(%esp) 286299389Sjkim movl 16(%ebp),%edx 287299389Sjkim movl %edx,4(%esp) 288299389Sjkim movl 20(%ebp),%eax 289299389Sjkim movl %eax,8(%esp) 290299389Sjkim movl 24(%ebp),%eax 291299389Sjkim movl %eax,12(%esp) 292299389Sjkim movl 28(%ebp),%eax 293299389Sjkim movl %eax,16(%esp) 294299389Sjkim movl 32(%ebp),%eax 295299389Sjkim movl %eax,20(%esp) 296299389Sjkim movl 36(%ebp),%eax 297299389Sjkim movl %eax,24(%esp) 298299389Sjkim call *8(%ebp) 299299389Sjkim movl %ebp,%esp 300299389Sjkim popl %ebp 301299389Sjkim ret 302299389Sjkim.size OPENSSL_indirect_call,.-.L_OPENSSL_indirect_call_begin 303299389Sjkim.globl OPENSSL_cleanse 304299389Sjkim.type OPENSSL_cleanse,@function 305299389Sjkim.align 16 306299389SjkimOPENSSL_cleanse: 307299389Sjkim.L_OPENSSL_cleanse_begin: 308299389Sjkim movl 4(%esp),%edx 309299389Sjkim movl 8(%esp),%ecx 310299389Sjkim xorl %eax,%eax 311299389Sjkim cmpl $7,%ecx 312299389Sjkim jae .L019lot 313299389Sjkim cmpl $0,%ecx 314299389Sjkim je .L020ret 315299389Sjkim.L021little: 316299389Sjkim movb %al,(%edx) 317299389Sjkim subl $1,%ecx 318299389Sjkim leal 1(%edx),%edx 319299389Sjkim jnz .L021little 320299389Sjkim.L020ret: 321299389Sjkim ret 322299389Sjkim.align 16 323299389Sjkim.L019lot: 324299389Sjkim testl $3,%edx 325299389Sjkim jz .L022aligned 326299389Sjkim movb %al,(%edx) 327299389Sjkim leal -1(%ecx),%ecx 328299389Sjkim leal 1(%edx),%edx 329299389Sjkim jmp .L019lot 330299389Sjkim.L022aligned: 331299389Sjkim movl %eax,(%edx) 332299389Sjkim leal -4(%ecx),%ecx 333299389Sjkim testl $-4,%ecx 334299389Sjkim leal 4(%edx),%edx 335299389Sjkim jnz .L022aligned 336299389Sjkim cmpl $0,%ecx 337299389Sjkim jne .L021little 338299389Sjkim ret 339299389Sjkim.size OPENSSL_cleanse,.-.L_OPENSSL_cleanse_begin 340299389Sjkim.globl OPENSSL_ia32_rdrand 341299389Sjkim.type OPENSSL_ia32_rdrand,@function 342299389Sjkim.align 16 343299389SjkimOPENSSL_ia32_rdrand: 344299389Sjkim.L_OPENSSL_ia32_rdrand_begin: 345299389Sjkim movl $8,%ecx 346299389Sjkim.L023loop: 347299389Sjkim.byte 15,199,240 348299389Sjkim jc .L024break 349299389Sjkim loop .L023loop 350299389Sjkim.L024break: 351299389Sjkim cmpl $0,%eax 352299389Sjkim cmovel %ecx,%eax 353299389Sjkim ret 354299389Sjkim.size OPENSSL_ia32_rdrand,.-.L_OPENSSL_ia32_rdrand_begin 355299389Sjkim.globl OPENSSL_ia32_rdseed 356299389Sjkim.type OPENSSL_ia32_rdseed,@function 357299389Sjkim.align 16 358299389SjkimOPENSSL_ia32_rdseed: 359299389Sjkim.L_OPENSSL_ia32_rdseed_begin: 360299389Sjkim movl $8,%ecx 361299389Sjkim.L025loop: 362299389Sjkim.byte 15,199,248 363299389Sjkim jc .L026break 364299389Sjkim loop .L025loop 365299389Sjkim.L026break: 366299389Sjkim cmpl $0,%eax 367299389Sjkim cmovel %ecx,%eax 368299389Sjkim ret 369299389Sjkim.size OPENSSL_ia32_rdseed,.-.L_OPENSSL_ia32_rdseed_begin 370299389Sjkim.hidden OPENSSL_cpuid_setup 371299389Sjkim.hidden OPENSSL_ia32cap_P 372299389Sjkim.comm OPENSSL_ia32cap_P,16,4 373299389Sjkim.section .init 374299389Sjkim call OPENSSL_cpuid_setup 375299389Sjkim#else 376299389Sjkim.file "x86cpuid.S" 377299389Sjkim.text 378299389Sjkim.globl OPENSSL_ia32_cpuid 379299389Sjkim.type OPENSSL_ia32_cpuid,@function 380299389Sjkim.align 16 381299389SjkimOPENSSL_ia32_cpuid: 382299389Sjkim.L_OPENSSL_ia32_cpuid_begin: 383299389Sjkim pushl %ebp 384299389Sjkim pushl %ebx 385299389Sjkim pushl %esi 386299389Sjkim pushl %edi 387299389Sjkim xorl %edx,%edx 388299389Sjkim pushfl 389299389Sjkim popl %eax 390299389Sjkim movl %eax,%ecx 391299389Sjkim xorl $2097152,%eax 392299389Sjkim pushl %eax 393299389Sjkim popfl 394299389Sjkim pushfl 395299389Sjkim popl %eax 396299389Sjkim xorl %eax,%ecx 397299389Sjkim xorl %eax,%eax 398325335Sjkim movl 20(%esp),%esi 399325335Sjkim movl %eax,8(%esi) 400299389Sjkim btl $21,%ecx 401299389Sjkim jnc .L000nocpuid 402299389Sjkim .byte 0x0f,0xa2 403299389Sjkim movl %eax,%edi 404299389Sjkim xorl %eax,%eax 405299389Sjkim cmpl $1970169159,%ebx 406299389Sjkim setne %al 407299389Sjkim movl %eax,%ebp 408299389Sjkim cmpl $1231384169,%edx 409299389Sjkim setne %al 410299389Sjkim orl %eax,%ebp 411299389Sjkim cmpl $1818588270,%ecx 412299389Sjkim setne %al 413299389Sjkim orl %eax,%ebp 414299389Sjkim jz .L001intel 415299389Sjkim cmpl $1752462657,%ebx 416299389Sjkim setne %al 417299389Sjkim movl %eax,%esi 418299389Sjkim cmpl $1769238117,%edx 419299389Sjkim setne %al 420299389Sjkim orl %eax,%esi 421299389Sjkim cmpl $1145913699,%ecx 422299389Sjkim setne %al 423299389Sjkim orl %eax,%esi 424299389Sjkim jnz .L001intel 425299389Sjkim movl $2147483648,%eax 426299389Sjkim .byte 0x0f,0xa2 427299389Sjkim cmpl $2147483649,%eax 428299389Sjkim jb .L001intel 429299389Sjkim movl %eax,%esi 430299389Sjkim movl $2147483649,%eax 431299389Sjkim .byte 0x0f,0xa2 432299389Sjkim orl %ecx,%ebp 433299389Sjkim andl $2049,%ebp 434299389Sjkim cmpl $2147483656,%esi 435299389Sjkim jb .L001intel 436299389Sjkim movl $2147483656,%eax 437299389Sjkim .byte 0x0f,0xa2 438299389Sjkim movzbl %cl,%esi 439299389Sjkim incl %esi 440299389Sjkim movl $1,%eax 441299389Sjkim xorl %ecx,%ecx 442299389Sjkim .byte 0x0f,0xa2 443299389Sjkim btl $28,%edx 444299389Sjkim jnc .L002generic 445299389Sjkim shrl $16,%ebx 446299389Sjkim andl $255,%ebx 447299389Sjkim cmpl %esi,%ebx 448299389Sjkim ja .L002generic 449299389Sjkim andl $4026531839,%edx 450299389Sjkim jmp .L002generic 451299389Sjkim.L001intel: 452299389Sjkim cmpl $4,%edi 453325335Sjkim movl $-1,%esi 454325335Sjkim jb .L003nocacheinfo 455299389Sjkim movl $4,%eax 456299389Sjkim movl $0,%ecx 457299389Sjkim .byte 0x0f,0xa2 458325335Sjkim movl %eax,%esi 459325335Sjkim shrl $14,%esi 460325335Sjkim andl $4095,%esi 461325335Sjkim.L003nocacheinfo: 462299389Sjkim movl $1,%eax 463299389Sjkim xorl %ecx,%ecx 464299389Sjkim .byte 0x0f,0xa2 465299389Sjkim andl $3220176895,%edx 466299389Sjkim cmpl $0,%ebp 467325335Sjkim jne .L004notintel 468299389Sjkim orl $1073741824,%edx 469299389Sjkim andb $15,%ah 470299389Sjkim cmpb $15,%ah 471325335Sjkim jne .L004notintel 472299389Sjkim orl $1048576,%edx 473325335Sjkim.L004notintel: 474299389Sjkim btl $28,%edx 475299389Sjkim jnc .L002generic 476299389Sjkim andl $4026531839,%edx 477325335Sjkim cmpl $0,%esi 478299389Sjkim je .L002generic 479299389Sjkim orl $268435456,%edx 480299389Sjkim shrl $16,%ebx 481299389Sjkim cmpb $1,%bl 482299389Sjkim ja .L002generic 483299389Sjkim andl $4026531839,%edx 484299389Sjkim.L002generic: 485299389Sjkim andl $2048,%ebp 486299389Sjkim andl $4294965247,%ecx 487299389Sjkim movl %edx,%esi 488299389Sjkim orl %ecx,%ebp 489325335Sjkim cmpl $7,%edi 490325335Sjkim movl 20(%esp),%edi 491325335Sjkim jb .L005no_extended_info 492325335Sjkim movl $7,%eax 493325335Sjkim xorl %ecx,%ecx 494325335Sjkim .byte 0x0f,0xa2 495325335Sjkim movl %ebx,8(%edi) 496325335Sjkim.L005no_extended_info: 497325335Sjkim btl $27,%ebp 498299389Sjkim jnc .L006clear_avx 499299389Sjkim xorl %ecx,%ecx 500299389Sjkim.byte 15,1,208 501299389Sjkim andl $6,%eax 502299389Sjkim cmpl $6,%eax 503299389Sjkim je .L007done 504299389Sjkim cmpl $2,%eax 505299389Sjkim je .L006clear_avx 506299389Sjkim.L008clear_xmm: 507299389Sjkim andl $4261412861,%ebp 508299389Sjkim andl $4278190079,%esi 509299389Sjkim.L006clear_avx: 510299389Sjkim andl $4026525695,%ebp 511299389Sjkim andl $4294967263,8(%edi) 512299389Sjkim.L007done: 513299389Sjkim movl %esi,%eax 514299389Sjkim movl %ebp,%edx 515299389Sjkim.L000nocpuid: 516299389Sjkim popl %edi 517299389Sjkim popl %esi 518299389Sjkim popl %ebx 519299389Sjkim popl %ebp 520299389Sjkim ret 521299389Sjkim.size OPENSSL_ia32_cpuid,.-.L_OPENSSL_ia32_cpuid_begin 522299389Sjkim.globl OPENSSL_rdtsc 523299389Sjkim.type OPENSSL_rdtsc,@function 524299389Sjkim.align 16 525299389SjkimOPENSSL_rdtsc: 526299389Sjkim.L_OPENSSL_rdtsc_begin: 527299389Sjkim xorl %eax,%eax 528299389Sjkim xorl %edx,%edx 529238405Sjkim leal OPENSSL_ia32cap_P,%ecx 530238405Sjkim btl $4,(%ecx) 531290207Sjkim jnc .L009notsc 532238405Sjkim .byte 0x0f,0x31 533290207Sjkim.L009notsc: 534238405Sjkim ret 535238405Sjkim.size OPENSSL_rdtsc,.-.L_OPENSSL_rdtsc_begin 536238405Sjkim.globl OPENSSL_instrument_halt 537238405Sjkim.type OPENSSL_instrument_halt,@function 538238405Sjkim.align 16 539238405SjkimOPENSSL_instrument_halt: 540238405Sjkim.L_OPENSSL_instrument_halt_begin: 541238405Sjkim leal OPENSSL_ia32cap_P,%ecx 542238405Sjkim btl $4,(%ecx) 543290207Sjkim jnc .L010nohalt 544238405Sjkim.long 2421723150 545238405Sjkim andl $3,%eax 546290207Sjkim jnz .L010nohalt 547238405Sjkim pushfl 548238405Sjkim popl %eax 549238405Sjkim btl $9,%eax 550290207Sjkim jnc .L010nohalt 551238405Sjkim .byte 0x0f,0x31 552238405Sjkim pushl %edx 553238405Sjkim pushl %eax 554238405Sjkim hlt 555238405Sjkim .byte 0x0f,0x31 556238405Sjkim subl (%esp),%eax 557238405Sjkim sbbl 4(%esp),%edx 558238405Sjkim addl $8,%esp 559238405Sjkim ret 560290207Sjkim.L010nohalt: 561238405Sjkim xorl %eax,%eax 562238405Sjkim xorl %edx,%edx 563238405Sjkim ret 564238405Sjkim.size OPENSSL_instrument_halt,.-.L_OPENSSL_instrument_halt_begin 565238405Sjkim.globl OPENSSL_far_spin 566238405Sjkim.type OPENSSL_far_spin,@function 567238405Sjkim.align 16 568238405SjkimOPENSSL_far_spin: 569238405Sjkim.L_OPENSSL_far_spin_begin: 570238405Sjkim pushfl 571238405Sjkim popl %eax 572238405Sjkim btl $9,%eax 573290207Sjkim jnc .L011nospin 574238405Sjkim movl 4(%esp),%eax 575238405Sjkim movl 8(%esp),%ecx 576238405Sjkim.long 2430111262 577238405Sjkim xorl %eax,%eax 578238405Sjkim movl (%ecx),%edx 579290207Sjkim jmp .L012spin 580238405Sjkim.align 16 581290207Sjkim.L012spin: 582238405Sjkim incl %eax 583238405Sjkim cmpl (%ecx),%edx 584290207Sjkim je .L012spin 585238405Sjkim.long 529567888 586238405Sjkim ret 587290207Sjkim.L011nospin: 588238405Sjkim xorl %eax,%eax 589238405Sjkim xorl %edx,%edx 590238405Sjkim ret 591238405Sjkim.size OPENSSL_far_spin,.-.L_OPENSSL_far_spin_begin 592238405Sjkim.globl OPENSSL_wipe_cpu 593238405Sjkim.type OPENSSL_wipe_cpu,@function 594238405Sjkim.align 16 595238405SjkimOPENSSL_wipe_cpu: 596238405Sjkim.L_OPENSSL_wipe_cpu_begin: 597238405Sjkim xorl %eax,%eax 598238405Sjkim xorl %edx,%edx 599238405Sjkim leal OPENSSL_ia32cap_P,%ecx 600238405Sjkim movl (%ecx),%ecx 601238405Sjkim btl $1,(%ecx) 602290207Sjkim jnc .L013no_x87 603238405Sjkim andl $83886080,%ecx 604238405Sjkim cmpl $83886080,%ecx 605290207Sjkim jne .L014no_sse2 606238405Sjkim pxor %xmm0,%xmm0 607238405Sjkim pxor %xmm1,%xmm1 608238405Sjkim pxor %xmm2,%xmm2 609238405Sjkim pxor %xmm3,%xmm3 610238405Sjkim pxor %xmm4,%xmm4 611238405Sjkim pxor %xmm5,%xmm5 612238405Sjkim pxor %xmm6,%xmm6 613238405Sjkim pxor %xmm7,%xmm7 614290207Sjkim.L014no_sse2: 615238405Sjkim.long 4007259865,4007259865,4007259865,4007259865,2430851995 616290207Sjkim.L013no_x87: 617238405Sjkim leal 4(%esp),%eax 618238405Sjkim ret 619238405Sjkim.size OPENSSL_wipe_cpu,.-.L_OPENSSL_wipe_cpu_begin 620238405Sjkim.globl OPENSSL_atomic_add 621238405Sjkim.type OPENSSL_atomic_add,@function 622238405Sjkim.align 16 623238405SjkimOPENSSL_atomic_add: 624238405Sjkim.L_OPENSSL_atomic_add_begin: 625238405Sjkim movl 4(%esp),%edx 626238405Sjkim movl 8(%esp),%ecx 627238405Sjkim pushl %ebx 628238405Sjkim nop 629238405Sjkim movl (%edx),%eax 630290207Sjkim.L015spin: 631238405Sjkim leal (%eax,%ecx,1),%ebx 632238405Sjkim nop 633238405Sjkim.long 447811568 634290207Sjkim jne .L015spin 635238405Sjkim movl %ebx,%eax 636238405Sjkim popl %ebx 637238405Sjkim ret 638238405Sjkim.size OPENSSL_atomic_add,.-.L_OPENSSL_atomic_add_begin 639238405Sjkim.globl OPENSSL_indirect_call 640238405Sjkim.type OPENSSL_indirect_call,@function 641238405Sjkim.align 16 642238405SjkimOPENSSL_indirect_call: 643238405Sjkim.L_OPENSSL_indirect_call_begin: 644238405Sjkim pushl %ebp 645238405Sjkim movl %esp,%ebp 646238405Sjkim subl $28,%esp 647238405Sjkim movl 12(%ebp),%ecx 648238405Sjkim movl %ecx,(%esp) 649238405Sjkim movl 16(%ebp),%edx 650238405Sjkim movl %edx,4(%esp) 651238405Sjkim movl 20(%ebp),%eax 652238405Sjkim movl %eax,8(%esp) 653238405Sjkim movl 24(%ebp),%eax 654238405Sjkim movl %eax,12(%esp) 655238405Sjkim movl 28(%ebp),%eax 656238405Sjkim movl %eax,16(%esp) 657238405Sjkim movl 32(%ebp),%eax 658238405Sjkim movl %eax,20(%esp) 659238405Sjkim movl 36(%ebp),%eax 660238405Sjkim movl %eax,24(%esp) 661238405Sjkim call *8(%ebp) 662238405Sjkim movl %ebp,%esp 663238405Sjkim popl %ebp 664238405Sjkim ret 665238405Sjkim.size OPENSSL_indirect_call,.-.L_OPENSSL_indirect_call_begin 666238405Sjkim.globl OPENSSL_cleanse 667238405Sjkim.type OPENSSL_cleanse,@function 668238405Sjkim.align 16 669238405SjkimOPENSSL_cleanse: 670238405Sjkim.L_OPENSSL_cleanse_begin: 671238405Sjkim movl 4(%esp),%edx 672238405Sjkim movl 8(%esp),%ecx 673238405Sjkim xorl %eax,%eax 674238405Sjkim cmpl $7,%ecx 675290207Sjkim jae .L016lot 676238405Sjkim cmpl $0,%ecx 677290207Sjkim je .L017ret 678290207Sjkim.L018little: 679238405Sjkim movb %al,(%edx) 680238405Sjkim subl $1,%ecx 681238405Sjkim leal 1(%edx),%edx 682290207Sjkim jnz .L018little 683290207Sjkim.L017ret: 684238405Sjkim ret 685238405Sjkim.align 16 686290207Sjkim.L016lot: 687238405Sjkim testl $3,%edx 688290207Sjkim jz .L019aligned 689238405Sjkim movb %al,(%edx) 690238405Sjkim leal -1(%ecx),%ecx 691238405Sjkim leal 1(%edx),%edx 692290207Sjkim jmp .L016lot 693290207Sjkim.L019aligned: 694238405Sjkim movl %eax,(%edx) 695238405Sjkim leal -4(%ecx),%ecx 696238405Sjkim testl $-4,%ecx 697238405Sjkim leal 4(%edx),%edx 698290207Sjkim jnz .L019aligned 699238405Sjkim cmpl $0,%ecx 700290207Sjkim jne .L018little 701238405Sjkim ret 702238405Sjkim.size OPENSSL_cleanse,.-.L_OPENSSL_cleanse_begin 703238405Sjkim.globl OPENSSL_ia32_rdrand 704238405Sjkim.type OPENSSL_ia32_rdrand,@function 705238405Sjkim.align 16 706238405SjkimOPENSSL_ia32_rdrand: 707238405Sjkim.L_OPENSSL_ia32_rdrand_begin: 708238405Sjkim movl $8,%ecx 709290207Sjkim.L020loop: 710238405Sjkim.byte 15,199,240 711290207Sjkim jc .L021break 712290207Sjkim loop .L020loop 713290207Sjkim.L021break: 714238405Sjkim cmpl $0,%eax 715238405Sjkim cmovel %ecx,%eax 716238405Sjkim ret 717238405Sjkim.size OPENSSL_ia32_rdrand,.-.L_OPENSSL_ia32_rdrand_begin 718290207Sjkim.globl OPENSSL_ia32_rdseed 719290207Sjkim.type OPENSSL_ia32_rdseed,@function 720290207Sjkim.align 16 721290207SjkimOPENSSL_ia32_rdseed: 722290207Sjkim.L_OPENSSL_ia32_rdseed_begin: 723290207Sjkim movl $8,%ecx 724290207Sjkim.L022loop: 725290207Sjkim.byte 15,199,248 726290207Sjkim jc .L023break 727290207Sjkim loop .L022loop 728290207Sjkim.L023break: 729290207Sjkim cmpl $0,%eax 730290207Sjkim cmovel %ecx,%eax 731290207Sjkim ret 732290207Sjkim.size OPENSSL_ia32_rdseed,.-.L_OPENSSL_ia32_rdseed_begin 733290207Sjkim.hidden OPENSSL_cpuid_setup 734290207Sjkim.hidden OPENSSL_ia32cap_P 735290207Sjkim.comm OPENSSL_ia32cap_P,16,4 736238405Sjkim.section .init 737238405Sjkim call OPENSSL_cpuid_setup 738299389Sjkim#endif 739