diff options
author | Malvika Gupta <Malvika.Gupta@arm.com> | 2021-10-28 12:51:21 -0500 |
---|---|---|
committer | Matias Elo <matias.elo@nokia.com> | 2021-11-08 08:53:23 +0200 |
commit | 458620fbf8ffbe9011005fbf3635bc6ac7a333e9 (patch) | |
tree | 7c4f5b34b878e5cfe1dd9bd4d6c6e2f25d34ebb9 /platform/linux-generic/arch/aarch64 | |
parent | be8f4864beb7b41758454bfcab607d288ff08d4d (diff) |
linux-gen: sysinfo: move compile-time cpu flags to cpu_flags.c
Detection and printing of compile-flags has been moved to a new file,
cpu_flags.c in preparation for dumping the CPU hardware flags.
Signed-off-by: Malvika Gupta <Malvika.Gupta@arm.com>
Reviewed-by: Matias Elo <matias.elo@nokia.com>
Diffstat (limited to 'platform/linux-generic/arch/aarch64')
-rw-r--r-- | platform/linux-generic/arch/aarch64/cpu_flags.c | 155 | ||||
-rw-r--r-- | platform/linux-generic/arch/aarch64/cpu_flags.h | 20 | ||||
-rw-r--r-- | platform/linux-generic/arch/aarch64/odp_sysinfo_parse.c | 135 |
3 files changed, 177 insertions, 133 deletions
diff --git a/platform/linux-generic/arch/aarch64/cpu_flags.c b/platform/linux-generic/arch/aarch64/cpu_flags.c new file mode 100644 index 000000000..79d579088 --- /dev/null +++ b/platform/linux-generic/arch/aarch64/cpu_flags.c @@ -0,0 +1,155 @@ +/* Copyright (c) 2018, Linaro Limited + * Copyright (c) 2020-2021, Nokia + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include <string.h> +#include <stdlib.h> + +#include <odp/api/hints.h> +#include <odp_debug_internal.h> +#include "cpu_flags.h" + +static void _odp_sys_info_print_acle_flags(void) +{ + const char *ndef = "n/a"; + + /* Avoid compiler warning about unused variable */ + (void)ndef; + + /* See ARM C Language Extensions documentation for details */ + ODP_PRINT("ARM FEATURES:\n"); + + ODP_PRINT(" __ARM_ARCH "); +#ifdef __ARM_ARCH + ODP_PRINT("%i\n", __ARM_ARCH); +#else + ODP_PRINT("%s\n", ndef); +#endif + + ODP_PRINT(" __ARM_ARCH_ISA_A64 "); +#ifdef __ARM_ARCH_ISA_A64 + ODP_PRINT("%i\n", __ARM_ARCH_ISA_A64); +#else + ODP_PRINT("%s\n", ndef); +#endif + + ODP_PRINT(" __ARM_FEATURE_ATOMICS "); +#ifdef __ARM_FEATURE_ATOMICS + ODP_PRINT("%i\n", __ARM_FEATURE_ATOMICS); +#else + ODP_PRINT("%s\n", ndef); +#endif + + ODP_PRINT(" __ARM_FEATURE_CRC32 "); +#ifdef __ARM_FEATURE_CRC32 + ODP_PRINT("%i\n", __ARM_FEATURE_CRC32); +#else + ODP_PRINT("%s\n", ndef); +#endif + + ODP_PRINT(" __ARM_FEATURE_CRYPTO "); +#ifdef __ARM_FEATURE_CRYPTO + ODP_PRINT("%i\n", __ARM_FEATURE_CRYPTO); +#else + ODP_PRINT("%s\n", ndef); +#endif + + ODP_PRINT(" __ARM_FEATURE_DOTPROD "); +#ifdef __ARM_FEATURE_DOTPROD + ODP_PRINT("%i\n", __ARM_FEATURE_DOTPROD); +#else + ODP_PRINT("%s\n", ndef); +#endif + + ODP_PRINT(" __ARM_FEATURE_IDIV "); +#ifdef __ARM_FEATURE_IDIV + ODP_PRINT("%i\n", __ARM_FEATURE_IDIV); +#else + ODP_PRINT("%s\n", ndef); +#endif + + ODP_PRINT(" __ARM_FEATURE_QRDMX "); +#ifdef __ARM_FEATURE_QRDMX + ODP_PRINT("%i\n", __ARM_FEATURE_QRDMX); +#else + ODP_PRINT("%s\n", ndef); +#endif + + ODP_PRINT(" __ARM_FEATURE_SHA3 "); +#ifdef __ARM_FEATURE_SHA3 + ODP_PRINT("%i\n", __ARM_FEATURE_SHA3); +#else + ODP_PRINT("%s\n", ndef); +#endif + + ODP_PRINT(" __ARM_FEATURE_SHA512 "); +#ifdef __ARM_FEATURE_SHA512 + ODP_PRINT("%i\n", __ARM_FEATURE_SHA512); +#else + ODP_PRINT("%s\n", ndef); +#endif + + ODP_PRINT(" __ARM_FEATURE_SM3 "); +#ifdef __ARM_FEATURE_SM3 + ODP_PRINT("%i\n", __ARM_FEATURE_SM3); +#else + ODP_PRINT("%s\n", ndef); +#endif + + ODP_PRINT(" __ARM_FEATURE_SM4 "); +#ifdef __ARM_FEATURE_SM4 + ODP_PRINT("%i\n", __ARM_FEATURE_SM4); +#else + ODP_PRINT("%s\n", ndef); +#endif + + ODP_PRINT(" __ARM_FEATURE_UNALIGNED "); +#ifdef __ARM_FEATURE_UNALIGNED + ODP_PRINT("%i\n", __ARM_FEATURE_UNALIGNED); +#else + ODP_PRINT("%s\n", ndef); +#endif + + ODP_PRINT(" __ARM_NEON "); +#ifdef __ARM_NEON + ODP_PRINT("%i\n", __ARM_NEON); +#else + ODP_PRINT("%s\n", ndef); +#endif + + ODP_PRINT(" ARM ISA version: "); +#if defined(__ARM_ARCH) + if (__ARM_ARCH < 8) { + ODP_PRINT("v%i\n", __ARM_ARCH); + } else if (__ARM_ARCH == 8) { + /* Actually, this checks for new NEON instructions in + * v8.1, but is currently the only way to distinguish + * v8.0 and >=v8.1. */ + #ifdef __ARM_FEATURE_QRDMX + ODP_PRINT("v8.1 or higher\n"); + #else + ODP_PRINT("v8.0\n"); + #endif + } else { + /* ACLE 2018 defines that from v8.1 onwards the value includes + * the minor version number: __ARM_ARCH = X * 100 + Y + * E.g. for Armv8.1 __ARM_ARCH = 801 */ + int major = __ARM_ARCH / 100; + int minor = __ARM_ARCH - (major * 100); + + ODP_PRINT("v%i.%i\n", major, minor); + } +#else + ODP_PRINT("%s\n", ndef); +#endif + + ODP_PRINT("\n"); +} + +void _odp_cpu_flags_print_all(void) +{ + _odp_sys_info_print_acle_flags(); +} diff --git a/platform/linux-generic/arch/aarch64/cpu_flags.h b/platform/linux-generic/arch/aarch64/cpu_flags.h new file mode 100644 index 000000000..177b1c44f --- /dev/null +++ b/platform/linux-generic/arch/aarch64/cpu_flags.h @@ -0,0 +1,20 @@ +/* Copyright (c) 2021, ARM Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef ODP_PLAT_CPU_FLAGS_H_ +#define ODP_PLAT_CPU_FLAGS_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +void _odp_cpu_flags_print_all(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/platform/linux-generic/arch/aarch64/odp_sysinfo_parse.c b/platform/linux-generic/arch/aarch64/odp_sysinfo_parse.c index ab64d501e..dbb6d43af 100644 --- a/platform/linux-generic/arch/aarch64/odp_sysinfo_parse.c +++ b/platform/linux-generic/arch/aarch64/odp_sysinfo_parse.c @@ -13,6 +13,7 @@ #include <odp_global_data.h> #include <odp_sysinfo_internal.h> #include <odp_debug_internal.h> +#include "cpu_flags.h" #define TMP_STR_LEN 64 @@ -334,139 +335,7 @@ int _odp_cpuinfo_parser(FILE *file, system_info_t *sysinfo) void _odp_sys_info_print_arch(void) { - const char *ndef = "n/a"; - - /* Avoid compiler warning about unused variable */ - (void)ndef; - - /* See ARM C Language Extensions documentation for details */ - ODP_PRINT("ARM FEATURES:\n"); - - ODP_PRINT(" __ARM_ARCH "); -#ifdef __ARM_ARCH - ODP_PRINT("%i\n", __ARM_ARCH); -#else - ODP_PRINT("%s\n", ndef); -#endif - - ODP_PRINT(" __ARM_ARCH_ISA_A64 "); -#ifdef __ARM_ARCH_ISA_A64 - ODP_PRINT("%i\n", __ARM_ARCH_ISA_A64); -#else - ODP_PRINT("%s\n", ndef); -#endif - - ODP_PRINT(" __ARM_NEON "); -#ifdef __ARM_NEON - ODP_PRINT("%i\n", __ARM_NEON); -#else - ODP_PRINT("%s\n", ndef); -#endif - - ODP_PRINT(" __ARM_FEATURE_ATOMICS "); -#ifdef __ARM_FEATURE_ATOMICS - ODP_PRINT("%i\n", __ARM_FEATURE_ATOMICS); -#else - ODP_PRINT("%s\n", ndef); -#endif - - ODP_PRINT(" __ARM_FEATURE_UNALIGNED "); -#ifdef __ARM_FEATURE_UNALIGNED - ODP_PRINT("%i\n", __ARM_FEATURE_UNALIGNED); -#else - ODP_PRINT("%s\n", ndef); -#endif - - ODP_PRINT(" __ARM_FEATURE_IDIV "); -#ifdef __ARM_FEATURE_IDIV - ODP_PRINT("%i\n", __ARM_FEATURE_IDIV); -#else - ODP_PRINT("%s\n", ndef); -#endif - - ODP_PRINT(" __ARM_FEATURE_QRDMX "); -#ifdef __ARM_FEATURE_QRDMX - ODP_PRINT("%i\n", __ARM_FEATURE_QRDMX); -#else - ODP_PRINT("%s\n", ndef); -#endif - - ODP_PRINT(" __ARM_FEATURE_DOTPROD "); -#ifdef __ARM_FEATURE_DOTPROD - ODP_PRINT("%i\n", __ARM_FEATURE_DOTPROD); -#else - ODP_PRINT("%s\n", ndef); -#endif - - ODP_PRINT(" __ARM_FEATURE_CRYPTO "); -#ifdef __ARM_FEATURE_CRYPTO - ODP_PRINT("%i\n", __ARM_FEATURE_CRYPTO); -#else - ODP_PRINT("%s\n", ndef); -#endif - - ODP_PRINT(" __ARM_FEATURE_SHA512 "); -#ifdef __ARM_FEATURE_SHA512 - ODP_PRINT("%i\n", __ARM_FEATURE_SHA512); -#else - ODP_PRINT("%s\n", ndef); -#endif - - ODP_PRINT(" __ARM_FEATURE_SHA3 "); -#ifdef __ARM_FEATURE_SHA3 - ODP_PRINT("%i\n", __ARM_FEATURE_SHA3); -#else - ODP_PRINT("%s\n", ndef); -#endif - - ODP_PRINT(" __ARM_FEATURE_SM3 "); -#ifdef __ARM_FEATURE_SM3 - ODP_PRINT("%i\n", __ARM_FEATURE_SM3); -#else - ODP_PRINT("%s\n", ndef); -#endif - - ODP_PRINT(" __ARM_FEATURE_SM4 "); -#ifdef __ARM_FEATURE_SM4 - ODP_PRINT("%i\n", __ARM_FEATURE_SM4); -#else - ODP_PRINT("%s\n", ndef); -#endif - - ODP_PRINT(" __ARM_FEATURE_CRC32 "); -#ifdef __ARM_FEATURE_CRC32 - ODP_PRINT("%i\n", __ARM_FEATURE_CRC32); -#else - ODP_PRINT("%s\n", ndef); -#endif - - ODP_PRINT(" ARM ISA version: "); -#if defined(__ARM_ARCH) - if (__ARM_ARCH < 8) { - ODP_PRINT("v%i\n", __ARM_ARCH); - } else if (__ARM_ARCH == 8) { - /* Actually, this checks for new NEON instructions in - * v8.1, but is currently the only way to distinguish - * v8.0 and >=v8.1. */ - #ifdef __ARM_FEATURE_QRDMX - ODP_PRINT("v8.1 or higher\n"); - #else - ODP_PRINT("v8.0\n"); - #endif - } else { - /* ACLE 2018 defines that from v8.1 onwards the value includes - * the minor version number: __ARM_ARCH = X * 100 + Y - * E.g. for Armv8.1 __ARM_ARCH = 801 */ - int major = __ARM_ARCH / 100; - int minor = __ARM_ARCH - (major * 100); - - ODP_PRINT("v%i.%i\n", major, minor); - } -#else - ODP_PRINT("%s\n", ndef); -#endif - - ODP_PRINT("\n"); + _odp_cpu_flags_print_all(); } uint64_t odp_cpu_arch_hz_current(int id ODP_UNUSED) |