#Include Once "../../../inc/gfx/blit/mmx/generic_scale2x.bi" Extern "C" Namespace gfx Namespace Scalers Namespace mmx Public _ Sub Scale2x Naked ( ByVal pSrc As Any Ptr, ByVal pDst As Any Ptr, ByVal wid As Integer, ByVal hei As Integer, ByVal sPitch As Integer, ByVal dPitch As Integer ) #Define SAVED_REGS 0+ 4 #Define pSrc_ esp+SAVED_REGS+ 0 #Define pDst_ esp+SAVED_REGS+ 4 #Define wid_ esp+SAVED_REGS+ 8 #Define hei_ esp+SAVED_REGS+12 #Define sPitch_ esp+SAVED_REGS+16 #Define dPitch_ esp+SAVED_REGS+20 Asm 'push edi 'push esi 'push ebx mov ebx, [hei_] mov ecx, [wid_] shr ebx, 1 shr ecx, 1 dec ebx sub ecx, 2 shl ecx, 2 mov eax, [sPitch_] mul ebx add eax, ecx add [pSrc_], eax mov eax, [dPitch_] shl ebx, 1 Shl ecx, 1 mul ebx add eax, ecx add [pDst_], eax mov esi, [pSrc_] mov edi, [pDst_] mov edx, edi add edx, [dPitch_] mov eax, -1 '' eax = ffff_ffff movd mm7, eax '' mm7 = 0000_0000_ffff_ffff movq mm6, mm7 '' mm6 = 0000_0000_ffff_ffff psllq mm7, 32 '' mm7 = ffff_ffff_0000_0000 mov eax, [wid_] shl eax, 2 shl dword Ptr [dPitch_], 1 sub [dPitch_], eax shr eax, 1 sub [sPitch_], eax shr eax, 3 mov ebx, [hei_] shr ebx, 1 0: mov ecx, eax 1: movq mm1, [esi] '' mm1 = p1_p0 movq mm2, mm1 '' mm2 = p1_p0 movq mm3, mm1 '' mm3 = p1_p0 movq mm4, mm1 '' mm4 = p1_p0 movq mm5, mm1 '' mm5 = p1_p0 pand mm2, mm6 '' mm2 = 00_p0 psllq mm3, 32 '' mm3 = p0_00 por mm3, mm2 '' mm3 = p0_p0 pand mm4, mm7 '' mm4 = p1_00 psrlq mm5, 32 '' mm5 = 00_p1 por mm4, mm5 '' mm4 = p1_p1 movq [edi], mm3 movq [edx], mm3 movq [edi+8], mm4 movq [edx+8], mm4 Sub esi, 8 Sub edi, 16 Sub edx, 16 dec ecx jnz 1b Sub esi, [sPitch_] Sub edi, [dPitch_] sub edx, [dPitch_] dec ebx jnz 0b emms 'pop ebx 'pop esi 'pop edi ret End Asm #Undef pSrc_ #Undef pDst_ #Undef wid_ #Undef hei_ #Undef sPitch_ #Undef dPitch_ #Undef SAVED_REGS End Sub End Namespace End Namespace End Namespace End Extern