func: static inline void RENAME(vu9_to_vu12)(const uint8_t *src1, const uint8_t *src2,
  
  			uint8_t *dst1, uint8_t *dst2,
  
  			long width, long height,
  
  			long srcStride1, long srcStride2,
  
  			long dstStride1, long dstStride2)
  
  {
  
      long y,x,w,h;
  
      w=width/2; h=height/2;
  
  #ifdef HAVE_MMX
  
      asm volatile(
  
  	PREFETCH" %0\n\t"
  
  	PREFETCH" %1\n\t"
  
  	::"m"(*(src1+srcStride1)),"m"(*(src2+srcStride2)):"memory");
  
  #endif
  
      for(y=0;y<h;y++){
  
  	const uint8_t* s1=src1+srcStride1*(y>>1);
  
  	uint8_t* d=dst1+dstStride1*y;
  
  	x=0;
  
  #ifdef HAVE_MMX
  
  	for(;x<w-31;x+=32)
  
  	{
  
  	    asm volatile(
  
  		PREFETCH" 32%1\n\t"
  
  	        "movq	%1, %%mm0\n\t"
  
  	        "movq	8%1, %%mm2\n\t"
  
  	        "movq	16%1, %%mm4\n\t"
  
  	        "movq	24%1, %%mm6\n\t"
  
  	        "movq	%%mm0, %%mm1\n\t"
  
  	        "movq	%%mm2, %%mm3\n\t"
  
  	        "movq	%%mm4, %%mm5\n\t"
  
  	        "movq	%%mm6, %%mm7\n\t"
  
  		"punpcklbw %%mm0, %%mm0\n\t"
  
  		"punpckhbw %%mm1, %%mm1\n\t"
  
  		"punpcklbw %%mm2, %%mm2\n\t"
  
  		"punpckhbw %%mm3, %%mm3\n\t"
  
  		"punpcklbw %%mm4, %%mm4\n\t"
  
  		"punpckhbw %%mm5, %%mm5\n\t"
  
  		"punpcklbw %%mm6, %%mm6\n\t"
  
  		"punpckhbw %%mm7, %%mm7\n\t"
  
  		MOVNTQ"	%%mm0, %0\n\t"
  
  		MOVNTQ"	%%mm1, 8%0\n\t"
  
  		MOVNTQ"	%%mm2, 16%0\n\t"
  
  		MOVNTQ"	%%mm3, 24%0\n\t"
  
  		MOVNTQ"	%%mm4, 32%0\n\t"
  
  		MOVNTQ"	%%mm5, 40%0\n\t"
  
  		MOVNTQ"	%%mm6, 48%0\n\t"
  
  		MOVNTQ"	%%mm7, 56%0"
  
  		:"=m"(d[2*x])
  
  		:"m"(s1[x])
  
  		:"memory");
  
  	}
  
  #endif
  
  	for(;x<w;x++) d[2*x]=d[2*x+1]=s1[x];
  
      }
  
      for(y=0;y<h;y++){
  
  	const uint8_t* s2=src2+srcStride2*(y>>1);
  
  	uint8_t* d=dst2+dstStride2*y;
  
  	x=0;
  
  #ifdef HAVE_MMX
  
  	for(;x<w-31;x+=32)
  
  	{
  
  	    asm volatile(
  
  		PREFETCH" 32%1\n\t"
  
  	        "movq	%1, %%mm0\n\t"
  
  	        "movq	8%1, %%mm2\n\t"
  
  	        "movq	16%1, %%mm4\n\t"
  
  	        "movq	24%1, %%mm6\n\t"
  
  	        "movq	%%mm0, %%mm1\n\t"
  
  	        "movq	%%mm2, %%mm3\n\t"
  
  	        "movq	%%mm4, %%mm5\n\t"
  
  	        "movq	%%mm6, %%mm7\n\t"
  
  		"punpcklbw %%mm0, %%mm0\n\t"
  
  		"punpckhbw %%mm1, %%mm1\n\t"
  
  		"punpcklbw %%mm2, %%mm2\n\t"
  
  		"punpckhbw %%mm3, %%mm3\n\t"
  
  		"punpcklbw %%mm4, %%mm4\n\t"
  
  		"punpckhbw %%mm5, %%mm5\n\t"
  
  		"punpcklbw %%mm6, %%mm6\n\t"
  
  		"punpckhbw %%mm7, %%mm7\n\t"
  
  		MOVNTQ"	%%mm0, %0\n\t"
  
  		MOVNTQ"	%%mm1, 8%0\n\t"
  
  		MOVNTQ"	%%mm2, 16%0\n\t"
  
  		MOVNTQ"	%%mm3, 24%0\n\t"
  
  		MOVNTQ"	%%mm4, 32%0\n\t"
  
  		MOVNTQ"	%%mm5, 40%0\n\t"
  
  		MOVNTQ"	%%mm6, 48%0\n\t"
  
  		MOVNTQ"	%%mm7, 56%0"
  
  		:"=m"(d[2*x])
  
  		:"m"(s2[x])
  
  		:"memory");
  
  	}
  
  #endif
  
  	for(;x<w;x++) d[2*x]=d[2*x+1]=s2[x];
  
      }
  
  #ifdef HAVE_MMX
  
  	asm(
  
  		EMMS" \n\t"
  
  		SFENCE" \n\t"
  
  		::: "memory"
  
  		);
  
  #endif
  
  }
  