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 251 of file bitswap.h.
251 {
253
254
255 if(m == 1) {
256 y = *(
unsigned int*)(A);
257 x = *(
unsigned int*)(A+4);
258 } else {
259 x = (A[0]<<24) | (A[m]<<16) | (A[2*m]<<8) | A[3*m];
260 y = (A[4*m]<<24) | (A[5*m]<<16) | (A[6*m]<<8) | A[7*m];
261 }
262
263
264 t = (
x ^ (
x >> 7)) & 0x00AA00AA;
x =
x ^ t ^ (t << 7);
265 t = (
x ^ (
x >>14)) & 0x0000CCCC;
x =
x ^ t ^ (t <<14);
266
267
268 t = (
y ^ (
y >> 7)) & 0x00AA00AA;
y =
y ^ t ^ (t << 7);
269 t = (
y ^ (
y >>14)) & 0x0000CCCC;
y =
y ^ t ^ (t <<14);
270
271
272 t = (
x & 0xF0F0F0F0) | ((
y >> 4) & 0x0F0F0F0F);
273 y = ((
x << 4) & 0xF0F0F0F0) | (
y & 0x0F0F0F0F);
275
280
285
286
287}
References FASTLED_FORCE_INLINE, x, and y.