diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2014-07-19 05:09:57 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-07-19 05:36:27 +0200 |
commit | 6532a1a8286e3ecc80c30ef74ff08663f237424d (patch) | |
tree | cc85616835b34f73cf0ffc4a8c0258d372e2dec9 /libswscale/x86/swscale_template.c | |
parent | e9f7c7aef96dd8ca3519f0cfaa52573cf63a1d74 (diff) | |
download | ffmpeg-6532a1a8286e3ecc80c30ef74ff08663f237424d.tar.gz |
sws/x86: split mmxext fast bilinear scaler out
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libswscale/x86/swscale_template.c')
-rw-r--r-- | libswscale/x86/swscale_template.c | 194 |
1 files changed, 2 insertions, 192 deletions
diff --git a/libswscale/x86/swscale_template.c b/libswscale/x86/swscale_template.c index 1213197347..36a606c5b2 100644 --- a/libswscale/x86/swscale_template.c +++ b/libswscale/x86/swscale_template.c @@ -28,11 +28,6 @@ #undef MOVNTQ2 #undef PREFETCH -#if COMPILE_TEMPLATE_MMXEXT -#define PREFETCH "prefetchnta" -#else -#define PREFETCH " # nop" -#endif #if COMPILE_TEMPLATE_MMXEXT #define REAL_MOVNTQ(a,b) "movntq " #a ", " #b " \n\t" @@ -1470,191 +1465,6 @@ static void RENAME(yuv2yuyv422_1)(SwsContext *c, const int16_t *buf0, ); } } - -#if COMPILE_TEMPLATE_MMXEXT -static void RENAME(hyscale_fast)(SwsContext *c, int16_t *dst, - int dstWidth, const uint8_t *src, - int srcW, int xInc) -{ - int32_t *filterPos = c->hLumFilterPos; - int16_t *filter = c->hLumFilter; - void *mmxextFilterCode = c->lumMmxextFilterCode; - int i; -#if defined(PIC) - 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" - "mov %1, %%"REG_D" \n\t" - "mov %2, %%"REG_d" \n\t" - "mov %3, %%"REG_b" \n\t" - "xor %%"REG_a", %%"REG_a" \n\t" // i - PREFETCH" (%%"REG_c") \n\t" - PREFETCH" 32(%%"REG_c") \n\t" - PREFETCH" 64(%%"REG_c") \n\t" - -#if ARCH_X86_64 -#define CALL_MMXEXT_FILTER_CODE \ - "movl (%%"REG_b"), %%esi \n\t"\ - "call *%4 \n\t"\ - "movl (%%"REG_b", %%"REG_a"), %%esi \n\t"\ - "add %%"REG_S", %%"REG_c" \n\t"\ - "add %%"REG_a", %%"REG_D" \n\t"\ - "xor %%"REG_a", %%"REG_a" \n\t"\ - -#else -#define CALL_MMXEXT_FILTER_CODE \ - "movl (%%"REG_b"), %%esi \n\t"\ - "call *%4 \n\t"\ - "addl (%%"REG_b", %%"REG_a"), %%"REG_c" \n\t"\ - "add %%"REG_a", %%"REG_D" \n\t"\ - "xor %%"REG_a", %%"REG_a" \n\t"\ - -#endif /* ARCH_X86_64 */ - - CALL_MMXEXT_FILTER_CODE - CALL_MMXEXT_FILTER_CODE - CALL_MMXEXT_FILTER_CODE - CALL_MMXEXT_FILTER_CODE - CALL_MMXEXT_FILTER_CODE - CALL_MMXEXT_FILTER_CODE - CALL_MMXEXT_FILTER_CODE - CALL_MMXEXT_FILTER_CODE - -#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" (mmxextFilterCode) -#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) - ,"%"REG_b -#endif - ); - - for (i=dstWidth-1; (i*xInc)>>16 >=srcW-1; i--) - dst[i] = src[srcW-1]*128; -} - -static void RENAME(hcscale_fast)(SwsContext *c, int16_t *dst1, int16_t *dst2, - int dstWidth, const uint8_t *src1, - const uint8_t *src2, int srcW, int xInc) -{ - int32_t *filterPos = c->hChrFilterPos; - int16_t *filter = c->hChrFilter; - void *mmxextFilterCode = c->chrMmxextFilterCode; - int i; -#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" - "mov %1, %%"REG_D" \n\t" - "mov %2, %%"REG_d" \n\t" - "mov %3, %%"REG_b" \n\t" - "xor %%"REG_a", %%"REG_a" \n\t" // i - PREFETCH" (%%"REG_c") \n\t" - PREFETCH" 32(%%"REG_c") \n\t" - PREFETCH" 64(%%"REG_c") \n\t" - - CALL_MMXEXT_FILTER_CODE - CALL_MMXEXT_FILTER_CODE - CALL_MMXEXT_FILTER_CODE - CALL_MMXEXT_FILTER_CODE - "xor %%"REG_a", %%"REG_a" \n\t" // i - "mov %5, %%"REG_c" \n\t" // src - "mov %6, %%"REG_D" \n\t" // buf2 - PREFETCH" (%%"REG_c") \n\t" - PREFETCH" 32(%%"REG_c") \n\t" - PREFETCH" 64(%%"REG_c") \n\t" - - CALL_MMXEXT_FILTER_CODE - CALL_MMXEXT_FILTER_CODE - CALL_MMXEXT_FILTER_CODE - CALL_MMXEXT_FILTER_CODE - -#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" (mmxextFilterCode), "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) - ,"%"REG_b -#endif - ); - - for (i=dstWidth-1; (i*xInc)>>16 >=srcW-1; i--) { - dst1[i] = src1[srcW-1]*128; - dst2[i] = src2[srcW-1]*128; - } -} -#endif /* COMPILE_TEMPLATE_MMXEXT */ - static av_cold void RENAME(sws_init_swscale)(SwsContext *c) { enum AVPixelFormat dstFormat = c->dstFormat; @@ -1723,8 +1533,8 @@ static av_cold void RENAME(sws_init_swscale)(SwsContext *c) // Use the new MMX scaler if the MMXEXT one can't be used (it is faster than the x86 ASM one). #if COMPILE_TEMPLATE_MMXEXT if (c->flags & SWS_FAST_BILINEAR && c->canMMXEXTBeUsed) { - c->hyscale_fast = RENAME(hyscale_fast); - c->hcscale_fast = RENAME(hcscale_fast); + c->hyscale_fast = ff_hyscale_fast_mmxext; + c->hcscale_fast = ff_hcscale_fast_mmxext; } else { #endif /* COMPILE_TEMPLATE_MMXEXT */ c->hyscale_fast = NULL; |