📄 2xsaimmx.inc
字号:
pcmpeqw mm1, mm5
pcmpeqw mm3, mm5
pxor mm5, mm5
pcmpeqw mm2, mm5
pcmpeqw mm3, mm5
pand mm6, mm1
pand mm2, mm3
pand mm6, mm2
por mm7, mm6
movq mm6, mm7
pcmpeqw mm6, mm5
pand mm7, mm0
movq mm1, [eax+ebx+color5]
pand mm6, mm1
por mm7, mm6
movq [final1a], mm7 ;finished 1a
;--------------------------------
movq mm7, [Mask35]
push eax
add eax, ebx
movq mm6, [eax+ebx+ebx+colorA2]
pop eax
movq mm5, [eax+ebx+color5]
movq mm4, [eax+ebx+color4]
pcmpeqw mm4, mm5
pcmpeqw mm6, mm5
pxor mm5, mm5
pand mm7, mm4
pcmpeqw mm6, mm5
pand mm7, mm6
movq mm6, [eax+ebx+color6]
movq mm5, [eax+ebx+color5]
movq mm4, [eax+ebx+color4]
movq mm2, [eax+ebx+ebx+color2]
movq mm1, [eax+ebx+ebx+color1]
push eax
add eax, ebx
movq mm3, [eax+ebx+ebx+colorA0]
pop eax
pcmpeqw mm2, mm4
pcmpeqw mm6, mm5
pcmpeqw mm1, mm5
pcmpeqw mm3, mm5
pxor mm5, mm5
pcmpeqw mm2, mm5
pcmpeqw mm3, mm5
pand mm6, mm1
pand mm2, mm3
pand mm6, mm2
por mm7, mm6
movq mm6, mm7
pcmpeqw mm6, mm5
pand mm7, mm0
movq mm1, [eax+ebx+ebx+color2]
pand mm6, mm1
por mm7, mm6
movq [final2a], mm7 ;finished 2a
;--------------------------------------------
%ifdef dfhsdfhsdahdsfhdsfh
if (color6 == color3 && color3 == colorA1 && color2 != colorA2 && color3 != colorA0)
product2b = Q_INTERPOLATE (color3, color3, color3, color2);
else
if (color5 == color2 && color2 == colorA2 && colorA1 != color3 && color2 != colorA3)
product2b = Q_INTERPOLATE (color2, color2, color2, color3);
else
product2b = INTERPOLATE (color2, color3);
if (color6 == color3 && color6 == colorB1 && color5 != colorB2 && color6 != colorB0)
product1b = Q_INTERPOLATE (color6, color6, color6, color5);
else
if (color5 == color2 && color5 == colorB2 && colorB1 != color6 && color5 != colorB3)
product1b = Q_INTERPOLATE (color6, color5, color5, color5);
else
product1b = INTERPOLATE (color5, color6);
%endif
push eax
add eax, ebx
pxor mm7, mm7
movq mm0, [eax+ebx+ebx+colorA0]
movq mm1, [eax+ebx+ebx+colorA1]
movq mm2, [eax+ebx+ebx+colorA2]
movq mm3, [eax+ebx+ebx+colorA3]
pop eax
movq mm4, [eax+ebx+ebx+color2]
movq mm5, [eax+ebx+ebx+color3]
movq mm6, [eax+ebx+color6]
pcmpeqw mm6, mm5
pcmpeqw mm1, mm5
pcmpeqw mm4, mm2
pcmpeqw mm0, mm5
pcmpeqw mm4, mm7
pcmpeqw mm0, mm7
pand mm0, mm4
pand mm6, mm1
pand mm0, mm6
movq mm4, [eax+ebx+color2]
movq mm5, [eax+ebx+ebx+color5]
movq mm6, [eax+ebx+ebx+color3]
pcmpeqw mm5, mm4
pcmpeqw mm2, mm4
pcmpeqw mm1, mm6
pcmpeqw mm3, mm4
pcmpeqw mm1, mm7
pcmpeqw mm3, mm7
pand mm2, mm5
pand mm1, mm3
pand mm1, mm2
movq mm2, mm0
movq mm7, [I2333Pixel]
movq mm6, [I2223Pixel]
movq mm5, [I23Pixel]
movq mm4, [Mask35]
movq mm3, [Mask26]
por mm2, mm4
pand mm4, [eax+ebx+ebx+color3]
por mm2, mm3
pand mm3, [eax+ebx+ebx+color2]
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 [final2b], mm0
;-----------------------------------
pxor mm7, mm7
movq mm0, [eax+colorB0]
movq mm1, [eax+colorB1]
movq mm2, [eax+colorB2]
movq mm3, [eax+colorB3]
movq mm4, [eax+ebx+color5]
movq mm5, [eax+ebx+color6]
movq mm6, [eax+ebx+ebx+color3]
pcmpeqw mm6, mm5
pcmpeqw mm1, mm5
pcmpeqw mm4, mm2
pcmpeqw mm0, mm5
pcmpeqw mm4, mm7
pcmpeqw mm0, mm7
pand mm0, mm4
pand mm6, mm1
pand mm0, mm6
movq mm4, [eax+ebx+color5]
movq mm5, [eax+ebx+ebx+color2]
movq mm6, [eax+ebx+color6]
pcmpeqw mm5, mm4
pcmpeqw mm2, mm4
pcmpeqw mm1, mm6
pcmpeqw mm3, mm4
pcmpeqw mm1, mm7
pcmpeqw mm3, mm7
pand mm2, mm5
pand mm1, mm3
pand mm1, mm2
movq mm2, mm0
movq mm7, [I5666Pixel]
movq mm6, [I5556Pixel]
movq mm5, [I56Pixel]
movq mm4, [Mask35]
movq mm3, [Mask26]
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 FAR_POINTER
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
;-------------------------------------------------------------------------
;-------------------------------------------------------------------------
;-------------------------------------------------------------------------
;-------------------------------------------------------------------------
;-------------------------------------------------------------------------
;-------------------------------------------------------------------------
;-------------------------------------------------------------------------
NEWSYM _2xSaISuperEagleLine
; 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -