diff options
author | Andy Polyakov <appro@openssl.org> | 2005-05-18 10:42:08 +0200 |
---|---|---|
committer | Andy Polyakov <appro@openssl.org> | 2005-05-18 10:42:08 +0200 |
commit | c50226594d73f02d594a5a469abd11e1c9849588 (patch) | |
tree | a8c63b55cd1fc40086242a221fcdbb15c3f81dd8 /crypto/x86cpuid.pl | |
parent | Engage Applink in mingw. Note that application-side module is not (diff) | |
download | openssl-c50226594d73f02d594a5a469abd11e1c9849588.tar.xz openssl-c50226594d73f02d594a5a469abd11e1c9849588.zip |
Don't emit SSE2 instructions unless were asked to.
PR: 1073
Diffstat (limited to '')
-rw-r--r-- | crypto/x86cpuid.pl | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/crypto/x86cpuid.pl b/crypto/x86cpuid.pl index 9ad9435ffd..3d5d16bb64 100644 --- a/crypto/x86cpuid.pl +++ b/crypto/x86cpuid.pl @@ -5,6 +5,8 @@ require "x86asm.pl"; &asm_init($ARGV[0],"x86cpuid"); +for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); } + &function_begin("OPENSSL_ia32_cpuid"); &xor ("edx","edx"); &pushf (); @@ -115,17 +117,19 @@ require "x86asm.pl"; &mov ("ecx",&DWP(0,"ecx")); &bt (&DWP(0,"ecx"),1); &jnc (&label("no_x87")); - &bt (&DWP(0,"ecx"),26); - &jnc (&label("no_sse2")); - &pxor ("xmm0","xmm0"); - &pxor ("xmm1","xmm1"); - &pxor ("xmm2","xmm2"); - &pxor ("xmm3","xmm3"); - &pxor ("xmm4","xmm4"); - &pxor ("xmm5","xmm5"); - &pxor ("xmm6","xmm6"); - &pxor ("xmm7","xmm7"); -&set_label("no_sse2"); + if ($sse2) { + &bt (&DWP(0,"ecx"),26); + &jnc (&label("no_sse2")); + &pxor ("xmm0","xmm0"); + &pxor ("xmm1","xmm1"); + &pxor ("xmm2","xmm2"); + &pxor ("xmm3","xmm3"); + &pxor ("xmm4","xmm4"); + &pxor ("xmm5","xmm5"); + &pxor ("xmm6","xmm6"); + &pxor ("xmm7","xmm7"); + &set_label("no_sse2"); + } # just a bunch of fldz to zap the fp/mm bank... &data_word(0xeed9eed9,0xeed9eed9,0xeed9eed9,0xeed9eed9); &emms (); |