📄 2xsaimmx.inc
字号:
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 mm1, [Mask26]
movq [Mask35], mm7
movq [Mask26], mm1
.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 [es:edx], mm0
movq [es:edx+8], mm1
push edx
add edx, [ebp+dstPitch]
movq [es:edx], mm4
movq [es: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 near .Loop
; Restore some stuff
popad
mov esp, ebp
pop ebp
emms
ret
;-------------------------------------------------------------------------
;-------------------------------------------------------------------------
;-------------------------------------------------------------------------
;-------------------------------------------------------------------------
;-------------------------------------------------------------------------
;-------------------------------------------------------------------------
;-------------------------------------------------------------------------
;This is version 0.50
colorI equ -2
colorE equ 0
colorF equ 2
colorJ equ 4
colorG equ -2
colorA equ 0
colorB equ 2
colorK equ 4
colorH equ -2
colorC equ 0
colorD equ 2
colorL equ 4
colorM equ -2
colorN equ 0
colorO equ 2
colorP equ 4
NEWSYM _2xSaILine
; 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 colorE
sub eax, ebx
; Main Loop
.Loop: push ecx
;-----Check Delta------------------
mov ecx, [ebp+deltaPtr]
movq mm0, [eax+colorI]
movq mm1, [eax+colorJ]
movq mm2, [eax+ebx+colorG]
movq mm3, [eax+ebx+colorK]
movq mm4, [eax+ebx+ebx+colorH]
movq mm5, [eax+ebx+ebx+colorL]
push eax
add eax, ebx
movq mm6, [eax+ebx+ebx+colorM]
movq mm7, [eax+ebx+ebx+colorP]
pop eax
pcmpeqw mm0, [ecx+2+colorI]
pcmpeqw mm1, [ecx+2+colorK]
pcmpeqw mm2, [ecx+ebx+2+colorG]
pcmpeqw mm3, [ecx+ebx+2+colorK]
pcmpeqw mm4, [ecx+ebx+ebx+2+colorH]
pcmpeqw mm5, [ecx+ebx+ebx+2+colorL]
add ecx, ebx
pcmpeqw mm6, [ecx+ebx+ebx+2+colorM]
pcmpeqw mm7, [ecx+ebx+ebx+2+colorP]
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+colorI]
pcmpeqw mm7, mm0
movq [ecx+2+colorI], mm6
packsswb mm7, mm7
movd ecx, mm7
test ecx, ecx
jz near .SKIP_PROCESS
;End Delta
;---------------------------------
;1
;if ((colorA == colorD) && (colorB != colorC) && (colorA == colorE) && (colorB == colorL)
movq mm0, [eax+ebx+colorA] ;mm0 and mm1 contain colorA
movq mm2, [eax+ebx+colorB] ;mm2 and mm3 contain colorB
movq mm1, mm0
movq mm3, mm2
pcmpeqw mm0, [eax+ebx+ebx+colorD]
pcmpeqw mm1, [eax+colorE]
pcmpeqw mm2, [eax+ebx+ebx+colorL]
pcmpeqw mm3, [eax+ebx+ebx+colorC]
pand mm0, mm1
pxor mm1, mm1
pand mm0, mm2
pcmpeqw mm3, mm1
pand mm0, mm3 ;result in mm0
;if ((colorA == colorC) && (colorB != colorE) && (colorA == colorF) && (colorB == colorJ)
movq mm4, [eax+ebx+colorA] ;mm4 and mm5 contain colorA
movq mm6, [eax+ebx+colorB] ;mm6 and mm7 contain colorB
movq mm5, mm4
movq mm7, mm6
pcmpeqw mm4, [eax+ebx+ebx+colorC]
pcmpeqw mm5, [eax+colorF]
pcmpeqw mm6, [eax+colorJ]
pcmpeqw mm7, [eax+colorE]
pand mm4, mm5
pxor mm5, mm5
pand mm4, mm6
pcmpeqw mm7, mm5
pand mm4, mm7 ;result in mm4
por mm0, mm4 ;combine the masks
movq [Mask1], mm0
;--------------------------------------------
;2
;if ((colorB == colorC) && (colorA != colorD) && (colorB == colorF) && (colorA == colorH)
movq mm0, [eax+ebx+colorB] ;mm0 and mm1 contain colorB
movq mm2, [eax+ebx+colorA] ;mm2 and mm3 contain colorA
movq mm1, mm0
movq mm3, mm2
pcmpeqw mm0, [eax+ebx+ebx+colorC]
pcmpeqw mm1, [eax+colorF]
pcmpeqw mm2, [eax+ebx+ebx+colorH]
pcmpeqw mm3, [eax+ebx+ebx+colorD]
pand mm0, mm1
pxor mm1, mm1
pand mm0, mm2
pcmpeqw mm3, mm1
pand mm0, mm3 ;result in mm0
;if ((colorB == colorE) && (colorB == colorD) && (colorA != colorF) && (colorA == colorI)
movq mm4, [eax+ebx+colorB] ;mm4 and mm5 contain colorB
movq mm6, [eax+ebx+colorA] ;mm6 and mm7 contain colorA
movq mm5, mm4
movq mm7, mm6
pcmpeqw mm4, [eax+ebx+ebx+colorD]
pcmpeqw mm5, [eax+colorE]
pcmpeqw mm6, [eax+colorI]
pcmpeqw mm7, [eax+colorF]
pand mm4, mm5
pxor mm5, mm5
pand mm4, mm6
pcmpeqw mm7, mm5
pand mm4, mm7 ;result in mm4
por mm0, mm4 ;combine the masks
movq [Mask2], mm0
;interpolate colorA and colorB
movq mm0, [eax+ebx+colorA]
movq mm1, [eax+ebx+colorB]
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
;assemble the pixels
movq mm1, [eax+ebx+colorA]
movq mm2, [eax+ebx+colorB]
movq mm3, [Mask1]
movq mm5, mm1
movq mm4, [Mask2]
movq mm6, mm1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -