[vlc-commits] avcodec: clobber XMM registers correctly (fixes #5268)

Rémi Denis-Courmont git at videolan.org
Sat Oct 13 13:34:41 CEST 2012


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sat Oct 13 14:05:18 2012 +0300| [485a070fcaa8e6bd7985ce489d5f53edffecfdaf] | committer: Rémi Denis-Courmont

avcodec: clobber XMM registers correctly (fixes #5268)

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=485a070fcaa8e6bd7985ce489d5f53edffecfdaf
---

 modules/codec/avcodec/copy.c |    9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/modules/codec/avcodec/copy.c b/modules/codec/avcodec/copy.c
index 13a24ce..827892d 100644
--- a/modules/codec/avcodec/copy.c
+++ b/modules/codec/avcodec/copy.c
@@ -70,7 +70,7 @@ void CopyCleanCache(copy_cache_t *cache)
         store " %%xmm2,   16(%[dst])\n" \
         store " %%xmm3,   32(%[dst])\n" \
         store " %%xmm4,   48(%[dst])\n" \
-        : : [dst]"r"(dstp), [src]"r"(srcp) : "memory")
+        : : [dst]"r"(dstp), [src]"r"(srcp) : "memory", "xmm1", "xmm2", "xmm3", "xmm4")
 
 #ifndef __SSE4_1__
 # undef vlc_CPU_SSE4_1
@@ -91,6 +91,7 @@ void CopyCleanCache(copy_cache_t *cache)
  * as used by some video surface.
  * XXX It is really efficient only when SSE4.1 is available.
  */
+VLC_SSE
 static void CopyFromUswc(uint8_t *dst, size_t dst_pitch,
                          const uint8_t *src, size_t src_pitch,
                          unsigned width, unsigned height,
@@ -136,6 +137,7 @@ static void CopyFromUswc(uint8_t *dst, size_t dst_pitch,
     }
 }
 
+VLC_SSE
 static void Copy2d(uint8_t *dst, size_t dst_pitch,
                    const uint8_t *src, size_t src_pitch,
                    unsigned width, unsigned height)
@@ -164,6 +166,7 @@ static void Copy2d(uint8_t *dst, size_t dst_pitch,
     }
 }
 
+VLC_SSE
 static void SSE_SplitUV(uint8_t *dstu, size_t dstu_pitch,
                         uint8_t *dstv, size_t dstv_pitch,
                         const uint8_t *src, size_t src_pitch,
@@ -209,7 +212,7 @@ static void SSE_SplitUV(uint8_t *dstu, size_t dstu_pitch,
                     "pshufb  %%xmm7, %%xmm2\n"
                     "pshufb  %%xmm7, %%xmm3\n"
                     STORE2X32
-                    : : [dst1]"r"(&dstu[x]), [dst2]"r"(&dstv[x]), [src]"r"(&src[2*x]), [shuffle]"r"(shuffle) : "memory");
+                    : : [dst1]"r"(&dstu[x]), [dst2]"r"(&dstv[x]), [src]"r"(&src[2*x]), [shuffle]"r"(shuffle) : "memory", "xmm0", "xmm1", "xmm2", "xmm3", "xmm7");
             }
         } else
 #endif
@@ -234,7 +237,7 @@ static void SSE_SplitUV(uint8_t *dstu, size_t dstu_pitch,
                     "packuswb %%xmm6, %%xmm2\n"
                     "packuswb %%xmm7, %%xmm3\n"
                     STORE2X32
-                    : : [dst2]"r"(&dstu[x]), [dst1]"r"(&dstv[x]), [src]"r"(&src[2*x]), [mask]"r"(mask) : "memory");
+                    : : [dst2]"r"(&dstu[x]), [dst1]"r"(&dstv[x]), [src]"r"(&src[2*x]), [mask]"r"(mask) : "memory", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7");
             }
         }
 #undef STORE2X32



More information about the vlc-commits mailing list