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