diff --git a/libavcodec/i386/dsputil_h264_template_mmx.c b/libavcodec/i386/dsputil_h264_template_mmx.c
index 8fa9eac09e2d01d46cb8d11577240bab128d9579..48cb4802288693bc0f6906e7ae1919167a424588 100644
--- a/libavcodec/i386/dsputil_h264_template_mmx.c
+++ b/libavcodec/i386/dsputil_h264_template_mmx.c
@@ -293,11 +293,14 @@ static void H264_CHROMA_MC2_TMPL(uint8_t *dst/*align 2*/, uint8_t *src/*align 1*
         /* writes garbage to the right of dst.
             * ok because partitions are processed from left to right. */
         H264_CHROMA_OP4((%0), %%mm1, %%mm3)
-        "movd %%mm1, (%0)\n\t"
+        "movd %%mm1, %%esi\n\t"
+        "movw %%si, (%0)\n\t"
         "add %4, %0\n\t"
         "sub $1, %2\n\t"
         "jnz 1b\n\t"
-        : "+r" (dst), "+r"(src), "+r"(h) : "m" (ff_pw_32), "r"(stride));
+        : "+r" (dst), "+r"(src), "+r"(h)
+        : "m" (ff_pw_32), "r"(stride)
+        : "%esi");
 
 }
 #endif