mirror of https://git.ffmpeg.org/ffmpeg.git
swscale: fix crash in fast_bilinear code when compiled with -mred-zone.
Additional comments from Måns Rullgard have been integrated
by Reinhard Tartler.
Signed-off-by: Reinhard Tartler <siretart@tauware.de>
(cherry picked from commit b14fa5572c
)
Signed-off-by: Reinhard Tartler <siretart@tauware.de>
This commit is contained in:
parent
b0283ccb9e
commit
dd8228dcff
|
@ -2072,12 +2072,24 @@ static void RENAME(hyscale_fast)(SwsContext *c, int16_t *dst,
|
|||
void *mmx2FilterCode= c->lumMmx2FilterCode;
|
||||
int i;
|
||||
#if defined(PIC)
|
||||
DECLARE_ALIGNED(8, uint64_t, ebxsave);
|
||||
uint64_t ebxsave;
|
||||
#endif
|
||||
#if ARCH_X86_64
|
||||
uint64_t retsave;
|
||||
#endif
|
||||
|
||||
__asm__ volatile(
|
||||
#if defined(PIC)
|
||||
"mov %%"REG_b", %5 \n\t"
|
||||
#if ARCH_X86_64
|
||||
"mov -8(%%rsp), %%"REG_a" \n\t"
|
||||
"mov %%"REG_a", %6 \n\t"
|
||||
#endif
|
||||
#else
|
||||
#if ARCH_X86_64
|
||||
"mov -8(%%rsp), %%"REG_a" \n\t"
|
||||
"mov %%"REG_a", %5 \n\t"
|
||||
#endif
|
||||
#endif
|
||||
"pxor %%mm7, %%mm7 \n\t"
|
||||
"mov %0, %%"REG_c" \n\t"
|
||||
|
@ -2119,11 +2131,23 @@ static void RENAME(hyscale_fast)(SwsContext *c, int16_t *dst,
|
|||
|
||||
#if defined(PIC)
|
||||
"mov %5, %%"REG_b" \n\t"
|
||||
#if ARCH_X86_64
|
||||
"mov %6, %%"REG_a" \n\t"
|
||||
"mov %%"REG_a", -8(%%rsp) \n\t"
|
||||
#endif
|
||||
#else
|
||||
#if ARCH_X86_64
|
||||
"mov %5, %%"REG_a" \n\t"
|
||||
"mov %%"REG_a", -8(%%rsp) \n\t"
|
||||
#endif
|
||||
#endif
|
||||
:: "m" (src), "m" (dst), "m" (filter), "m" (filterPos),
|
||||
"m" (mmx2FilterCode)
|
||||
#if defined(PIC)
|
||||
,"m" (ebxsave)
|
||||
#endif
|
||||
#if ARCH_X86_64
|
||||
,"m"(retsave)
|
||||
#endif
|
||||
: "%"REG_a, "%"REG_c, "%"REG_d, "%"REG_S, "%"REG_D
|
||||
#if !defined(PIC)
|
||||
|
@ -2146,10 +2170,22 @@ static void RENAME(hcscale_fast)(SwsContext *c, int16_t *dst1, int16_t *dst2,
|
|||
#if defined(PIC)
|
||||
DECLARE_ALIGNED(8, uint64_t, ebxsave);
|
||||
#endif
|
||||
#if ARCH_X86_64
|
||||
DECLARE_ALIGNED(8, uint64_t, retsave);
|
||||
#endif
|
||||
|
||||
__asm__ volatile(
|
||||
#if defined(PIC)
|
||||
"mov %%"REG_b", %7 \n\t"
|
||||
#if ARCH_X86_64
|
||||
"mov -8(%%rsp), %%"REG_a" \n\t"
|
||||
"mov %%"REG_a", %8 \n\t"
|
||||
#endif
|
||||
#else
|
||||
#if ARCH_X86_64
|
||||
"mov -8(%%rsp), %%"REG_a" \n\t"
|
||||
"mov %%"REG_a", %7 \n\t"
|
||||
#endif
|
||||
#endif
|
||||
"pxor %%mm7, %%mm7 \n\t"
|
||||
"mov %0, %%"REG_c" \n\t"
|
||||
|
@ -2179,11 +2215,23 @@ static void RENAME(hcscale_fast)(SwsContext *c, int16_t *dst1, int16_t *dst2,
|
|||
|
||||
#if defined(PIC)
|
||||
"mov %7, %%"REG_b" \n\t"
|
||||
#if ARCH_X86_64
|
||||
"mov %8, %%"REG_a" \n\t"
|
||||
"mov %%"REG_a", -8(%%rsp) \n\t"
|
||||
#endif
|
||||
#else
|
||||
#if ARCH_X86_64
|
||||
"mov %7, %%"REG_a" \n\t"
|
||||
"mov %%"REG_a", -8(%%rsp) \n\t"
|
||||
#endif
|
||||
#endif
|
||||
:: "m" (src1), "m" (dst1), "m" (filter), "m" (filterPos),
|
||||
"m" (mmx2FilterCode), "m" (src2), "m"(dst2)
|
||||
#if defined(PIC)
|
||||
,"m" (ebxsave)
|
||||
#endif
|
||||
#if ARCH_X86_64
|
||||
,"m"(retsave)
|
||||
#endif
|
||||
: "%"REG_a, "%"REG_c, "%"REG_d, "%"REG_S, "%"REG_D
|
||||
#if !defined(PIC)
|
||||
|
|
Loading…
Reference in New Issue