use crate::DatumType;
#[macro_use]
mod madd;
#[macro_use]
mod fuse;
mod act;
mod act_f32;
#[cfg(all(test, target_arch = "wasm32", target_feature = "simd128"))]
mod dispatch_tests;
mod exp;
mod ln;
mod mmm_f32_gemm;
mod mmm_f32_gemv;
mod mmm_i32;
mod reduce;
pub use act::*;
pub use act_f32::*;
pub use exp::*;
pub use ln::*;
pub use mmm_f32_gemm::*;
pub use mmm_f32_gemv::*;
pub use mmm_i32::*;
fn preferred(
_isa: &crate::isa::IsaSet,
dt: DatumType,
query: &crate::mmm::Query,
_suitable: &[crate::mmm::Suitable],
) -> Option<&'static str> {
match (dt, query.n) {
(DatumType::I32, Some(1)) => None,
(DatumType::I32, _) => Some(wasm_i32_4x4.name.as_str()),
(DatumType::F32, Some(1)) => Some(match query.m.unwrap_or(0) {
0..=4 => &wasm_f32_4x1.name,
5..=8 => &wasm_f32_8x1.name,
9..=16 => &wasm_f32_16x1.name,
_ => &wasm_f32_32x1.name,
}),
(DatumType::F32, Some(n)) if n % 16 == 0 => Some(wasm_f32_4x16.name.as_str()),
(DatumType::F32, _) => Some(wasm_f32_8x8.name.as_str()),
_ => None,
}
}
inventory::submit! {
crate::mmm_tiers::MmmTier {
arch: Some(crate::isa::Arch::Wasm32Simd128),
precedence: 1,
name: "wasm-simd128",
applies: |_| true,
preferred,
}
}
pub fn isa_set() -> crate::isa::IsaSet {
use crate::isa::{Isa, IsaSet};
let mut set = IsaSet::of_arch(crate::isa::Arch::Wasm32Simd128).with(Isa::Wasm32Simd128);
if cfg!(target_feature = "relaxed-simd") {
set = set.with(Isa::Wasm32RelaxedSimd);
}
set
}