Skip to content

Commit

Permalink
Aarch64 CPU id: fix for privilege instruction detection
Browse files Browse the repository at this point in the history
AES/PMULL is in four bits 4-7.
When value is 0b0010, this indicates both AES and PMULL. Fix code to set
both.

Add setting of CPU flags as a command line option to benchmark.

Added XSTRTOUL for Intel x64 and Aarch64 for CPU flagss command line
option in benchmark.
  • Loading branch information
SparkiDev committed Dec 23, 2024
1 parent 2bcad98 commit 4f6c8a6
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 3 deletions.
11 changes: 11 additions & 0 deletions wolfcrypt/benchmark/benchmark.c
Original file line number Diff line number Diff line change
Expand Up @@ -15104,6 +15104,17 @@ int wolfcrypt_benchmark_main(int argc, char** argv)
minimum_runs = XATOI(argv[1]);
}
}
#endif
#if defined(HAVE_CPUID) && (defined(HAVE_CPUID_INTEL) || \
defined(HAVE_CPUID_AARCH64)
else if (string_matches(argv[1], "-cpuid")) {
argc--;
argv++;
if (argc > 1) {
(void)cpuid_get_flags();
cpuid_select_flags((word32)XSTRTOUL(argv[1], NULL, 16));
}
}
#endif
else if (argv[1][0] == '-') {
optMatched = 0;
Expand Down
8 changes: 5 additions & 3 deletions wolfcrypt/src/cpuid.c
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@
#elif defined(HAVE_CPUID_AARCH64)

#define CPUID_AARCH64_FEAT_AES ((word64)1 << 4)
#define CPUID_AARCH64_FEAT_PMULL ((word64)1 << 5)
#define CPUID_AARCH64_FEAT_AES_PMULL ((word64)1 << 5)
#define CPUID_AARCH64_FEAT_SHA256 ((word64)1 << 12)
#define CPUID_AARCH64_FEAT_SHA256_512 ((word64)1 << 13)
#define CPUID_AARCH64_FEAT_RDM ((word64)1 << 28)
Expand All @@ -131,8 +131,10 @@

if (features & CPUID_AARCH64_FEAT_AES)
cpuid_flags |= CPUID_AES;
if (features & CPUID_AARCH64_FEAT_PMULL)
if (features & CPUID_AARCH64_FEAT_AES_PMULL) {
cpuid_flags |= CPUID_AES;
cpuid_flags |= CPUID_PMULL;
}
if (features & CPUID_AARCH64_FEAT_SHA256)
cpuid_flags |= CPUID_SHA256;
if (features & CPUID_AARCH64_FEAT_SHA256_512)
Expand Down Expand Up @@ -279,7 +281,6 @@
void cpuid_set_flags(void)
{
if (!cpuid_check) {

#ifndef WOLFSSL_ARMASM_NO_HW_CRYPTO
cpuid_flags |= CPUID_AES;
cpuid_flags |= CPUID_PMULL;
Expand All @@ -300,6 +301,7 @@
#ifdef WOLFSSL_ARMASM_CRYPTO_SM4
cpuid_flags |= CPUID_SM4;
#endif

cpuid_check = 1;
}
}
Expand Down
7 changes: 7 additions & 0 deletions wolfssl/wolfcrypt/types.h
Original file line number Diff line number Diff line change
Expand Up @@ -930,6 +930,13 @@ typedef struct w64wrapper {
#define XATOI(s) atoi((s))
#endif
#endif

#if defined(WOLFSSL_X86_64_BUILD) || defined(WOLFSSL_AARCH64_BUILD)
#ifndef XSTR
#include <stdlib.h>
#define XSTRTOUL(s,e,b) strtoul((s),(e),(b))
#endif
#endif
#endif

#ifdef USE_WOLF_STRTOK
Expand Down

0 comments on commit 4f6c8a6

Please sign in to comment.