Deleted Added
full compact
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 ---