309 {
312 const u8 D_byte =
W0 ^
W1;
313 for (int p = 0; p < 8; ++p) {
314 const int shift = 7 - p;
315 d_mask[p] = ((D_byte >> shift) & 1) ? 0xFFu : 0x00u;
316 m0_mask[p] = ((
W0 >> shift) & 1) ? 0xFFu : 0x00u;
317 }
318 u8 cols_a[16], cols_b[16], cols_c[16], cols_d[16];
323 for (int s = 0; s < 8; ++s) {
324 const u8 al = cols_a[2*s + 0], ah = cols_a[2*s + 1];
325 const u8 bl = cols_b[2*s + 0], bh = cols_b[2*s + 1];
326 const u8 cl = cols_c[2*s + 0], ch = cols_c[2*s + 1];
327 const u8 dl = cols_d[2*s + 0], dh = cols_d[2*s + 1];
328 for (int p = 0; p < 8; ++p) {
329 const u8 dm = d_mask[p], mm = m0_mask[p];
330 output_a[s*16 + p*2 + 0] = mm ^ (al & dm);
331 output_a[s*16 + p*2 + 1] = mm ^ (ah & dm);
332 output_b[s*16 + p*2 + 0] = mm ^ (bl & dm);
333 output_b[s*16 + p*2 + 1] = mm ^ (bh & dm);
334 output_c[s*16 + p*2 + 0] = mm ^ (cl & dm);
335 output_c[s*16 + p*2 + 1] = mm ^ (ch & dm);
336 output_d[s*16 + p*2 + 0] = mm ^ (dl & dm);
337 output_d[s*16 + p*2 + 1] = mm ^ (dh & dm);
338 }
339 }
340}
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,...