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