FastLED 3.9.15
Loading...
Searching...
No Matches
wave8.hpp File Reference

Detailed Description

Inline implementation details for wave8 transposition.

This header contains force-inlined implementations of wave8 transposition functions for optimal performance in ISR/DMA contexts.

Definition in file wave8.hpp.

+ Include dependency graph for wave8.hpp:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Namespaces

namespace  fl
 Base definition for an LED controller.
 
namespace  fl::detail
 Compile-time linker keep-alive hook for a single fl::Bus.
 

Macros

#define FL_WAVE8_SPREAD_TO_16(lane_u8_0, lane_u8_1, out_16)
 

Functions

FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void fl::wave8 (u8 lane, const Wave8BitExpansionLut &lut, u8(&FL_RESTRICT_PARAM output)[sizeof(Wave8Byte)])
 Convert byte to 8 Wave8Bit structures using nibble LUT.
 
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)
 
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.
 
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.
 
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).
 
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.
 
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).
 
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.
 
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.
 
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.
 
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.
 
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.
 
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.
 
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.
 

Variables

constexpr u8 fl::detail::kTranspose2_4_LUT [4]
 
constexpr u8 fl::detail::kTranspose4_16_LUT [16]