112 {
113
114 constexpr i32 RAD_TO_A24 = 2670177;
115
116
117 auto offset_vec = simd::set1_u32_4(static_cast<u32>(radial_offset));
118 auto sum_vec = simd::add_i32_4(base_vec, offset_vec);
119 auto rad_const_vec = simd::set1_u32_4(static_cast<u32>(RAD_TO_A24));
120 auto angles_vec = simd::mulhi_su32_4(sum_vec, rad_const_vec);
121
123
124
125 auto lin_cx = simd::set1_u32_4(static_cast<u32>(linear_offset + cx_raw));
126 auto cy_vec = simd::set1_u32_4(static_cast<u32>(cy_raw));
127 auto nx_vec = simd::sub_i32_4(lin_cx,
128 simd::sll_u32_4(simd::mulhi32_i32_4(sc.cos_vals, dist_vec), 1));
129 auto ny_vec = simd::sub_i32_4(cy_vec,
130 simd::sll_u32_4(simd::mulhi32_i32_4(sc.sin_vals, dist_vec), 1));
131
132
134 nx_vec, ny_vec, fade_lut, perm);
135
136
137 auto zero = simd::set1_u32_4(0u);
138 auto fp_one = simd::set1_u32_4(
static_cast<u32
>(
static_cast<i32
>(1) <<
FP::FRAC_BITS));
139 auto clamped = simd::min_i32_4(simd::max_i32_4(raw_vec, zero), fp_one);
140 auto noise_scaled = simd::sub_i32_4(simd::sll_u32_4(clamped, 8), clamped);
141
142 auto max255 = simd::set1_u32_4(255u);
143 auto result = simd::mulhi32_i32_4(noise_scaled, rf_vec);
144 return simd::min_i32_4(simd::max_i32_4(
result, zero), max255);
145}
static constexpr int FRAC_BITS
FASTLED_FORCE_INLINE SinCos32_simd sincos32_simd(simd::simd_u32x4 angles) FL_NOEXCEPT
Process 4 angles simultaneously, returning vectorized sin/cos values SIMD-optimized: vectorized angle...
expected< T, E > result
Alias for expected (Rust-style naming)
static fl::simd::simd_u32x4 pnoise2d_raw_simd4_vec(fl::simd::simd_u32x4 nx_vec, fl::simd::simd_u32x4 ny_vec, const fl::i32 *fade_lut, const fl::u8 *perm)