[pulseaudio-commits] [Git][pulseaudio/pulseaudio][master] svolume: Mark channel parameter as earlyclobber

Tanu Kaskinen gitlab at gitlab.freedesktop.org
Mon Jul 15 14:01:04 UTC 2019



Tanu Kaskinen pushed to branch master at PulseAudio / pulseaudio


Commits:
e8fe04b2 by Arun Raghavan at 2019-07-15T13:50:16Z
svolume: Mark channel parameter as earlyclobber

For all our MMX/SSE code, we use a temporary channel variable, assigned
to the DI register, which is zero'ed as the very first operation in the
inline assembly code, before any other code is run.

With GCC 9.1, while using -O2, the DI register is also used for the
input operand. This is perfectly legal, but causes our code to become
incorrect because the output operand that is assigned to DI is not
explicitly marked as being clobbered before inputs are read.

This change fixes the problem by adding an earlyclobber annotation (&)
to the DI output argument.

- - - - -


2 changed files:

- src/pulsecore/svolume_mmx.c
- src/pulsecore/svolume_sse.c


Changes:

=====================================
src/pulsecore/svolume_mmx.c
=====================================
@@ -149,7 +149,7 @@ static void pa_volume_s16ne_mmx(int16_t *samples, const int32_t *volumes, unsign
         "6:                             \n\t"
         " emms                          \n\t"
 
-        : "+r" (samples), "+r" (volumes), "+r" (length), "=D" (channel), "=&r" (temp)
+        : "+r" (samples), "+r" (volumes), "+r" (length), "=&D" (channel), "=&r" (temp)
 #if defined (__i386__)
         : "m" (channels)
 #else
@@ -228,7 +228,7 @@ static void pa_volume_s16re_mmx(int16_t *samples, const int32_t *volumes, unsign
         "6:                             \n\t"
         " emms                          \n\t"
 
-        : "+r" (samples), "+r" (volumes), "+r" (length), "=D" (channel), "=&r" (temp)
+        : "+r" (samples), "+r" (volumes), "+r" (length), "=&D" (channel), "=&r" (temp)
 #if defined (__i386__)
         : "m" (channels)
 #else


=====================================
src/pulsecore/svolume_sse.c
=====================================
@@ -147,7 +147,7 @@ static void pa_volume_s16ne_sse2(int16_t *samples, const int32_t *volumes, unsig
         " jne 7b                        \n\t"
         "8:                             \n\t"
 
-        : "+r" (samples), "+r" (volumes), "+r" (length), "=D" (channel), "=&r" (temp)
+        : "+r" (samples), "+r" (volumes), "+r" (length), "=&D" (channel), "=&r" (temp)
 #if defined (__i386__)
         : "m" (channels)
 #else
@@ -239,7 +239,7 @@ static void pa_volume_s16re_sse2(int16_t *samples, const int32_t *volumes, unsig
         " jne 7b                        \n\t"
         "8:                             \n\t"
 
-        : "+r" (samples), "+r" (volumes), "+r" (length), "=D" (channel), "=&r" (temp)
+        : "+r" (samples), "+r" (volumes), "+r" (length), "=&D" (channel), "=&r" (temp)
 #if defined (__i386__)
         : "m" (channels)
 #else



View it on GitLab: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/commit/e8fe04b2f6ab248a09176622b062bd934eb49e4c

-- 
View it on GitLab: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/commit/e8fe04b2f6ab248a09176622b062bd934eb49e4c
You're receiving this email because of your account on gitlab.freedesktop.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/pulseaudio-commits/attachments/20190715/9f47520e/attachment-0001.html>


More information about the pulseaudio-commits mailing list