[FFmpeg-cvslog] x86: fix build with gcc 4.7

Mans Rullgard git at videolan.org
Mon Jun 4 13:13:43 CEST 2012


ffmpeg | branch: release/0.7 | Mans Rullgard <mans at mansr.com> | Tue Jul 26 12:23:43 2011 +0100| [850298ef2538f02cd4671a4cc5035026b35c7bf5] | committer: Derek Buitenhuis

x86: fix build with gcc 4.7

The upcoming gcc 4.7 has more advanced constant propagation
resulting some inline asm operands becoming constants and thus
emitted as literals, sometimes in contexts where this results
in invalid instructions.

This patch changes the constraints of the relevant operands
to "rm" thus forcing a valid type.  While obviously suboptimal,
this is what older gcc versions already did, and there is no
change to the code generated with these.

Signed-off-by: Mans Rullgard <mans at mansr.com>
(cherry picked from commit da4c7cce2100a4e4f9276b4f17e260be47b53f41)
Signed-off-by: Derek Buitenhuis <derek.buitenhuis at gmail.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=850298ef2538f02cd4671a4cc5035026b35c7bf5
---

 libavcodec/x86/h264_qpel_mmx.c |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/libavcodec/x86/h264_qpel_mmx.c b/libavcodec/x86/h264_qpel_mmx.c
index 066f794..b322d5c 100644
--- a/libavcodec/x86/h264_qpel_mmx.c
+++ b/libavcodec/x86/h264_qpel_mmx.c
@@ -398,7 +398,7 @@ static av_noinline void OPNAME ## h264_qpel8or16_v_lowpass_ ## MMX(uint8_t *dst,
             "2:                         \n\t"\
             \
             : "+a"(src), "+c"(dst)\
-            : "S"((x86_reg)srcStride), "D"((x86_reg)dstStride), "g"(h)\
+            : "S"((x86_reg)srcStride), "D"((x86_reg)dstStride), "rm"(h)\
             : "memory"\
         );\
         src += 4-(h+5)*srcStride;\
@@ -446,7 +446,7 @@ static av_always_inline void OPNAME ## h264_qpel8or16_hv1_lowpass_ ## MMX(int16_
             QPEL_H264HV(%%mm3, %%mm4, %%mm5, %%mm0, %%mm1, %%mm2, 15*48)\
             "2:                     \n\t"\
             : "+a"(src)\
-            : "c"(tmp), "S"((x86_reg)srcStride), "g"(size)\
+            : "c"(tmp), "S"((x86_reg)srcStride), "rm"(size)\
             : "memory"\
             );\
         tmp += 4;\
@@ -823,7 +823,7 @@ static av_noinline void OPNAME ## h264_qpel8or16_v_lowpass_ ## MMX(uint8_t *dst,
         "2:                          \n\t"\
         \
         : "+a"(src), "+c"(dst)\
-        : "S"((x86_reg)srcStride), "D"((x86_reg)dstStride), "g"(h)\
+        : "S"((x86_reg)srcStride), "D"((x86_reg)dstStride), "rm"(h)\
         : XMM_CLOBBERS("%xmm0", "%xmm1", "%xmm2", "%xmm3", \
                        "%xmm4", "%xmm5", "%xmm6", "%xmm7",)\
           "memory"\
@@ -878,7 +878,7 @@ static av_always_inline void put_h264_qpel8or16_hv1_lowpass_sse2(int16_t *tmp, u
             QPEL_H264HV_XMM(%%xmm3, %%xmm4, %%xmm5, %%xmm0, %%xmm1, %%xmm2, 15*48)
             "2:                         \n\t"
             : "+a"(src)
-            : "c"(tmp), "S"((x86_reg)srcStride), "g"(size)
+            : "c"(tmp), "S"((x86_reg)srcStride), "rm"(size)
             : XMM_CLOBBERS("%xmm0", "%xmm1", "%xmm2", "%xmm3",
                            "%xmm4", "%xmm5", "%xmm6", "%xmm7",)
               "memory"



More information about the ffmpeg-cvslog mailing list