]> code.bitgloo.com Git - clyne/stmdsp.git/commitdiff
wip: better samplebuffer filling
authorClyne Sullivan <clyne@bitgloo.com>
Sun, 10 Oct 2021 13:45:37 +0000 (09:45 -0400)
committerClyne Sullivan <clyne@bitgloo.com>
Sun, 10 Oct 2021 13:45:37 +0000 (09:45 -0400)
Makefile
source/samplebuffer.cpp

index 44f4c8aea6c6c542128f98d285696fefcea13d40..3dcfd94284e4e1322e12d6a13cb5a3159126822e 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -8,7 +8,7 @@ TARGET_PLATFORM = L4
 
 # Compiler options here.
 ifeq ($(USE_OPT),)
-  USE_OPT = -O0 -ggdb -fomit-frame-pointer -falign-functions=16 --specs=nosys.specs
+  USE_OPT = -Os -g3 -ggdb -fomit-frame-pointer -falign-functions=16 --specs=nosys.specs
 endif
 
 # C specific options here (added to USE_OPT).
index 1acf2f46eacb15cda2c6a098af32585241ef074c..6f588b17ef15c999cb85fea765c500c39ac8221d 100644 (file)
@@ -19,17 +19,63 @@ void SampleBuffer::clear() {
 }
 __attribute__((section(".convcode")))
 void SampleBuffer::modify(Sample *data, unsigned int srcsize) {
-    auto size = srcsize < m_size ? srcsize : m_size;
+    auto size = std::min(srcsize, m_size);
+    size = (size + 15) & 0xFF0;
+
     m_modified = m_buffer;
-    for (Sample *d = m_buffer, *s = data; s != data + size;)
-        *d++ = *s++;
+    const int *src = reinterpret_cast<const int *>(data);
+    const int * const srcend = src + (size / 2);
+    int *dst = reinterpret_cast<int *>(m_buffer);
+    do {
+        int a = src[0];
+        int b = src[1];
+        int c = src[2];
+        int d = src[3];
+        int e = src[4];
+        int f = src[5];
+        int g = src[6];
+        int h = src[7];
+       dst[0] = a;
+       dst[1] = b;
+       dst[2] = c;
+       dst[3] = d;
+       dst[4] = e;
+       dst[5] = f;
+       dst[6] = g;
+       dst[7] = h;
+       src += 8;
+       dst += 8;
+    } while (src < srcend);
 }
 __attribute__((section(".convcode")))
 void SampleBuffer::midmodify(Sample *data, unsigned int srcsize) {
-    auto size = srcsize < m_size / 2 ? srcsize : m_size / 2;
+    auto size = std::min(srcsize, m_size / 2);
+    size = (size + 15) & 0xFF0;
+
     m_modified = middata();
-    for (Sample *d = middata(), *s = data; s != data + size;)
-        *d++ = *s++;
+    const int *src = reinterpret_cast<const int *>(data);
+    const int * const srcend = src + (size / 2);
+    int *dst = reinterpret_cast<int *>(middata());
+    do {
+        int a = src[0];
+        int b = src[1];
+        int c = src[2];
+        int d = src[3];
+        int e = src[4];
+        int f = src[5];
+        int g = src[6];
+        int h = src[7];
+       dst[0] = a;
+       dst[1] = b;
+       dst[2] = c;
+       dst[3] = d;
+       dst[4] = e;
+       dst[5] = f;
+       dst[6] = g;
+       dst[7] = h;
+       src += 8;
+       dst += 8;
+    } while (src < srcend);
 }
 
 void SampleBuffer::setModified() {