Fix previous
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13814 a1c6a512-1295-4272-9138-f99709370657
diff --git a/apps/codecs/libwma/wmadeci.c b/apps/codecs/libwma/wmadeci.c
index bb9b96a..cd01c03 100644
--- a/apps/codecs/libwma/wmadeci.c
+++ b/apps/codecs/libwma/wmadeci.c
@@ -696,14 +696,14 @@
static void vector_fmul_add_add(fixed32 *dst, const fixed32 *src0, const fixed32 *src1, const fixed32 *src2, int src3, int len, int step){
int i;
for(i=0; i<len; i++)
- dst[i*step] = fixmul32(src0[i], src1[i]) + src2[i] + src3;
+ dst[i*step] = fixmul32b(src0[i], src1[i]) + src2[i] + src3;
}
static void vector_fmul_reverse(fixed32 *dst, const fixed32 *src0, const fixed32 *src1, int len){
int i;
src1 += len-1;
for(i=0; i<len; i++)
- dst[i] = fixmul32(src0[i], src1[-i]);
+ dst[i] = fixmul32b(src0[i], src1[-i]);
}
/**
diff --git a/apps/codecs/libwma/wmafixed.c b/apps/codecs/libwma/wmafixed.c
index 3a902dd..7b08689 100644
--- a/apps/codecs/libwma/wmafixed.c
+++ b/apps/codecs/libwma/wmafixed.c
@@ -275,7 +275,7 @@
*/
-#if 0
+
fixed32 fixsin32(fixed32 x)
{
@@ -326,4 +326,4 @@
{
return fixsin32(x - (M_PI_F>>1))*-1;
}
-#endif
+
diff --git a/apps/codecs/libwma/wmafixed.h b/apps/codecs/libwma/wmafixed.h
index 99ddec7..da0637f 100644
--- a/apps/codecs/libwma/wmafixed.h
+++ b/apps/codecs/libwma/wmafixed.h
@@ -61,6 +61,21 @@
__result; \
})
+
+ #define fixmul32b(x, y) \
+ ({ int32_t __hi; \
+ uint32_t __lo; \
+ int32_t __result; \
+ asm ("smull %0, %1, %3, %4\n\t" \
+ "movs %0, %0, lsr %5\n\t" \
+ "adc %2, %0, %1, lsl %6" \
+ : "=&r" (__lo), "=&r" (__hi), "=r" (__result) \
+ : "%r" (x), "r" (y), \
+ "M" (31), "M" (32 - 31) \
+ : "cc"); \
+ __result; \
+ })
+
#elif defined(CPU_COLDFIRE)
static inline int32_t fixmul32(int32_t x, int32_t y)
{