]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/commitdiff
armv5 optimizations
authordiego <diego@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Sun, 10 Sep 2006 22:29:02 +0000 (22:29 +0000)
committerdiego <diego@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Sun, 10 Sep 2006 22:29:02 +0000 (22:29 +0000)
patch by Siarhei Siamashka siarhei.siamashka at gmail com

git-svn-id: file:///var/local/repositories/ffmpeg/trunk@6228 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b

libavcodec/mpegaudiodec.c

index 1fbde2039278f3b8f1a3c2efb687306da0f3b378..e9c78332bcf2acf0b639d0084761948354e74bb0 100644 (file)
 #include "bitstream.h"
 #include "dsputil.h"
 
+/* Assume that all Intel XScale processors support armv5 edsp instructions */
+#if defined(ARCH_ARMV4L) && defined (HAVE_IWMMXT)
+#define ARCH_ARM5E
+#endif
+
 /*
  * TODO:
  *  - in low precision mode, use more 16 bit multiplies in synth filter
@@ -791,6 +796,17 @@ static inline int round_sample(int *sum)
         /* signed 16x16 -> 32 multiply */
 #       define MULS(ra, rb) \
             ({ int __rt; asm ("mullhw %0, %1, %2" : "=r" (__rt) : "r" (ra), "r" (rb)); __rt; })
+
+#   elif defined(ARCH_ARM5E)
+
+        /* signed 16x16 -> 32 multiply add accumulate */
+#       define MACS(rt, ra, rb) \
+            asm ("smlabb %0, %2, %3, %0" : "=r" (rt) : "0" (rt), "r" (ra), "r" (rb));
+
+        /* signed 16x16 -> 32 multiply */
+#       define MULS(ra, rb) \
+            ({ int __rt; asm ("smulbb %0, %1, %2" : "=r" (__rt) : "r" (ra), "r" (rb)); __rt; })
+
 #   else
         /* signed 16x16 -> 32 multiply add accumulate */
 #       define MACS(rt, ra, rb) rt += (ra) * (rb)