himada-dispatch 0.1.1

Adaptive SIMD dispatch for Himada — auto-selects fastest kernel at runtime
#[macro_export]
macro_rules! register_kernels {
    ($name:expr, $kernel_ty:ty, $(($kname:expr, $func:expr, $supported:expr, $prio:expr)),+ $(,)?) => {{
        let mut reg = $crate::plugin::PluginRegistry::<$kernel_ty>::new();
        $(
            reg.register($kname, $func, $supported, $prio);
        )+
        $crate::plugin::register_plugin_registry(reg);
    }};
}

#[macro_export]
macro_rules! plugin_impl {
    ($plugin_name:ident, $kernel_ty:ty, $(($kname:expr, $func:expr, $supported:expr, $prio:expr)),+ $(,)?) => {
        struct $plugin_name;
        impl $crate::plugin::KernelPlugin<$kernel_ty> for $plugin_name {
            fn register(&self, registry: &mut $crate::plugin::PluginRegistry<$kernel_ty>) {
                $(
                    registry.register($kname, $func, $supported, $prio);
                )+
            }
        }
        $crate::register_kernels!(stringify!($plugin_name), $kernel_ty,
            $(($kname, $func, $supported, $prio)),+
        );
    };
}