]> code.delx.au - pulseaudio/commitdiff
core: Fix a litte-endian bug in ARM svolume code
authorArun Raghavan <arun.raghavan@collabora.co.uk>
Thu, 18 Oct 2012 05:13:17 +0000 (10:43 +0530)
committerArun Raghavan <arun.raghavan@collabora.co.uk>
Fri, 19 Oct 2012 14:14:10 +0000 (19:44 +0530)
The old code seems to be written for big-endian code.

src/pulsecore/svolume_arm.c

index b5ccc67b6b2ddb5776c41ce6d5ea38aa12de3d61..f06a7021536a24af46089e73dd5412a5245f4c0a 100644 (file)
@@ -75,13 +75,22 @@ static void pa_volume_s16ne_arm(int16_t *samples, const int32_t *volumes, unsign
         " ldrd r2, [r6], #8               \n\t" /* 2 samples at a time */
         " ldr  r0, [%0]                   \n\t"
 
+#ifdef WORDS_BIGENDIAN
         " smulwt r2, r2, r0               \n\t"
         " smulwb r3, r3, r0               \n\t"
+#else
+        " smulwb r2, r2, r0               \n\t"
+        " smulwt r3, r3, r0               \n\t"
+#endif
 
         " ssat r2, #16, r2                \n\t"
         " ssat r3, #16, r3                \n\t"
 
+#ifdef WORDS_BIGENDIAN
         " pkhbt r0, r3, r2, LSL #16       \n\t"
+#else
+        " pkhbt r0, r2, r3, LSL #16       \n\t"
+#endif
         " str  r0, [%0], #4               \n\t"
 
         MOD_INC()
@@ -95,18 +104,30 @@ static void pa_volume_s16ne_arm(int16_t *samples, const int32_t *volumes, unsign
         " ldrd r4, [r6], #8               \n\t"
         " ldrd r0, [%0]                   \n\t"
 
+#ifdef WORDS_BIGENDIAN
         " smulwt r2, r2, r0               \n\t"
         " smulwb r3, r3, r0               \n\t"
         " smulwt r4, r4, r1               \n\t"
         " smulwb r5, r5, r1               \n\t"
+#else
+        " smulwb r2, r2, r0               \n\t"
+        " smulwt r3, r3, r0               \n\t"
+        " smulwb r4, r4, r1               \n\t"
+        " smulwt r5, r5, r1               \n\t"
+#endif
 
         " ssat r2, #16, r2                \n\t"
         " ssat r3, #16, r3                \n\t"
         " ssat r4, #16, r4                \n\t"
         " ssat r5, #16, r5                \n\t"
 
+#ifdef WORDS_BIGENDIAN
         " pkhbt r0, r3, r2, LSL #16       \n\t"
         " pkhbt r1, r5, r4, LSL #16       \n\t"
+#else
+        " pkhbt r0, r2, r3, LSL #16       \n\t"
+        " pkhbt r1, r4, r5, LSL #16       \n\t"
+#endif
         " strd  r0, [%0], #8              \n\t"
 
         MOD_INC()