tweak mmx2 sad.
authorLoren Merritt <lorenm@u.washington.edu>
Thu, 10 May 2007 22:24:19 +0000 (22:24 +0000)
committerLoren Merritt <lorenm@u.washington.edu>
Thu, 10 May 2007 22:24:19 +0000 (22:24 +0000)
6% faster on core2 and k8, no change on p4.

Originally committed as revision 8984 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/i386/motion_est_mmx.c

index e33870e0ff414eee501745bf11ca36fd74f47333..3abbbe8cbc41279e90af2abd949ca550b844647c 100644 (file)
@@ -75,13 +75,11 @@ static inline void sad8_1_mmx2(uint8_t *blk1, uint8_t *blk2, int stride, int h)
         ASMALIGN(4)
         "1:                             \n\t"
         "movq (%1, %%"REG_a"), %%mm0    \n\t"
-        "movq (%2, %%"REG_a"), %%mm2    \n\t"
-        "psadbw %%mm2, %%mm0            \n\t"
+        "psadbw (%2, %%"REG_a"), %%mm0  \n\t"
         "add %3, %%"REG_a"              \n\t"
         "movq (%1, %%"REG_a"), %%mm1    \n\t"
-        "movq (%2, %%"REG_a"), %%mm3    \n\t"
-        "psadbw %%mm1, %%mm3            \n\t"
-        "paddw %%mm3, %%mm0             \n\t"
+        "psadbw (%2, %%"REG_a"), %%mm1  \n\t"
+        "paddw %%mm1, %%mm0             \n\t"
         "paddw %%mm0, %%mm6             \n\t"
         "add %3, %%"REG_a"              \n\t"
         " js 1b                         \n\t"
@@ -97,17 +95,13 @@ static inline void sad8_2_mmx2(uint8_t *blk1a, uint8_t *blk1b, uint8_t *blk2, in
         ASMALIGN(4)
         "1:                             \n\t"
         "movq (%1, %%"REG_a"), %%mm0    \n\t"
-        "movq (%2, %%"REG_a"), %%mm2    \n\t"
-        "pavgb %%mm2, %%mm0             \n\t"
-        "movq (%3, %%"REG_a"), %%mm2    \n\t"
-        "psadbw %%mm2, %%mm0            \n\t"
+        "pavgb (%2, %%"REG_a"), %%mm0   \n\t"
+        "psadbw (%3, %%"REG_a"), %%mm0  \n\t"
         "add %4, %%"REG_a"              \n\t"
         "movq (%1, %%"REG_a"), %%mm1    \n\t"
-        "movq (%2, %%"REG_a"), %%mm3    \n\t"
-        "pavgb %%mm1, %%mm3             \n\t"
-        "movq (%3, %%"REG_a"), %%mm1    \n\t"
-        "psadbw %%mm1, %%mm3            \n\t"
-        "paddw %%mm3, %%mm0             \n\t"
+        "pavgb (%2, %%"REG_a"), %%mm1   \n\t"
+        "psadbw (%3, %%"REG_a"), %%mm1  \n\t"
+        "paddw %%mm1, %%mm0             \n\t"
         "paddw %%mm0, %%mm6             \n\t"
         "add %4, %%"REG_a"              \n\t"
         " js 1b                         \n\t"
@@ -120,30 +114,24 @@ static inline void sad8_4_mmx2(uint8_t *blk1, uint8_t *blk2, int stride, int h)
 { //FIXME reuse src
     long len= -(stride*h);
     asm volatile(
-        ASMALIGN(4)
         "movq "MANGLE(bone)", %%mm5     \n\t"
+        ASMALIGN(4)
         "1:                             \n\t"
         "movq (%1, %%"REG_a"), %%mm0    \n\t"
-        "movq (%2, %%"REG_a"), %%mm2    \n\t"
         "movq 1(%1, %%"REG_a"), %%mm1   \n\t"
-        "movq 1(%2, %%"REG_a"), %%mm3   \n\t"
-        "pavgb %%mm2, %%mm0             \n\t"
-        "pavgb %%mm1, %%mm3             \n\t"
-        "psubusb %%mm5, %%mm3           \n\t"
-        "pavgb %%mm3, %%mm0             \n\t"
-        "movq (%3, %%"REG_a"), %%mm2    \n\t"
-        "psadbw %%mm2, %%mm0            \n\t"
+        "pavgb (%2, %%"REG_a"), %%mm0   \n\t"
+        "pavgb 1(%2, %%"REG_a"), %%mm1  \n\t"
+        "psubusb %%mm5, %%mm1           \n\t"
+        "pavgb %%mm1, %%mm0             \n\t"
+        "psadbw (%3, %%"REG_a"), %%mm0  \n\t"
         "add %4, %%"REG_a"              \n\t"
-        "movq (%1, %%"REG_a"), %%mm1    \n\t"
-        "movq (%2, %%"REG_a"), %%mm3    \n\t"
-        "movq 1(%1, %%"REG_a"), %%mm2   \n\t"
-        "movq 1(%2, %%"REG_a"), %%mm4   \n\t"
-        "pavgb %%mm3, %%mm1             \n\t"
-        "pavgb %%mm4, %%mm2             \n\t"
-        "psubusb %%mm5, %%mm2           \n\t"
-        "pavgb %%mm1, %%mm2             \n\t"
-        "movq (%3, %%"REG_a"), %%mm1    \n\t"
-        "psadbw %%mm1, %%mm2            \n\t"
+        "movq (%1, %%"REG_a"), %%mm2    \n\t"
+        "movq 1(%1, %%"REG_a"), %%mm3   \n\t"
+        "pavgb (%2, %%"REG_a"), %%mm2   \n\t"
+        "pavgb 1(%2, %%"REG_a"), %%mm3  \n\t"
+        "psubusb %%mm5, %%mm3           \n\t"
+        "pavgb %%mm3, %%mm2             \n\t"
+        "psadbw (%3, %%"REG_a"), %%mm2  \n\t"
         "paddw %%mm2, %%mm0             \n\t"
         "paddw %%mm0, %%mm6             \n\t"
         "add %4, %%"REG_a"              \n\t"