22{
23
26
27
28
32
33
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);
36
37
39 X_vec = fl::simd::and_u32_4(X_vec, mask_255);
40 Y_vec = fl::simd::and_u32_4(Y_vec, mask_255);
41
42
43
44
45
46
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));
53
56
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];
63
71 };
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)));
75
76}
static constexpr int FRAC_BITS
platforms::simd_u32x4 simd_u32x4
FL_DISABLE_WARNING_PUSH unsigned char * B
static constexpr fl::i32 FP_ONE
static constexpr int HP_BITS
static constexpr int FP_BITS
static constexpr fl::i32 HP_ONE
static fl::i32 fade(fl::i32 t, const fl::i32 *table)
static fl::i32 lerp(fl::i32 t, fl::i32 a, fl::i32 b)
static fl::i32 grad(int hash, fl::i32 x, fl::i32 y)