33 template <
typename IntT, detail::enable_if_
integer_t<IntT> = 0>
60 (
static_cast<u32
>(
mValue) * (
static_cast<u32
>(1) <<
FRAC_BITS)) / b.mValue));
99 (
static_cast<u32
>(
mValue) * (
static_cast<u32
>(1) <<
FRAC_BITS)) / b.mValue);
125 return from_raw(a.mValue % b.mValue);
147 return a < b ? a : b;
151 return a > b ? a : b;
155 return a + (b - a) *
t;
159 return x < lo ? lo : (
x > hi ? hi :
x);
167 constexpr u12x4 zero(0.0f);
168 constexpr u12x4 one(1.0f);
169 constexpr u12x4 two(2.0f);
170 constexpr u12x4 three(3.0f);
171 u12x4 t =
clamp((
x - edge0) / (edge1 - edge0), zero, one);
172 return t *
t * (three - two *
t);
187 if (base.mValue == 0)
return u12x4();
188 constexpr u12x4 one(1.0f);
189 if (
exp.mValue == 0)
return one;
190 if (base == one)
return one;
193 constexpr u16 kOneRaw =
static_cast<u16
>(
SCALE);
194 if (base.mValue >=
static_cast<u16
>(kOneRaw - 2) &&
195 base.mValue <= kOneRaw) {
214 : (v & 0x00000002u) ? r + 1
223 u32 val =
static_cast<u32
>(
x.mValue);
228 t =
static_cast<u32
>(
231 t =
static_cast<u32
>(
236 constexpr int IFRAC = 12;
237 constexpr u32 c0 = 5907;
238 constexpr u32 c1 = 2864;
239 constexpr u32 c2 = 1489;
240 constexpr u32 c3 = 437;
242 u32 t12 =
static_cast<u32
>(
t) << (IFRAC -
FRAC_BITS);
245 acc = c2 + ((acc * t12) >> IFRAC);
246 acc = c1 + ((acc * t12) >> IFRAC);
247 acc = c0 + ((acc * t12) >> IFRAC);
248 u32 frac_part = (acc * t12) >> IFRAC;
250 u16 frac4 =
static_cast<u16
>(frac_part >> (IFRAC -
FRAC_BITS));
262 u32 int_pow =
static_cast<u32
>(
SCALE) << n;
265 constexpr int IFRAC = 12;
266 constexpr u32 d0 = 2839;
267 constexpr u32 d1 = 986;
268 constexpr u32 d2 = 219;
269 constexpr u32 d3 = 52;
274 acc = d2 + ((acc * fr12) >> IFRAC);
275 acc = d1 + ((acc * fr12) >> IFRAC);
276 acc = d0 + ((acc * fr12) >> IFRAC);
277 constexpr u32 one12 = 1 << IFRAC;
278 u32 frac_pow12 = one12 + ((acc * fr12) >> IFRAC);
280 u32 frac_pow4 = frac_pow12 >> (IFRAC -
FRAC_BITS);
constexpr FASTLED_FORCE_INLINE u12x4 operator>>(int shift) const FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u12x4 fract(u12x4 x) FL_NOEXCEPT
constexpr bool operator>(u12x4 b) const FL_NOEXCEPT
constexpr bool operator<=(u12x4 b) const FL_NOEXCEPT
static FASTLED_FORCE_INLINE u12x4 pow(u12x4 base, u12x4 exp) FL_NOEXCEPT
constexpr FASTLED_FORCE_INLINE u12x4 operator<<(int shift) const FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u12x4 abs(u12x4 x) FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u12x4 min(u12x4 a, u12x4 b) FL_NOEXCEPT
constexpr u12x4(IntT n) FL_NOEXCEPT
constexpr FASTLED_FORCE_INLINE u12x4 operator*(u12x4 b) const FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u12x4 floor(u12x4 x) FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u12x4 mod(u12x4 a, u12x4 b) FL_NOEXCEPT
constexpr u12x4() FL_NOEXCEPT=default
static constexpr FASTLED_FORCE_INLINE u12x4 ceil(u12x4 x) FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u12x4 step(u12x4 edge, u12x4 x) FL_NOEXCEPT
constexpr u16 to_int() const FL_NOEXCEPT
static FASTLED_FORCE_INLINE u12x4 smoothstep(u12x4 edge0, u12x4 edge1, u12x4 x) FL_NOEXCEPT
constexpr FASTLED_FORCE_INLINE u12x4 operator/(u12x4 b) const FL_NOEXCEPT
constexpr FASTLED_FORCE_INLINE u12x4 operator+(u12x4 b) const FL_NOEXCEPT
FASTLED_FORCE_INLINE u12x4 & operator/=(u12x4 b) FL_NOEXCEPT
FASTLED_FORCE_INLINE u12x4 & operator-=(u12x4 b) FL_NOEXCEPT
constexpr FASTLED_FORCE_INLINE u12x4 operator-(u12x4 b) const FL_NOEXCEPT
static constexpr i32 SCALE
static constexpr FASTLED_FORCE_INLINE u12x4 max(u12x4 a, u12x4 b) FL_NOEXCEPT
FASTLED_FORCE_INLINE u12x4 & operator*=(u12x4 b) FL_NOEXCEPT
constexpr u12x4(u16 raw, RawTag) FL_NOEXCEPT
friend constexpr u12x4 operator*(u16 scalar, u12x4 fp) FL_NOEXCEPT
static constexpr int FRAC_BITS
FASTLED_FORCE_INLINE u12x4 & operator+=(u12x4 b) FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u12x4 sqrt(u12x4 x) FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u12x4 clamp(u12x4 x, u12x4 lo, u12x4 hi) FL_NOEXCEPT
constexpr FASTLED_FORCE_INLINE u12x4 operator*(u16 scalar) const FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u12x4 lerp(u12x4 a, u12x4 b, u12x4 t) FL_NOEXCEPT
constexpr float to_float() const FL_NOEXCEPT
constexpr bool operator<(u12x4 b) const FL_NOEXCEPT
static constexpr int _highest_bit_step(u32 v, int r) FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u12x4 from_raw(u16 raw) FL_NOEXCEPT
constexpr bool operator!=(u12x4 b) const FL_NOEXCEPT
constexpr bool operator>=(u12x4 b) const FL_NOEXCEPT
constexpr bool operator==(u12x4 b) const FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE int highest_bit(u32 v) FL_NOEXCEPT
static FASTLED_FORCE_INLINE u12x4 log2_fp(u12x4 x) FL_NOEXCEPT
constexpr u16 raw() const FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u12x4 rsqrt(u12x4 x) FL_NOEXCEPT
static constexpr int INT_BITS
static FASTLED_FORCE_INLINE u12x4 exp2_fp(u12x4 x) FL_NOEXCEPT
#define constexpr
Declares that it is possible to evaluate a value at compile time, introduced in C++11.
expected< T, E > result
Alias for expected (Rust-style naming)
enable_if< is_fixed_point< T >::value, T >::type exp(T x) FL_NOEXCEPT
FL_OPTIMIZE_FUNCTION constexpr u16 isqrt32(u32 x) FL_NOEXCEPT
Base definition for an LED controller.
#define FL_OPTIMIZATION_LEVEL_O3_BEGIN
#define FASTLED_FORCE_INLINE
#define FL_OPTIMIZATION_LEVEL_O3_END