📄 2xsaiw.asm
字号:
pcmpeqw mm1, mm6 pcmpeqw mm3, mm4 pcmpeqw mm1, mm7 pcmpeqw mm3, mm7 pand mm2, mm5 pand mm1, mm3 pand mm1, mm2 movq mm7, mm0 por mm7, mm1 movq mm4, [Mask35] movq mm3, [Mask26] movq mm6, mm4 pand mm6, mm7 pxor mm4, mm6 movq mm6, mm3 pand mm6, mm7 pxor mm3, mm6 movq mm2, mm0 movq mm7, [I5666Pixel] movq mm6, [I5556Pixel] movq mm5, [I56Pixel] por mm2, mm4 pand mm4, [eax+ebx+color5] por mm2, mm3 pand mm3, [eax+ebx+color6] por mm2, mm1 pand mm0, mm7 pand mm1, mm6 pxor mm7, mm7 pcmpeqw mm2, mm7 por mm0, mm1 por mm3, mm4 pand mm2, mm5 por mm0, mm3 por mm0, mm2 movq [final1b], mm0 ;--------- movq mm0, [final1a] movq mm4, [final2a] movq mm2, [final1b] movq mm6, [final2b] movq mm1, mm0 movq mm5, mm4 punpcklwd mm0, mm2 punpckhwd mm1, mm2 punpcklwd mm4, mm6 punpckhwd mm5, mm6%ifdef __DJGPP__ movq [fs:edx], mm0 movq [fs:edx+8], mm1 push edx add edx, [ebp+dstPitch] movq [fs:edx], mm4 movq [fs:edx+8], mm5 pop edx%else movq [edx], mm0 movq [edx+8], mm1 push edx add edx, [ebp+dstPitch] movq [edx], mm4 movq [edx+8], mm5 pop edx%endif.SKIP_PROCESS: mov ecx, [ebp+deltaPtr] add ecx, 8 mov [ebp+deltaPtr], ecx add edx, 16 add eax, 8 pop ecx sub ecx, 4 cmp ecx, 0 jg .Loop; Restore some stuff popad mov esp, ebp pop ebp emms ret;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------NEWSYM _2xSaISuperEagleLineW; Store some stuff push ebp mov ebp, esp pushad; Prepare the destination%ifdef __DJGPP__ ; Set the selector mov eax, [ebp+dstSegment] mov fs, ax%endif mov edx, [ebp+dstOffset] ; edx points to the screen; Prepare the source ; eax points to colorA mov eax, [ebp+srcPtr] mov ebx, [ebp+srcPitch] mov ecx, [ebp+width] ; eax now points to colorB1 sub eax, ebx; Main Loop.Loop: push ecx ;-----Check Delta------------------ mov ecx, [ebp+deltaPtr] movq mm0, [eax+colorB0] movq mm1, [eax+colorB3] movq mm2, [eax+ebx+color4] movq mm3, [eax+ebx+colorS2] movq mm4, [eax+ebx+ebx+color1] movq mm5, [eax+ebx+ebx+colorS1] push eax add eax, ebx movq mm6, [eax+ebx+ebx+colorA0] movq mm7, [eax+ebx+ebx+colorA3] pop eax pcmpeqw mm0, [ecx+2+colorB0] pcmpeqw mm1, [ecx+2+colorB3] pcmpeqw mm2, [ecx+ebx+2+color4] pcmpeqw mm3, [ecx+ebx+2+colorS2] pcmpeqw mm4, [ecx+ebx+ebx+2+color1] pcmpeqw mm5, [ecx+ebx+ebx+2+colorS1] add ecx, ebx pcmpeqw mm6, [ecx+ebx+ebx+2+colorA0] pcmpeqw mm7, [ecx+ebx+ebx+2+colorA3] sub ecx, ebx pand mm0, mm1 pand mm2, mm3 pand mm4, mm5 pand mm6, mm7 pand mm0, mm2 pand mm4, mm6 pxor mm7, mm7 pand mm0, mm4 movq mm6, [eax+colorB0] pcmpeqw mm7, mm0 movq [ecx+2+colorB0], mm6 packsswb mm7, mm7 movd ecx, mm7 test ecx, ecx jz near .SKIP_PROCESS ;End Delta ;--------------------------------- movq mm0, [eax+ebx+color5] movq mm1, [eax+ebx+color6] movq mm2, mm0 movq mm3, mm1 movq mm4, mm0 movq mm5, mm1 pand mm0, [colorMask] pand mm1, [colorMask] psrlw mm0, 1 psrlw mm1, 1 pand mm3, [lowPixelMask] paddw mm0, mm1 pand mm3, mm2 paddw mm0, mm3 ;mm0 contains the interpolated values movq [I56Pixel], mm0 movq mm7, mm0 ;------------------- movq mm0, mm7 movq mm1, mm4 ;5,5,5,6 movq mm2, mm0 movq mm3, mm1 pand mm0, [colorMask] pand mm1, [colorMask] psrlw mm0, 1 psrlw mm1, 1 pand mm3, [lowPixelMask] paddw mm0, mm1 pand mm3, mm2 paddw mm0, mm3 ;mm0 contains the interpolated values movq [product1a], mm0 ;-------------------- movq mm0, mm7 movq mm1, mm5 ;6,6,6,5 movq mm2, mm0 movq mm3, mm1 pand mm0, [colorMask] pand mm1, [colorMask] psrlw mm0, 1 psrlw mm1, 1 pand mm3, [lowPixelMask] paddw mm0, mm1 pand mm3, mm2 paddw mm0, mm3 movq [product1b], mm0 ;------------------------- ;------------------------- movq mm0, [eax+ebx+ebx+color2] movq mm1, [eax+ebx+ebx+color3] movq mm2, mm0 movq mm3, mm1 movq mm4, mm0 movq mm5, mm1 pand mm0, [colorMask] pand mm1, [colorMask] psrlw mm0, 1 psrlw mm1, 1 pand mm3, [lowPixelMask] paddw mm0, mm1 pand mm3, mm2 paddw mm0, mm3 movq [I23Pixel], mm0 movq mm7, mm0 ;--------------------- movq mm0, mm7 movq mm1, mm4 ;2,2,2,3 movq mm2, mm0 movq mm3, mm1 pand mm0, [colorMask] pand mm1, [colorMask] psrlw mm0, 1 psrlw mm1, 1 pand mm3, [lowPixelMask] paddw mm0, mm1 pand mm3, mm2 paddw mm0, mm3 movq [product2a], mm0 ;---------------------- movq mm0, mm7 movq mm1, mm5 ;3,3,3,2 movq mm2, mm0 movq mm3, mm1 pand mm0, [colorMask] pand mm1, [colorMask] psrlw mm0, 1 psrlw mm1, 1 pand mm3, [lowPixelMask] paddw mm0, mm1 pand mm3, mm2 paddw mm0, mm3 movq [product2b], mm0 ;//////////////////////////////// ; Decide which "branch" to take ;-------------------------------- movq mm4, [eax+ebx+color5] movq mm5, [eax+ebx+color6] movq mm6, [eax+ebx+ebx+color3] movq mm7, [eax+ebx+ebx+color2] pxor mm3, mm3 movq mm0, mm4 movq mm1, mm5 pcmpeqw mm0, mm6 pcmpeqw mm1, mm7 pcmpeqw mm1, mm3 pand mm0, mm1 movq [Mask35], mm0 movq mm0, [eax+ebx+ebx+colorS1] movq mm1, [eax+ebx+color4] push eax add eax, ebx movq mm2, [eax+ebx+ebx+colorA2] pop eax movq mm3, [eax+colorB1] pcmpeqw mm0, mm4 pcmpeqw mm1, mm4 pcmpeqw mm2, mm4 pcmpeqw mm3, mm4 pand mm0, mm1 pand mm2, mm3 por mm0, mm2 pand mm0, [Mask35] movq [Mask35b], mm0 ;----------- pxor mm3, mm3 movq mm0, mm4 movq mm1, mm5 pcmpeqw mm0, mm6 pcmpeqw mm1, mm7 pcmpeqw mm0, mm3 pand mm0, mm1 movq [Mask26], mm0 movq mm0, [eax+ebx+ebx+color1] movq mm1, [eax+ebx+colorS2] push eax add eax, ebx movq mm2, [eax+ebx+ebx+colorA1] pop eax movq mm3, [eax+colorB2] pcmpeqw mm0, mm5 pcmpeqw mm1, mm5 pcmpeqw mm2, mm5 pcmpeqw mm3, mm5 pand mm0, mm1 pand mm2, mm3 por mm0, mm2 pand mm0, [Mask26] movq [Mask26b], mm0 ;-------------------- movq mm0, mm4 movq mm1, mm5 movq mm2, mm0 pcmpeqw mm2, mm1 pcmpeqw mm0, mm6 pcmpeqw mm1, mm7 pand mm0, mm1 pand mm2, mm0 pxor mm0, mm2 movq mm7, mm0 ;------------------ packsswb mm7, mm7 movd ecx, mm7 test ecx, ecx jz near .SKIP_GUESS;---------------------------------------------; Map of the pixels: I|E F|J; G|A B|K; H|C D|L; M|N O|P movq mm6, mm0 movq mm4, [eax+ebx+color5] movq mm5, [eax+ebx+color6] pxor mm7, mm7 pand mm6, [ONE] movq mm0, [eax+colorB1] movq mm1, [eax+ebx+color4] movq mm2, mm0 movq mm3, mm1 pcmpeqw mm0, mm4 pcmpeqw mm1, mm4 pcmpeqw mm2, mm5 pcmpeqw mm3, mm5 pand mm0, mm6 pand mm1, mm6 pand mm2, mm6 pand mm3, mm6 paddw mm0, mm1 paddw mm2, mm3 pxor mm3, mm3 pcmpgtw mm0, mm6 pcmpgtw mm2, mm6 pcmpeqw mm0, mm3 pcmpeqw mm2, mm3 pand mm0, mm6 pand mm2, mm6 paddw mm7, mm0 psubw mm7, mm2 movq mm0, [eax+colorB2] movq mm1, [eax+ebx+colorS2] movq mm2, mm0 movq mm3, mm1 pcmpeqw mm0, mm4 pcmpeqw mm1, mm4 pcmpeqw mm2, mm5 pcmpeqw mm3, mm5 pand mm0, mm6 pand mm1, mm6 pand mm2, mm6 pand mm3, mm6 paddw mm0, mm1 paddw mm2, mm3 pxor mm3, mm3 pcmpgtw mm0, mm6 pcmpgtw mm2, mm6 pcmpeqw mm0, mm3 pcmpeqw mm2, mm3 pand mm0, mm6 pand mm2, mm6 paddw mm7, mm0 psubw mm7, mm2 push eax add eax, ebx movq mm0, [eax+ebx+color1] movq mm1, [eax+ebx+ebx+colorA1] movq mm2, mm0 movq mm3, mm1 pcmpeqw mm0, mm4 pcmpeqw mm1, mm4 pcmpeqw mm2, mm5 pcmpeqw mm3, mm5 pand mm0, mm6 pand mm1, mm6 pand mm2, mm6 pand mm3, mm6 paddw mm0, mm1 paddw mm2, mm3 pxor mm3, mm3 pcmpgtw mm0, mm6 pcmpgtw mm2, mm6 pcmpeqw mm0, mm3 pcmpeqw mm2, mm3 pand mm0, mm6 pand mm2, mm6 paddw mm7, mm0 psubw mm7, mm2 movq mm0, [eax+ebx+colorS1] movq mm1, [eax+ebx+ebx+colorA2] movq mm2, mm0 movq mm3, mm1 pcmpeqw mm0, mm4 pcmpeqw mm1, mm4 pcmpeqw mm2, mm5 pcmpeqw mm3, mm5 pand mm0, mm6 pand mm1, mm6 pand mm2, mm6 pand mm3, mm6 paddw mm0, mm1 paddw mm2, mm3 pxor mm3, mm3 pcmpgtw mm0, mm6 pcmpgtw mm2, mm6 pcmpeqw mm0, mm3 pcmpeqw mm2, mm3 pand mm0, mm6 pand mm2, mm6 paddw mm7, mm0 psubw mm7, mm2 pop eax movq mm1, mm7 pxor mm0, mm0 pcmpgtw mm7, mm0 pcmpgtw mm0, mm1 por mm7, [Mask35] por mm0, [Mask26] movq [Mask35], mm7 movq [Mask26], mm0.SKIP_GUESS: ;Start the ASSEMBLY !!! movq mm4, [Mask35] movq mm5, [Mask26] movq mm6, [Mask35b] movq mm7, [Mask26b] movq mm0, [eax+ebx+color5] movq mm1, [eax+ebx+color6] movq mm2, [eax+ebx+ebx+color2] movq mm3, [eax+ebx+ebx+color3] pcmpeqw mm0, mm2 pcmpeqw mm1, mm3 movq mm2, mm4 movq mm3, mm5 por mm0, mm1 por mm2, mm3 pand mm2, mm0 pxor mm0, mm2 movq mm3, mm0 movq mm2, mm0 pxor mm0, mm0 por mm2, mm4 pxor mm4, mm6 por mm2, mm5 pxor mm5, mm7 pcmpeqw mm2, mm0 ;---------------- movq mm0, [eax+ebx+color5] movq mm1, mm3 por mm1, mm4 por mm1, mm6 pand mm0, mm1 movq mm1, mm5 pand mm1, [I56Pixel] por mm0, mm1 movq mm1, mm7 pand mm1, [product1b] por mm0, mm1 movq mm1, mm2 pand mm1, [product1a] por mm0, mm1 movq [final1a], mm0 movq mm0, [eax+ebx+color6] movq mm1, mm3 por mm1, mm5 por mm1, mm7 pand mm0, mm1 movq mm1, mm4 pand mm1, [I56Pixel] por mm0, mm1 movq mm1, mm6 pand mm1, [product1a] por mm0, mm1 movq mm1, mm2 pand mm1, [product1b] por mm0, mm1 movq [final1b], mm0 movq mm0, [eax+ebx+ebx+color2] movq mm1, mm3 por mm1, mm5 por mm1, mm7 pand mm0, mm1 movq mm1, mm4 pand mm1, [I23Pixel] por mm0, mm1 movq mm1, mm6 pand mm1, [product2b] por mm0, mm1 movq mm1, mm2 pand mm1, [product2a] por mm0, mm1 movq [final2a], mm0 movq mm0, [eax+ebx+ebx+color3] movq mm1, mm3 por mm1, mm4 por mm1, mm6 pand mm0, mm1 movq mm1, mm5 pand mm1, [I23Pixel] por mm0, mm1 movq mm1, mm7 pand mm1, [product2a] por mm0, mm1 movq mm1, mm2 pand mm1, [product2b] por mm0, mm1 movq [final2b], mm0 movq mm0, [final1a] movq mm2, [final1b] movq mm1, mm0 movq mm4, [final2a] movq mm6, [final2b] movq mm5, mm4 punpcklwd mm0, mm2 punpckhwd mm1, mm2 punpcklwd mm4, mm6 punpckhwd mm5, mm6%ifdef __DJGPP__ movq [fs:edx], mm0 movq [fs:edx+8], mm1 push edx add edx, [ebp+dstPitch] movq [fs:edx], mm4 movq [fs:edx+8], mm5 pop edx%else movq [edx], mm0 movq [edx+8], mm1 push edx add edx, [ebp+dstPitch] movq [edx], mm4 movq [edx+8], mm5 pop edx%endif.SKIP_PROCESS: mov ecx, [ebp+deltaPtr] add ecx, 8 mov [ebp+deltaPtr], ecx add edx, 16 add eax, 8 pop ecx sub ecx, 4 cmp ecx, 0 jg .Loop; Restore some stuff popad mov esp, ebp pop ebp emms ret;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------;This is version 0.50colorI equ -2colorE equ 0colorF equ 2colorJ equ 4colorG equ -2colorA equ 0colorB equ 2colorK equ 4colorH equ -2colorC equ 0colorD equ 2colorL equ 4colorM equ -2colorN equ 0colorO equ 2colorP equ 4NEWSYM _2xSaILineW; Store some stuff push ebp mov ebp, esp pushad
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -