Commit 4453df04 authored by lorenm's avatar lorenm

13% faster yuv420 to rgb15 mmx.

It is now faster than the old gpl version on conroe.


git-svn-id: file:///var/local/repositories/mplayer/trunk/libswscale@31181 b3059339-0415-0410-9bf9-f77b7e298cf2
parent 036e966a
...@@ -41,6 +41,9 @@ ...@@ -41,6 +41,9 @@
DECLARE_ASM_CONST(8, uint64_t, mmx_00ffw) = 0x00ff00ff00ff00ffULL; DECLARE_ASM_CONST(8, uint64_t, mmx_00ffw) = 0x00ff00ff00ff00ffULL;
DECLARE_ASM_CONST(8, uint64_t, mmx_redmask) = 0xf8f8f8f8f8f8f8f8ULL; DECLARE_ASM_CONST(8, uint64_t, mmx_redmask) = 0xf8f8f8f8f8f8f8f8ULL;
DECLARE_ASM_CONST(8, uint64_t, mmx_grnmask) = 0xfcfcfcfcfcfcfcfcULL; DECLARE_ASM_CONST(8, uint64_t, mmx_grnmask) = 0xfcfcfcfcfcfcfcfcULL;
DECLARE_ASM_CONST(8, uint64_t, pb_e0) = 0xe0e0e0e0e0e0e0e0ULL;
DECLARE_ASM_CONST(8, uint64_t, pb_03) = 0x0303030303030303ULL;
DECLARE_ASM_CONST(8, uint64_t, pb_07) = 0x0707070707070707ULL;
//MMX versions //MMX versions
#undef RENAME #undef RENAME
......
...@@ -162,31 +162,26 @@ ...@@ -162,31 +162,26 @@
__asm__ volatile (SFENCE"\n\t"EMMS); \ __asm__ volatile (SFENCE"\n\t"EMMS); \
return srcSliceH; \ return srcSliceH; \
#define IF0(x)
#define IF1(x) x
#define RGB_PACK16(gmask, gshift, rshift) \ #define RGB_PACK16(gmask, is15) \
"pand "MANGLE(mmx_redmask)", %%mm0\n\t" \ "pand "MANGLE(mmx_redmask)", %%mm0\n\t" \
"pand "MANGLE(mmx_redmask)", %%mm1\n\t" \ "pand "MANGLE(mmx_redmask)", %%mm1\n\t" \
"movq %%mm2, %%mm3\n\t" \
"psllw $"AV_STRINGIFY(3-is15)", %%mm2\n\t" \
"psrlw $"AV_STRINGIFY(5+is15)", %%mm3\n\t" \
"psrlw $3, %%mm0\n\t" \ "psrlw $3, %%mm0\n\t" \
"pand "MANGLE(gmask)", %%mm2\n\t" \ IF##is15("psrlw $1, %%mm1\n\t") \
"movq %%mm0, %%mm5\n\t" \ "pand "MANGLE(pb_e0)", %%mm2\n\t" \
"movq %%mm1, %%mm6\n\t" \ "pand "MANGLE(gmask)", %%mm3\n\t" \
"movq %%mm2, %%mm7\n\t" \
"punpcklbw %%mm4, %%mm0\n\t" \
"punpcklbw %%mm4, %%mm1\n\t" \
"punpcklbw %%mm4, %%mm2\n\t" \
"punpckhbw %%mm4, %%mm5\n\t" \
"punpckhbw %%mm4, %%mm6\n\t" \
"punpckhbw %%mm4, %%mm7\n\t" \
"psllw $"rshift", %%mm1\n\t" \
"psllw $"rshift", %%mm6\n\t" \
"psllw $"gshift", %%mm2\n\t" \
"psllw $"gshift", %%mm7\n\t" \
"por %%mm1, %%mm0\n\t" \
"por %%mm6, %%mm5\n\t" \
"por %%mm2, %%mm0\n\t" \ "por %%mm2, %%mm0\n\t" \
"por %%mm7, %%mm5\n\t" \ "por %%mm3, %%mm1\n\t" \
"movq %%mm0, %%mm2\n\t" \
"punpcklbw %%mm1, %%mm0\n\t" \
"punpckhbw %%mm1, %%mm2\n\t" \
MOVNTQ " %%mm0, (%1)\n\t" \ MOVNTQ " %%mm0, (%1)\n\t" \
MOVNTQ " %%mm5, 8(%1)\n\t" \ MOVNTQ " %%mm2, 8(%1)\n\t" \
#define DITHER_RGB \ #define DITHER_RGB \
"paddusb "BLUE_DITHER"(%4), %%mm0\n\t" \ "paddusb "BLUE_DITHER"(%4), %%mm0\n\t" \
...@@ -214,7 +209,7 @@ static inline int RENAME(yuv420_rgb15)(SwsContext *c, const uint8_t *src[], ...@@ -214,7 +209,7 @@ static inline int RENAME(yuv420_rgb15)(SwsContext *c, const uint8_t *src[],
#ifdef DITHER1XBPP #ifdef DITHER1XBPP
DITHER_RGB DITHER_RGB
#endif #endif
RGB_PACK16(mmx_redmask, "2", "7") RGB_PACK16(pb_03, 1)
YUV2RGB_ENDLOOP(2) YUV2RGB_ENDLOOP(2)
YUV2RGB_OPERANDS YUV2RGB_OPERANDS
...@@ -242,7 +237,7 @@ static inline int RENAME(yuv420_rgb16)(SwsContext *c, const uint8_t *src[], ...@@ -242,7 +237,7 @@ static inline int RENAME(yuv420_rgb16)(SwsContext *c, const uint8_t *src[],
#ifdef DITHER1XBPP #ifdef DITHER1XBPP
DITHER_RGB DITHER_RGB
#endif #endif
RGB_PACK16(mmx_grnmask, "3", "8") RGB_PACK16(pb_07, 0)
YUV2RGB_ENDLOOP(2) YUV2RGB_ENDLOOP(2)
YUV2RGB_OPERANDS YUV2RGB_OPERANDS
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment