Source code

Revision control

Copy as Markdown

Other Tools

use multiversion::multiversion;
#[multiversion(
targets("x86_64+avx", "x86+avx", "x86+sse", "aarch64+neon"),
dispatcher = "default"
)]
fn default_dispatch() {}
#[multiversion(
targets("x86_64+avx", "x86+avx", "x86+sse", "aarch64+neon"),
dispatcher = "static"
)]
fn static_dispatch() {}
#[cfg(feature = "std")]
#[multiversion(
targets("x86_64+avx", "x86+avx", "x86+sse", "aarch64+neon"),
dispatcher = "direct"
)]
fn direct_dispatch() {}
#[cfg(feature = "std")]
#[multiversion(
targets("x86_64+avx", "x86+avx", "x86+sse", "aarch64+neon"),
dispatcher = "indirect"
)]
fn indirect_dispatch() {}
// Since x86_64 always has sse, this should never result in runtime dispatch
#[multiversion(targets("x86_64+sse"), dispatcher = "default")]
fn skip_dispatch() {}
// Since aarch64 always has neon, this should never result in runtime dispatch
#[multiversion(targets("aarch64+neon"), dispatcher = "default")]
fn skip_dispatch_2() {}
#[test]
fn dispatchers() {
default_dispatch();
static_dispatch();
#[cfg(feature = "std")]
direct_dispatch();
#[cfg(feature = "std")]
indirect_dispatch();
skip_dispatch();
skip_dispatch_2();
}