From 3f88dce350afa87f68fcacecef585885d4b90aa2 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Mon, 19 Apr 2010 16:43:28 +0200 Subject: [PATCH] videomixer: Add i387 floating point registers to the clobbered registers list They are the same as the mm0-mm7 MMX registers and will be overwritten by the assembly code if gcc doesn't know about the MMX registers. Note: They're all added to the list of clobbered registers in all cases and not only when __MMX__ is not defined just to make sure that no other bugs happen with this code just because some compiler version gets things wrong. Fixes bug #614466. --- gst/videomixer/blend_mmx.h | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/gst/videomixer/blend_mmx.h b/gst/videomixer/blend_mmx.h index 4caa252..a0c0056 100644 --- a/gst/videomixer/blend_mmx.h +++ b/gst/videomixer/blend_mmx.h @@ -108,7 +108,8 @@ NAME_BLEND (guint8 * dest, const guint8 * src, gint src_height, gint src_width, "3: \n\t" :"=r" (src), "=r" (dest) :"0" (src), "1" (dest), "m" (s_alpha), "m" (src_width) - :"%eax", "%ecx", "memory" + :"%eax", "%ecx", "memory", + "st", "st(1)", "st(2)", "st(3)", "st(4)", "st(5)", "st(6)", "st(7)" #ifdef __MMX__ , "mm0", "mm1", "mm2", "mm4", "mm3", "mm5", "mm6", "mm7" #endif @@ -131,8 +132,8 @@ _memcpy_u8_mmx (guint8 * dest, const guint8 * src, guint count) "test $7, %0 \n\t" "je 3f \n\t" "2: \n\t" - "movb (%2), %%ah \n\t" - "movb %%ah, (%1) \n\t" + "movb (%2), %%al \n\t" + "movb %%al, (%1) \n\t" "inc %2 \n\t" "inc %1 \n\t" "dec %0 \n\t" @@ -151,9 +152,10 @@ _memcpy_u8_mmx (guint8 * dest, const guint8 * src, guint count) "jne 4b \n\t" "5: \n\t" "emms \n\t" - : "=r" (count), "=R" (dest), "=R" (src) + : "=r" (count), "=q" (dest), "=q" (src) : "0" (count), "1" (dest), "2" (src) - : "memory", "ah" + : "memory", "al", + "st", "st(1)", "st(2)", "st(3)", "st(4)", "st(5)", "st(6)", "st(7)" #ifdef __MMX__ , "mm0" #endif @@ -195,7 +197,8 @@ _memset_u8_mmx (guint8 * dest, guint val, guint count) "emms \n\t" : "=r" (count), "=q" (dest) : "0" (count), "1" (dest), "q" (val8), "m" (val64) - : "memory" + : "memory", + "st", "st(1)", "st(2)", "st(3)", "st(4)", "st(5)", "st(6)", "st(7)" #ifdef __MMX__ , "mm0" #endif @@ -235,7 +238,8 @@ _memset_u32_mmx (guint32 * dest, guint32 val, guint count) "emms \n\t" : "=r" (count), "=r" (dest) : "0" (count), "1" (dest), "r" (val), "m" (val64) - : "memory" + : "memory", + "st", "st(1)", "st(2)", "st(3)", "st(4)", "st(5)", "st(6)", "st(7)" #ifdef __MMX__ , "mm0" #endif @@ -331,7 +335,8 @@ _blend_u8_mmx (guint8 * dest, const guint8 * src, "4: \n\t" :"=r" (src), "=r" (dest) :"0" (src), "1" (dest), "m" (s_alpha), "m" (src_width) - :"%eax", "%ecx", "memory" + :"%eax", "%ecx", "memory", + "st", "st(1)", "st(2)", "st(3)", "st(4)", "st(5)", "st(6)", "st(7)" #ifdef __MMX__ , "mm1", "mm2", "mm3", "mm4", "mm6", "mm7" #endif -- 2.7.4