Templated bit-rotating function.
Based on code found here: https://web.archive.org/web/20190108225554/http://www.hackersdelight.org/hdcodetxt/transpose8.c.txt
Definition at line 253 of file bitswap.h.
253 {
255
256
257 if(m == 1) {
258 y = *(
unsigned int*)(A);
259 x = *(
unsigned int*)(A+4);
260 } else {
261 x = (A[0]<<24) | (A[m]<<16) | (A[2*m]<<8) | A[3*m];
262 y = (A[4*m]<<24) | (A[5*m]<<16) | (A[6*m]<<8) | A[7*m];
263 }
264
265
266 t = (
x ^ (
x >> 7)) & 0x00AA00AA;
x =
x ^ t ^ (t << 7);
267 t = (
x ^ (
x >>14)) & 0x0000CCCC;
x =
x ^ t ^ (t <<14);
268
269
270 t = (
y ^ (
y >> 7)) & 0x00AA00AA;
y =
y ^ t ^ (t << 7);
271 t = (
y ^ (
y >>14)) & 0x0000CCCC;
y =
y ^ t ^ (t <<14);
272
273
274 t = (
x & 0xF0F0F0F0) | ((
y >> 4) & 0x0F0F0F0F);
275 y = ((
x << 4) & 0xF0F0F0F0) | (
y & 0x0F0F0F0F);
277
282
287
288
289}
References FASTLED_FORCE_INLINE, x, and y.