[FFmpeg-cvslog] r12661 - in trunk/libavcodec/i386: dsputil_h264_template_mmx.c dsputil_h264_template_ssse3.c dsputil_mmx.c dsputil_mmx.h h264dsp_mmx.c

Loren Merritt lorenm
Wed Apr 2 13:01:44 CEST 2008


It seems that icc copies the constants from their global var onto the 
stack, at which point they're not aligned, hence the crash.
Try this. It really shouldn't mean anything different, but maybe it'll 
confuse icc into not performing that "optimization".

--Loren Merritt
-------------- next part --------------
Index: i386/dsputil_h264_template_ssse3.c
===================================================================
--- i386/dsputil_h264_template_ssse3.c	(revision 12661)
+++ i386/dsputil_h264_template_ssse3.c	(working copy)
@@ -43,7 +43,8 @@
             "pshuflw $0, %%xmm7, %%xmm7 \n\t"
             "movlhps %%xmm6, %%xmm6 \n\t"
             "movlhps %%xmm7, %%xmm7 \n\t"
-            :: "r"(255*(x+y)+8), "m"(rnd?ff_pw_4:ff_pw_3));
+            :: "r"(255*(x+y)+8), "m"(*(rnd?&ff_pw_4:&ff_pw_3))
+        );
 
         if(x) {
             asm volatile(
@@ -114,7 +115,7 @@
         "pshuflw $0, %%xmm6, %%xmm6 \n\t"
         "movlhps %%xmm7, %%xmm7 \n\t"
         "movlhps %%xmm6, %%xmm6 \n\t"
-        :: "r"((x*255+8)*(8-y)), "r"((x*255+8)*y), "m"(rnd?ff_pw_32:ff_pw_28)
+        :: "r"((x*255+8)*(8-y)), "r"((x*255+8)*y), "m"(*(rnd?&ff_pw_32:&ff_pw_28))
     );
 
     asm volatile(



More information about the ffmpeg-cvslog mailing list