summaryrefslogtreecommitdiffstats
path: root/src/vppinfra
diff options
context:
space:
mode:
Diffstat (limited to 'src/vppinfra')
-rw-r--r--src/vppinfra/cpu.h20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/vppinfra/cpu.h b/src/vppinfra/cpu.h
index 6a812180008..bef2a029e94 100644
--- a/src/vppinfra/cpu.h
+++ b/src/vppinfra/cpu.h
@@ -84,9 +84,29 @@ clib_march_select_fn_ptr (clib_march_fn_registration * r)
return rv;
}
+static_always_inline void *
+clib_march_select_fn_ptr_by_name (clib_march_fn_registration * r, char *name)
+{
+ void *rv = 0;
+
+ while (r)
+ {
+ if (strncmp (name, r->name, vec_len (r->name) - 1) == 0)
+ {
+ rv = r->function;
+ break;
+ }
+ r = r->next;
+ }
+ return rv;
+}
+
#define CLIB_MARCH_FN_POINTER(fn) \
clib_march_select_fn_ptr (fn##_march_fn_registrations);
+#define CLIB_MARCH_FN_POINTER_BY_NAME(fn, name) \
+ clib_march_select_fn_ptr_by_name (fn##_march_fn_registrations, name);
+
#define _CLIB_MARCH_FN_REGISTRATION(fn) \
static clib_march_fn_registration \
CLIB_MARCH_SFX(fn##_march_fn_registration) = \