summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2011-04-16 20:10:34 +0200
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2011-04-16 20:10:34 +0200
commit7a62421e8e162e3f9f660ea08cc19284fb64cd20 (patch)
tree61c1f888d67f3c8a092d8bb59b02c7796e701ea0
parent065927be43c1aef5771c0b18b28b8ef9ccdc6eae (diff)
downloadgnutls-7a62421e8e162e3f9f660ea08cc19284fb64cd20.tar.gz
Try to detect AES-NI on Intel and AMD machines only.
-rw-r--r--lib/accelerated/intel/aes-x86.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/lib/accelerated/intel/aes-x86.c b/lib/accelerated/intel/aes-x86.c
index f1a24aa1b6..101569554b 100644
--- a/lib/accelerated/intel/aes-x86.c
+++ b/lib/accelerated/intel/aes-x86.c
@@ -155,10 +155,33 @@ check_optimized_aes (void)
return (c & 0x2000000);
}
+static unsigned
+check_intel_or_amd (void)
+{
+ unsigned int a, b, c, d;
+ cpuid (0, a, b, c, d);
+
+ if ((memcmp(&b, "Genu", 4) == 0 &&
+ memcmp(&d, "ineI", 4) == 0 &&
+ memcmp(&c, "ntel", 4) == 0) ||
+ (memcmp(&b, "Auth", 4) == 0 &&
+ memcmp(&d, "enti", 4) == 0 &&
+ memcmp(&c, "cAMD", 4) == 0))
+ {
+ return 1;
+ }
+
+ return 0;
+}
+
void
register_x86_crypto (void)
{
int ret;
+
+ if (check_intel_or_amd() == 0)
+ return;
+
if (check_optimized_aes ())
{
fprintf (stderr, "Intel AES accelerator was detected\n");