x86_64cpuid.pl (325335) | x86_64cpuid.pl (325337) |
---|---|
1#!/usr/bin/env perl 2 3$flavour = shift; 4$output = shift; 5if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } 6 7$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/); 8 --- 122 unchanged lines hidden (view full) --- 131 mov \$1,%eax 132 cpuid 133 and \$0xbfefffff,%edx # force reserved bits to 0 134 cmp \$0,%r9d 135 jne .Lnotintel 136 or \$0x40000000,%edx # set reserved bit#30 on Intel CPUs 137 and \$15,%ah 138 cmp \$15,%ah # examine Family ID | 1#!/usr/bin/env perl 2 3$flavour = shift; 4$output = shift; 5if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } 6 7$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/); 8 --- 122 unchanged lines hidden (view full) --- 131 mov \$1,%eax 132 cpuid 133 and \$0xbfefffff,%edx # force reserved bits to 0 134 cmp \$0,%r9d 135 jne .Lnotintel 136 or \$0x40000000,%edx # set reserved bit#30 on Intel CPUs 137 and \$15,%ah 138 cmp \$15,%ah # examine Family ID |
139 jne .Lnotintel | 139 jne .LnotP4 |
140 or \$0x00100000,%edx # set reserved bit#20 to engage RC4_CHAR | 140 or \$0x00100000,%edx # set reserved bit#20 to engage RC4_CHAR |
141.LnotP4: 142 cmp \$6,%ah 143 jne .Lnotintel 144 and \$0x0fff0ff0,%eax 145 cmp \$0x00050670,%eax # Knights Landing 146 je .Lknights 147 cmp \$0x00080650,%eax # Knights Mill (according to sde) 148 jne .Lnotintel 149.Lknights: 150 and \$0xfbffffff,%ecx # clear XSAVE flag to mimic Silvermont 151 |
|
141.Lnotintel: 142 bt \$28,%edx # test hyper-threading bit 143 jnc .Lgeneric 144 and \$0xefffffff,%edx # ~(1<<28) 145 cmp \$0,%r10d 146 je .Lgeneric 147 148 or \$0x10000000,%edx # 1<<28 --- 8 unchanged lines hidden (view full) --- 157 158 mov %edx,%r10d # %r9d:%r10d is copy of %ecx:%edx 159 160 cmp \$7,%r11d 161 jb .Lno_extended_info 162 mov \$7,%eax 163 xor %ecx,%ecx 164 cpuid | 152.Lnotintel: 153 bt \$28,%edx # test hyper-threading bit 154 jnc .Lgeneric 155 and \$0xefffffff,%edx # ~(1<<28) 156 cmp \$0,%r10d 157 je .Lgeneric 158 159 or \$0x10000000,%edx # 1<<28 --- 8 unchanged lines hidden (view full) --- 168 169 mov %edx,%r10d # %r9d:%r10d is copy of %ecx:%edx 170 171 cmp \$7,%r11d 172 jb .Lno_extended_info 173 mov \$7,%eax 174 xor %ecx,%ecx 175 cpuid |
176 bt \$26,%r9d # check XSAVE bit, cleared on Knights 177 jc .Lnotknights 178 and \$0xfff7ffff,%ebx # clear ADCX/ADOX flag 179.Lnotknights: |
|
165 mov %ebx,8(%rdi) # save extended feature flags 166.Lno_extended_info: 167 168 bt \$27,%r9d # check OSXSAVE bit 169 jnc .Lclear_avx 170 xor %ecx,%ecx # XCR0 171 .byte 0x0f,0x01,0xd0 # xgetbv 172 and \$6,%eax # isolate XMM and YMM state support 173 cmp \$6,%eax 174 je .Ldone 175.Lclear_avx: 176 mov \$0xefffe7ff,%eax # ~(1<<28|1<<12|1<<11) 177 and %eax,%r9d # clear AVX, FMA and AMD XOP bits | 180 mov %ebx,8(%rdi) # save extended feature flags 181.Lno_extended_info: 182 183 bt \$27,%r9d # check OSXSAVE bit 184 jnc .Lclear_avx 185 xor %ecx,%ecx # XCR0 186 .byte 0x0f,0x01,0xd0 # xgetbv 187 and \$6,%eax # isolate XMM and YMM state support 188 cmp \$6,%eax 189 je .Ldone 190.Lclear_avx: 191 mov \$0xefffe7ff,%eax # ~(1<<28|1<<12|1<<11) 192 and %eax,%r9d # clear AVX, FMA and AMD XOP bits |
178 andl \$0xffffffdf,8(%rdi) # cleax AVX2, ~(1<<5) | 193 andl \$0xffffffdf,8(%rdi) # clear AVX2, ~(1<<5) |
179.Ldone: 180 shl \$32,%r9 181 mov %r10d,%eax 182 mov %r8,%rbx # restore %rbx 183 or %r9,%rax 184 ret 185.size OPENSSL_ia32_cpuid,.-OPENSSL_ia32_cpuid 186 --- 124 unchanged lines hidden --- | 194.Ldone: 195 shl \$32,%r9 196 mov %r10d,%eax 197 mov %r8,%rbx # restore %rbx 198 or %r9,%rax 199 ret 200.size OPENSSL_ia32_cpuid,.-OPENSSL_ia32_cpuid 201 --- 124 unchanged lines hidden --- |