1/* $FreeBSD$ */ 2/* Do not modify. This file is auto-generated from x86_64cpuid.pl. */ 3 4.hidden OPENSSL_cpuid_setup 5.section .init 6 call OPENSSL_cpuid_setup 7 8.hidden OPENSSL_ia32cap_P 9.comm OPENSSL_ia32cap_P,16,4 10 11.text 12 13.globl OPENSSL_atomic_add 14.type OPENSSL_atomic_add,@function 15.align 16 16OPENSSL_atomic_add: 17 movl (%rdi),%eax 18.Lspin: leaq (%rsi,%rax,1),%r8 19.byte 0xf0 20 cmpxchgl %r8d,(%rdi) 21 jne .Lspin 22 movl %r8d,%eax 23.byte 0x48,0x98 24 .byte 0xf3,0xc3 25.size OPENSSL_atomic_add,.-OPENSSL_atomic_add 26 27.globl OPENSSL_rdtsc 28.type OPENSSL_rdtsc,@function 29.align 16 30OPENSSL_rdtsc: 31 rdtsc 32 shlq $32,%rdx 33 orq %rdx,%rax 34 .byte 0xf3,0xc3 35.size OPENSSL_rdtsc,.-OPENSSL_rdtsc 36 37.globl OPENSSL_ia32_cpuid 38.type OPENSSL_ia32_cpuid,@function 39.align 16 40OPENSSL_ia32_cpuid: 41.cfi_startproc 42 movq %rbx,%r8 43.cfi_register %rbx,%r8 44 45 xorl %eax,%eax 46 movq %rax,8(%rdi) 47 cpuid 48 movl %eax,%r11d 49 50 xorl %eax,%eax 51 cmpl $0x756e6547,%ebx 52 setne %al 53 movl %eax,%r9d 54 cmpl $0x49656e69,%edx 55 setne %al 56 orl %eax,%r9d 57 cmpl $0x6c65746e,%ecx 58 setne %al 59 orl %eax,%r9d 60 jz .Lintel 61 62 cmpl $0x68747541,%ebx 63 setne %al 64 movl %eax,%r10d 65 cmpl $0x69746E65,%edx 66 setne %al 67 orl %eax,%r10d 68 cmpl $0x444D4163,%ecx 69 setne %al 70 orl %eax,%r10d 71 jnz .Lintel 72 73 74 movl $0x80000000,%eax 75 cpuid 76 cmpl $0x80000001,%eax 77 jb .Lintel 78 movl %eax,%r10d 79 movl $0x80000001,%eax 80 cpuid 81 orl %ecx,%r9d 82 andl $0x00000801,%r9d 83 84 cmpl $0x80000008,%r10d 85 jb .Lintel 86 87 movl $0x80000008,%eax 88 cpuid 89 movzbq %cl,%r10 90 incq %r10 91 92 movl $1,%eax 93 cpuid 94 btl $28,%edx 95 jnc .Lgeneric 96 shrl $16,%ebx 97 cmpb %r10b,%bl 98 ja .Lgeneric 99 andl $0xefffffff,%edx 100 jmp .Lgeneric 101 102.Lintel: 103 cmpl $4,%r11d 104 movl $-1,%r10d 105 jb .Lnocacheinfo 106 107 movl $4,%eax 108 movl $0,%ecx 109 cpuid 110 movl %eax,%r10d 111 shrl $14,%r10d 112 andl $0xfff,%r10d 113 114.Lnocacheinfo: 115 movl $1,%eax 116 cpuid 117 movd %eax,%xmm0 118 andl $0xbfefffff,%edx 119 cmpl $0,%r9d 120 jne .Lnotintel 121 orl $0x40000000,%edx 122 andb $15,%ah 123 cmpb $15,%ah 124 jne .LnotP4 125 orl $0x00100000,%edx 126.LnotP4: 127 cmpb $6,%ah 128 jne .Lnotintel 129 andl $0x0fff0ff0,%eax 130 cmpl $0x00050670,%eax 131 je .Lknights 132 cmpl $0x00080650,%eax 133 jne .Lnotintel 134.Lknights: 135 andl $0xfbffffff,%ecx 136 137.Lnotintel: 138 btl $28,%edx 139 jnc .Lgeneric 140 andl $0xefffffff,%edx 141 cmpl $0,%r10d 142 je .Lgeneric 143 144 orl $0x10000000,%edx 145 shrl $16,%ebx 146 cmpb $1,%bl 147 ja .Lgeneric 148 andl $0xefffffff,%edx 149.Lgeneric: 150 andl $0x00000800,%r9d 151 andl $0xfffff7ff,%ecx 152 orl %ecx,%r9d 153 154 movl %edx,%r10d 155 156 cmpl $7,%r11d 157 jb .Lno_extended_info 158 movl $7,%eax 159 xorl %ecx,%ecx 160 cpuid 161 btl $26,%r9d 162 jc .Lnotknights 163 andl $0xfff7ffff,%ebx 164.Lnotknights: 165 movd %xmm0,%eax 166 andl $0x0fff0ff0,%eax 167 cmpl $0x00050650,%eax 168 jne .Lnotskylakex 169 andl $0xfffeffff,%ebx 170 171.Lnotskylakex: 172 movl %ebx,8(%rdi) 173 movl %ecx,12(%rdi) 174.Lno_extended_info: 175 176 btl $27,%r9d 177 jnc .Lclear_avx 178 xorl %ecx,%ecx 179.byte 0x0f,0x01,0xd0 180 andl $0xe6,%eax 181 cmpl $0xe6,%eax 182 je .Ldone 183 andl $0x3fdeffff,8(%rdi) 184 185 186 187 188 andl $6,%eax 189 cmpl $6,%eax 190 je .Ldone 191.Lclear_avx: 192 movl $0xefffe7ff,%eax 193 andl %eax,%r9d 194 movl $0x3fdeffdf,%eax 195 andl %eax,8(%rdi) 196.Ldone: 197 shlq $32,%r9 198 movl %r10d,%eax 199 movq %r8,%rbx 200.cfi_restore %rbx 201 orq %r9,%rax 202 .byte 0xf3,0xc3 203.cfi_endproc 204.size OPENSSL_ia32_cpuid,.-OPENSSL_ia32_cpuid 205 206.globl OPENSSL_cleanse 207.type OPENSSL_cleanse,@function 208.align 16 209OPENSSL_cleanse: 210 xorq %rax,%rax 211 cmpq $15,%rsi 212 jae .Lot 213 cmpq $0,%rsi 214 je .Lret 215.Little: 216 movb %al,(%rdi) 217 subq $1,%rsi 218 leaq 1(%rdi),%rdi 219 jnz .Little 220.Lret: 221 .byte 0xf3,0xc3 222.align 16 223.Lot: 224 testq $7,%rdi 225 jz .Laligned 226 movb %al,(%rdi) 227 leaq -1(%rsi),%rsi 228 leaq 1(%rdi),%rdi 229 jmp .Lot 230.Laligned: 231 movq %rax,(%rdi) 232 leaq -8(%rsi),%rsi 233 testq $-8,%rsi 234 leaq 8(%rdi),%rdi 235 jnz .Laligned 236 cmpq $0,%rsi 237 jne .Little 238 .byte 0xf3,0xc3 239.size OPENSSL_cleanse,.-OPENSSL_cleanse 240 241.globl CRYPTO_memcmp 242.type CRYPTO_memcmp,@function 243.align 16 244CRYPTO_memcmp: 245 xorq %rax,%rax 246 xorq %r10,%r10 247 cmpq $0,%rdx 248 je .Lno_data 249 cmpq $16,%rdx 250 jne .Loop_cmp 251 movq (%rdi),%r10 252 movq 8(%rdi),%r11 253 movq $1,%rdx 254 xorq (%rsi),%r10 255 xorq 8(%rsi),%r11 256 orq %r11,%r10 257 cmovnzq %rdx,%rax 258 .byte 0xf3,0xc3 259 260.align 16 261.Loop_cmp: 262 movb (%rdi),%r10b 263 leaq 1(%rdi),%rdi 264 xorb (%rsi),%r10b 265 leaq 1(%rsi),%rsi 266 orb %r10b,%al 267 decq %rdx 268 jnz .Loop_cmp 269 negq %rax 270 shrq $63,%rax 271.Lno_data: 272 .byte 0xf3,0xc3 273.size CRYPTO_memcmp,.-CRYPTO_memcmp 274.globl OPENSSL_wipe_cpu 275.type OPENSSL_wipe_cpu,@function 276.align 16 277OPENSSL_wipe_cpu: 278 pxor %xmm0,%xmm0 279 pxor %xmm1,%xmm1 280 pxor %xmm2,%xmm2 281 pxor %xmm3,%xmm3 282 pxor %xmm4,%xmm4 283 pxor %xmm5,%xmm5 284 pxor %xmm6,%xmm6 285 pxor %xmm7,%xmm7 286 pxor %xmm8,%xmm8 287 pxor %xmm9,%xmm9 288 pxor %xmm10,%xmm10 289 pxor %xmm11,%xmm11 290 pxor %xmm12,%xmm12 291 pxor %xmm13,%xmm13 292 pxor %xmm14,%xmm14 293 pxor %xmm15,%xmm15 294 xorq %rcx,%rcx 295 xorq %rdx,%rdx 296 xorq %rsi,%rsi 297 xorq %rdi,%rdi 298 xorq %r8,%r8 299 xorq %r9,%r9 300 xorq %r10,%r10 301 xorq %r11,%r11 302 leaq 8(%rsp),%rax 303 .byte 0xf3,0xc3 304.size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu 305.globl OPENSSL_instrument_bus 306.type OPENSSL_instrument_bus,@function 307.align 16 308OPENSSL_instrument_bus: 309 movq %rdi,%r10 310 movq %rsi,%rcx 311 movq %rsi,%r11 312 313 rdtsc 314 movl %eax,%r8d 315 movl $0,%r9d 316 clflush (%r10) 317.byte 0xf0 318 addl %r9d,(%r10) 319 jmp .Loop 320.align 16 321.Loop: rdtsc 322 movl %eax,%edx 323 subl %r8d,%eax 324 movl %edx,%r8d 325 movl %eax,%r9d 326 clflush (%r10) 327.byte 0xf0 328 addl %eax,(%r10) 329 leaq 4(%r10),%r10 330 subq $1,%rcx 331 jnz .Loop 332 333 movq %r11,%rax 334 .byte 0xf3,0xc3 335.size OPENSSL_instrument_bus,.-OPENSSL_instrument_bus 336 337.globl OPENSSL_instrument_bus2 338.type OPENSSL_instrument_bus2,@function 339.align 16 340OPENSSL_instrument_bus2: 341 movq %rdi,%r10 342 movq %rsi,%rcx 343 movq %rdx,%r11 344 movq %rcx,8(%rsp) 345 346 rdtsc 347 movl %eax,%r8d 348 movl $0,%r9d 349 350 clflush (%r10) 351.byte 0xf0 352 addl %r9d,(%r10) 353 354 rdtsc 355 movl %eax,%edx 356 subl %r8d,%eax 357 movl %edx,%r8d 358 movl %eax,%r9d 359.Loop2: 360 clflush (%r10) 361.byte 0xf0 362 addl %eax,(%r10) 363 364 subq $1,%r11 365 jz .Ldone2 366 367 rdtsc 368 movl %eax,%edx 369 subl %r8d,%eax 370 movl %edx,%r8d 371 cmpl %r9d,%eax 372 movl %eax,%r9d 373 movl $0,%edx 374 setne %dl 375 subq %rdx,%rcx 376 leaq (%r10,%rdx,4),%r10 377 jnz .Loop2 378 379.Ldone2: 380 movq 8(%rsp),%rax 381 subq %rcx,%rax 382 .byte 0xf3,0xc3 383.size OPENSSL_instrument_bus2,.-OPENSSL_instrument_bus2 384.globl OPENSSL_ia32_rdrand_bytes 385.type OPENSSL_ia32_rdrand_bytes,@function 386.align 16 387OPENSSL_ia32_rdrand_bytes: 388 xorq %rax,%rax 389 cmpq $0,%rsi 390 je .Ldone_rdrand_bytes 391 392 movq $8,%r11 393.Loop_rdrand_bytes: 394.byte 73,15,199,242 395 jc .Lbreak_rdrand_bytes 396 decq %r11 397 jnz .Loop_rdrand_bytes 398 jmp .Ldone_rdrand_bytes 399 400.align 16 401.Lbreak_rdrand_bytes: 402 cmpq $8,%rsi 403 jb .Ltail_rdrand_bytes 404 movq %r10,(%rdi) 405 leaq 8(%rdi),%rdi 406 addq $8,%rax 407 subq $8,%rsi 408 jz .Ldone_rdrand_bytes 409 movq $8,%r11 410 jmp .Loop_rdrand_bytes 411 412.align 16 413.Ltail_rdrand_bytes: 414 movb %r10b,(%rdi) 415 leaq 1(%rdi),%rdi 416 incq %rax 417 shrq $8,%r10 418 decq %rsi 419 jnz .Ltail_rdrand_bytes 420 421.Ldone_rdrand_bytes: 422 xorq %r10,%r10 423 .byte 0xf3,0xc3 424.size OPENSSL_ia32_rdrand_bytes,.-OPENSSL_ia32_rdrand_bytes 425.globl OPENSSL_ia32_rdseed_bytes 426.type OPENSSL_ia32_rdseed_bytes,@function 427.align 16 428OPENSSL_ia32_rdseed_bytes: 429 xorq %rax,%rax 430 cmpq $0,%rsi 431 je .Ldone_rdseed_bytes 432 433 movq $8,%r11 434.Loop_rdseed_bytes: 435.byte 73,15,199,250 436 jc .Lbreak_rdseed_bytes 437 decq %r11 438 jnz .Loop_rdseed_bytes 439 jmp .Ldone_rdseed_bytes 440 441.align 16 442.Lbreak_rdseed_bytes: 443 cmpq $8,%rsi 444 jb .Ltail_rdseed_bytes 445 movq %r10,(%rdi) 446 leaq 8(%rdi),%rdi 447 addq $8,%rax 448 subq $8,%rsi 449 jz .Ldone_rdseed_bytes 450 movq $8,%r11 451 jmp .Loop_rdseed_bytes 452 453.align 16 454.Ltail_rdseed_bytes: 455 movb %r10b,(%rdi) 456 leaq 1(%rdi),%rdi 457 incq %rax 458 shrq $8,%r10 459 decq %rsi 460 jnz .Ltail_rdseed_bytes 461 462.Ldone_rdseed_bytes: 463 xorq %r10,%r10 464 .byte 0xf3,0xc3 465.size OPENSSL_ia32_rdseed_bytes,.-OPENSSL_ia32_rdseed_bytes 466