|
FastLED 3.9.15
|
Compile-time linker keep-alive hook for a single fl::Bus.
SFINAE helpers for detecting a static ENCODER member on timing structs.
Used by the legacy FastLED.addLeds<..., fl::Bus B>(...) template path (see #2460). When B != Bus::AUTO, naming BusTraits<B>::instance here is what makes --gc-sections retain the named driver's translation unit even though the legacy controller body never invokes the singleton directly. The Bus::AUTO specialization is a no-op so calls without an explicit Bus param remain byte-for-byte identical to pre-#2460 code.
Namespaces | |
| namespace | anonymous_namespace{allocator.cpp.hpp} |
| namespace | anonymous_namespace{singleton.cpp.hpp} |
| namespace | anonymous_namespace{wait_spin_budget.cpp.hpp} |
| namespace | gamma_constexpr |
Typedefs | |
| template<typename T> | |
| using | enable_if_integer_t |
| typedef const void * | pgm_p |
Enumerations | |
| enum class | HexIntWidth : u8 { Width8 = 8 , Width16 = 16 , Width32 = 32 , Width64 = 64 } |
| Integer width classification for hex conversion. More... | |
| enum class | log_kind : fl::u8 { WARN = 0 , ERROR = 1 , INFO = 2 } |
Functions | |
| void FL_IRAM | async_log_flush_timer_isr (void *user_data) |
| template<typename F> | |
| F | atan2_full_ (F y, F x) FL_NOEXCEPT |
| template<typename F> | |
| F | atan_full_ (F u) FL_NOEXCEPT |
| template<typename F> | |
| F | atan_poly_unit_ (F u) FL_NOEXCEPT |
| template<Bus B> | |
| int | bus_register_one () FL_NOEXCEPT |
Helper used by enableDrivers<Bus...>() to expand the parameter pack. | |
| template<typename InfoProvider> | |
| void | checkLoggerEnabled () |
| Check if logger is enabled and print error once if not. | |
| template<typename F> | |
| F | cos_poly_quarterturn_ (F x) FL_NOEXCEPT |
| template<typename F> | |
| F | cos_reduce_ (F x) FL_NOEXCEPT |
| constexpr fl::u32 | cycles_from_ns (fl::u32 ns, fl::u32 hz) FL_NOEXCEPT |
| Convert nanoseconds to CPU cycles. | |
| constexpr fl::u32 | cycles_from_ns_default (fl::u32 ns) FL_NOEXCEPT |
| Compute cycles using default CPU frequency (compile-time) | |
| void | delay_impl (u32 ms, bool run_async=true) FL_NOEXCEPT |
| Internal delay implementation used by the public fl::delay wrapper. | |
| template<typename T> | |
| fl::enable_if< fl::is_floating_point< T >::value, T >::type | div_by_count (T sum, fl::size count) |
| template<typename T> | |
| fl::enable_if< fl::is_integral< T >::value, T >::type | div_by_count (T sum, fl::size count) |
| template<typename T> | |
| fl::enable_if<!fl::is_floating_point< T >::value &&!fl::is_integral< T >::value, T >::type | div_by_count (T sum, fl::size count) |
| template<typename T> | |
| fl::enable_if< has_copy_ctor< T >::value, void(*)(void *, constvoid *) FL_NOEXCEPT >::type | get_copy_construct_fn () FL_NOEXCEPT |
| template<typename T> | |
| fl::enable_if<!has_copy_ctor< T >::value, void(*)(void *, constvoid *) FL_NOEXCEPT >::type | get_copy_construct_fn () FL_NOEXCEPT |
| template<typename T> | |
| fl::enable_if< has_default_ctor< T >::value, void(*)(void *) FL_NOEXCEPT >::type | get_default_construct_fn () FL_NOEXCEPT |
| template<typename T> | |
| fl::enable_if<!has_default_ctor< T >::value, void(*)(void *) FL_NOEXCEPT >::type | get_default_construct_fn () FL_NOEXCEPT |
| template<size_t Size> | |
| constexpr HexIntWidth | get_hex_int_width () FL_NOEXCEPT |
| Compile-time integer width determination (default - triggers error) | |
| template<> | |
| constexpr HexIntWidth | get_hex_int_width< 1 > () FL_NOEXCEPT |
| Specialization for 1-byte types (int8_t, uint8_t, char, etc.) | |
| template<> | |
| constexpr HexIntWidth | get_hex_int_width< 2 > () FL_NOEXCEPT |
| Specialization for 2-byte types (int16_t, uint16_t, short, etc.) | |
| template<> | |
| constexpr HexIntWidth | get_hex_int_width< 4 > () FL_NOEXCEPT |
| Specialization for 4-byte types (int32_t, uint32_t, int, etc.) | |
| template<> | |
| constexpr HexIntWidth | get_hex_int_width< 8 > () FL_NOEXCEPT |
| Specialization for 8-byte types (i64, u64, long long, etc.) | |
| template<typename T> | |
| fl::enable_if< has_move_ctor< T >::value, void(*)(void *, void *) FL_NOEXCEPT >::type | get_move_construct_fn () FL_NOEXCEPT |
| template<typename T> | |
| fl::enable_if<!has_move_ctor< T >::value, void(*)(void *, void *) FL_NOEXCEPT >::type | get_move_construct_fn () FL_NOEXCEPT |
| template<typename T> | |
| fl::enable_if< is_swappable< T >::value, void(*)(void *, void *) FL_NOEXCEPT >::type | get_swap_fn () FL_NOEXCEPT |
| template<typename T> | |
| fl::enable_if<!is_swappable< T >::value, void(*)(void *, void *) FL_NOEXCEPT >::type | get_swap_fn () FL_NOEXCEPT |
| template<typename T> | |
| fl::enable_if< has_move_ctor< T >::value, void(*)(void *, void *, fl::size) FL_NOEXCEPT >::type | get_uninitialized_move_n_fn () FL_NOEXCEPT |
| template<typename T> | |
| fl::enable_if<!has_move_ctor< T >::value, void(*)(void *, void *, fl::size) FL_NOEXCEPT >::type | get_uninitialized_move_n_fn () FL_NOEXCEPT |
| fl::u32 | getWaitSpinBudgetUs () FL_NOEXCEPT |
| Get the current tiered-wait spin budget (microseconds). | |
| template<typename Iterator, typename Compare> | |
| void | heap_sort (Iterator first, Iterator last, Compare comp) FL_NOEXCEPT |
| template<typename Iterator, typename Compare> | |
| void | heapify (Iterator first, Iterator last, Compare comp) FL_NOEXCEPT |
| fl::string | hex (u64 value, HexIntWidth width, bool is_negative, bool uppercase, bool pad_to_width) FL_NOEXCEPT |
| Internal hex conversion function (implementation in charconv.cpp) | |
| template<typename IntT> | |
| constexpr bool | in_unsigned_range (IntT n, u32 max_u) FL_NOEXCEPT |
| template<typename Iterator, typename Compare> | |
| void | insertion_sort (Iterator first, Iterator last, Compare comp) FL_NOEXCEPT |
| template<typename T> | |
| constexpr int | integer_digits10_func () FL_NOEXCEPT |
| template<typename T> | |
| constexpr int | integer_digits_func () FL_NOEXCEPT |
| void | integer_out_of_range_for_fixed_point_type () FL_NOEXCEPT |
| template<typename F> | |
| F | ldexp_loop_ (F value, int exp) FL_NOEXCEPT |
| FL_NO_INLINE void | log_emit (log_kind kind, const char *file, int line, fl::sstream &body) FL_NOEXCEPT |
| template<typename F> | |
| F | log_natural_ (F value) FL_NOEXCEPT |
| template<typename Iterator, typename T, typename Compare> | |
| Iterator | lower_bound_impl (Iterator first, Iterator last, const T &value, Compare comp) FL_NOEXCEPT |
| template<typename Fn, fl::size... Is> | |
| constexpr LutArray< u16, sizeof...(Is)> | make_lut_u16 (fl::index_sequence< Is... >) FL_NOEXCEPT |
| template<typename Fn, fl::size... Is> | |
| constexpr LutArray< u8, sizeof...(Is)> | make_lut_u8 (fl::index_sequence< Is... >) FL_NOEXCEPT |
| json | makeJsonRpcError (int code, const fl::string &message, const json &id) |
| template<typename Iterator, typename Compare> | |
| Iterator | median_of_three (Iterator first, Iterator middle, Iterator last, Compare comp) FL_NOEXCEPT |
| template<typename Iterator, typename Compare> | |
| void | merge_inplace (Iterator first, Iterator middle, Iterator last, Compare comp) FL_NOEXCEPT |
| template<typename Iterator, typename Compare> | |
| void | mergesort_impl (Iterator first, Iterator last, Compare comp) FL_NOEXCEPT |
| void | not_null_assert_failed (const char *message) |
| template<typename Iterator, typename Compare> | |
| Iterator | partition (Iterator first, Iterator last, Compare comp) FL_NOEXCEPT |
| void | printLoggerDisabledError (const char *category_name, const char *define_name) |
| Print error message for disabled logger (non-template helper) Called from checkLoggerEnabled template function IMPORTANT: This must NOT be inline - needs external linkage for cross-TU calls. | |
| void | qsort_impl (char *base, size_t nmemb, size_t size, qsort_compare_fn compar) |
| void | qsort_swap (char *a, char *b, size_t size) |
| template<typename Iterator, typename Compare> | |
| void | quicksort_impl (Iterator first, Iterator last, Compare comp) FL_NOEXCEPT |
| template<typename Iterator> | |
| void | rotate_impl (Iterator first, Iterator middle, Iterator last) FL_NOEXCEPT |
| void | setWaitSpinBudgetUs (fl::u32 budget_us) FL_NOEXCEPT |
| Set the tiered-wait spin budget (microseconds). | |
| template<typename Iterator, typename Compare> | |
| void | sift_down (Iterator first, Iterator start, Iterator end, Compare comp) FL_NOEXCEPT |
| template<typename F> | |
| F | sin_poly_quarterturn_ (F x) FL_NOEXCEPT |
| template<typename F> | |
| F | sin_reduce_ (F x) FL_NOEXCEPT |
| void * | singleton_registry_get (const char *key) |
| void | singleton_registry_set (const char *key, void *value) |
| void * | slab_allocator_registry_get (fl::size block_size, fl::size slab_size) |
| void | slab_allocator_registry_set (fl::size block_size, fl::size slab_size, void *allocator) |
| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void | spread_transpose16_symbol (const u8 l[16], u8 out[16]) |
| Transpose one symbol of 16 lanes (16 input bytes) into 16 output bytes: 8 pulses × 2 bytes, low byte = lanes 0-7, high byte = lanes 8-15, pulse order 7..0 (out[0] = pulse 7 low). | |
| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void | spread_transpose8_symbol (const u8 l[8], u8 out[8]) |
| Transpose one symbol of 8 lanes (8 input bytes) into 8 output bytes: 8 pulses × 1 byte (bit L = lane L), pulse order 7..0 (out[0] = pulse 7). | |
| FASTLED_FORCE_INLINE u32 | spreadA (u8 v) |
| Pulses 7,6,5,4 of v (byte j = bit (7-j)). Depends only on the high nibble. | |
| FASTLED_FORCE_INLINE u32 | spreadB (u8 v) |
| Pulses 3,2,1,0 of v (byte j = bit (3-j)). Depends only on the low nibble. | |
| template<typename F> | |
| F | sqrt_newton_ (F value) FL_NOEXCEPT |
| template<typename T> | |
| constexpr bool | test_encoder (...) FL_NOEXCEPT |
| template<typename T> | |
| constexpr auto | test_encoder (int) FL_NOEXCEPT -> decltype(T::ENCODER, true) |
| void | to_string (const fl::u16 *bit_data, fl::u32 bit_count, string *dst) |
| template<typename TSrcPalette, typename TDestPalette> | |
| void | UpscalePaletteInterpolated (const TSrcPalette &srcpal, TDestPalette &destpal) |
| template<typename TSrcPalette, typename TDestPalette> | |
| void | UpscalePaletteRepeat (const TSrcPalette &srcpal, TDestPalette &destpal) |
| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void | wave3_convert_byte_to_wave3byte (u8 byte_value, const Wave3BitExpansionLut &lut, Wave3Byte *output) |
| Helper: Convert byte to Wave3Byte using nibble LUT (internal use only) | |
| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void | wave3_transpose_16 (const Wave3Byte lane_waves[16], u8 output[16 *sizeof(Wave3Byte)]) |
| Transpose 16 lanes of Wave3Byte data into interleaved format. | |
| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void | wave3_transpose_2 (const Wave3Byte lane_waves[2], u8 output[2 *sizeof(Wave3Byte)]) |
| Transpose 2 lanes of Wave3Byte data into interleaved format. | |
| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void | wave3_transpose_4 (const Wave3Byte lane_waves[4], u8 output[4 *sizeof(Wave3Byte)]) |
| Transpose 4 lanes of Wave3Byte data into interleaved format. | |
| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void | wave3_transpose_8 (const Wave3Byte lane_waves[8], u8 output[8 *sizeof(Wave3Byte)]) |
| Transpose 8 lanes of Wave3Byte data into interleaved format. | |
| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void | wave8_convert_byte_to_wave8byte (u8 byte_value, const Wave8BitExpansionLut &lut, Wave8Byte *output) |
| Helper: Convert byte to Wave8Byte using nibble LUT (internal use only) | |
| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void | wave8_expand_byte (u8 byte_value, const Wave8ByteExpansionLut &lut, Wave8Byte *output) |
| Byte-indexed expansion (#2526): one indexed 8-byte copy. | |
| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void | wave8_transpose_16 (const Wave8Byte lane_waves[16], u8 output[16 *sizeof(Wave8Byte)]) |
| Transpose 16 lanes of Wave8Byte data into interleaved format. | |
| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void | wave8_transpose_16_bf1 (const u8 lanes[16], u8 W0, u8 W1, u8 output[16 *sizeof(Wave8Byte)]) |
| BF1: chipset-aware direct encode for Wave8 16-lane (#2548 deep-dive). | |
| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void | wave8_transpose_16x2_pipe2 (const Wave8Byte lane_waves_a[16], const Wave8Byte lane_waves_b[16], u8 output_a[16 *sizeof(Wave8Byte)], u8 output_b[16 *sizeof(Wave8Byte)]) |
| Pipe2: transpose 16-lane × 2-byte-positions in one fused call. | |
| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void | wave8_transpose_16x4_bf1_pipe4 (const u8 lanes_a[16], const u8 lanes_b[16], const u8 lanes_c[16], const u8 lanes_d[16], u8 W0, u8 W1, u8 output_a[16 *sizeof(Wave8Byte)], u8 output_b[16 *sizeof(Wave8Byte)], u8 output_c[16 *sizeof(Wave8Byte)], u8 output_d[16 *sizeof(Wave8Byte)]) |
| BF1 + pipe4: 4-position software-pipelined BF1 (#2548 deep-dive). | |
| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void | wave8_transpose_16x4_pipe4 (const Wave8Byte lane_waves_a[16], const Wave8Byte lane_waves_b[16], const Wave8Byte lane_waves_c[16], const Wave8Byte lane_waves_d[16], u8 output_a[16 *sizeof(Wave8Byte)], u8 output_b[16 *sizeof(Wave8Byte)], u8 output_c[16 *sizeof(Wave8Byte)], u8 output_d[16 *sizeof(Wave8Byte)]) |
| Pipe4: transpose 16-lane × 4-byte-positions in one fused call. | |
| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void | wave8_transpose_2 (const Wave8Byte lane_waves[2], u8 output[2 *sizeof(Wave8Byte)]) |
| Transpose 2 lanes of Wave8Byte data into interleaved format. | |
| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void | wave8_transpose_2_bf1 (const u8 lanes[2], u8 W0, u8 W1, u8 output[2 *sizeof(Wave8Byte)]) |
| BF1 for 2-lane Wave8. | |
| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void | wave8_transpose_4 (const Wave8Byte lane_waves[4], u8 output[4 *sizeof(Wave8Byte)]) |
| Transpose 4 lanes of Wave8Byte data into interleaved format. | |
| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void | wave8_transpose_4_bf1 (const u8 lanes[4], u8 W0, u8 W1, u8 output[4 *sizeof(Wave8Byte)]) |
| BF1 for 4-lane Wave8. | |
| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void | wave8_transpose_8 (const Wave8Byte lane_waves[8], u8 output[8 *sizeof(Wave8Byte)]) |
| Transpose 8 lanes of Wave8Byte data into interleaved format. | |
| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void | wave8_transpose_8_bf1 (const u8 lanes[8], u8 W0, u8 W1, u8 output[8 *sizeof(Wave8Byte)]) |
| BF1 for 8-lane Wave8 — same algebraic identity as 16-lane BF1. | |
Variables | |
| constexpr u32 | kSpreadNibble [16] |
| kSpreadNibble[n] places the 4 bits of nibble n at bit 0 of 4 separate bytes: byte0 = bit3(n), byte1 = bit2(n), byte2 = bit1(n), byte3 = bit0(n). | |
| constexpr u8 | kTranspose2_4_LUT [4] |
| constexpr u8 | kTranspose4_16_LUT [16] |
| struct fl::detail::integer_max_helper |
Inheritance diagram for fl::detail::integer_max_helper< T, IsSigned >:| struct fl::detail::integer_min_helper |
Inheritance diagram for fl::detail::integer_min_helper< T, IsSigned >:| struct fl::detail::LutArray |
| struct fl::detail::make_shared_tag |
| struct fl::detail::MethodSchema |
Inheritance diagram for fl::detail::MethodSchema< Sig >:| struct fl::detail::no_tracking_tag |
| class fl::detail::ResponseAwareInvoker |
Inheritance diagram for fl::detail::ResponseAwareInvoker< Sig >:| struct fl::detail::RpcEntry |
Collaboration diagram for fl::detail::RpcEntry:| Class Members | ||
|---|---|---|
| string | mDescription | |
| shared_ptr< ErasedInvoker > | mInvoker | |
| bool | mIsResponseAware = false | |
| RpcMode | mMode = fl::RpcMode::SYNC | |
| function< void(ResponseSend &, const json &)> | mResponseAwareFn | |
| shared_ptr< ErasedSchemaGenerator > | mSchemaGenerator | |
| vector< string > | mTags | |
| shared_ptr< CallableHolderBase > | mTypedCallable | |
| const void * | mTypeTag = nullptr | |
| class fl::detail::TypedInvoker |
Inheritance diagram for fl::detail::TypedInvoker< Sig >:| using fl::detail::enable_if_integer_t |
| typedef const void* fl::detail::pgm_p |
|
strong |
|
strong |
| void FL_IRAM fl::detail::async_log_flush_timer_isr | ( | void * | user_data | ) |
Definition at line 44 of file async_logger.cpp.hpp.
References FL_IRAM, and state.
Referenced by fl::AsyncLogger::enableBackgroundFlush().
Here is the caller graph for this function:
|
inline |
Definition at line 479 of file math.cpp.hpp.
References atan_full_(), FL_NOEXCEPT, fl::x, and fl::y.
Referenced by fl::atan2_impl_double(), and fl::atan2_impl_float().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inline |
Definition at line 467 of file math.cpp.hpp.
References atan_poly_unit_(), and FL_NOEXCEPT.
Referenced by fl::asin_impl_double(), fl::asin_impl_float(), atan2_full_(), fl::atan_impl_double(), and fl::atan_impl_float().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inline |
Definition at line 454 of file math.cpp.hpp.
References FL_NOEXCEPT.
Referenced by atan_full_().
Here is the caller graph for this function:
|
inline |
Helper used by enableDrivers<Bus...>() to expand the parameter pack.
Each call ODR-uses BusTraits<B>::registerWithManager(), which lazily constructs the driver singleton AND registers it with ChannelManager.
Definition at line 54 of file bus_traits.h.
References FL_NOEXCEPT.
Referenced by fl::enableDrivers().
Here is the caller graph for this function:
|
inline |
Check if logger is enabled and print error once if not.
| InfoProvider | Type providing category name, define name, and enabled status |
Definition at line 80 of file async_logger.h.
References checkLoggerEnabled(), and printLoggerDisabledError().
Referenced by checkLoggerEnabled(), and fl::get_async_logger_by_index().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inline |
Definition at line 177 of file math.cpp.hpp.
References FL_NOEXCEPT, and fl::x.
|
inline |
Definition at line 202 of file math.cpp.hpp.
References FL_NOEXCEPT, sin_reduce_(), and fl::x.
Referenced by fl::cos_impl_double(), fl::cos_impl_float(), fl::tan_impl_double(), and fl::tan_impl_float().
Here is the call graph for this function:
Here is the caller graph for this function:
|
constexpr |
Convert nanoseconds to CPU cycles.
| ns | Number of nanoseconds |
| hz | CPU frequency in Hz |
Definition at line 29 of file delay.h.
References FL_NOEXCEPT.
Referenced by cycles_from_ns_default().
Here is the caller graph for this function:
|
constexpr |
Compute cycles using default CPU frequency (compile-time)
| ns | Number of nanoseconds |
Definition at line 38 of file delay.h.
References cycles_from_ns(), and FL_NOEXCEPT.
Here is the call graph for this function:| void fl::detail::delay_impl | ( | u32 | ms, |
| bool | run_async = true ) |
Internal delay implementation used by the public fl::delay wrapper.
| ms | Milliseconds to delay |
| run_async | If true, pump async tasks during delay (only on platforms with SKETCH_HAS_LARGE_MEMORY==1) |
Definition at line 177 of file delay.cpp.hpp.
References FL_NOEXCEPT, and fl::task::run().
Referenced by fl::delay(), fl::delayMillis(), and fl::delayMs().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inline |
Definition at line 11 of file div_by_count.h.
Referenced by fl::detail::SavitzkyGolayFilterImpl< T, N >::recompute(), fl::detail::AlphaTrimmedMeanImpl< T, N >::update(), fl::detail::AlphaTrimmedMeanImpl< T, N >::update(), and fl::detail::HampelFilterImpl< T, N >::update().
Here is the caller graph for this function:
|
inline |
Definition at line 15 of file div_by_count.h.
|
inline |
Definition at line 20 of file div_by_count.h.
| fl::enable_if< has_copy_ctor< T >::value, void(*)(void *, constvoid *) FL_NOEXCEPT >::type fl::detail::get_copy_construct_fn | ( | ) |
Definition at line 223 of file basic_vector.h.
References FL_NOEXCEPT.
Referenced by fl::vector_element_ops_for().
Here is the caller graph for this function:| fl::enable_if<!has_copy_ctor< T >::value, void(*)(void *, constvoid *) FL_NOEXCEPT >::type fl::detail::get_copy_construct_fn | ( | ) |
Definition at line 232 of file basic_vector.h.
References FL_NOEXCEPT.
| fl::enable_if< has_default_ctor< T >::value, void(*)(void *) FL_NOEXCEPT >::type fl::detail::get_default_construct_fn | ( | ) |
Definition at line 209 of file basic_vector.h.
References FL_NOEXCEPT.
Referenced by fl::vector_element_ops_for().
Here is the caller graph for this function:| fl::enable_if<!has_default_ctor< T >::value, void(*)(void *) FL_NOEXCEPT >::type fl::detail::get_default_construct_fn | ( | ) |
Definition at line 216 of file basic_vector.h.
References FL_NOEXCEPT.
|
constexpr |
Compile-time integer width determination (default - triggers error)
Definition at line 60 of file charconv.h.
References FL_NOEXCEPT, FL_STATIC_ASSERT, get_hex_int_width(), and Width8.
Referenced by get_hex_int_width(), get_hex_int_width< 1 >(), get_hex_int_width< 2 >(), get_hex_int_width< 4 >(), get_hex_int_width< 8 >(), and fl::to_hex().
Here is the call graph for this function:
Here is the caller graph for this function:
|
constexpr |
Specialization for 1-byte types (int8_t, uint8_t, char, etc.)
Definition at line 67 of file charconv.h.
References FL_NOEXCEPT, get_hex_int_width(), and Width8.
Here is the call graph for this function:
|
constexpr |
Specialization for 2-byte types (int16_t, uint16_t, short, etc.)
Definition at line 73 of file charconv.h.
References FL_NOEXCEPT, get_hex_int_width(), and Width16.
Here is the call graph for this function:
|
constexpr |
Specialization for 4-byte types (int32_t, uint32_t, int, etc.)
Definition at line 79 of file charconv.h.
References FL_NOEXCEPT, get_hex_int_width(), and Width32.
Here is the call graph for this function:
|
constexpr |
Specialization for 8-byte types (i64, u64, long long, etc.)
Definition at line 85 of file charconv.h.
References FL_NOEXCEPT, get_hex_int_width(), and Width64.
Here is the call graph for this function:| fl::enable_if< has_move_ctor< T >::value, void(*)(void *, void *) FL_NOEXCEPT >::type fl::detail::get_move_construct_fn | ( | ) |
Definition at line 255 of file basic_vector.h.
References FL_NOEXCEPT.
Referenced by fl::vector_element_ops_for().
Here is the caller graph for this function:| fl::enable_if<!has_move_ctor< T >::value, void(*)(void *, void *) FL_NOEXCEPT >::type fl::detail::get_move_construct_fn | ( | ) |
Definition at line 263 of file basic_vector.h.
References FL_NOEXCEPT.
| fl::enable_if< is_swappable< T >::value, void(*)(void *, void *) FL_NOEXCEPT >::type fl::detail::get_swap_fn | ( | ) |
Definition at line 270 of file basic_vector.h.
References FL_NOEXCEPT.
Referenced by fl::vector_element_ops_for().
Here is the caller graph for this function:| fl::enable_if<!is_swappable< T >::value, void(*)(void *, void *) FL_NOEXCEPT >::type fl::detail::get_swap_fn | ( | ) |
Definition at line 282 of file basic_vector.h.
References FL_NOEXCEPT.
| fl::enable_if< has_move_ctor< T >::value, void(*)(void *, void *, fl::size) FL_NOEXCEPT >::type fl::detail::get_uninitialized_move_n_fn | ( | ) |
Definition at line 289 of file basic_vector.h.
References FL_NOEXCEPT.
Referenced by fl::vector_element_ops_for().
Here is the caller graph for this function:| fl::enable_if<!has_move_ctor< T >::value, void(*)(void *, void *, fl::size) FL_NOEXCEPT >::type fl::detail::get_uninitialized_move_n_fn | ( | ) |
Definition at line 301 of file basic_vector.h.
References FL_NOEXCEPT.
| fl::u32 fl::detail::getWaitSpinBudgetUs | ( | ) |
Get the current tiered-wait spin budget (microseconds).
Definition at line 29 of file wait_spin_budget.cpp.hpp.
References FL_NOEXCEPT.
Referenced by CFastLED::_getWaitSpinBudgetUs(), fl::ChannelManager::waitForCondition(), and fl::IChannelDriver::waitForCondition().
Here is the caller graph for this function:| void fl::detail::heap_sort | ( | Iterator | first, |
| Iterator | last, | ||
| Compare | comp ) |
Definition at line 398 of file algorithm.h.
References fl::end(), FL_NOEXCEPT, heapify(), sift_down(), and fl::swap().
Here is the call graph for this function:| void fl::detail::heapify | ( | Iterator | first, |
| Iterator | last, | ||
| Compare | comp ) |
Definition at line 385 of file algorithm.h.
References FL_NOEXCEPT, and sift_down().
Referenced by heap_sort().
Here is the call graph for this function:
Here is the caller graph for this function:| fl::string fl::detail::hex | ( | u64 | value, |
| HexIntWidth | width, | ||
| bool | is_negative, | ||
| bool | uppercase, | ||
| bool | pad_to_width ) |
Internal hex conversion function (implementation in charconv.cpp)
| value | The unsigned 64-bit value to convert |
| width | The bit width classification of the original type |
| is_negative | Whether the original value was negative (for signed types) |
| uppercase | If true, use uppercase hex digits (A-F), otherwise lowercase (a-f) |
| pad_to_width | If true, pad with leading zeros to full type width |
Definition at line 12 of file charconv.cpp.hpp.
References fl::numeric_limits< char >::digits, fl::type_rank< T >::value, fl::width, Width16, Width32, Width64, and Width8.
Referenced by fl::to_hex().
Here is the caller graph for this function:
|
constexpr |
Definition at line 39 of file traits.h.
References FL_NOEXCEPT, and fl::fl::is_signed< T >::value.
Referenced by fl::detail::int_to_fixed< IntBits, FracBits, false >::from_unsigned(), and fl::detail::int_to_fixed< IntBits, FracBits, true >::from_unsigned().
Here is the caller graph for this function:| void fl::detail::insertion_sort | ( | Iterator | first, |
| Iterator | last, | ||
| Compare | comp ) |
Definition at line 298 of file algorithm.h.
References FL_NOEXCEPT, fl::fl::move(), and fl::type_rank< T >::value.
Referenced by mergesort_impl(), quicksort_impl(), and fl::sort_small().
Here is the call graph for this function:
Here is the caller graph for this function:
|
constexpr |
Definition at line 30 of file limits.h.
References FL_NOEXCEPT.
|
constexpr |
Definition at line 17 of file limits.h.
References FL_NOEXCEPT.
|
inline |
Definition at line 33 of file traits.h.
References FL_NOEXCEPT.
Referenced by fl::detail::int_to_fixed< IntBits, FracBits, false >::from_signed(), fl::detail::int_to_fixed< IntBits, FracBits, true >::from_signed(), fl::detail::int_to_fixed< IntBits, FracBits, false >::from_unsigned(), and fl::detail::int_to_fixed< IntBits, FracBits, true >::from_unsigned().
Here is the caller graph for this function:
|
inline |
Definition at line 623 of file math.cpp.hpp.
References fl::exp(), FL_NOEXCEPT, and fl::type_rank< T >::value.
Referenced by fl::ldexp_impl_double(), and fl::ldexp_impl_float().
Here is the call graph for this function:
Here is the caller graph for this function:| void fl::detail::log_emit | ( | log_kind | kind, |
| const char * | file, | ||
| int | line, | ||
| fl::sstream & | body ) |
Definition at line 31 of file log.cpp.hpp.
References fl::basic_string::c_str(), ERROR, FL_NO_INLINE, FL_NOEXCEPT, INFO, fl::println(), and WARN.
Here is the call graph for this function:
|
inline |
Definition at line 214 of file math.cpp.hpp.
References FL_NOEXCEPT, and fl::type_rank< T >::value.
Referenced by fl::log10_impl_double(), fl::log10_impl_float(), fl::log_impl_double(), fl::log_impl_float(), fl::pow_impl_double(), and fl::pow_impl_float().
Here is the caller graph for this function:| Iterator fl::detail::lower_bound_impl | ( | Iterator | first, |
| Iterator | last, | ||
| const T & | value, | ||
| Compare | comp ) |
Definition at line 442 of file algorithm.h.
References FL_NOEXCEPT, fl::step(), and fl::type_rank< T >::value.
Referenced by fl::lower_bound(), fl::lower_bound(), and merge_inplace().
Here is the call graph for this function:
Here is the caller graph for this function:
|
constexpr |
Definition at line 241 of file gamma_lut.h.
References FL_NOEXCEPT.
|
constexpr |
Definition at line 235 of file gamma_lut.h.
References FL_NOEXCEPT.
|
inline |
Definition at line 61 of file rpc_registry.h.
References fl::json::object(), and fl::json::set().
Referenced by fl::Rpc::handle().
Here is the call graph for this function:
Here is the caller graph for this function:| Iterator fl::detail::median_of_three | ( | Iterator | first, |
| Iterator | middle, | ||
| Iterator | last, | ||
| Compare | comp ) |
Definition at line 316 of file algorithm.h.
References FL_NOEXCEPT.
Referenced by partition().
Here is the caller graph for this function:| void fl::detail::merge_inplace | ( | Iterator | first, |
| Iterator | middle, | ||
| Iterator | last, | ||
| Compare | comp ) |
Definition at line 459 of file algorithm.h.
References FL_NOEXCEPT, lower_bound_impl(), merge_inplace(), fl::fl::move(), pos, rotate_impl(), and fl::type_rank< T >::value.
Referenced by merge_inplace(), and mergesort_impl().
Here is the call graph for this function:
Here is the caller graph for this function:| void fl::detail::mergesort_impl | ( | Iterator | first, |
| Iterator | last, | ||
| Compare | comp ) |
Definition at line 534 of file algorithm.h.
References FL_NOEXCEPT, insertion_sort(), merge_inplace(), and mergesort_impl().
Referenced by mergesort_impl(), and fl::stable_sort().
Here is the call graph for this function:
Here is the caller graph for this function:| void fl::detail::not_null_assert_failed | ( | const char * | message | ) |
Definition at line 24 of file not_null.cpp.hpp.
References FL_ASSERT.
Referenced by fl::not_null< StringHolderPtr >::not_null(), and fl::not_null< StringHolderPtr >::operator=().
Here is the caller graph for this function:| Iterator fl::detail::partition | ( | Iterator | first, |
| Iterator | last, | ||
| Compare | comp ) |
Definition at line 338 of file algorithm.h.
References FL_NOEXCEPT, median_of_three(), and fl::swap().
Referenced by quicksort_impl().
Here is the call graph for this function:
Here is the caller graph for this function:| void fl::detail::printLoggerDisabledError | ( | const char * | category_name, |
| const char * | define_name ) |
Print error message for disabled logger (non-template helper) Called from checkLoggerEnabled template function IMPORTANT: This must NOT be inline - needs external linkage for cross-TU calls.
Definition at line 19 of file async_logger.cpp.hpp.
References FL_ERROR.
Referenced by checkLoggerEnabled().
Here is the caller graph for this function:| void fl::detail::qsort_impl | ( | char * | base, |
| size_t | nmemb, | ||
| size_t | size, | ||
| qsort_compare_fn | compar ) |
Definition at line 417 of file cstdlib.cpp.hpp.
References qsort_impl(), fl::qsort_insertion_sort(), and fl::qsort_partition().
Referenced by fl::qsort(), and qsort_impl().
Here is the call graph for this function:
Here is the caller graph for this function:| void fl::detail::qsort_swap | ( | char * | a, |
| char * | b, | ||
| size_t | size ) |
Definition at line 330 of file cstdlib.cpp.hpp.
References fl::memcpy(), and fl::t.
Referenced by fl::qsort_insertion_sort(), and fl::qsort_partition().
Here is the call graph for this function:
Here is the caller graph for this function:| void fl::detail::quicksort_impl | ( | Iterator | first, |
| Iterator | last, | ||
| Compare | comp ) |
Definition at line 411 of file algorithm.h.
References FL_NOEXCEPT, insertion_sort(), partition(), and quicksort_impl().
Referenced by quicksort_impl(), and fl::sort().
Here is the call graph for this function:
Here is the caller graph for this function:| void fl::detail::rotate_impl | ( | Iterator | first, |
| Iterator | middle, | ||
| Iterator | last ) |
Definition at line 424 of file algorithm.h.
References FL_NOEXCEPT, and fl::swap().
Referenced by merge_inplace().
Here is the call graph for this function:
Here is the caller graph for this function:| void fl::detail::setWaitSpinBudgetUs | ( | fl::u32 | budget_us | ) |
Set the tiered-wait spin budget (microseconds).
Definition at line 33 of file wait_spin_budget.cpp.hpp.
References FL_NOEXCEPT.
Referenced by CFastLED::_setWaitSpinBudgetUs().
Here is the caller graph for this function:| void fl::detail::sift_down | ( | Iterator | first, |
| Iterator | start, | ||
| Iterator | end, | ||
| Compare | comp ) |
Definition at line 360 of file algorithm.h.
References fl::end(), FL_NOEXCEPT, and fl::swap().
Referenced by heap_sort(), and heapify().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inline |
Definition at line 170 of file math.cpp.hpp.
References FL_NOEXCEPT, and fl::x.
Referenced by sin_reduce_().
Here is the caller graph for this function:
|
inline |
Definition at line 184 of file math.cpp.hpp.
References FL_NOEXCEPT, sin_poly_quarterturn_(), and fl::x.
Referenced by cos_reduce_(), fl::sin_impl_double(), fl::sin_impl_float(), fl::tan_impl_double(), and fl::tan_impl_float().
Here is the call graph for this function:
Here is the caller graph for this function:| void * fl::detail::singleton_registry_get | ( | const char * | key | ) |
Definition at line 17 of file singleton.cpp.hpp.
References fl::strcmp(), and fl::detail::anonymous_namespace{singleton.cpp.hpp}::RegistryEntry::value.
Referenced by fl::SingletonShared< T, N >::instance().
Here is the call graph for this function:
Here is the caller graph for this function:| void fl::detail::singleton_registry_set | ( | const char * | key, |
| void * | value ) |
Definition at line 26 of file singleton.cpp.hpp.
References fl::strcmp(), fl::type_rank< T >::value, and fl::detail::anonymous_namespace{singleton.cpp.hpp}::RegistryEntry::value.
Referenced by fl::SingletonShared< T, N >::instance().
Here is the call graph for this function:
Here is the caller graph for this function:| void * fl::detail::slab_allocator_registry_get | ( | fl::size | block_size, |
| fl::size | slab_size ) |
Definition at line 256 of file allocator.cpp.hpp.
References fl::detail::anonymous_namespace{allocator.cpp.hpp}::SlabRegistryEntry::allocator.
Referenced by fl::allocator_slab< T, SLAB_SIZE >::get_allocator().
Here is the caller graph for this function:| void fl::detail::slab_allocator_registry_set | ( | fl::size | block_size, |
| fl::size | slab_size, | ||
| void * | allocator ) |
Definition at line 266 of file allocator.cpp.hpp.
References fl::detail::anonymous_namespace{allocator.cpp.hpp}::SlabRegistryEntry::allocator.
Referenced by fl::allocator_slab< T, SLAB_SIZE >::get_allocator().
Here is the caller graph for this function:| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void fl::detail::spread_transpose16_symbol | ( | const u8 | l[16], |
| u8 | out[16] ) |
Transpose one symbol of 16 lanes (16 input bytes) into 16 output bytes: 8 pulses × 2 bytes, low byte = lanes 0-7, high byte = lanes 8-15, pulse order 7..0 (out[0] = pulse 7 low).
Matches the naive layout.
Definition at line 43 of file bit_spread_lut.hpp.
References spreadA(), and spreadB().
Referenced by wave3_transpose_16(), wave8_transpose_16(), wave8_transpose_16_bf1(), wave8_transpose_16x2_pipe2(), wave8_transpose_16x4_bf1_pipe4(), and wave8_transpose_16x4_pipe4().
Here is the call graph for this function:
Here is the caller graph for this function:| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void fl::detail::spread_transpose8_symbol | ( | const u8 | l[8], |
| u8 | out[8] ) |
Transpose one symbol of 8 lanes (8 input bytes) into 8 output bytes: 8 pulses × 1 byte (bit L = lane L), pulse order 7..0 (out[0] = pulse 7).
Definition at line 65 of file bit_spread_lut.hpp.
References spreadA(), and spreadB().
Referenced by wave3_transpose_8(), wave8_transpose_8(), and wave8_transpose_8_bf1().
Here is the call graph for this function:
Here is the caller graph for this function:| FASTLED_FORCE_INLINE u32 fl::detail::spreadA | ( | u8 | v | ) |
Pulses 7,6,5,4 of v (byte j = bit (7-j)). Depends only on the high nibble.
Definition at line 35 of file bit_spread_lut.hpp.
References FASTLED_FORCE_INLINE, and kSpreadNibble.
Referenced by spread_transpose16_symbol(), spread_transpose8_symbol(), and wave8_transpose_4_bf1().
Here is the caller graph for this function:| FASTLED_FORCE_INLINE u32 fl::detail::spreadB | ( | u8 | v | ) |
Pulses 3,2,1,0 of v (byte j = bit (3-j)). Depends only on the low nibble.
Definition at line 37 of file bit_spread_lut.hpp.
References FASTLED_FORCE_INLINE, and kSpreadNibble.
Referenced by spread_transpose16_symbol(), spread_transpose8_symbol(), and wave8_transpose_4_bf1().
Here is the caller graph for this function:
|
inline |
Definition at line 151 of file math.cpp.hpp.
References FL_NOEXCEPT, fl::type_rank< T >::value, and fl::x.
Referenced by fl::asin_impl_double(), fl::asin_impl_float(), fl::hypot_impl_double(), fl::hypot_impl_float(), fl::sqrt_impl_double(), and fl::sqrt_impl_float().
Here is the caller graph for this function:
|
constexpr |
|
constexpr |
| void fl::detail::to_string | ( | const fl::u16 * | bit_data, |
| fl::u32 | bit_count, | ||
| string * | dst ) |
Definition at line 9 of file bitset.cpp.hpp.
Referenced by FL_DISABLE_WARNING(), and fl::bitset_dynamic::to_string().
Here is the caller graph for this function:| void fl::detail::UpscalePaletteInterpolated | ( | const TSrcPalette & | srcpal, |
| TDestPalette & | destpal ) |
Definition at line 1200 of file colorutils.cpp.hpp.
References fl::ColorFromPalette().
Referenced by fl::UpscalePalette(), fl::UpscalePalette(), fl::UpscalePalette(), and fl::UpscalePalette().
Here is the call graph for this function:
Here is the caller graph for this function:| void fl::detail::UpscalePaletteRepeat | ( | const TSrcPalette & | srcpal, |
| TDestPalette & | destpal ) |
Definition at line 1185 of file colorutils.cpp.hpp.
Referenced by fl::UpscalePalette(), and fl::UpscalePalette().
Here is the caller graph for this function:| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void fl::detail::wave3_convert_byte_to_wave3byte | ( | u8 | byte_value, |
| const Wave3BitExpansionLut & | lut, | ||
| Wave3Byte * | output ) |
Helper: Convert byte to Wave3Byte using nibble LUT (internal use only)
Definition at line 27 of file wave3.hpp.
Referenced by fl::wave3(), fl::wave3Transpose_16(), fl::wave3Transpose_2(), fl::wave3Transpose_4(), and fl::wave3Transpose_8().
Here is the caller graph for this function:| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void fl::detail::wave3_transpose_16 | ( | const Wave3Byte | lane_waves[16], |
| u8 | output[16 *sizeof(Wave3Byte)] ) |
Transpose 16 lanes of Wave3Byte data into interleaved format.
| lane_waves | Array of 16 Wave3Byte structures |
| output | Output buffer (48 bytes = 16 * 3) |
Spread-LUT transpose (#2533): ~1.9× faster than the unrolled naive on the ESP32-P4 (RV32), bit-exact. See bit_spread_lut.hpp. Each 16-lane sample is 2 output bytes: low = lanes 0-7, high = lanes 8-15. (wave3 = 3 symbols.)
Definition at line 170 of file wave3.hpp.
References fl::Wave3Byte::data, and spread_transpose16_symbol().
Referenced by fl::wave3Transpose_16().
Here is the call graph for this function:
Here is the caller graph for this function:| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void fl::detail::wave3_transpose_2 | ( | const Wave3Byte | lane_waves[2], |
| u8 | output[2 *sizeof(Wave3Byte)] ) |
Transpose 2 lanes of Wave3Byte data into interleaved format.
| lane_waves | Array of 2 Wave3Byte structures |
| output | Output buffer (6 bytes = 2 * 3) |
Definition at line 51 of file wave3.hpp.
References fl::Wave3Byte::data.
Referenced by fl::wave3Transpose_2().
Here is the caller graph for this function:| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void fl::detail::wave3_transpose_4 | ( | const Wave3Byte | lane_waves[4], |
| u8 | output[4 *sizeof(Wave3Byte)] ) |
Transpose 4 lanes of Wave3Byte data into interleaved format.
| lane_waves | Array of 4 Wave3Byte structures |
| output | Output buffer (12 bytes = 4 * 3) |
Definition at line 84 of file wave3.hpp.
References fl::Wave3Byte::data.
Referenced by fl::wave3Transpose_4().
Here is the caller graph for this function:| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void fl::detail::wave3_transpose_8 | ( | const Wave3Byte | lane_waves[8], |
| u8 | output[8 *sizeof(Wave3Byte)] ) |
Transpose 8 lanes of Wave3Byte data into interleaved format.
| lane_waves | Array of 8 Wave3Byte structures |
| output | Output buffer (24 bytes = 8 * 3) |
Spread-LUT transpose (#2533): ~1.9× faster than the unrolled naive on the ESP32-P4 (RV32), bit-exact. See bit_spread_lut.hpp. (wave3 = 3 symbols.)
Definition at line 147 of file wave3.hpp.
References fl::Wave3Byte::data, and spread_transpose8_symbol().
Referenced by fl::wave3Transpose_8().
Here is the call graph for this function:
Here is the caller graph for this function:| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void fl::detail::wave8_convert_byte_to_wave8byte | ( | u8 | byte_value, |
| const Wave8BitExpansionLut & | lut, | ||
| Wave8Byte * | output ) |
Helper: Convert byte to Wave8Byte using nibble LUT (internal use only)
Definition at line 47 of file wave8.hpp.
References fl::bit_cast_ptr(), and fl::isr::memcpy_32().
Referenced by fl::wave8(), fl::wave8Transpose_16(), fl::wave8Transpose_2(), fl::wave8Transpose_4(), and fl::wave8Transpose_8().
Here is the call graph for this function:
Here is the caller graph for this function:| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void fl::detail::wave8_expand_byte | ( | u8 | byte_value, |
| const Wave8ByteExpansionLut & | lut, | ||
| Wave8Byte * | output ) |
Byte-indexed expansion (#2526): one indexed 8-byte copy.
Single lookup (no >>4/mask, no second index) into the 256×8 byte LUT; bit-identical to wave8_convert_byte_to_wave8byte(). ~half the index/issue work for the same memory traffic — the win on the in-order RV32 core.
Definition at line 69 of file wave8.hpp.
References fl::bit_cast_ptr(), and fl::isr::memcpy_32().
Referenced by fl::wave8Transpose_16(), fl::wave8Transpose_16x2_pipe2(), fl::wave8Transpose_16x4_pipe4(), fl::wave8Transpose_2(), fl::wave8Transpose_4(), and fl::wave8Transpose_8().
Here is the call graph for this function:
Here is the caller graph for this function:| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void fl::detail::wave8_transpose_16 | ( | const Wave8Byte | lane_waves[16], |
| u8 | output[16 *sizeof(Wave8Byte)] ) |
Transpose 16 lanes of Wave8Byte data into interleaved format.
| lane_waves | Array of 16 Wave8Byte structures |
| output | Output buffer (128 bytes) |
Spread-LUT transpose (#2533): ~1.98× faster than the unrolled naive on the ESP32-P4 (RV32) — 6649→3353 us/frame, bit-exact. Two-pass (two 8x8 via u32), u64 SWAR, and Hacker's-Delight all lost to this on the in-order core; the winning shape is independent table-lookup + shift + OR-reduce (native u32, no dependency chain). See bit_spread_lut.hpp. Each 16-lane sample is 2 output bytes: low = lanes 0-7, high = lanes 8-15.
Definition at line 231 of file wave8.hpp.
References spread_transpose16_symbol().
Referenced by fl::wave8Transpose_16(), and fl::wave8Transpose_16().
Here is the call graph for this function:
Here is the caller graph for this function:| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void fl::detail::wave8_transpose_16_bf1 | ( | const u8 | lanes[16], |
| u8 | W0, | ||
| u8 | W1, | ||
| u8 | output[16 *sizeof(Wave8Byte)] ) |
BF1: chipset-aware direct encode for Wave8 16-lane (#2548 deep-dive).
Bypasses the byte_lut entirely by exploiting the algebraic identity: output_bit(s, p, lane) = M0_p XOR (input_bit_(7-s)_of_lane AND D_p) where W0/W1 are the bit-0 / bit-1 waveform patterns (chipset constants), M0_p = (W0 >> (7-p)) & 1, D_p = M0_p XOR M1_p. The bit-transpose of input lane bytes (giving the per-symbol column bytes) is computed ONCE by spread_transpose16_symbol — replacing the prior 8 calls (one per symbol) plus the 16 byte_lut expansions.
Bit-identical to wave8_transpose_16(expand(lanes_input), output). Works for ANY Wave8 chipset/timing — W0/W1 are derived from the byte_lut at runtime.
Measured 6 822 → 1 757 µs/frame (3.88× faster than pipe4, 5.49× vs baseline) when fused with pipe4 (#2548 final).
Definition at line 315 of file wave8.hpp.
References spread_transpose16_symbol(), fl::W0, and fl::W1.
Referenced by fl::wave8Transpose_16_bf1().
Here is the call graph for this function:
Here is the caller graph for this function:| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void fl::detail::wave8_transpose_16x2_pipe2 | ( | const Wave8Byte | lane_waves_a[16], |
| const Wave8Byte | lane_waves_b[16], | ||
| u8 | output_a[16 *sizeof(Wave8Byte)], | ||
| u8 | output_b[16 *sizeof(Wave8Byte)] ) |
Pipe2: transpose 16-lane × 2-byte-positions in one fused call.
Result is bit-identical to two sequential wave8_transpose_16 calls; the win comes from interleaving the two independent OR-trees inside the symbol loop so the in-order RV32 P4 can fill load-use stall cycles from position A with ALU ops from position B (and vice versa). Measured +26% / frame vs sequential calls on P4 v1.3 (#2548).
Definition at line 249 of file wave8.hpp.
References spread_transpose16_symbol().
Referenced by fl::wave8Transpose_16x2_pipe2().
Here is the call graph for this function:
Here is the caller graph for this function:| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void fl::detail::wave8_transpose_16x4_bf1_pipe4 | ( | const u8 | lanes_a[16], |
| const u8 | lanes_b[16], | ||
| const u8 | lanes_c[16], | ||
| const u8 | lanes_d[16], | ||
| u8 | W0, | ||
| u8 | W1, | ||
| u8 | output_a[16 *sizeof(Wave8Byte)], | ||
| u8 | output_b[16 *sizeof(Wave8Byte)], | ||
| u8 | output_c[16 *sizeof(Wave8Byte)], | ||
| u8 | output_d[16 *sizeof(Wave8Byte)] ) |
BF1 + pipe4: 4-position software-pipelined BF1 (#2548 deep-dive).
Combines BF1's algorithmic reduction (1 transpose per byte-position instead of 8) with pipe4's cross-position ILP. Empirical peak of all prototypes: 1 757 µs/frame vs 9 651 baseline (5.49×).
Definition at line 464 of file wave8.hpp.
References spread_transpose16_symbol(), fl::W0, and fl::W1.
Referenced by fl::wave8Transpose_16x4_bf1_pipe4().
Here is the call graph for this function:
Here is the caller graph for this function:| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void fl::detail::wave8_transpose_16x4_pipe4 | ( | const Wave8Byte | lane_waves_a[16], |
| const Wave8Byte | lane_waves_b[16], | ||
| const Wave8Byte | lane_waves_c[16], | ||
| const Wave8Byte | lane_waves_d[16], | ||
| u8 | output_a[16 *sizeof(Wave8Byte)], | ||
| u8 | output_b[16 *sizeof(Wave8Byte)], | ||
| u8 | output_c[16 *sizeof(Wave8Byte)], | ||
| u8 | output_d[16 *sizeof(Wave8Byte)] ) |
Pipe4: transpose 16-lane × 4-byte-positions in one fused call.
Bit-identical to four sequential wave8_transpose_16 calls. Extends the pipe2 idea to 4 positions — empirically the peak of the curve on the in-order RV32 P4 core (#2548). pipe2 saved 26% over baseline, pipe3 36%, pipe4 41%, pipe6 regressed to 94% (register spill). Stays within the 32-GPR budget: 4 × 4 = 16 OR-tree accumulators + ~8 misc GPRs = ~24 live; pipe6 would push this past 32.
Definition at line 273 of file wave8.hpp.
References spread_transpose16_symbol().
Referenced by fl::wave8Transpose_16x4_pipe4().
Here is the call graph for this function:
Here is the caller graph for this function:| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void fl::detail::wave8_transpose_2 | ( | const Wave8Byte | lane_waves[2], |
| u8 | output[2 *sizeof(Wave8Byte)] ) |
Transpose 2 lanes of Wave8Byte data into interleaved format.
| lane_waves | Array of 2 Wave8Byte structures (lane[0]=even bits, lane[1]=odd bits) |
| output | Output buffer (16 bytes) |
Definition at line 103 of file wave8.hpp.
References FL_WAVE8_SPREAD_TO_16.
Referenced by fl::wave8Transpose_2(), and fl::wave8Transpose_2().
Here is the caller graph for this function:| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void fl::detail::wave8_transpose_2_bf1 | ( | const u8 | lanes[2], |
| u8 | W0, | ||
| u8 | W1, | ||
| u8 | output[2 *sizeof(Wave8Byte)] ) |
BF1 for 2-lane Wave8.
Output: 8 symbols × 2 bytes = 16 bytes. Each byte packs 4 pulses × 2 lanes bit-interleaved (lane 1 in even bit positions, lane 0 in odd). High byte (output[s*2 + 0]) holds bf1-pulse indices 0..3 with q=0 → pulse 3 and q=3 → pulse 0; low byte holds bf1-pulse indices 4..7 with q=0 → pulse 7 and q=3 → pulse 4. Layout matches wave8_transpose_2's LUT-based packing (see FL_WAVE8_SPREAD_TO_16 / kTranspose4_16_LUT).
Definition at line 417 of file wave8.hpp.
References fl::W0, and fl::W1.
Referenced by fl::wave8Transpose_2_bf1().
Here is the caller graph for this function:| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void fl::detail::wave8_transpose_4 | ( | const Wave8Byte | lane_waves[4], |
| u8 | output[4 *sizeof(Wave8Byte)] ) |
Transpose 4 lanes of Wave8Byte data into interleaved format.
| lane_waves | Array of 4 Wave8Byte structures |
| output | Output buffer (32 bytes) |
Definition at line 126 of file wave8.hpp.
Referenced by fl::wave8Transpose_4(), and fl::wave8Transpose_4().
Here is the caller graph for this function:| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void fl::detail::wave8_transpose_4_bf1 | ( | const u8 | lanes[4], |
| u8 | W0, | ||
| u8 | W1, | ||
| u8 | output[4 *sizeof(Wave8Byte)] ) |
BF1 for 4-lane Wave8.
Output: 8 symbols × 4 bytes = 32 bytes. Each byte packs 2 pulses × 4 lanes — high nibble = earlier pulse, low nibble = later pulse; within each nibble, lanes 0..3 in bits 0..3.
Definition at line 370 of file wave8.hpp.
References spreadA(), spreadB(), fl::W0, and fl::W1.
Referenced by fl::wave8Transpose_4_bf1().
Here is the call graph for this function:
Here is the caller graph for this function:| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void fl::detail::wave8_transpose_8 | ( | const Wave8Byte | lane_waves[8], |
| u8 | output[8 *sizeof(Wave8Byte)] ) |
Transpose 8 lanes of Wave8Byte data into interleaved format.
| lane_waves | Array of 8 Wave8Byte structures |
| output | Output buffer (64 bytes) |
Spread-LUT transpose (#2533): ~1.90× faster than the unrolled naive on the ESP32-P4 (RV32) — 3356→1764 us/frame, bit-exact. See bit_spread_lut.hpp.
Definition at line 205 of file wave8.hpp.
References spread_transpose8_symbol().
Referenced by fl::wave8Transpose_8(), and fl::wave8Transpose_8().
Here is the call graph for this function:
Here is the caller graph for this function:| FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void fl::detail::wave8_transpose_8_bf1 | ( | const u8 | lanes[8], |
| u8 | W0, | ||
| u8 | W1, | ||
| u8 | output[8 *sizeof(Wave8Byte)] ) |
BF1 for 8-lane Wave8 — same algebraic identity as 16-lane BF1.
Output: 8 symbols × 8 pulses × 1 byte = 64 bytes. Each pulse byte carries 8 lanes' bits at the corresponding pulse position. Uses spread_transpose8_symbol to compute the bit transpose in one call.
Definition at line 345 of file wave8.hpp.
References spread_transpose8_symbol(), fl::W0, and fl::W1.
Referenced by fl::wave8Transpose_8_bf1().
Here is the call graph for this function:
Here is the caller graph for this function:
|
constexpr |
kSpreadNibble[n] places the 4 bits of nibble n at bit 0 of 4 separate bytes: byte0 = bit3(n), byte1 = bit2(n), byte2 = bit1(n), byte3 = bit0(n).
A 16-entry literal table (C++11-valid, no constexpr loop, ~64 bytes, cache- resident). spreadA/spreadB only depend on one nibble each, so this one table serves both halves.
Definition at line 27 of file bit_spread_lut.hpp.
|
constexpr |
|
constexpr |