FastLED 3.9.15
Loading...
Searching...
No Matches

◆ wave8Transpose_16_bf1()

FL_OPTIMIZE_FUNCTION FL_IRAM void fl::wave8Transpose_16_bf1 ( const u8(&) lanes[16],
const Wave8ByteExpansionLut & lut,
u8(&) output[16 *sizeof(Wave8Byte)] )

BF1: chipset-aware direct encode for 16-lane Wave8 (#2548 deep-dive).

Bypasses the byte_lut. Uses the algebraic identity output_bit(s, p, lane) = M0_p XOR (input_bit_(7-s) AND D_p) where W0/W1 are the bit-0/bit-1 waveform patterns extracted from the lut. Bit-identical to wave8Transpose_16 for ANY Wave8 chipset. The bit-transpose of input bytes is computed ONCE (not 8× per symbol). Measured 9 651 → 4 465 µs/frame (2.16×) vs baseline on P4 v1.3.

Definition at line 159 of file wave8.cpp.hpp.

161 {
162 // Extract W0/W1 chipset constants from the lut.
163 // byte_lut[0x00].symbols[0] = waveform for input bit 7 == 0 = W0
164 // byte_lut[0xFF].symbols[0] = waveform for input bit 7 == 1 = W1
165 const u8 W0 = lut.lut[0x00].symbols[0].data;
166 const u8 W1 = lut.lut[0xFF].symbols[0].data;
167 detail::wave8_transpose_16_bf1(lanes, W0, W1, output);
168}
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).
Definition wave8.hpp:315
unsigned char u8
Definition stdint.h:131
@ W1
White is second.
Definition eorder.h:26
@ W0
White is first.
Definition eorder.h:27

References FL_RESTRICT_PARAM, W0, W1, and fl::detail::wave8_transpose_16_bf1().

+ Here is the call graph for this function: