ULONG *pulSrcMipmap, ULONG *pulDstMipmap, PIX pixWidth, PIX pixHeight; __asm { pxor mm0,mm0 mov ebx,D [pixWidth] mov esi,D [pulSrcMipmap] mov edi,D [pulDstMipmap] mov edx,D [pixHeight] rowLoop: mov ecx,D [pixWidth] pixLoopN: movd mm1,D [esi+ 0] // up-left movd mm2,D [esi+ 4] // up-right movd mm3,D [esi+ ebx*8 +0] // down-left movd mm4,D [esi+ ebx*8 +4] // down-right punpcklbw mm1,mm0 punpcklbw mm2,mm0 punpcklbw mm3,mm0 punpcklbw mm4,mm0 paddw mm1,mm2 paddw mm1,mm3 paddw mm1,mm4 paddw mm1,Q [mmRounder] psrlw mm1,2 packuswb mm1,mm0 movd D [edi],mm1 // advance to next pixel add esi,4*2 add edi,4 dec ecx jnz pixLoopN // advance to next row lea esi,[esi+ ebx*8] // skip one row in source mip-map dec edx jnz rowLoop emms }