From: David Henningsson Date: Fri, 27 May 2011 07:28:57 +0000 (+0200) Subject: SSE/MMX: Fix problem with highpitched noise on i386 X-Git-Tag: 1.0_branch~550 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=42bcb418aed1ab94c56c09a6b31bac05c08ac04a;p=profile%2Fivi%2Fpulseaudio.git SSE/MMX: Fix problem with highpitched noise on i386 The "rm" basm constraint doesn't work with my version of gcc (4.5.2), not even in a simple example. Since we usually only have 5 registers available on i386, force it to be memory on that architecture. Signed-off-by: David Henningsson --- diff --git a/src/pulsecore/svolume_mmx.c b/src/pulsecore/svolume_mmx.c index 7286b4a..28bbfdd 100644 --- a/src/pulsecore/svolume_mmx.c +++ b/src/pulsecore/svolume_mmx.c @@ -155,7 +155,11 @@ static void pa_volume_s16ne_mmx(int16_t *samples, int32_t *volumes, unsigned cha " emms \n\t" : "+r" (samples), "+r" (volumes), "+r" (length), "=D" (channel), "=&r" (temp) - : "rm" ((pa_reg_x86)channels) +#if defined (__i386__) + : "m" ((pa_reg_x86)channels) +#else + : "r" ((pa_reg_x86)channels) +#endif : "cc" ); } @@ -230,7 +234,11 @@ static void pa_volume_s16re_mmx(int16_t *samples, int32_t *volumes, unsigned cha " emms \n\t" : "+r" (samples), "+r" (volumes), "+r" (length), "=D" (channel), "=&r" (temp) - : "rm" ((pa_reg_x86)channels) +#if defined (__i386__) + : "m" ((pa_reg_x86)channels) +#else + : "r" ((pa_reg_x86)channels) +#endif : "cc" ); } diff --git a/src/pulsecore/svolume_sse.c b/src/pulsecore/svolume_sse.c index 8fed69b..dcd71c4 100644 --- a/src/pulsecore/svolume_sse.c +++ b/src/pulsecore/svolume_sse.c @@ -154,7 +154,11 @@ static void pa_volume_s16ne_sse2(int16_t *samples, int32_t *volumes, unsigned ch "8: \n\t" : "+r" (samples), "+r" (volumes), "+r" (length), "=D" (channel), "=&r" (temp) - : "rm" ((pa_reg_x86)channels) +#if defined (__i386__) + : "m" ((pa_reg_x86)channels) +#else + : "r" ((pa_reg_x86)channels) +#endif : "cc" ); } @@ -242,7 +246,11 @@ static void pa_volume_s16re_sse2(int16_t *samples, int32_t *volumes, unsigned ch "8: \n\t" : "+r" (samples), "+r" (volumes), "+r" (length), "=D" (channel), "=&r" (temp) - : "rm" ((pa_reg_x86)channels) +#if defined (__i386__) + : "m" ((pa_reg_x86)channels) +#else + : "r" ((pa_reg_x86)channels) +#endif : "cc" ); }