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

◆ transpose8x1()

FASTLED_FORCE_INLINE void fl::transpose8x1 ( unsigned char * A,
unsigned char * B )

Simplified 8x1 bit transpose (inline version)

Parameters
AInput array (8 bytes)
BOutput array (8 bytes, transposed)
Examples
/home/runner/work/FastLED/FastLED/src/fl/math/transposition.h.

Definition at line 116 of file transposition.h.

116 {
117 fl::u32 x, y, t;
118
119 // Load the array and pack it into x and y.
120 y = *(fl::u32*)(A);
121 x = *(fl::u32*)(A+4);
122
123 // pre-transform x
124 t = (x ^ (x >> 7)) & 0x00AA00AA; x = x ^ t ^ (t << 7);
125 t = (x ^ (x >>14)) & 0x0000CCCC; x = x ^ t ^ (t <<14);
126
127 // pre-transform y
128 t = (y ^ (y >> 7)) & 0x00AA00AA; y = y ^ t ^ (t << 7);
129 t = (y ^ (y >>14)) & 0x0000CCCC; y = y ^ t ^ (t <<14);
130
131 // final transform
132 t = (x & 0xF0F0F0F0) | ((y >> 4) & 0x0F0F0F0F);
133 y = ((x << 4) & 0xF0F0F0F0) | (y & 0x0F0F0F0F);
134 x = t;
135
136 *((u32*)B) = y;
137 *((u32*)(B+4)) = x;
138}
FL_DISABLE_WARNING_PUSH unsigned char * B

References B, FASTLED_FORCE_INLINE, FL_NOEXCEPT, t, x, and y.