summaryrefslogtreecommitdiffstats
path: root/crypto/x86cpuid.pl
diff options
context:
space:
mode:
authorAndy Polyakov <appro@openssl.org>2013-06-10 22:20:46 +0200
committerAndy Polyakov <appro@openssl.org>2013-06-10 22:20:46 +0200
commit1bc0b68d7b8c7620487310ed84fa273ba0d9f428 (patch)
tree3190094de0d68056ea721532102c2a3c33e10f1f /crypto/x86cpuid.pl
parent2f58cda4ce45c88f5c1d284eb155cbc9bcf4705f (diff)
x86cpuid.pl: fix extended feature flags detection.
Diffstat (limited to 'crypto/x86cpuid.pl')
-rw-r--r--crypto/x86cpuid.pl19
1 files changed, 10 insertions, 9 deletions
diff --git a/crypto/x86cpuid.pl b/crypto/x86cpuid.pl
index e8a75181af..ef1216a8b2 100644
--- a/crypto/x86cpuid.pl
+++ b/crypto/x86cpuid.pl
@@ -81,6 +81,16 @@ for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); }
&jmp (&label("generic"));
&set_label("intel");
+ &cmp ("edi",7);
+ &jb (&label("cacheinfo"));
+
+ &mov ("esi",&wparam(0));
+ &mov ("eax",7);
+ &xor ("ecx","ecx");
+ &cpuid ();
+ &mov (&DWP(8,"esi"),"ebx");
+
+&set_label("cacheinfo");
&cmp ("edi",4);
&mov ("edi",-1);
&jb (&label("nocacheinfo"));
@@ -92,15 +102,6 @@ for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); }
&shr ("edi",14);
&and ("edi",0xfff); # number of cores -1 per L1D
- &cmp ("edi",7);
- &jb (&label("nocacheinfo"));
-
- &mov ("esi",&wparam(0));
- &mov ("eax",7);
- &xor ("ecx","ecx");
- &cpuid ();
- &mov (&DWP(8,"esi"),"ebx");
-
&set_label("nocacheinfo");
&mov ("eax",1);
&xor ("ecx","ecx");