From 17dc7c7a60798d3e1f78bad97423fb49c8dc1c1d Mon Sep 17 00:00:00 2001
From: Jason Garrett-Glaser <darkshikari@gmail.com>
Date: Thu, 1 Jul 2010 10:29:47 +0000
Subject: [PATCH] Fix h264/vp8 intra pred on Athlon XP Whose idea was it to
 have a CPU that didn't SIGILL on an invalid instruction?

Originally committed as revision 23927 to svn://svn.ffmpeg.org/ffmpeg/trunk
---
 libavcodec/x86/h264_intrapred.asm | 29 ++++++++++++-----------------
 libavcodec/x86/h264dsp_mmx.c      |  2 --
 2 files changed, 12 insertions(+), 19 deletions(-)

diff --git a/libavcodec/x86/h264_intrapred.asm b/libavcodec/x86/h264_intrapred.asm
index d53b3d7f46c..d36ecfb890f 100644
--- a/libavcodec/x86/h264_intrapred.asm
+++ b/libavcodec/x86/h264_intrapred.asm
@@ -115,7 +115,7 @@ PRED16x16_H ssse3
 ; void pred16x16_dc(uint8_t *src, int stride)
 ;-----------------------------------------------------------------------------
 
-%macro PRED16x16_DC 2
+%macro PRED16x16_DC 1
 cglobal pred16x16_dc_%1, 2,7
     mov       r4, r0
     sub       r0, r1
@@ -143,10 +143,6 @@ cglobal pred16x16_dc_%1, 2,7
     movd       m0, r2d
     punpcklbw  m0, m0
     pshufw     m0, m0, 0
-%elifidn %1, sse
-    imul      r2d, 0x01010101
-    movd       m0, r2d
-    shufps     m0, m0, 0
 %elifidn %1, sse2
     movd       m0, r2d
     punpcklbw  m0, m0
@@ -161,18 +157,18 @@ cglobal pred16x16_dc_%1, 2,7
 %if mmsize==8
     mov       r3d, 8
 .loop:
-    %2 [r4+r1*0+0], m0
-    %2 [r4+r1*0+8], m0
-    %2 [r4+r1*1+0], m0
-    %2 [r4+r1*1+8], m0
+    mova [r4+r1*0+0], m0
+    mova [r4+r1*0+8], m0
+    mova [r4+r1*1+0], m0
+    mova [r4+r1*1+8], m0
 %else
     mov       r3d, 4
 .loop:
-    %2 [r4+r1*0], m0
-    %2 [r4+r1*1], m0
+    mova [r4+r1*0], m0
+    mova [r4+r1*1], m0
     lea   r4, [r4+r1*2]
-    %2 [r4+r1*0], m0
-    %2 [r4+r1*1], m0
+    mova [r4+r1*0], m0
+    mova [r4+r1*1], m0
 %endif
     lea   r4, [r4+r1*2]
     dec   r3d
@@ -181,11 +177,10 @@ cglobal pred16x16_dc_%1, 2,7
 %endmacro
 
 INIT_MMX
-PRED16x16_DC mmxext, movq
+PRED16x16_DC mmxext
 INIT_XMM
-PRED16x16_DC    sse, movaps
-PRED16x16_DC   sse2, movdqa
-PRED16x16_DC  ssse3, movdqa
+PRED16x16_DC   sse2
+PRED16x16_DC  ssse3
 
 ;-----------------------------------------------------------------------------
 ; void pred16x16_tm_vp8(uint8_t *src, int stride)
diff --git a/libavcodec/x86/h264dsp_mmx.c b/libavcodec/x86/h264dsp_mmx.c
index 3c3eab08479..b9d2c32346c 100644
--- a/libavcodec/x86/h264dsp_mmx.c
+++ b/libavcodec/x86/h264dsp_mmx.c
@@ -2329,7 +2329,6 @@ void ff_pred16x16_horizontal_mmx   (uint8_t *src, int stride);
 void ff_pred16x16_horizontal_mmxext(uint8_t *src, int stride);
 void ff_pred16x16_horizontal_ssse3 (uint8_t *src, int stride);
 void ff_pred16x16_dc_mmxext        (uint8_t *src, int stride);
-void ff_pred16x16_dc_sse           (uint8_t *src, int stride);
 void ff_pred16x16_dc_sse2          (uint8_t *src, int stride);
 void ff_pred16x16_dc_ssse3         (uint8_t *src, int stride);
 void ff_pred16x16_tm_vp8_mmx       (uint8_t *src, int stride);
@@ -2384,7 +2383,6 @@ void ff_h264_pred_init_x86(H264PredContext *h, int codec_id)
 
     if (mm_flags & FF_MM_SSE) {
         h->pred16x16[VERT_PRED8x8] = ff_pred16x16_vertical_sse;
-        h->pred16x16[DC_PRED8x8  ] = ff_pred16x16_dc_sse;
     }
 
     if (mm_flags & FF_MM_SSE2) {
-- 
GitLab