From 59067825fca4600955515e66ad46c22eed4c7fe1 Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 6 Jun 2018 16:44:46 -0600 Subject: [PATCH] Update cpuid.c to optimize intelasm for performance --- wolfcrypt/src/cpuid.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/wolfcrypt/src/cpuid.c b/wolfcrypt/src/cpuid.c index 6fc30979a..81f9ab389 100644 --- a/wolfcrypt/src/cpuid.c +++ b/wolfcrypt/src/cpuid.c @@ -60,16 +60,26 @@ static word32 cpuid_flag(word32 leaf, word32 sub, word32 num, word32 bit) { int got_intel_cpu = 0; + int got_amd_cpu = 0; unsigned int reg[5]; - reg[4] = '\0'; cpuid(reg, 0, 0); + + /* check for Intel cpu */ if (XMEMCMP((char *)&(reg[EBX]), "Genu", 4) == 0 && XMEMCMP((char *)&(reg[EDX]), "ineI", 4) == 0 && XMEMCMP((char *)&(reg[ECX]), "ntel", 4) == 0) { got_intel_cpu = 1; } - if (got_intel_cpu) { + + /* check for AMD cpu */ + if (XMEMCMP((char *)&(reg[EBX]), "Auth", 4) == 0 && + XMEMCMP((char *)&(reg[EDX]), "enti", 4) == 0 && + XMEMCMP((char *)&(reg[ECX]), "cAMD", 4) == 0) { + got_amd_cpu = 1; + } + + if (got_intel_cpu || got_amd_cpu) { cpuid(reg, leaf, sub); return ((reg[num] >> bit) & 0x1); } @@ -98,4 +108,3 @@ return cpuid_flags; } #endif -