34 template <
typename IntT, detail::enable_if_
integer_t<IntT> = 0>
39 template <
typename OtherFP>
40 constexpr u8x8(
const OtherFP& other,
71 return b.mValue == 0 ?
u8x8() :
from_raw(
static_cast<u16
>(
72 (
static_cast<u32
>(
mValue) * (
static_cast<u32
>(1) <<
FRAC_BITS)) / b.mValue));
113 if (b.mValue == 0)
return u8x8();
114 return from_raw(a.mValue % b.mValue);
136 return a < b ? a : b;
140 return a > b ? a : b;
144 return a + (b - a) *
t;
148 return x < lo ? lo : (
x > hi ? hi :
x);
156 constexpr u8x8 zero(0.0f);
157 constexpr u8x8 one(1.0f);
158 constexpr u8x8 two(2.0f);
159 constexpr u8x8 three(3.0f);
160 u8x8 t =
clamp((
x - edge0) / (edge1 - edge0), zero, one);
161 return t *
t * (three - two *
t);
176 if (base.mValue == 0)
return u8x8();
177 constexpr u8x8 one(1.0f);
178 if (
exp.mValue == 0)
return one;
179 if (base == one)
return one;
182 constexpr u16 kOneRaw =
static_cast<u16
>(
SCALE);
183 if (base.mValue >=
static_cast<u16
>(kOneRaw - 2) &&
184 base.mValue <= kOneRaw) {
203 : (v & 0x00000002u) ? r + 1
212 u32 val =
static_cast<u32
>(
x.mValue);
214 if (msb < 0)
return u8x8();
218 t =
static_cast<i32
>(
221 t =
static_cast<i32
>(
226 constexpr int IFRAC = 16;
227 constexpr i32 c0 = 94528;
228 constexpr i32 c1 = -45814;
229 constexpr i32 c2 = 23821;
230 constexpr i32 c3 = -6986;
232 i32 t16 =
static_cast<i32
>(
t) << (IFRAC -
FRAC_BITS);
235 acc = c2 +
static_cast<i32
>((
static_cast<i64>(acc) * t16) >> IFRAC);
236 acc = c1 +
static_cast<i32
>((
static_cast<i64>(acc) * t16) >> IFRAC);
237 acc = c0 +
static_cast<i32
>((
static_cast<i64>(acc) * t16) >> IFRAC);
238 i32 frac_part =
static_cast<i32
>((
static_cast<i64>(acc) * t16) >> IFRAC);
240 i16 frac8 =
static_cast<i16
>(frac_part >> (IFRAC -
FRAC_BITS));
242 i32 result_raw =
static_cast<i32
>(
static_cast<u32
>(int_part) <<
FRAC_BITS) + frac8;
244 if (result_raw < 0)
return u8x8();
245 return from_raw(
static_cast<u16
>(result_raw));
253 u8x8 fr =
x - fl_val;
257 if (n < 0)
return u8x8();
258 i32 int_pow =
static_cast<i32
>(
SCALE) << n;
261 constexpr int IFRAC = 16;
262 constexpr i32 d0 = 45427;
263 constexpr i32 d1 = 15775;
264 constexpr i32 d2 = 3497;
265 constexpr i32 d3 = 836;
270 acc = d2 +
static_cast<i32
>((
static_cast<i64>(acc) * fr16) >> IFRAC);
271 acc = d1 +
static_cast<i32
>((
static_cast<i64>(acc) * fr16) >> IFRAC);
272 acc = d0 +
static_cast<i32
>((
static_cast<i64>(acc) * fr16) >> IFRAC);
273 constexpr i32 one16 =
static_cast<i32
>(1) << IFRAC;
274 i32 frac_pow16 = one16 +
static_cast<i32
>((
static_cast<i64>(acc) * fr16) >> IFRAC);
276 i32 frac_pow8 = frac_pow16 >> (IFRAC -
FRAC_BITS);
constexpr bool operator>(u8x8 b) const FL_NOEXCEPT
constexpr float to_float() const FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u8x8 ceil(u8x8 x) FL_NOEXCEPT
constexpr FASTLED_FORCE_INLINE u8x8 operator*(u8x8 b) const FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u8x8 rsqrt(u8x8 x) FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u8x8 min(u8x8 a, u8x8 b) FL_NOEXCEPT
constexpr FASTLED_FORCE_INLINE u8x8 operator-(u8x8 b) const FL_NOEXCEPT
static constexpr int INT_BITS
static FASTLED_FORCE_INLINE u8x8 mod(u8x8 a, u8x8 b) FL_NOEXCEPT
static constexpr int _highest_bit_step(u32 v, int r) FL_NOEXCEPT
constexpr FASTLED_FORCE_INLINE u8x8 operator/(u8x8 b) const FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u8x8 clamp(u8x8 x, u8x8 lo, u8x8 hi) FL_NOEXCEPT
constexpr FASTLED_FORCE_INLINE u8x8 operator*(u16 scalar) const FL_NOEXCEPT
constexpr FASTLED_FORCE_INLINE u8x8 operator>>(int shift) const FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u8x8 max(u8x8 a, u8x8 b) FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u8x8 lerp(u8x8 a, u8x8 b, u8x8 t) FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u8x8 floor(u8x8 x) FL_NOEXCEPT
static FASTLED_FORCE_INLINE u8x8 pow(u8x8 base, u8x8 exp) FL_NOEXCEPT
static FASTLED_FORCE_INLINE u8x8 smoothstep(u8x8 edge0, u8x8 edge1, u8x8 x) FL_NOEXCEPT
constexpr FASTLED_FORCE_INLINE u8x8 operator+(u8x8 b) const FL_NOEXCEPT
friend constexpr u8x8 operator*(u16 scalar, u8x8 fp) FL_NOEXCEPT
constexpr u16 raw() const FL_NOEXCEPT
constexpr bool operator<=(u8x8 b) const FL_NOEXCEPT
static constexpr int FRAC_BITS
constexpr bool operator>=(u8x8 b) const FL_NOEXCEPT
constexpr u8x8(const OtherFP &other, typename fl::enable_if<(OtherFP::INT_BITS<=INT_BITS) &&(OtherFP::FRAC_BITS<=FRAC_BITS) &&(OtherFP::INT_BITS !=INT_BITS||OtherFP::FRAC_BITS !=FRAC_BITS), int >::type=0) FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u8x8 from_raw(u16 raw) FL_NOEXCEPT
static FASTLED_FORCE_INLINE u8x8 exp2_fp(u8x8 x) FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u8x8 abs(u8x8 x) FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u8x8 step(u8x8 edge, u8x8 x) FL_NOEXCEPT
static constexpr i32 SCALE
static constexpr FASTLED_FORCE_INLINE u8x8 sqrt(u8x8 x) FL_NOEXCEPT
constexpr FASTLED_FORCE_INLINE u8x8 operator<<(int shift) const FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE u8x8 fract(u8x8 x) FL_NOEXCEPT
constexpr bool operator!=(u8x8 b) const FL_NOEXCEPT
constexpr bool operator==(u8x8 b) const FL_NOEXCEPT
constexpr u8x8(u16 raw, RawTag) FL_NOEXCEPT
constexpr u16 to_int() const FL_NOEXCEPT
static FASTLED_FORCE_INLINE u8x8 log2_fp(u8x8 x) FL_NOEXCEPT
static constexpr FASTLED_FORCE_INLINE int highest_bit(u32 v) FL_NOEXCEPT
constexpr u8x8() FL_NOEXCEPT=default
constexpr bool operator<(u8x8 b) const FL_NOEXCEPT
constexpr u8x8(IntT n) 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