# SIMD Math Status
SIMDeez includes a native, pure-Rust SIMD math surface exposed through `simdeez::math` and `simdeez::prelude`.
The public surface covers:
- core log/exp: `log2_u35`, `exp2_u35`, `ln_u35`, `exp_u35`
- trig and inverse trig: `sin_u35`, `cos_u35`, `tan_u35`, `asin_u35`, `acos_u35`, `atan_u35`, `atan2_u35`
- hyperbolic and inverse hyperbolic: `sinh_u35`, `cosh_u35`, `tanh_u35`, `asinh_u35`, `acosh_u35`, `atanh_u35`
- binary misc: `log10_u35`, `hypot_u35`, `fmod`
## Current Shape
- Most `f32` families use portable SIMD by default.
- `f32 log2_u35` keeps an AVX2 override where local benchmarks justify it.
- Revived `f64` log/exp, inverse trig, and binary-misc families keep SIMD defaults.
- Some `f64` families intentionally remain mixed or scalar-reference where local rescue passes did not justify a SIMD default.
## Implementation Pattern
The maintained pattern is:
1. start with portable SIMD kernels
2. add dispatch glue without changing the public API
3. add backend-specific overrides only where profiling justifies them
4. keep scalar-lane patching centralized for exceptional semantics
The restored `f32` path in `src/math/f32/` is the clearest reference implementation of that layering.
## Benchmarks
Criterion targets for the math surface:
```bash
cargo bench --bench simd_math
cargo bench --bench simd_math_remaining_baseline
```
These benches report native scalar, runtime-selected, and forced backend variants such as `scalar`, `sse2`, `sse41`, `avx2`, and `avx512` when available.