Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/AlexGyver/Arduino_Ambilight.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Библиотеки/FastLED-master/bitswap.cpp')
-rw-r--r--Библиотеки/FastLED-master/bitswap.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/Библиотеки/FastLED-master/bitswap.cpp b/Библиотеки/FastLED-master/bitswap.cpp
new file mode 100644
index 0000000..67530c7
--- /dev/null
+++ b/Библиотеки/FastLED-master/bitswap.cpp
@@ -0,0 +1,28 @@
+#define FASTLED_INTERNAL
+#include "FastLED.h"
+
+/// Simplified form of bits rotating function. Based on code found here - http://www.hackersdelight.org/hdcodetxt/transpose8.c.txt - rotating
+/// data into LSB for a faster write (the code using this data can happily walk the array backwards)
+void transpose8x1_noinline(unsigned char *A, unsigned char *B) {
+ uint32_t x, y, t;
+
+ // Load the array and pack it into x and y.
+ y = *(unsigned int*)(A);
+ x = *(unsigned int*)(A+4);
+
+ // pre-transform x
+ t = (x ^ (x >> 7)) & 0x00AA00AA; x = x ^ t ^ (t << 7);
+ t = (x ^ (x >>14)) & 0x0000CCCC; x = x ^ t ^ (t <<14);
+
+ // pre-transform y
+ t = (y ^ (y >> 7)) & 0x00AA00AA; y = y ^ t ^ (t << 7);
+ t = (y ^ (y >>14)) & 0x0000CCCC; y = y ^ t ^ (t <<14);
+
+ // final transform
+ t = (x & 0xF0F0F0F0) | ((y >> 4) & 0x0F0F0F0F);
+ y = ((x << 4) & 0xF0F0F0F0) | (y & 0x0F0F0F0F);
+ x = t;
+
+ *((uint32_t*)B) = y;
+ *((uint32_t*)(B+4)) = x;
+}