x86_64cpuid.S revision 325335
1/* $FreeBSD: stable/11/secure/lib/libcrypto/amd64/x86_64cpuid.S 325335 2017-11-02 18:22:53Z jkim $ */ 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 movq %rbx,%r8 42 43 xorl %eax,%eax 44 movl %eax,8(%rdi) 45 cpuid 46 movl %eax,%r11d 47 48 xorl %eax,%eax 49 cmpl $0x756e6547,%ebx 50 setne %al 51 movl %eax,%r9d 52 cmpl $0x49656e69,%edx 53 setne %al 54 orl %eax,%r9d 55 cmpl $0x6c65746e,%ecx 56 setne %al 57 orl %eax,%r9d 58 jz .Lintel 59 60 cmpl $0x68747541,%ebx 61 setne %al 62 movl %eax,%r10d 63 cmpl $0x69746E65,%edx 64 setne %al 65 orl %eax,%r10d 66 cmpl $0x444D4163,%ecx 67 setne %al 68 orl %eax,%r10d 69 jnz .Lintel 70 71 72 movl $0x80000000,%eax 73 cpuid 74 cmpl $0x80000001,%eax 75 jb .Lintel 76 movl %eax,%r10d 77 movl $0x80000001,%eax 78 cpuid 79 orl %ecx,%r9d 80 andl $0x00000801,%r9d 81 82 cmpl $0x80000008,%r10d 83 jb .Lintel 84 85 movl $0x80000008,%eax 86 cpuid 87 movzbq %cl,%r10 88 incq %r10 89 90 movl $1,%eax 91 cpuid 92 btl $28,%edx 93 jnc .Lgeneric 94 shrl $16,%ebx 95 cmpb %r10b,%bl 96 ja .Lgeneric 97 andl $0xefffffff,%edx 98 jmp .Lgeneric 99 100.Lintel: 101 cmpl $4,%r11d 102 movl $-1,%r10d 103 jb .Lnocacheinfo 104 105 movl $4,%eax 106 movl $0,%ecx 107 cpuid 108 movl %eax,%r10d 109 shrl $14,%r10d 110 andl $0xfff,%r10d 111 112.Lnocacheinfo: 113 movl $1,%eax 114 cpuid 115 andl $0xbfefffff,%edx 116 cmpl $0,%r9d 117 jne .Lnotintel 118 orl $0x40000000,%edx 119 andb $15,%ah 120 cmpb $15,%ah 121 jne .Lnotintel 122 orl $0x00100000,%edx 123.Lnotintel: 124 btl $28,%edx 125 jnc .Lgeneric 126 andl $0xefffffff,%edx 127 cmpl $0,%r10d 128 je .Lgeneric 129 130 orl $0x10000000,%edx 131 shrl $16,%ebx 132 cmpb $1,%bl 133 ja .Lgeneric 134 andl $0xefffffff,%edx 135.Lgeneric: 136 andl $0x00000800,%r9d 137 andl $0xfffff7ff,%ecx 138 orl %ecx,%r9d 139 140 movl %edx,%r10d 141 142 cmpl $7,%r11d 143 jb .Lno_extended_info 144 movl $7,%eax 145 xorl %ecx,%ecx 146 cpuid 147 movl %ebx,8(%rdi) 148.Lno_extended_info: 149 150 btl $27,%r9d 151 jnc .Lclear_avx 152 xorl %ecx,%ecx 153.byte 0x0f,0x01,0xd0 154 andl $6,%eax 155 cmpl $6,%eax 156 je .Ldone 157.Lclear_avx: 158 movl $0xefffe7ff,%eax 159 andl %eax,%r9d 160 andl $0xffffffdf,8(%rdi) 161.Ldone: 162 shlq $32,%r9 163 movl %r10d,%eax 164 movq %r8,%rbx 165 orq %r9,%rax 166 .byte 0xf3,0xc3 167.size OPENSSL_ia32_cpuid,.-OPENSSL_ia32_cpuid 168 169.globl OPENSSL_cleanse 170.type OPENSSL_cleanse,@function 171.align 16 172OPENSSL_cleanse: 173 xorq %rax,%rax 174 cmpq $15,%rsi 175 jae .Lot 176 cmpq $0,%rsi 177 je .Lret 178.Little: 179 movb %al,(%rdi) 180 subq $1,%rsi 181 leaq 1(%rdi),%rdi 182 jnz .Little 183.Lret: 184 .byte 0xf3,0xc3 185.align 16 186.Lot: 187 testq $7,%rdi 188 jz .Laligned 189 movb %al,(%rdi) 190 leaq -1(%rsi),%rsi 191 leaq 1(%rdi),%rdi 192 jmp .Lot 193.Laligned: 194 movq %rax,(%rdi) 195 leaq -8(%rsi),%rsi 196 testq $-8,%rsi 197 leaq 8(%rdi),%rdi 198 jnz .Laligned 199 cmpq $0,%rsi 200 jne .Little 201 .byte 0xf3,0xc3 202.size OPENSSL_cleanse,.-OPENSSL_cleanse 203.globl OPENSSL_wipe_cpu 204.type OPENSSL_wipe_cpu,@function 205.align 16 206OPENSSL_wipe_cpu: 207 pxor %xmm0,%xmm0 208 pxor %xmm1,%xmm1 209 pxor %xmm2,%xmm2 210 pxor %xmm3,%xmm3 211 pxor %xmm4,%xmm4 212 pxor %xmm5,%xmm5 213 pxor %xmm6,%xmm6 214 pxor %xmm7,%xmm7 215 pxor %xmm8,%xmm8 216 pxor %xmm9,%xmm9 217 pxor %xmm10,%xmm10 218 pxor %xmm11,%xmm11 219 pxor %xmm12,%xmm12 220 pxor %xmm13,%xmm13 221 pxor %xmm14,%xmm14 222 pxor %xmm15,%xmm15 223 xorq %rcx,%rcx 224 xorq %rdx,%rdx 225 xorq %rsi,%rsi 226 xorq %rdi,%rdi 227 xorq %r8,%r8 228 xorq %r9,%r9 229 xorq %r10,%r10 230 xorq %r11,%r11 231 leaq 8(%rsp),%rax 232 .byte 0xf3,0xc3 233.size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu 234.globl OPENSSL_ia32_rdrand 235.type OPENSSL_ia32_rdrand,@function 236.align 16 237OPENSSL_ia32_rdrand: 238 movl $8,%ecx 239.Loop_rdrand: 240.byte 72,15,199,240 241 jc .Lbreak_rdrand 242 loop .Loop_rdrand 243.Lbreak_rdrand: 244 cmpq $0,%rax 245 cmoveq %rcx,%rax 246 .byte 0xf3,0xc3 247.size OPENSSL_ia32_rdrand,.-OPENSSL_ia32_rdrand 248 249.globl OPENSSL_ia32_rdseed 250.type OPENSSL_ia32_rdseed,@function 251.align 16 252OPENSSL_ia32_rdseed: 253 movl $8,%ecx 254.Loop_rdseed: 255.byte 72,15,199,248 256 jc .Lbreak_rdseed 257 loop .Loop_rdseed 258.Lbreak_rdseed: 259 cmpq $0,%rax 260 cmoveq %rcx,%rax 261 .byte 0xf3,0xc3 262.size OPENSSL_ia32_rdseed,.-OPENSSL_ia32_rdseed 263