x86_64cpuid.S revision 305153
1/* $FreeBSD: stable/11/secure/lib/libcrypto/amd64/x86_64cpuid.S 305153 2016-08-31 20:33:59Z 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 cmpl $7,%r11d 113 jb .Lnocacheinfo 114 115 movl $7,%eax 116 xorl %ecx,%ecx 117 cpuid 118 movl %ebx,8(%rdi) 119 120.Lnocacheinfo: 121 movl $1,%eax 122 cpuid 123 andl $0xbfefffff,%edx 124 cmpl $0,%r9d 125 jne .Lnotintel 126 orl $0x40000000,%edx 127 andb $15,%ah 128 cmpb $15,%ah 129 jne .Lnotintel 130 orl $0x00100000,%edx 131.Lnotintel: 132 btl $28,%edx 133 jnc .Lgeneric 134 andl $0xefffffff,%edx 135 cmpl $0,%r10d 136 je .Lgeneric 137 138 orl $0x10000000,%edx 139 shrl $16,%ebx 140 cmpb $1,%bl 141 ja .Lgeneric 142 andl $0xefffffff,%edx 143.Lgeneric: 144 andl $0x00000800,%r9d 145 andl $0xfffff7ff,%ecx 146 orl %ecx,%r9d 147 148 movl %edx,%r10d 149 btl $27,%r9d 150 jnc .Lclear_avx 151 xorl %ecx,%ecx 152.byte 0x0f,0x01,0xd0 153 andl $6,%eax 154 cmpl $6,%eax 155 je .Ldone 156.Lclear_avx: 157 movl $0xefffe7ff,%eax 158 andl %eax,%r9d 159 andl $0xffffffdf,8(%rdi) 160.Ldone: 161 shlq $32,%r9 162 movl %r10d,%eax 163 movq %r8,%rbx 164 orq %r9,%rax 165 .byte 0xf3,0xc3 166.size OPENSSL_ia32_cpuid,.-OPENSSL_ia32_cpuid 167 168.globl OPENSSL_cleanse 169.type OPENSSL_cleanse,@function 170.align 16 171OPENSSL_cleanse: 172 xorq %rax,%rax 173 cmpq $15,%rsi 174 jae .Lot 175 cmpq $0,%rsi 176 je .Lret 177.Little: 178 movb %al,(%rdi) 179 subq $1,%rsi 180 leaq 1(%rdi),%rdi 181 jnz .Little 182.Lret: 183 .byte 0xf3,0xc3 184.align 16 185.Lot: 186 testq $7,%rdi 187 jz .Laligned 188 movb %al,(%rdi) 189 leaq -1(%rsi),%rsi 190 leaq 1(%rdi),%rdi 191 jmp .Lot 192.Laligned: 193 movq %rax,(%rdi) 194 leaq -8(%rsi),%rsi 195 testq $-8,%rsi 196 leaq 8(%rdi),%rdi 197 jnz .Laligned 198 cmpq $0,%rsi 199 jne .Little 200 .byte 0xf3,0xc3 201.size OPENSSL_cleanse,.-OPENSSL_cleanse 202.globl OPENSSL_wipe_cpu 203.type OPENSSL_wipe_cpu,@function 204.align 16 205OPENSSL_wipe_cpu: 206 pxor %xmm0,%xmm0 207 pxor %xmm1,%xmm1 208 pxor %xmm2,%xmm2 209 pxor %xmm3,%xmm3 210 pxor %xmm4,%xmm4 211 pxor %xmm5,%xmm5 212 pxor %xmm6,%xmm6 213 pxor %xmm7,%xmm7 214 pxor %xmm8,%xmm8 215 pxor %xmm9,%xmm9 216 pxor %xmm10,%xmm10 217 pxor %xmm11,%xmm11 218 pxor %xmm12,%xmm12 219 pxor %xmm13,%xmm13 220 pxor %xmm14,%xmm14 221 pxor %xmm15,%xmm15 222 xorq %rcx,%rcx 223 xorq %rdx,%rdx 224 xorq %rsi,%rsi 225 xorq %rdi,%rdi 226 xorq %r8,%r8 227 xorq %r9,%r9 228 xorq %r10,%r10 229 xorq %r11,%r11 230 leaq 8(%rsp),%rax 231 .byte 0xf3,0xc3 232.size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu 233.globl OPENSSL_ia32_rdrand 234.type OPENSSL_ia32_rdrand,@function 235.align 16 236OPENSSL_ia32_rdrand: 237 movl $8,%ecx 238.Loop_rdrand: 239.byte 72,15,199,240 240 jc .Lbreak_rdrand 241 loop .Loop_rdrand 242.Lbreak_rdrand: 243 cmpq $0,%rax 244 cmoveq %rcx,%rax 245 .byte 0xf3,0xc3 246.size OPENSSL_ia32_rdrand,.-OPENSSL_ia32_rdrand 247 248.globl OPENSSL_ia32_rdseed 249.type OPENSSL_ia32_rdseed,@function 250.align 16 251OPENSSL_ia32_rdseed: 252 movl $8,%ecx 253.Loop_rdseed: 254.byte 72,15,199,248 255 jc .Lbreak_rdseed 256 loop .Loop_rdseed 257.Lbreak_rdseed: 258 cmpq $0,%rax 259 cmoveq %rcx,%rax 260 .byte 0xf3,0xc3 261.size OPENSSL_ia32_rdseed,.-OPENSSL_ia32_rdseed 262