FastLED 3.10.6
Loading...
Searching...
No Matches

◆ wave8_transpose_2_bf1()

void fl::detail::wave8_transpose_2_bf1 ( const u8 lanes[2],
u8 W0,
u8 W1,
u8 output[2 *sizeof(Wave8Byte)] )

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

266 {
267 u8 d_mask[8];
268 u8 m0_mask[8];
269 const u8 D_byte = W0 ^ W1;
270 for (int p = 0; p < 8; ++p) {
271 const int shift = 7 - p;
272 d_mask[p] = ((D_byte >> shift) & 1) ? 0xFFu : 0x00u;
273 m0_mask[p] = ((W0 >> shift) & 1) ? 0xFFu : 0x00u;
274 }
275 for (int s = 0; s < 8; ++s) {
276 const int bit_idx = 7 - s;
277 const u8 b0 = static_cast<u8>((lanes[0] >> bit_idx) & 1u);
278 const u8 b1 = static_cast<u8>((lanes[1] >> bit_idx) & 1u);
279 u8 byte_hi = 0;
280 u8 byte_lo = 0;
281 for (int q = 0; q < 4; ++q) {
282 const int p_hi = 3 - q;
283 const int p_lo = 7 - q;
284 const u8 m0_p_hi = static_cast<u8>(m0_mask[p_hi] & 1u);
285 const u8 d_p_hi = static_cast<u8>(d_mask[p_hi] & 1u);
286 const u8 m0_p_lo = static_cast<u8>(m0_mask[p_lo] & 1u);
287 const u8 d_p_lo = static_cast<u8>(d_mask[p_lo] & 1u);
288 const u8 v0_hi = static_cast<u8>(m0_p_hi ^ (b0 & d_p_hi));
289 const u8 v1_hi = static_cast<u8>(m0_p_hi ^ (b1 & d_p_hi));
290 const u8 v0_lo = static_cast<u8>(m0_p_lo ^ (b0 & d_p_lo));
291 const u8 v1_lo = static_cast<u8>(m0_p_lo ^ (b1 & d_p_lo));
292 byte_hi |= static_cast<u8>((v1_hi << (2 * q)) | (v0_hi << (2 * q + 1)));
293 byte_lo |= static_cast<u8>((v1_lo << (2 * q)) | (v0_lo << (2 * q + 1)));
294 }
295 output[s * 2 + 0] = byte_hi;
296 output[s * 2 + 1] = byte_lo;
297 }
298}
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::FL_NO_EXCEPT, fl::W0, and fl::W1.

Referenced by fl::wave8Transpose_2_bf1().

+ Here is the caller graph for this function: