From: Andy Polyakov Date: Sat, 21 Jul 2007 14:46:27 +0000 (+0000) Subject: x86*cpuid update. X-Git-Tag: OpenSSL_0_9_8k^2~769 X-Git-Url: https://git.openssl.org/?a=commitdiff_plain;h=3df2eff4bd39ecdd94fc559acd78e581d302f68d;p=openssl.git x86*cpuid update. --- diff --git a/crypto/x86_64cpuid.pl b/crypto/x86_64cpuid.pl index f90bbc9ab0..e29792a157 100644 --- a/crypto/x86_64cpuid.pl +++ b/crypto/x86_64cpuid.pl @@ -134,8 +134,6 @@ OPENSSL_ia32_cpuid: mov \$1,%eax cpuid - bt \$28,%edx # test hyper-threading bit - jnc .Ldone cmp \$0,%r9d jne .Lnotintel or \$1<<20,%edx # use reserved bit to engage RC4_CHAR @@ -144,6 +142,8 @@ OPENSSL_ia32_cpuid: je .Lnotintel or \$1<<30,%edx # use reserved bit to skip unrolled loop .Lnotintel: + bt \$28,%edx # test hyper-threading bit + jnc .Ldone shr \$16,%ebx cmp \$1,%bl # see if cache is shared ja .Ldone diff --git a/crypto/x86cpuid.pl b/crypto/x86cpuid.pl index ce9b8ea4dd..0fb0657fa7 100644 --- a/crypto/x86cpuid.pl +++ b/crypto/x86cpuid.pl @@ -19,7 +19,7 @@ for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); } &pop ("eax"); &xor ("ecx","eax"); &bt ("ecx",21); - &jnc (&label("nocpuid")); + &jnc (&label("done")); &xor ("eax","eax"); &cpuid (); &xor ("eax","eax"); @@ -34,17 +34,20 @@ for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); } &or ("ebp","eax"); &mov ("eax",1); &cpuid (); - &bt ("edx",28); # test hyper-threading bit - &jnc (&label("nocpuid")); &cmp ("ebp",0); - &jne (&label("notintel")); + &jne (&label("notP4")); + &and (&HB("eax"),15); # familiy ID + &cmp (&HB("eax"),15); # P4? + &jne (&label("notP4")); &or ("edx",1<<20); # use reserved bit to engage RC4_CHAR -&set_label("notintel"); +&set_label("notP4"); + &bt ("edx",28); # test hyper-threading bit + &jnc (&label("done")); &shr ("ebx",16); &cmp (&LB("ebx"),1); # see if cache is shared(*) - &ja (&label("nocpuid")); + &ja (&label("done")); &and ("edx",0xefffffff); # clear hyper-threading bit if not -&set_label("nocpuid"); +&set_label("done"); &mov ("eax","edx"); &mov ("edx","ecx"); &function_end("OPENSSL_ia32_cpuid");