static inline void RENAME(rgb15to24)(const uint8_t *src, uint8_t *dst, long src_size)

{

	const uint16_t *end;

#ifdef HAVE_MMX

	const uint16_t *mm_end;

#endif

	uint8_t *d = (uint8_t *)dst;

	const uint16_t *s = (uint16_t *)src;

	end = s + src_size/2;

#ifdef HAVE_MMX

	__asm __volatile(PREFETCH"	%0"::"m"(*s):"memory");

	mm_end = end - 7;

	while(s < mm_end)

	{

	    __asm __volatile(

		PREFETCH" 32%1\n\t"

		"movq	%1, %%mm0\n\t"

		"movq	%1, %%mm1\n\t"

		"movq	%1, %%mm2\n\t"

		"pand	%2, %%mm0\n\t"

		"pand	%3, %%mm1\n\t"

		"pand	%4, %%mm2\n\t"

		"psllq	$3, %%mm0\n\t"

		"psrlq	$2, %%mm1\n\t"

		"psrlq	$7, %%mm2\n\t"

		"movq	%%mm0, %%mm3\n\t"

		"movq	%%mm1, %%mm4\n\t"

		"movq	%%mm2, %%mm5\n\t"

		"punpcklwd %5, %%mm0\n\t"

		"punpcklwd %5, %%mm1\n\t"

		"punpcklwd %5, %%mm2\n\t"

		"punpckhwd %5, %%mm3\n\t"

		"punpckhwd %5, %%mm4\n\t"

		"punpckhwd %5, %%mm5\n\t"

		"psllq	$8, %%mm1\n\t"

		"psllq	$16, %%mm2\n\t"

		"por	%%mm1, %%mm0\n\t"

		"por	%%mm2, %%mm0\n\t"

		"psllq	$8, %%mm4\n\t"

		"psllq	$16, %%mm5\n\t"

		"por	%%mm4, %%mm3\n\t"

		"por	%%mm5, %%mm3\n\t"



		"movq	%%mm0, %%mm6\n\t"

		"movq	%%mm3, %%mm7\n\t"



		"movq	8%1, %%mm0\n\t"

		"movq	8%1, %%mm1\n\t"

		"movq	8%1, %%mm2\n\t"

		"pand	%2, %%mm0\n\t"

		"pand	%3, %%mm1\n\t"

		"pand	%4, %%mm2\n\t"

		"psllq	$3, %%mm0\n\t"

		"psrlq	$2, %%mm1\n\t"

		"psrlq	$7, %%mm2\n\t"

		"movq	%%mm0, %%mm3\n\t"

		"movq	%%mm1, %%mm4\n\t"

		"movq	%%mm2, %%mm5\n\t"

		"punpcklwd %5, %%mm0\n\t"

		"punpcklwd %5, %%mm1\n\t"

		"punpcklwd %5, %%mm2\n\t"

		"punpckhwd %5, %%mm3\n\t"

		"punpckhwd %5, %%mm4\n\t"

		"punpckhwd %5, %%mm5\n\t"

		"psllq	$8, %%mm1\n\t"

		"psllq	$16, %%mm2\n\t"

		"por	%%mm1, %%mm0\n\t"

		"por	%%mm2, %%mm0\n\t"

		"psllq	$8, %%mm4\n\t"

		"psllq	$16, %%mm5\n\t"

		"por	%%mm4, %%mm3\n\t"

		"por	%%mm5, %%mm3\n\t"



		:"=m"(*d)

		:"m"(*s),"m"(mask15b),"m"(mask15g),"m"(mask15r), "m"(mmx_null)

		:"memory");

	    /* Borrowed 32 to 24 */

	    __asm __volatile(

		"movq	%%mm0, %%mm4\n\t"

		"movq	%%mm3, %%mm5\n\t"

		"movq	%%mm6, %%mm0\n\t"

		"movq	%%mm7, %%mm1\n\t"



		"movq	%%mm4, %%mm6\n\t"

		"movq	%%mm5, %%mm7\n\t"

		"movq	%%mm0, %%mm2\n\t"

		"movq	%%mm1, %%mm3\n\t"



		"psrlq	$8, %%mm2\n\t"

		"psrlq	$8, %%mm3\n\t"

		"psrlq	$8, %%mm6\n\t"

		"psrlq	$8, %%mm7\n\t"

		"pand	%2, %%mm0\n\t"

		"pand	%2, %%mm1\n\t"

		"pand	%2, %%mm4\n\t"

		"pand	%2, %%mm5\n\t"

		"pand	%3, %%mm2\n\t"

		"pand	%3, %%mm3\n\t"

		"pand	%3, %%mm6\n\t"

		"pand	%3, %%mm7\n\t"

		"por	%%mm2, %%mm0\n\t"

		"por	%%mm3, %%mm1\n\t"

		"por	%%mm6, %%mm4\n\t"

		"por	%%mm7, %%mm5\n\t"



		"movq	%%mm1, %%mm2\n\t"

		"movq	%%mm4, %%mm3\n\t"

		"psllq	$48, %%mm2\n\t"

		"psllq	$32, %%mm3\n\t"

		"pand	%4, %%mm2\n\t"

		"pand	%5, %%mm3\n\t"

		"por	%%mm2, %%mm0\n\t"

		"psrlq	$16, %%mm1\n\t"

		"psrlq	$32, %%mm4\n\t"

		"psllq	$16, %%mm5\n\t"

		"por	%%mm3, %%mm1\n\t"

		"pand	%6, %%mm5\n\t"

		"por	%%mm5, %%mm4\n\t"



		MOVNTQ"	%%mm0, %0\n\t"

		MOVNTQ"	%%mm1, 8%0\n\t"

		MOVNTQ"	%%mm4, 16%0"



		:"=m"(*d)

		:"m"(*s),"m"(mask24l),"m"(mask24h),"m"(mask24hh),"m"(mask24hhh),"m"(mask24hhhh)

		:"memory");

		d += 24;

		s += 8;

	}

	__asm __volatile(SFENCE:::"memory");

	__asm __volatile(EMMS:::"memory");

#endif

	while(s < end)

	{

		register uint16_t bgr;

		bgr = *s++;

		*d++ = (bgr&0x1F)<<3;

		*d++ = (bgr&0x3E0)>>2;

		*d++ = (bgr&0x7C00)>>7;

	}

}

static inline void RENAME(rgb15to24)(const uint8_t *src, uint8_t *dst, long src_size)

{

	const uint16_t *end;

#ifdef HAVE_MMX

	const uint16_t *mm_end;

#endif

	uint8_t *d = (uint8_t *)dst;

	const uint16_t *s = (uint16_t *)src;

	end = s + src_size/2;

#ifdef HAVE_MMX

	__asm __volatile(PREFETCH"	%0"::"m"(*s):"memory");

	mm_end = end - 7;

	while(s < mm_end)

	{

	    __asm __volatile(

		PREFETCH" 32%1\n\t"

		"movq	%1, %%mm0\n\t"

		"movq	%1, %%mm1\n\t"

		"movq	%1, %%mm2\n\t"

		"pand	%2, %%mm0\n\t"

		"pand	%3, %%mm1\n\t"

		"pand	%4, %%mm2\n\t"

		"psllq	$3, %%mm0\n\t"

		"psrlq	$2, %%mm1\n\t"

		"psrlq	$7, %%mm2\n\t"

		"movq	%%mm0, %%mm3\n\t"

		"movq	%%mm1, %%mm4\n\t"

		"movq	%%mm2, %%mm5\n\t"

		"punpcklwd %5, %%mm0\n\t"

		"punpcklwd %5, %%mm1\n\t"

		"punpcklwd %5, %%mm2\n\t"

		"punpckhwd %5, %%mm3\n\t"

		"punpckhwd %5, %%mm4\n\t"

		"punpckhwd %5, %%mm5\n\t"

		"psllq	$8, %%mm1\n\t"

		"psllq	$16, %%mm2\n\t"

		"por	%%mm1, %%mm0\n\t"

		"por	%%mm2, %%mm0\n\t"

		"psllq	$8, %%mm4\n\t"

		"psllq	$16, %%mm5\n\t"

		"por	%%mm4, %%mm3\n\t"

		"por	%%mm5, %%mm3\n\t"



		"movq	%%mm0, %%mm6\n\t"

		"movq	%%mm3, %%mm7\n\t"



		"movq	8%1, %%mm0\n\t"

		"movq	8%1, %%mm1\n\t"

		"movq	8%1, %%mm2\n\t"

		"pand	%2, %%mm0\n\t"

		"pand	%3, %%mm1\n\t"

		"pand	%4, %%mm2\n\t"

		"psllq	$3, %%mm0\n\t"

		"psrlq	$2, %%mm1\n\t"

		"psrlq	$7, %%mm2\n\t"

		"movq	%%mm0, %%mm3\n\t"

		"movq	%%mm1, %%mm4\n\t"

		"movq	%%mm2, %%mm5\n\t"

		"punpcklwd %5, %%mm0\n\t"

		"punpcklwd %5, %%mm1\n\t"

		"punpcklwd %5, %%mm2\n\t"

		"punpckhwd %5, %%mm3\n\t"

		"punpckhwd %5, %%mm4\n\t"

		"punpckhwd %5, %%mm5\n\t"

		"psllq	$8, %%mm1\n\t"

		"psllq	$16, %%mm2\n\t"

		"por	%%mm1, %%mm0\n\t"

		"por	%%mm2, %%mm0\n\t"

		"psllq	$8, %%mm4\n\t"

		"psllq	$16, %%mm5\n\t"

		"por	%%mm4, %%mm3\n\t"

		"por	%%mm5, %%mm3\n\t"



		:"=m"(*d)

		:"m"(*s),"m"(mask15b),"m"(mask15g),"m"(mask15r), "m"(mmx_null)

		:"memory");

	    

	    __asm __volatile(

		"movq	%%mm0, %%mm4\n\t"

		"movq	%%mm3, %%mm5\n\t"

		"movq	%%mm6, %%mm0\n\t"

		"movq	%%mm7, %%mm1\n\t"



		"movq	%%mm4, %%mm6\n\t"

		"movq	%%mm5, %%mm7\n\t"

		"movq	%%mm0, %%mm2\n\t"

		"movq	%%mm1, %%mm3\n\t"



		"psrlq	$8, %%mm2\n\t"

		"psrlq	$8, %%mm3\n\t"

		"psrlq	$8, %%mm6\n\t"

		"psrlq	$8, %%mm7\n\t"

		"pand	%2, %%mm0\n\t"

		"pand	%2, %%mm1\n\t"

		"pand	%2, %%mm4\n\t"

		"pand	%2, %%mm5\n\t"

		"pand	%3, %%mm2\n\t"

		"pand	%3, %%mm3\n\t"

		"pand	%3, %%mm6\n\t"

		"pand	%3, %%mm7\n\t"

		"por	%%mm2, %%mm0\n\t"

		"por	%%mm3, %%mm1\n\t"

		"por	%%mm6, %%mm4\n\t"

		"por	%%mm7, %%mm5\n\t"



		"movq	%%mm1, %%mm2\n\t"

		"movq	%%mm4, %%mm3\n\t"

		"psllq	$48, %%mm2\n\t"

		"psllq	$32, %%mm3\n\t"

		"pand	%4, %%mm2\n\t"

		"pand	%5, %%mm3\n\t"

		"por	%%mm2, %%mm0\n\t"

		"psrlq	$16, %%mm1\n\t"

		"psrlq	$32, %%mm4\n\t"

		"psllq	$16, %%mm5\n\t"

		"por	%%mm3, %%mm1\n\t"

		"pand	%6, %%mm5\n\t"

		"por	%%mm5, %%mm4\n\t"



		MOVNTQ"	%%mm0, %0\n\t"

		MOVNTQ"	%%mm1, 8%0\n\t"

		MOVNTQ"	%%mm4, 16%0"



		:"=m"(*d)

		:"m"(*s),"m"(mask24l),"m"(mask24h),"m"(mask24hh),"m"(mask24hhh),"m"(mask24hhhh)

		:"memory");

		d += 24;

		s += 8;

	}

	__asm __volatile(SFENCE:::"memory");

	__asm __volatile(EMMS:::"memory");

#endif

	while(s < end)

	{

		register uint16_t bgr;

		bgr = *s++;

		*d++ = (bgr&0x1F)<<3;

		*d++ = (bgr&0x3E0)>>2;

		*d++ = (bgr&0x7C00)>>7;

	}

}

	const uint16_t *end; 	uint8_t *d = (uint8_t *)dst; 	const uint16_t *s = (uint16_t *)src; 	end = s + src_size/2; 	while(s < end) 		register uint16_t bgr; 		bgr = *s++; 	const uint16_t *end; 	uint8_t *d = (uint8_t *)dst; 	end = s + src_size/2; 	while(s < end) 		register uint16_t bgr; 		bgr = *s++; 		*d++ = (bgr&0x1F)<<3; 	const uint16_t *end; 	uint8_t *d = (uint8_t *)dst; 	end = s + src_size/2; 	while(s < end) 		register uint16_t bgr; 		bgr = *s++; 	const uint16_t *end; 	uint8_t *d = (uint8_t *)dst; 	const uint16_t *s = (uint16_t *)src; 	end = s + src_size/2; 	while(s < end) 		register uint16_t bgr; 		bgr = *s++; 		*d++ = (bgr&0x7C00)>>7; 		*d++ = (bgr&0x3E0)>>2; 		*d++ = (bgr&0x1F)<<3; #ifdef HAVE_MMX #endif #ifdef HAVE_MMX #endif #endif #endif 		"movq	%1, %%mm0\n\t" 		"movq	8%1, %%mm2\n\t" 		MOVNTQ"	%%mm0, %0\n\t" 		:"=m"(*d) 		"movq	%1, %%mm0\n\t" 		"movq	8%1, %%mm2\n\t" 		"por	%%mm1, %%mm0\n\t" 		MOVNTQ"	%%mm0, %0\n\t" 		:"=m"(*d) 	while(s < mm_end) 	    __asm __volatile( 		PREFETCH" 32%1\n\t" 		"movq	%%mm0, %%mm2\n\t" 		"movq	%%mm3, %%mm5\n\t" 		"pand	%2, %%mm0\n\t" 		"psrlq	$8, %%mm2\n\t" 		"por	%%mm1, %%mm0\n\t" 		"por	%%mm4, %%mm3\n\t" 		"por	%%mm2, %%mm0\n\t" 		"por	%%mm5, %%mm3\n\t" 		MOVNTQ"	%%mm0, %0\n\t" #endif 	__asm __volatile(SFENCE:::"memory"); 	__asm __volatile(EMMS:::"memory"); #endif 	while(s < end) 	while(s < mm_end) 	    __asm __volatile( 		PREFETCH" 32%1\n\t" 		"movq	%%mm0, %%mm2\n\t" 		"movq	%%mm3, %%mm5\n\t" 		"pand	%2, %%mm5\n\t" 		"por	%%mm1, %%mm0\n\t" 		"por	%%mm4, %%mm3\n\t" 		"por	%%mm2, %%mm0\n\t" 		"por	%%mm5, %%mm3\n\t" 		MOVNTQ"	%%mm0, %0\n\t" 	__asm __volatile(SFENCE:::"memory"); 	__asm __volatile(EMMS:::"memory"); #endif 	while(s < end) 	while(s < mm_end) 	    __asm __volatile( 		PREFETCH" 32%1\n\t" 		"movq	%%mm0, %%mm2\n\t" 		"movq	%%mm3, %%mm5\n\t" 		"pand	%2, %%mm0\n\t" 		"por	%%mm1, %%mm0\n\t" 		"por	%%mm4, %%mm3\n\t" 		"por	%%mm2, %%mm0\n\t" 		"por	%%mm5, %%mm3\n\t" 		MOVNTQ"	%%mm0, %0\n\t" #endif 	__asm __volatile(SFENCE:::"memory"); 	__asm __volatile(EMMS:::"memory"); #endif 	while(s < end) 	while(s < mm_end) 	    __asm __volatile( 		PREFETCH" 32%1\n\t" 		"movq	%%mm0, %%mm2\n\t" 		"movq	%%mm3, %%mm5\n\t" 		"pand	%2, %%mm5\n\t" 		"por	%%mm1, %%mm0\n\t" 		"por	%%mm4, %%mm3\n\t" 		"por	%%mm2, %%mm0\n\t" 		"por	%%mm5, %%mm3\n\t" 		MOVNTQ"	%%mm0, %0\n\t" 	__asm __volatile(SFENCE:::"memory"); 	__asm __volatile(EMMS:::"memory"); #endif 	while(s < end) 	while(s < mm_end) 	    __asm __volatile( 		PREFETCH" 32%1\n\t" 		"movq	%%mm0, %%mm2\n\t" 		"movq	%%mm3, %%mm5\n\t" 		"pand	%2, %%mm0\n\t" 		"psrlq	$8, %%mm2\n\t" 		"por	%%mm1, %%mm0\n\t" 		"por	%%mm4, %%mm3\n\t" 		"por	%%mm2, %%mm0\n\t" 		"por	%%mm5, %%mm3\n\t" 		MOVNTQ"	%%mm0, %0\n\t" 	__asm __volatile(SFENCE:::"memory"); 	__asm __volatile(EMMS:::"memory"); #endif 	while(s < end) 	while(s < mm_end) 	    __asm __volatile( 		PREFETCH" 32%1\n\t" 		"movq	%%mm0, %%mm2\n\t" 		"movq	%%mm3, %%mm5\n\t" 		"pand	%2, %%mm5\n\t" 		"por	%%mm1, %%mm0\n\t" 		"por	%%mm4, %%mm3\n\t" 		"por	%%mm2, %%mm0\n\t" 		"por	%%mm5, %%mm3\n\t" 		MOVNTQ"	%%mm0, %0\n\t" 	__asm __volatile(SFENCE:::"memory"); 	__asm __volatile(EMMS:::"memory"); #endif 	while(s < end) 	while(s < mm_end) 	    __asm __volatile( 		PREFETCH" 32%1\n\t" 		"movq	%%mm0, %%mm2\n\t" 		"movq	%%mm3, %%mm5\n\t" 		"pand	%2, %%mm0\n\t" 		"por	%%mm1, %%mm0\n\t" 		"por	%%mm4, %%mm3\n\t" 		"por	%%mm2, %%mm0\n\t" 		"por	%%mm5, %%mm3\n\t" 		MOVNTQ"	%%mm0, %0\n\t" 	__asm __volatile(SFENCE:::"memory"); 	__asm __volatile(EMMS:::"memory"); #endif 	while(s < end) 	while(s < mm_end) 	    __asm __volatile( 		PREFETCH" 32%1\n\t" 		"movq	%%mm0, %%mm2\n\t" 		"movq	%%mm3, %%mm5\n\t" 		"pand	%2, %%mm5\n\t" 		"por	%%mm1, %%mm0\n\t" 		"por	%%mm4, %%mm3\n\t" 		"por	%%mm2, %%mm0\n\t" 		"por	%%mm5, %%mm3\n\t" 		MOVNTQ"	%%mm0, %0\n\t" 	__asm __volatile(SFENCE:::"memory"); 	__asm __volatile(EMMS:::"memory"); #endif 	while(s < end) 	const uint16_t *end; 	const uint16_t *mm_end; 	uint8_t *d = (uint8_t *)dst; 	const uint16_t *s = (uint16_t *)src; 	end = s + src_size/2; 	__asm __volatile(PREFETCH"	%0"::"m"(*s):"memory"); 	mm_end = end - 7; 	while(s < mm_end) 	    __asm __volatile( 		PREFETCH" 32%1\n\t" 		"movq	%1, %%mm0\n\t" 		"movq	%1, %%mm1\n\t" 		"movq	%1, %%mm2\n\t" 		"pand	%2, %%mm0\n\t" 		"pand	%3, %%mm1\n\t" 		"pand	%4, %%mm2\n\t" 		"psllq	$3, %%mm0\n\t" 		"psrlq	$2, %%mm1\n\t" 		"psrlq	$7, %%mm2\n\t" 		"movq	%%mm0, %%mm3\n\t" 		"movq	%%mm1, %%mm4\n\t" 		"movq	%%mm2, %%mm5\n\t" 		"punpcklwd %5, %%mm0\n\t" 		"punpcklwd %5, %%mm1\n\t" 		"punpcklwd %5, %%mm2\n\t" 		"punpckhwd %5, %%mm3\n\t" 		"punpckhwd %5, %%mm4\n\t" 		"punpckhwd %5, %%mm5\n\t" 		"psllq	$8, %%mm1\n\t" 		"psllq	$16, %%mm2\n\t" 		"por	%%mm1, %%mm0\n\t" 		"por	%%mm2, %%mm0\n\t" 		"psllq	$8, %%mm4\n\t" 		"psllq	$16, %%mm5\n\t" 		"por	%%mm4, %%mm3\n\t" 		"por	%%mm5, %%mm3\n\t" 		"movq	%%mm0, %%mm6\n\t" 		"movq	%%mm3, %%mm7\n\t" 		"movq	8%1, %%mm0\n\t" 		"movq	8%1, %%mm1\n\t" 		"movq	8%1, %%mm2\n\t" 		"pand	%2, %%mm0\n\t" 		"pand	%3, %%mm1\n\t" 		"pand	%4, %%mm2\n\t" 		"psllq	$3, %%mm0\n\t" 		"psrlq	$2, %%mm1\n\t" 		"psrlq	$7, %%mm2\n\t" 		"movq	%%mm0, %%mm3\n\t" 		"movq	%%mm1, %%mm4\n\t" 		"movq	%%mm2, %%mm5\n\t" 		"punpcklwd %5, %%mm0\n\t" 		"punpcklwd %5, %%mm1\n\t" 		"punpcklwd %5, %%mm2\n\t" 		"punpckhwd %5, %%mm3\n\t" 		"punpckhwd %5, %%mm4\n\t" 		"punpckhwd %5, %%mm5\n\t" 		"psllq	$8, %%mm1\n\t" 		"psllq	$16, %%mm2\n\t" 		"por	%%mm1, %%mm0\n\t" 		"por	%%mm2, %%mm0\n\t" 		"psllq	$8, %%mm4\n\t" 		"psllq	$16, %%mm5\n\t" 		"por	%%mm4, %%mm3\n\t" 		"por	%%mm5, %%mm3\n\t" 		:"=m"(*d) 		:"m"(*s),"m"(mask15b),"m"(mask15g),"m"(mask15r), "m"(mmx_null) 		:"memory"); 	    __asm __volatile( 		"movq	%%mm0, %%mm4\n\t" 		"movq	%%mm3, %%mm5\n\t" 		"movq	%%mm6, %%mm0\n\t" 		"movq	%%mm7, %%mm1\n\t" 		"movq	%%mm4, %%mm6\n\t" 		"movq	%%mm5, %%mm7\n\t" 		"movq	%%mm0, %%mm2\n\t" 		"movq	%%mm1, %%mm3\n\t" 		"psrlq	$8, %%mm2\n\t" 		"psrlq	$8, %%mm3\n\t" 		"psrlq	$8, %%mm6\n\t" 		"psrlq	$8, %%mm7\n\t" 		"pand	%2, %%mm0\n\t" 		"pand	%2, %%mm1\n\t" 		"pand	%2, %%mm4\n\t" 		"pand	%2, %%mm5\n\t" 		"pand	%3, %%mm2\n\t" 		"pand	%3, %%mm3\n\t" 		"pand	%3, %%mm6\n\t" 		"pand	%3, %%mm7\n\t" 		"por	%%mm2, %%mm0\n\t" 		"por	%%mm3, %%mm1\n\t" 		"por	%%mm6, %%mm4\n\t" 		"por	%%mm7, %%mm5\n\t" 		"movq	%%mm1, %%mm2\n\t" 		"movq	%%mm4, %%mm3\n\t" 		"psllq	$48, %%mm2\n\t" 		"psllq	$32, %%mm3\n\t" 		"pand	%4, %%mm2\n\t" 		"pand	%5, %%mm3\n\t" 		"por	%%mm2, %%mm0\n\t" 		"psrlq	$16, %%mm1\n\t" 		"psrlq	$32, %%mm4\n\t" 		"psllq	$16, %%mm5\n\t" 		"por	%%mm3, %%mm1\n\t" 		"pand	%6, %%mm5\n\t" 		"por	%%mm5, %%mm4\n\t" 		MOVNTQ"	%%mm0, %0\n\t" 		MOVNTQ"	%%mm1, 8%0\n\t" 		MOVNTQ"	%%mm4, 16%0" 		:"=m"(*d) 		:"m"(*s),"m"(mask24l),"m"(mask24h),"m"(mask24hh),"m"(mask24hhh),"m"(mask24hhhh) 		:"memory"); 		d += 24; 		s += 8; 	__asm __volatile(SFENCE:::"memory"); 	__asm __volatile(EMMS:::"memory"); #endif 	while(s < end) 		register uint16_t bgr; 		bgr = *s++; 		*d++ = (bgr&0x1F)<<3; 		*d++ = (bgr&0x3E0)>>2; 		*d++ = (bgr&0x7C00)>>7; 	const uint16_t *end; 	const uint16_t *mm_end; 	uint8_t *d = (uint8_t *)dst; 	end = s + src_size/2; 	__asm __volatile(PREFETCH"	%0"::"m"(*s):"memory"); 	mm_end = end - 7; 	while(s < mm_end) 	    __asm __volatile( 		PREFETCH" 32%1\n\t" 		"movq	%1, %%mm0\n\t" 		"movq	%1, %%mm1\n\t" 		"movq	%1, %%mm2\n\t" 		"pand	%2, %%mm0\n\t" 		"pand	%3, %%mm1\n\t" 		"pand	%4, %%mm2\n\t" 		"psllq	$3, %%mm0\n\t" 		"psrlq	$8, %%mm2\n\t" 		"movq	%%mm0, %%mm3\n\t" 		"movq	%%mm1, %%mm4\n\t" 		"movq	%%mm2, %%mm5\n\t" 		"punpcklwd %5, %%mm0\n\t" 		"punpcklwd %5, %%mm1\n\t" 		"punpcklwd %5, %%mm2\n\t" 		"punpckhwd %5, %%mm3\n\t" 		"punpckhwd %5, %%mm4\n\t" 		"punpckhwd %5, %%mm5\n\t" 		"psllq	$8, %%mm1\n\t" 		"psllq	$16, %%mm2\n\t" 		"por	%%mm1, %%mm0\n\t" 		"por	%%mm2, %%mm0\n\t" 		"psllq	$8, %%mm4\n\t" 		"psllq	$16, %%mm5\n\t" 		"por	%%mm4, %%mm3\n\t" 		"por	%%mm5, %%mm3\n\t" 		"movq	%%mm0, %%mm6\n\t" 		"movq	%%mm3, %%mm7\n\t" 		"movq	8%1, %%mm0\n\t" 		"movq	8%1, %%mm1\n\t" 		"movq	8%1, %%mm2\n\t" 		"pand	%2, %%mm0\n\t" 		"pand	%3, %%mm1\n\t" 		"pand	%4, %%mm2\n\t" 		"psllq	$3, %%mm0\n\t" 		"psrlq	$8, %%mm2\n\t" 		"movq	%%mm0, %%mm3\n\t" 		"movq	%%mm1, %%mm4\n\t" 		"movq	%%mm2, %%mm5\n\t" 		"punpcklwd %5, %%mm0\n\t" 		"punpcklwd %5, %%mm1\n\t" 		"punpcklwd %5, %%mm2\n\t" 		"punpckhwd %5, %%mm3\n\t" 		"punpckhwd %5, %%mm4\n\t" 		"punpckhwd %5, %%mm5\n\t" 		"psllq	$8, %%mm1\n\t" 		"psllq	$16, %%mm2\n\t" 		"por	%%mm1, %%mm0\n\t" 		"por	%%mm2, %%mm0\n\t" 		"psllq	$8, %%mm4\n\t" 		"psllq	$16, %%mm5\n\t" 		"por	%%mm4, %%mm3\n\t" 		"por	%%mm5, %%mm3\n\t" 		:"=m"(*d) 		:"memory"); 	    __asm __volatile( 		"movq	%%mm0, %%mm4\n\t" 		"movq	%%mm3, %%mm5\n\t" 		"movq	%%mm6, %%mm0\n\t" 		"movq	%%mm7, %%mm1\n\t" 		"movq	%%mm4, %%mm6\n\t" 		"movq	%%mm5, %%mm7\n\t" 		"movq	%%mm0, %%mm2\n\t" 		"movq	%%mm1, %%mm3\n\t" 		"psrlq	$8, %%mm2\n\t" 		"psrlq	$8, %%mm3\n\t" 		"psrlq	$8, %%mm6\n\t" 		"psrlq	$8, %%mm7\n\t" 		"pand	%2, %%mm0\n\t" 		"pand	%2, %%mm1\n\t" 		"pand	%2, %%mm4\n\t" 		"pand	%2, %%mm5\n\t" 		"pand	%3, %%mm2\n\t" 		"pand	%3, %%mm3\n\t" 		"pand	%3, %%mm6\n\t" 		"pand	%3, %%mm7\n\t" 		"por	%%mm2, %%mm0\n\t" 		"por	%%mm3, %%mm1\n\t" 		"por	%%mm6, %%mm4\n\t" 		"por	%%mm7, %%mm5\n\t" 		"movq	%%mm1, %%mm2\n\t" 		"movq	%%mm4, %%mm3\n\t" 		"psllq	$48, %%mm2\n\t" 		"psllq	$32, %%mm3\n\t" 		"pand	%4, %%mm2\n\t" 		"pand	%5, %%mm3\n\t" 		"por	%%mm2, %%mm0\n\t" 		"psrlq	$16, %%mm1\n\t" 		"psrlq	$32, %%mm4\n\t" 		"psllq	$16, %%mm5\n\t" 		"por	%%mm3, %%mm1\n\t" 		"pand	%6, %%mm5\n\t" 		"por	%%mm5, %%mm4\n\t" 		MOVNTQ"	%%mm0, %0\n\t" 		MOVNTQ"	%%mm1, 8%0\n\t" 		MOVNTQ"	%%mm4, 16%0" 		:"=m"(*d) 		:"m"(*s),"m"(mask24l),"m"(mask24h),"m"(mask24hh),"m"(mask24hhh),"m"(mask24hhhh) 		:"memory"); 		d += 24; 		s += 8; 	__asm __volatile(SFENCE:::"memory"); 	__asm __volatile(EMMS:::"memory"); #endif 	while(s < end) 		register uint16_t bgr; 		bgr = *s++; 		*d++ = (bgr&0x1F)<<3; 	const uint16_t *end; 	const uint16_t *mm_end; 	uint8_t *d = (uint8_t *)dst; 	end = s + src_size/2; 	__asm __volatile(PREFETCH"	%0"::"m"(*s):"memory"); 	while(s < mm_end) 	    __asm __volatile( 		PREFETCH" 32%1\n\t" 		"movq	%1, %%mm0\n\t" 		"movq	%1, %%mm1\n\t" 		"movq	%1, %%mm2\n\t" 		"pand	%2, %%mm0\n\t" 		"pand	%3, %%mm1\n\t" 		"pand	%4, %%mm2\n\t" 		"psllq	$3, %%mm0\n\t" 		"psrlq	$2, %%mm1\n\t" 		"psrlq	$7, %%mm2\n\t" 		"movq	%%mm0, %%mm3\n\t" 		"movq	%%mm1, %%mm4\n\t" 		"movq	%%mm2, %%mm5\n\t" 		"psllq	$8, %%mm1\n\t" 		"psllq	$16, %%mm2\n\t" 		"por	%%mm1, %%mm0\n\t" 		"por	%%mm2, %%mm0\n\t" 		"psllq	$8, %%mm4\n\t" 		"psllq	$16, %%mm5\n\t" 		"por	%%mm4, %%mm3\n\t" 		"por	%%mm5, %%mm3\n\t" 		MOVNTQ"	%%mm0, %0\n\t" 		:"=m"(*d) 		:"memory"); 	__asm __volatile(SFENCE:::"memory"); 	__asm __volatile(EMMS:::"memory"); #endif 	while(s < end) 		register uint16_t bgr; 		bgr = *s++; 		*d++ = (bgr&0x7C00)>>7; 		*d++ = (bgr&0x3E0)>>2; 		*d++ = (bgr&0x1F)<<3; 		*d++ = (bgr&0x1F)<<3; 		*d++ = (bgr&0x3E0)>>2; 		*d++ = (bgr&0x7C00)>>7; 	const uint16_t *end; 	const uint16_t *mm_end; 	uint8_t *d = (uint8_t *)dst; 	const uint16_t *s = (uint16_t *)src; 	end = s + src_size/2; 	__asm __volatile(PREFETCH"	%0"::"m"(*s):"memory"); 	while(s < mm_end) 	    __asm __volatile( 		PREFETCH" 32%1\n\t" 		"movq	%1, %%mm0\n\t" 		"movq	%1, %%mm1\n\t" 		"movq	%1, %%mm2\n\t" 		"pand	%2, %%mm0\n\t" 		"pand	%3, %%mm1\n\t" 		"pand	%4, %%mm2\n\t" 		"psllq	$3, %%mm0\n\t" 		"psrlq	$8, %%mm2\n\t" 		"movq	%%mm0, %%mm3\n\t" 		"movq	%%mm1, %%mm4\n\t" 		"movq	%%mm2, %%mm5\n\t" 		"psllq	$8, %%mm1\n\t" 		"psllq	$16, %%mm2\n\t" 		"por	%%mm1, %%mm0\n\t" 		"por	%%mm2, %%mm0\n\t" 		"psllq	$8, %%mm4\n\t" 		"psllq	$16, %%mm5\n\t" 		"por	%%mm4, %%mm3\n\t" 		"por	%%mm5, %%mm3\n\t" 		MOVNTQ"	%%mm0, %0\n\t" 		:"=m"(*d) 		:"memory"); 	__asm __volatile(SFENCE:::"memory"); 	__asm __volatile(EMMS:::"memory"); #endif 	while(s < end) 		register uint16_t bgr; 		bgr = *s++; 		*d++ = (bgr&0x1F)<<3; 		*d++ = (bgr&0x1F)<<3; #endif 	__asm __volatile(SFENCE:::"memory"); 	__asm __volatile(EMMS:::"memory"); #endif #endif #endif #endif #endif #endif #endif #endif #endif #endif #endif #endif #endif #endif #endif #endif #endif #endif #endif #endif 		PREFETCH" 32%1\n\t" 		MOVNTQ"	%%mm0, %0\n\t" 		MOVNTQ"	%%mm1, 8%0\n\t" 		:"memory"); #endif 		PREFETCH" 32%1\n\t" 		MOVNTQ"	%%mm0, %0\n\t" 		MOVNTQ"	%%mm1, 8%0\n\t" 		:"memory"); #endif 		"movq	%%mm0, %%mm3\n\t" 		"movq	%%mm4, %%mm6\n\t" 		"movq	%%mm0, %%mm3\n\t" 		"movq	%%mm0, %%mm3\n\t" 		:"memory"); #endif
static inline void FUNC_0(rgb15to24)(const uint8_t *src, uint8_t *dst, long src_size)

{

	const uint16_t *VAR_0;

#ifdef HAVE_MMX

	const uint16_t *mm_end;

#endif

	uint8_t *d = (uint8_t *)dst;

	const uint16_t *VAR_1 = (uint16_t *)src;

	VAR_0 = VAR_1 + src_size/2;

#ifdef HAVE_MMX

	__asm __volatile(PREFETCH"	%0"::"m"(*VAR_1):"memory");

	mm_end = VAR_0 - 7;

	while(VAR_1 < mm_end)

	{

	    __asm __volatile(

		PREFETCH" 32%1\n\t"

		"movq	%1, %%mm0\n\t"

		"movq	%1, %%mm1\n\t"

		"movq	%1, %%mm2\n\t"

		"pand	%2, %%mm0\n\t"

		"pand	%3, %%mm1\n\t"

		"pand	%4, %%mm2\n\t"

		"psllq	$3, %%mm0\n\t"

		"psrlq	$2, %%mm1\n\t"

		"psrlq	$7, %%mm2\n\t"

		"movq	%%mm0, %%mm3\n\t"

		"movq	%%mm1, %%mm4\n\t"

		"movq	%%mm2, %%mm5\n\t"

		"punpcklwd %5, %%mm0\n\t"

		"punpcklwd %5, %%mm1\n\t"

		"punpcklwd %5, %%mm2\n\t"

		"punpckhwd %5, %%mm3\n\t"

		"punpckhwd %5, %%mm4\n\t"

		"punpckhwd %5, %%mm5\n\t"

		"psllq	$8, %%mm1\n\t"

		"psllq	$16, %%mm2\n\t"

		"por	%%mm1, %%mm0\n\t"

		"por	%%mm2, %%mm0\n\t"

		"psllq	$8, %%mm4\n\t"

		"psllq	$16, %%mm5\n\t"

		"por	%%mm4, %%mm3\n\t"

		"por	%%mm5, %%mm3\n\t"



		"movq	%%mm0, %%mm6\n\t"

		"movq	%%mm3, %%mm7\n\t"



		"movq	8%1, %%mm0\n\t"

		"movq	8%1, %%mm1\n\t"

		"movq	8%1, %%mm2\n\t"

		"pand	%2, %%mm0\n\t"

		"pand	%3, %%mm1\n\t"

		"pand	%4, %%mm2\n\t"

		"psllq	$3, %%mm0\n\t"

		"psrlq	$2, %%mm1\n\t"

		"psrlq	$7, %%mm2\n\t"

		"movq	%%mm0, %%mm3\n\t"

		"movq	%%mm1, %%mm4\n\t"

		"movq	%%mm2, %%mm5\n\t"

		"punpcklwd %5, %%mm0\n\t"

		"punpcklwd %5, %%mm1\n\t"

		"punpcklwd %5, %%mm2\n\t"

		"punpckhwd %5, %%mm3\n\t"

		"punpckhwd %5, %%mm4\n\t"

		"punpckhwd %5, %%mm5\n\t"

		"psllq	$8, %%mm1\n\t"

		"psllq	$16, %%mm2\n\t"

		"por	%%mm1, %%mm0\n\t"

		"por	%%mm2, %%mm0\n\t"

		"psllq	$8, %%mm4\n\t"

		"psllq	$16, %%mm5\n\t"

		"por	%%mm4, %%mm3\n\t"

		"por	%%mm5, %%mm3\n\t"



		:"=m"(*d)

		:"m"(*VAR_1),"m"(mask15b),"m"(mask15g),"m"(mask15r), "m"(mmx_null)

		:"memory");

	    

	    __asm __volatile(

		"movq	%%mm0, %%mm4\n\t"

		"movq	%%mm3, %%mm5\n\t"

		"movq	%%mm6, %%mm0\n\t"

		"movq	%%mm7, %%mm1\n\t"



		"movq	%%mm4, %%mm6\n\t"

		"movq	%%mm5, %%mm7\n\t"

		"movq	%%mm0, %%mm2\n\t"

		"movq	%%mm1, %%mm3\n\t"



		"psrlq	$8, %%mm2\n\t"

		"psrlq	$8, %%mm3\n\t"

		"psrlq	$8, %%mm6\n\t"

		"psrlq	$8, %%mm7\n\t"

		"pand	%2, %%mm0\n\t"

		"pand	%2, %%mm1\n\t"

		"pand	%2, %%mm4\n\t"

		"pand	%2, %%mm5\n\t"

		"pand	%3, %%mm2\n\t"

		"pand	%3, %%mm3\n\t"

		"pand	%3, %%mm6\n\t"

		"pand	%3, %%mm7\n\t"

		"por	%%mm2, %%mm0\n\t"

		"por	%%mm3, %%mm1\n\t"

		"por	%%mm6, %%mm4\n\t"

		"por	%%mm7, %%mm5\n\t"



		"movq	%%mm1, %%mm2\n\t"

		"movq	%%mm4, %%mm3\n\t"

		"psllq	$48, %%mm2\n\t"

		"psllq	$32, %%mm3\n\t"

		"pand	%4, %%mm2\n\t"

		"pand	%5, %%mm3\n\t"

		"por	%%mm2, %%mm0\n\t"

		"psrlq	$16, %%mm1\n\t"

		"psrlq	$32, %%mm4\n\t"

		"psllq	$16, %%mm5\n\t"

		"por	%%mm3, %%mm1\n\t"

		"pand	%6, %%mm5\n\t"

		"por	%%mm5, %%mm4\n\t"



		MOVNTQ"	%%mm0, %0\n\t"

		MOVNTQ"	%%mm1, 8%0\n\t"

		MOVNTQ"	%%mm4, 16%0"



		:"=m"(*d)

		:"m"(*VAR_1),"m"(mask24l),"m"(mask24h),"m"(mask24hh),"m"(mask24hhh),"m"(mask24hhhh)

		:"memory");

		d += 24;

		VAR_1 += 8;

	}

	__asm __volatile(SFENCE:::"memory");

	__asm __volatile(EMMS:::"memory");

#endif

	while(VAR_1 < VAR_0)

	{

		register uint16_t VAR_2;

		VAR_2 = *VAR_1++;

		*d++ = (VAR_2&0x1F)<<3;

		*d++ = (VAR_2&0x3E0)>>2;

		*d++ = (VAR_2&0x7C00)>>7;

	}

}

static inline void FUNC_0(rgb15to24)(const uint8_t *src, uint8_t *dst, long src_size)
{ const uint16_t *VAR_0; #ifdef HAVE_MMX
const uint16_t *mm_end; #endif
uint8_t *d = (uint8_t *)dst; const uint16_t *VAR_1 = (uint16_t *)src; VAR_0 = VAR_1 + src_size/2; #ifdef HAVE_MMX
__asm __volatile(PREFETCH"	%0"::"m"(*VAR_1):"memory"); mm_end = VAR_0 - 7; while(VAR_1 < mm_end)
{ __asm __volatile(
PREFETCH" 32%1\n\t"
"movq	%1, %%mm0\n\t"
"movq	%1, %%mm1\n\t"
"movq	%1, %%mm2\n\t"
"pand	%2, %%mm0\n\t"
"pand	%3, %%mm1\n\t"
"pand	%4, %%mm2\n\t"
"psllq	$3, %%mm0\n\t"
"psrlq	$2, %%mm1\n\t"
"psrlq	$7, %%mm2\n\t"
"movq	%%mm0, %%mm3\n\t"
"movq	%%mm1, %%mm4\n\t"
"movq	%%mm2, %%mm5\n\t"
"punpcklwd %5, %%mm0\n\t"
"punpcklwd %5, %%mm1\n\t"
"punpcklwd %5, %%mm2\n\t"
"punpckhwd %5, %%mm3\n\t"
"punpckhwd %5, %%mm4\n\t"
"punpckhwd %5, %%mm5\n\t"
"psllq	$8, %%mm1\n\t"
"psllq	$16, %%mm2\n\t"
"por	%%mm1, %%mm0\n\t"
"por	%%mm2, %%mm0\n\t"
"psllq	$8, %%mm4\n\t"
"psllq	$16, %%mm5\n\t"
"por	%%mm4, %%mm3\n\t"
"por	%%mm5, %%mm3\n\t"
"movq	%%mm0, %%mm6\n\t"
"movq	%%mm3, %%mm7\n\t"
"movq	8%1, %%mm0\n\t"
"movq	8%1, %%mm1\n\t"
"movq	8%1, %%mm2\n\t"
"pand	%2, %%mm0\n\t"
"pand	%3, %%mm1\n\t"
"pand	%4, %%mm2\n\t"
"psllq	$3, %%mm0\n\t"
"psrlq	$2, %%mm1\n\t"
"psrlq	$7, %%mm2\n\t"
"movq	%%mm0, %%mm3\n\t"
"movq	%%mm1, %%mm4\n\t"
"movq	%%mm2, %%mm5\n\t"
"punpcklwd %5, %%mm0\n\t"
"punpcklwd %5, %%mm1\n\t"
"punpcklwd %5, %%mm2\n\t"
"punpckhwd %5, %%mm3\n\t"
"punpckhwd %5, %%mm4\n\t"
"punpckhwd %5, %%mm5\n\t"
"psllq	$8, %%mm1\n\t"
"psllq	$16, %%mm2\n\t"
"por	%%mm1, %%mm0\n\t"
"por	%%mm2, %%mm0\n\t"
"psllq	$8, %%mm4\n\t"
"psllq	$16, %%mm5\n\t"
"por	%%mm4, %%mm3\n\t"
"por	%%mm5, %%mm3\n\t"
:"=m"(*d)
:"m"(*VAR_1),"m"(mask15b),"m"(mask15g),"m"(mask15r), "m"(mmx_null)
:"memory"); __asm __volatile(
"movq	%%mm0, %%mm4\n\t"
"movq	%%mm3, %%mm5\n\t"
"movq	%%mm6, %%mm0\n\t"
"movq	%%mm7, %%mm1\n\t"
"movq	%%mm4, %%mm6\n\t"
"movq	%%mm5, %%mm7\n\t"
"movq	%%mm0, %%mm2\n\t"
"movq	%%mm1, %%mm3\n\t"
"psrlq	$8, %%mm2\n\t"
"psrlq	$8, %%mm3\n\t"
"psrlq	$8, %%mm6\n\t"
"psrlq	$8, %%mm7\n\t"
"pand	%2, %%mm0\n\t"
"pand	%2, %%mm1\n\t"
"pand	%2, %%mm4\n\t"
"pand	%2, %%mm5\n\t"
"pand	%3, %%mm2\n\t"
"pand	%3, %%mm3\n\t"
"pand	%3, %%mm6\n\t"
"pand	%3, %%mm7\n\t"
"por	%%mm2, %%mm0\n\t"
"por	%%mm3, %%mm1\n\t"
"por	%%mm6, %%mm4\n\t"
"por	%%mm7, %%mm5\n\t"
"movq	%%mm1, %%mm2\n\t"
"movq	%%mm4, %%mm3\n\t"
"psllq	$48, %%mm2\n\t"
"psllq	$32, %%mm3\n\t"
"pand	%4, %%mm2\n\t"
"pand	%5, %%mm3\n\t"
"por	%%mm2, %%mm0\n\t"
"psrlq	$16, %%mm1\n\t"
"psrlq	$32, %%mm4\n\t"
"psllq	$16, %%mm5\n\t"
"por	%%mm3, %%mm1\n\t"
"pand	%6, %%mm5\n\t"
"por	%%mm5, %%mm4\n\t"
MOVNTQ"	%%mm0, %0\n\t"
MOVNTQ"	%%mm1, 8%0\n\t"
MOVNTQ"	%%mm4, 16%0"
:"=m"(*d)
:"m"(*VAR_1),"m"(mask24l),"m"(mask24h),"m"(mask24hh),"m"(mask24hhh),"m"(mask24hhhh)
:"memory"); d += 24; VAR_1 += 8; } __asm __volatile(SFENCE:::"memory"); __asm __volatile(EMMS:::"memory"); #endif
while(VAR_1 < VAR_0)
{ register uint16_t VAR_2; VAR_2 = *VAR_1++; *d++ = (VAR_2&0x1F)<<3; *d++ = (VAR_2&0x3E0)>>2; *d++ = (VAR_2&0x7C00)>>7; } }