⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bilinear.asm

📁 著名SFC模拟器Snes9x的源代码。
💻 ASM
字号:
;%define FAR_POINTER	 BITS 32%ifdef __DJGPP__         GLOBAL _BilinearMMX         GLOBAL _BilinearMMXGrid0         GLOBAL _BilinearMMXGrid1         GLOBAL _EndMMX%else         GLOBAL BilinearMMX         GLOBAL BilinearMMXGrid0         GLOBAL BilinearMMXGrid1         GLOBAL EndMMX%endif	 SECTION .text ALIGN = 32%ifdef __DJGPP___BilinearMMX:%elseBilinearMMX:%endif; Store some stuff	 push ebp	 mov ebp, esp	 push ebx         mov eax, [ebp+24] ;dx         mov ebx, [ebp+28] ;dy         push edx         movq mm0, [eax]         movq mm1, [ebx]         psrlw mm0, 11  ;reduce to 5 bits         psrlw mm1, 11         movq [eax], mm0         movq [ebx], mm1         mov edx, [ebp+20]  ;D         pmullw mm0, mm1         movq mm5, [RedMask]         movq mm6, [GreenMask]         movq mm7, [BlueMask]         psrlw mm0, 5         pand mm5, [edx]         pand mm6, [edx]         psrlw mm5, 5         pand mm7, [edx]         pmullw mm5, mm0         pmullw mm6, mm0         pmullw mm7, mm0         movq mm4, mm0       ;store x*y         mov edx, [ebp+16] ;C         movq mm0, [ebx]         movq mm1, mm4         psubw mm0, mm1         movq mm1, [RedMask]         movq mm2, [GreenMask]         movq mm3, [BlueMask]         pand mm1, [edx]         pand mm2, [edx]         psrlw mm1, 5         pand mm3, [edx]         pmullw mm1, mm0         pmullw mm2, mm0         pmullw mm3, mm0         mov edx, [ebp+12] ;B         paddw mm5, mm1         paddw mm6, mm2         paddw mm7, mm3         movq mm0, [eax]         movq mm1, mm4         psubw mm0, mm1         movq mm1, [RedMask]         movq mm2, [GreenMask]         movq mm3, [BlueMask]         pand mm1, [edx]         pand mm2, [edx]         psrlw mm1, 5         pand mm3, [edx]         pmullw mm1, mm0         pmullw mm2, mm0         pmullw mm3, mm0         mov edx, [ebp+8] ;A         paddw mm5, mm1         paddw mm6, mm2         paddw mm7, mm3         movq mm0, [All32s]         movq mm1, mm4         movq mm2, [eax]         movq mm3, [ebx]         paddw mm0, mm1         paddw mm2, mm3         psubw mm0, mm2         movq mm1, [RedMask]         movq mm2, [GreenMask]         movq mm3, [BlueMask]         pand mm1, [edx]         pand mm2, [edx]         psrlw mm1, 5         pand mm3, [edx]         pmullw mm1, mm0         pmullw mm2, mm0         pmullw mm3, mm0         mov edx, [ebp+32]         paddw mm5, mm1         paddw mm6, mm2         paddw mm7, mm3         psrlw mm6, 5         psrlw mm7, 5         pand mm5, [RedMask]         pand mm6, [GreenMask]         pand mm7, [BlueMask]         por mm5, mm6         por mm7, mm5%ifdef FAR_POINTER         movq [fs:edx], mm7%else         movq [edx], mm7%endif         pop edx         pop ebx	 mov esp, ebp	 pop ebp	 ret_BilinearMMXGrid0:; Store some stuff	 push ebp	 mov ebp, esp	 push ebx         mov eax, [ebp+24] ;dx         mov ebx, [ebp+28] ;dy         push edx         movq mm0, [eax]         movq mm1, [ebx]         psrlw mm0, 11  ;reduce to 5 bits         psrlw mm1, 11         movq [eax], mm0         movq [ebx], mm1         mov edx, [ebp+20]  ;D         pmullw mm0, mm1         movq mm5, [RedMask]         movq mm6, [GreenMask]         movq mm7, [BlueMask]         psrlw mm0, 5         pand mm5, [edx]         pand mm6, [edx]         psrlw mm5, 5         pand mm7, [edx]         pmullw mm5, mm0         pmullw mm6, mm0         pmullw mm7, mm0         movq mm4, mm0       ;store x*y         mov edx, [ebp+16] ;C         movq mm0, [ebx]         movq mm1, mm4         psubw mm0, mm1         movq mm1, [RedMask]         movq mm2, [GreenMask]         movq mm3, [BlueMask]         pand mm1, [edx]         pand mm2, [edx]         psrlw mm1, 5         pand mm3, [edx]         pmullw mm1, mm0         pmullw mm2, mm0         pmullw mm3, mm0         mov edx, [ebp+12] ;B         paddw mm5, mm1         paddw mm6, mm2         paddw mm7, mm3         movq mm0, [eax]         movq mm1, mm4         psubw mm0, mm1         movq mm1, [RedMask]         movq mm2, [GreenMask]         movq mm3, [BlueMask]         pand mm1, [edx]         pand mm2, [edx]         psrlw mm1, 5         pand mm3, [edx]         pmullw mm1, mm0         pmullw mm2, mm0         pmullw mm3, mm0         mov edx, [ebp+8] ;A         paddw mm5, mm1         paddw mm6, mm2         paddw mm7, mm3         movq mm0, [All32s]         movq mm1, mm4         movq mm2, [eax]         movq mm3, [ebx]         paddw mm0, mm1         paddw mm2, mm3         psubw mm0, mm2         movq mm1, [RedMask]         movq mm2, [GreenMask]         movq mm3, [BlueMask]         pand mm1, [edx]         pand mm2, [edx]         psrlw mm1, 5         pand mm3, [edx]         pmullw mm1, mm0         pmullw mm2, mm0         pmullw mm3, mm0         mov edx, [ebp+32]         paddw mm5, mm1         paddw mm6, mm2         paddw mm7, mm3         psrlw mm6, 5         psrlw mm7, 5         pand mm5, [RedMask]         pand mm6, [GreenMask]         pand mm7, [BlueMask]         por mm5, mm6         pxor mm0, mm0         movq mm6, mm7         por mm7, mm5         por mm6, mm5         punpcklwd mm6, mm0         punpckhwd mm7, mm0%ifdef FAR_POINTER         movq [fs:edx], mm6         movq [fs:edx+8], mm7%else         movq [edx], mm6         movq [edx+8], mm7%endif         pop edx         pop ebx	 mov esp, ebp	 pop ebp	 ret_BilinearMMXGrid1:; Store some stuff	 push ebp	 mov ebp, esp	 push ebx         mov eax, [ebp+24] ;dx         mov ebx, [ebp+28] ;dy         push edx         movq mm0, [eax]         movq mm1, [ebx]         psrlw mm0, 11  ;reduce to 5 bits         psrlw mm1, 11         movq [eax], mm0         movq [ebx], mm1         mov edx, [ebp+20]  ;D         pmullw mm0, mm1         movq mm5, [RedMask]         movq mm6, [GreenMask]         movq mm7, [BlueMask]         psrlw mm0, 5         pand mm5, [edx]         pand mm6, [edx]         psrlw mm5, 5         pand mm7, [edx]         pmullw mm5, mm0         pmullw mm6, mm0         pmullw mm7, mm0         movq mm4, mm0       ;store x*y         mov edx, [ebp+16] ;C         movq mm0, [ebx]         movq mm1, mm4         psubw mm0, mm1         movq mm1, [RedMask]         movq mm2, [GreenMask]         movq mm3, [BlueMask]         pand mm1, [edx]         pand mm2, [edx]         psrlw mm1, 5         pand mm3, [edx]         pmullw mm1, mm0         pmullw mm2, mm0         pmullw mm3, mm0         mov edx, [ebp+12] ;B         paddw mm5, mm1         paddw mm6, mm2         paddw mm7, mm3         movq mm0, [eax]         movq mm1, mm4         psubw mm0, mm1         movq mm1, [RedMask]         movq mm2, [GreenMask]         movq mm3, [BlueMask]         pand mm1, [edx]         pand mm2, [edx]         psrlw mm1, 5         pand mm3, [edx]         pmullw mm1, mm0         pmullw mm2, mm0         pmullw mm3, mm0         mov edx, [ebp+8] ;A         paddw mm5, mm1         paddw mm6, mm2         paddw mm7, mm3         movq mm0, [All32s]         movq mm1, mm4         movq mm2, [eax]         movq mm3, [ebx]         paddw mm0, mm1         paddw mm2, mm3         psubw mm0, mm2         movq mm1, [RedMask]         movq mm2, [GreenMask]         movq mm3, [BlueMask]         pand mm1, [edx]         pand mm2, [edx]         psrlw mm1, 5         pand mm3, [edx]         pmullw mm1, mm0         pmullw mm2, mm0         pmullw mm3, mm0         mov edx, [ebp+32]         paddw mm5, mm1         paddw mm6, mm2         paddw mm7, mm3         psrlw mm6, 5         psrlw mm7, 5         pand mm5, [RedMask]         pand mm6, [GreenMask]         pand mm7, [BlueMask]         por mm5, mm6         pxor mm0, mm0         por mm7, mm5         pxor mm1, mm1         punpcklwd mm0, mm7         punpckhwd mm1, mm7%ifdef FAR_POINTER         movq [fs:edx], mm0         movq [fs:edx+8], mm1%else         movq [edx], mm0         movq [edx+8], mm1%endif         pop edx         pop ebx	 mov esp, ebp	 pop ebp	 ret%ifdef __DJGPP___EndMMX:%elseEndMMX:%endif         emms         ret	SECTION .data ALIGN = 32;Some constantsRedMask       dd 0xF800F800, 0xF800F800BlueMask      dd 0x001F001F, 0x001F001FGreenMask     dd 0x07E007E0, 0x07E007E0All32s        dd 0x00200020, 0x00200020

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -