diff --git a/libavcodec/x86/h264_weight.asm b/libavcodec/x86/h264_weight.asm
index cc96cb1f3ba061798b470eb3aba18de7b247e563..9bfa8f0f3b51b8e96dac17bfc2ed7d1e276dc0d8 100644
--- a/libavcodec/x86/h264_weight.asm
+++ b/libavcodec/x86/h264_weight.asm
@@ -257,6 +257,13 @@ BIWEIGHT_FUNC_HALF_MM 8, 8, sse2
     add  off_regd, 1
     or   off_regd, 1
     add        r4, 1
+    cmp        r5, 128
+     jne .normal
+    sar        r5, 1
+    sar        r6, 1
+    sar  off_regd, 1
+    sub        r4, 1
+.normal
     movd       m4, r5d
     movd       m0, r6d
     movd       m5, off_regd