[vlc-commits] avcodec: clobber XMM registers correctly (fixes #5268)
Rémi Denis-Courmont
git at videolan.org
Sat Oct 13 13:55:10 CEST 2012
vlc/vlc-2.0 | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sat Oct 13 14:05:18 2012 +0300| [3cdabb12389ecb273f4dc7a9368a4a34853991fb] | committer: Rémi Denis-Courmont
avcodec: clobber XMM registers correctly (fixes #5268)
(cherry picked from commit 485a070fcaa8e6bd7985ce489d5f53edffecfdaf)
> http://git.videolan.org/gitweb.cgi/vlc/vlc-2.0.git/?a=commit;h=3cdabb12389ecb273f4dc7a9368a4a34853991fb
---
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 6a5046a..909932f 100644
--- a/modules/codec/avcodec/copy.c
+++ b/modules/codec/avcodec/copy.c
@@ -70,12 +70,13 @@ 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")
/* Optimized copy from "Uncacheable Speculative Write Combining" memory
* 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,
@@ -121,6 +122,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)
@@ -149,6 +151,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,
@@ -193,7 +196,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
@@ -218,7 +221,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