21 const fl::i32 *fade_lut,
const fl::u8 *perm)
34 x_frac_vec = fl::simd::sll_u32_4(x_frac_vec, 8);
35 y_frac_vec = fl::simd::sll_u32_4(y_frac_vec, 8);
39 X_vec = fl::simd::and_u32_4(X_vec, mask_255);
40 Y_vec = fl::simd::and_u32_4(Y_vec, mask_255);
48 auto lane = [&](
int i) -> fl::i32 {
49 fl::u32 Xi = fl::simd::extract_u32_4(X_vec, i);
50 fl::u32 Yi = fl::simd::extract_u32_4(Y_vec, i);
51 fl::i32 xf =
static_cast<fl::i32
>(fl::simd::extract_u32_4(x_frac_vec, i));
52 fl::i32 yf =
static_cast<fl::i32
>(fl::simd::extract_u32_4(y_frac_vec, i));
57 int A = perm[Xi & 255] + Yi;
58 int AA = perm[A & 255];
59 int AB = perm[(A + 1) & 255];
60 int B = perm[(Xi + 1) & 255] + Yi;
61 int BA = perm[
B & 255];
62 int BB = perm[(
B + 1) & 255];
72 return fl::simd::set_u32_4(
73 static_cast<fl::u32
>(lane(0)),
static_cast<fl::u32
>(lane(1)),
74 static_cast<fl::u32
>(lane(2)),
static_cast<fl::u32
>(lane(3)));