📄 mmxquant.asm
字号:
.nolist
INCLUDE iammx.inc ; IAMMX Emulator Macros
.list
.586p
.model FLAT
.data
ALIGN 8
ShortOne DQ 01000100010001h
.const
.code
COMMENT ^
void MMXDeQuant(
short *TempQC,
short *rcoeff,
int QP);
^
MMXDeQuant PROC NEAR C USES ESI EDI ECX,
TempQC: PTR SWORD, rcoeff: PTR SWORD,
QP: DWORD
mov esi, TempQC
mov edi, rcoeff
mov ecx, 8
movd mm7, QP
punpckldq mm7, mm7
pxor mm6, mm6
movq mm0, [esi]
packssdw mm7, mm7
;mm7--QP QP QP QP
;mm0--L3 L2 L1 L0
movq mm1, mm0
movq mm2, mm0
Line:
psllw mm2, 1
pcmpgtw mm1, mm6
;mm2--2*L3 2*L2 2*L1 2*L0
por mm1,dword ptr ShortOne
pcmpeqw mm0, mm6
movq mm6, mm7
psubw mm2, mm1
pandn mm6,dword ptr ShortOne
pmullw mm2, mm7
movq mm3, [esi+8]
pmullw mm6, mm1
paddw mm2, mm6
movq mm4, mm3
pandn mm0, mm2
movq mm5, mm3
;mm0--store the result
add esi, 16
pxor mm6, mm6
psllw mm5, 1
pcmpgtw mm4, mm6
;mm5--2*L3 2*L2 2*L1 2*L0
por mm4,dword ptr ShortOne
pcmpeqw mm3, mm6
movq mm6, mm7
psubw mm5, mm4
pandn mm6,dword ptr ShortOne
pmullw mm5, mm7
movq [edi], mm0
pmullw mm6, mm4
movq mm0, [esi]
paddw mm5, mm6
pandn mm3, mm5
pxor mm6, mm6
;mm3--store the result
movq mm1, mm0
movq mm2, mm0
movq [edi+8],mm3
add edi, 16
dec ecx
jnz Line
emms
ret
MMXDeQuant ENDP
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -