]> git.alsa-project.org Git - alsa-lib.git/commitdiff
pcm: another fix for the snd_pcm_area_silence() fast path
authorJaroslav Kysela <perex@perex.cz>
Mon, 5 Feb 2018 13:59:12 +0000 (14:59 +0100)
committerJaroslav Kysela <perex@perex.cz>
Mon, 5 Feb 2018 14:03:44 +0000 (15:03 +0100)
The 64-bit fast path can be used only in limited conditions:

- destination must be aligned to 64-bit (CPU aligned access)
- step must be equal to width
- physical with must be different than 24 (cannot be multiplied to 64)

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
src/pcm/pcm.c

index 86250970293f5ee5abf46d6bf4e5f9df9c0da934..1be38339c450412bfffb06311fcd06d9a7797ea8 100644 (file)
@@ -2951,7 +2951,9 @@ int snd_pcm_area_silence(const snd_pcm_channel_area_t *dst_area, snd_pcm_uframes
          * Iterate copying silent sample for sample data aligned to 64 bit.
          * This is a fast path.
          */
-        if (dst_area->step == (unsigned int) width && (64 % width) == 0) {
+        if (dst_area->step == (unsigned int) width &&
+            width != 24 &&
+            ((intptr_t)dst & 7) == 0) {
                unsigned int dwords = samples * width / 64;
                uint64_t *dstp = (uint64_t *)dst;
                samples -= dwords * 64 / width;