All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/3] config/riscv: detect V extension
@ 2025-05-28 16:57 uk7b
  2025-06-04 11:49 ` [PATCH v2 0/3] Add RISC-V V extension detection and LPM optimization uk7b
                   ` (11 more replies)
  0 siblings, 12 replies; 31+ messages in thread
From: uk7b @ 2025-05-28 16:57 UTC (permalink / raw)
  To: dev; +Cc: sunyuechi, Stanislaw Kardach, Bruce Richardson

From: sunyuechi <sunyuechi@iscas.ac.cn>

This patch is derived from "config/riscv: detect presence of Zbc
extension with modifications".

The RISC-V C api defines architecture extension test macros
These let us detect whether the V extension is supported on the
compiler and -march we're building with. The C api also defines V
intrinsics we can use rather than inline assembly on newer versions of
GCC (14.1.0+) and Clang (18.1.0+).

If the V extension and intrinsics are both present and we can detect
the V extension at runtime, we define a flag, RTE_RISCV_FEATURE_V.

Signed-off-by: sunyuechi <sunyuechi@iscas.ac.cn>
---
 config/riscv/meson.build | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/config/riscv/meson.build b/config/riscv/meson.build
index 7562c6cb99..e3694cf2e6 100644
--- a/config/riscv/meson.build
+++ b/config/riscv/meson.build
@@ -119,6 +119,31 @@ foreach flag: arch_config['machine_args']
     endif
 endforeach
 
+# check if we can do buildtime detection of extensions supported by the target
+riscv_extension_macros = false
+if (cc.get_define('__riscv_arch_test', args: machine_args) == '1')
+  message('Detected architecture extension test macros')
+  riscv_extension_macros = true
+else
+  warning('RISC-V architecture extension test macros not available. Build-time detection of extensions not possible')
+endif
+
+# detect extensions
+# Requires intrinsics available in GCC 14.1.0+ and Clang 18.1.0+
+if (riscv_extension_macros and
+    (cc.get_define('__riscv_vector', args: machine_args) != ''))
+  if ((cc.get_id() == 'gcc' and cc.version().version_compare('>=14.1.0'))
+      or (cc.get_id() == 'clang' and cc.version().version_compare('>=18.1.0')))
+    if (cc.compiles('''#include <riscv_vector.h>
+        int main(void) { size_t vl = __riscv_vsetvl_e32m1(1); }''', args: machine_args))
+      message('Compiling with the V extension')
+      machine_args += ['-DRTE_RISCV_FEATURE_V']
+    endif
+  else
+    warning('Detected V extension but cannot use because intrinsics are not available (present in GCC 14.1.0+ and Clang 18.1.0+)')
+  endif
+endif
+
 # apply flags
 foreach flag: dpdk_flags
     if flag.length() > 0
-- 
2.49.0


^ permalink raw reply related	[flat|nested] 31+ messages in thread

end of thread, other threads:[~2025-06-27  4:03 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-28 16:57 [PATCH 1/3] config/riscv: detect V extension uk7b
2025-06-04 11:49 ` [PATCH v2 0/3] Add RISC-V V extension detection and LPM optimization uk7b
2025-06-04 11:49 ` [PATCH v2 1/3] config/riscv: detect V extension uk7b
2025-06-04 19:54   ` Stephen Hemminger
2025-06-04 11:49 ` [PATCH v2 2/3] lib/lpm: R-V V rte_lpm_lookupx4 uk7b
2025-06-04 11:49 ` [PATCH v2 3/3] riscv: override machine_args only when default uk7b
2025-06-04 13:07 ` [PATCH v2 0/3] Add RISC-V V extension detection and LPM optimization uk7b
2025-06-04 13:16   ` 孙越池
2025-06-04 13:07 ` [PATCH v2 1/3] config/riscv: detect V extension uk7b
2025-06-04 13:07 ` [PATCH v2 2/3] lib/lpm: R-V V rte_lpm_lookupx4 uk7b
2025-06-04 13:07 ` [PATCH v2 3/3] riscv: override machine_args only when default uk7b
2025-06-04 15:47 ` [PATCH v3 0/3] Add RISC-V V extension detection and LPM optimization uk7b
     [not found] ` <20250604154720.3078131-1-uk7b@foxmail.com>
2025-06-04 15:47   ` [PATCH v3 1/3] config/riscv: detect V extension uk7b
2025-06-04 15:47   ` [PATCH v3 2/3] lib/lpm: R-V V rte_lpm_lookupx4 uk7b
2025-06-04 15:47   ` [PATCH v3 3/3] riscv: override machine_args only when default uk7b
2025-06-05 10:58 ` [PATCH v4 0/3] [PATCH v4 0/3] Add RISC-V V extension detection and LPM optimization uk7b
2025-06-11 14:59   ` [PATCH v5 " uk7b
2025-06-27  3:58     ` [PATCH v6 " uk7b
     [not found]     ` <20250627035814.670775-1-uk7b@foxmail.com>
2025-06-27  3:58       ` [PATCH v6 1/3] config/riscv: detect V extension uk7b
2025-06-27  3:58       ` [PATCH v6 2/3] lib/lpm: R-V V rte_lpm_lookupx4 uk7b
2025-06-27  3:58       ` [PATCH v6 3/3] riscv: override machine_args only when default uk7b
     [not found]   ` <20250611145915.854026-1-uk7b@foxmail.com>
2025-06-11 14:59     ` [PATCH v5 1/3] config/riscv: detect V extension uk7b
2025-06-11 14:59     ` [PATCH v5 2/3] lib/lpm: R-V V rte_lpm_lookupx4 uk7b
2025-06-11 14:59     ` [PATCH v5 3/3] riscv: override machine_args only when default uk7b
2025-06-27  2:31       ` Stanisław Kardach
2025-06-27  4:03         ` 孙越池
     [not found] ` <20250605105844.3931758-1-uk7b@foxmail.com>
2025-06-05 10:58   ` [PATCH v4 1/3] config/riscv: detect V extension uk7b
2025-06-05 10:58   ` [PATCH v4 2/3] lib/lpm: R-V V rte_lpm_lookupx4 uk7b
2025-06-11 11:52     ` Medvedkin, Vladimir
2025-06-11 15:04       ` 孙越池
2025-06-05 10:58   ` [PATCH v4 3/3] riscv: override machine_args only when default uk7b

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.