X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=crypto%2Fx86cpuid.pl;h=c3291112032b3ff7b365830ecf123f3a4efc4df8;hb=3964038fe6c0ac9bf9fca124189dd06fa644fc1b;hp=13828d5633160b34460311303b4fbfc60ff92707;hpb=b2dba9bf1f8f73376b9c1f0904a86996c728b236;p=oweals%2Fopenssl.git diff --git a/crypto/x86cpuid.pl b/crypto/x86cpuid.pl index 13828d5633..c329111203 100644 --- a/crypto/x86cpuid.pl +++ b/crypto/x86cpuid.pl @@ -1,6 +1,7 @@ #!/usr/bin/env perl -push(@INC,"perlasm"); +$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; +push(@INC, "${dir}perlasm", "perlasm"); require "x86asm.pl"; &asm_init($ARGV[0],"x86cpuid"); @@ -19,7 +20,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 +35,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")); - &and ("edx",~(1<<28)); # clear hyper-threading bit if not -&set_label("nocpuid"); + &ja (&label("done")); + &and ("edx",0xefffffff); # clear hyper-threading bit if not +&set_label("done"); &mov ("eax","edx"); &mov ("edx","ecx"); &function_end("OPENSSL_ia32_cpuid");