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

📄 idct_ap922_mmx.asm

📁 由bmp生成mpeg2 的I_frame 数据
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 偍栺懇
.586
.mmx
.xmm
.model flat
_TEXT64 segment page public use32 'CODE'
		align 16
;-------------------------------------------------------------------
;IEEE test conditions: -L = -256, +H = 255, sign = 1, #iters = 10000, elapsed = 1242
;Peak absolute values of errors:
;   1   1   1   1   1   1   1   1
;   1   1   1   1   1   1   1   1
;   1   1   1   1   1   1   1   1
;   1   1   1   1   1   1   1   1
;   1   1   1   1   1   1   1   1
;   1   1   1   1   1   1   1   1
;   1   1   1   1   1   1   1   1
;   1   1   1   1   1   1   1   1
;Worst peak error = 1  (meets spec limit 1)
;
;Mean square errors:
;   0.0064   0.0065   0.0060   0.0060   0.0059   0.0060   0.0058   0.0070
;   0.0070   0.0078   0.0073   0.0078   0.0057   0.0098   0.0069   0.0065
;   0.0092   0.0085   0.0073   0.0061   0.0077   0.0097   0.0092   0.0074
;   0.0060   0.0057   0.0058   0.0056   0.0064   0.0071   0.0068   0.0054
;   0.0045   0.0074   0.0061   0.0065   0.0054   0.0059   0.0073   0.0078
;   0.0076   0.0081   0.0063   0.0063   0.0072   0.0080   0.0087   0.0075
;   0.0082   0.0076   0.0065   0.0082   0.0071   0.0073   0.0083   0.0080
;   0.0059   0.0067   0.0056   0.0065   0.0064   0.0063   0.0063   0.0053
;Worst pmse = 0.009800  (meets spec limit 0.06)
;Overall mse = 0.006923  (meets spec limit 0.02)
;
;Mean errors:
;   0.0016  -0.0007   0.0008  -0.0004   0.0005   0.0014   0.0016   0.0006
;  -0.0004  -0.0014   0.0007  -0.0008   0.0019   0.0010   0.0007  -0.0001
;  -0.0020   0.0001  -0.0003  -0.0007  -0.0011  -0.0007   0.0002  -0.0004
;  -0.0020  -0.0001  -0.0006  -0.0002   0.0008  -0.0003  -0.0008   0.0002
;  -0.0003   0.0012  -0.0001   0.0007   0.0002  -0.0001  -0.0005   0.0010
;   0.0008   0.0013   0.0011  -0.0015  -0.0002  -0.0006   0.0005  -0.0005
;  -0.0008  -0.0010   0.0001   0.0014  -0.0001  -0.0001   0.0003   0.0002
;  -0.0005   0.0001   0.0014   0.0019  -0.0008   0.0001  -0.0013  -0.0005
;Worst mean error = 0.002000  (meets spec limit 0.015)
;Overall mean error = 0.000039  (meets spec limit 0.0015)
;
;0 elements of IDCT(0) were not zero
;-------------------------------------------------------------------
; idct_ap922_mmx - 曽恓
; 
; AP-945 idct_m64asm.cpp 偺僐乕僪傪 pshufw 彍嫀偟偰 MMX 壔
;-------------------------------------------------------------------
; 掕悢
one          dq 00001000100010001h ;     1,     1,     1,     1,
half11       dq 00000040000000400h ;         1024,         1024,
half06       dq 00020002000200020h ;    32,    32,    32,    32,
half06a      dq 0001f001f001f001fh ;    31,    31,    31,    31,
tan_1        dq 032ec32ec32ec32ech ; 13036, 13036, 13036, 13036,
tan_2        dq 06a0a6a0a6a0a6a0ah ; 27146, 27146, 27146, 27146,
tan_3        dq 0ab0eab0eab0eab0eh ; 43790, 43790, 43790, 43790,
                                   ;-21746,-21746,-21746,-21746,
cos_4        dq 0b505b505b505b505h ; 46341, 46341, 46341, 46341,
                                   ;-19195,-19195,-19195,-19195,

table_04     dq 0c000400040004000h ;-16384, 16384, 16384, 16384, w06_w04_w02_w00
             dq 0ac6122a322a3539fh ;-21407,  8867,  8867, 21407, w07_w05_w03_w01
             dq 040004000c0004000h ; 16384, 16384,-16384, 16384, w14_w12_w10_w08
             dq 0dd5dac61539fdd5dh ; -8867,-21407, 21407, -8867, w15_w13_w11_w09
             dq 0a73b4b42324958c5h ;-22725, 19266, 12873, 22725, w22_w20_w18_w16
             dq 0cdb7ee5811a84b42h ;-12873, -4520,  4520, 19266, w23_w21_w19_w17
             dq 04b4211a811a83249h ; 19266,  4520,  4520, 12873, w30_w28_w26_w24
             dq 0a73bcdb74b42a73bh ;-22725,-12873, 19266,-22725, w31_w29_w27_w25

table_17     dq 0a73b58c558c558c5h ;-22725, 22725, 22725, 22725, w06_w04_w02_w00 
             dq 08c04300b300b73fch ;-29692, 12299, 12299, 29692, w07_w05_w03_w01 
             dq 058c558c5a73b58c5h ; 22725, 22725,-22725, 22725, w14_w12_w10_w08 
             dq 0cff58c0473fccff5h ;-12299,-29692, 29692,-12299, w15_w13_w11_w09 
             dq 084df686245bf7b21h ;-31521, 26722, 17855, 31521, w22_w20_w18_w16 
             dq 0ba41e782187e6862h ;-17855, -6270,  6270, 26722, w23_w21_w19_w17 
             dq 06862187e187e45bfh ; 26722,  6270,  6270, 17855, w30_w28_w26_w24 
             dq 084dfba41686284dfh ;-31521,-17855, 26722,-31521, w31_w29_w27_w25 

table_26     dq 0ac61539f539f539fh ;-21407, 21407, 21407, 21407, w06_w04_w02_w00
             dq 092bf2d412d416d41h ;-27969, 11585, 11585, 27969, w07_w05_w03_w01
             dq 0539f539fac61539fh ; 21407, 21407,-21407, 21407, w14_w12_w10_w08
             dq 0d2bf92bf6d41d2bfh ;-11585,-27969, 27969,-11585, w15_w13_w11_w09
             dq 08c04625441b373fch ;-29692, 25172, 16819, 29692, w22_w20_w18_w16
             dq 0be4de8ee17126254h ;-16819, -5906,  5906, 25172, w23_w21_w19_w17
             dq 062541712171241b3h ; 25172,  5906,  5906, 16819, w30_w28_w26_w24
             dq 08c04be4d62548c04h ;-29692,-16819, 25172,-29692, w31_w29_w27_w25

table_35     dq 0b4be4b424b424b42h ;-19266, 19266, 19266, 19266, w06_w04_w02_w00
             dq 09dac28ba28ba6254h ;-25172, 10426, 10426, 25172, w07_w05_w03_w01
             dq 04b424b42b4be4b42h ; 19266, 19266,-19266, 19266, w14_w12_w10_w08
             dq 0d7469dac6254d746h ;-10426,-25172, 25172,-10426, w15_w13_w11_w09
             dq 0979e587e3b216862h ;-26722, 22654, 15137, 26722, w22_w20_w18_w16
             dq 0c4dfeb3d14c3587eh ;-15137, -5315,  5315, 22654, w23_w21_w19_w17
             dq 0587e14c314c33b21h ; 22654,  5315,  5315, 15137, w30_w28_w26_w24
             dq 0979ec4df587e979eh ;-26722,-15137, 22654,-26722, w31_w29_w27_w25

;-------------------------------------------------------------------
PUBLIC              C _idct_ap922_mmx@4
;      void __stdcall  idct_ap922_mmx(
; [esp + 4] = short *block,
; )
_idct_ap922_mmx@4 PROC
;-------------------------------------------------------------------
; 儗僕僗僞戅旔
                push       esi
                push       eax
;-------------------------------------------------------------------
; 堷悢偐傜偺僨乕僞庴偗庢傝
                mov        esi, [esp+8+4]
;-------------------------------------------------------------------
            ; 峴張棟
                lea        eax, table_04 
            ; row 0
                movd       mm0, [esi]     ; 00_00_x1_x0
                movd       mm1, [esi+4]   ; 00_00_x3_x2
                movd       mm2, [esi+8]   ; 00_00_x5_x4
                movd       mm3, [esi+12]  ; 00_00_x7_x4
                movq       mm4, [eax+16]  ; w14_w12_w10_w08
                movq       mm5, [eax+24]  ; w15_w13_w11_w09
                movq       mm6, [eax+48]  ; w30_w28_w26_w24
                movq       mm7, [eax+56]  ; w31_w29_w27_w25
                punpcklwd  mm0, mm2       ; x5_x1_x4_x0
                punpcklwd  mm1, mm3       ; x7_x3_x6_x2
                movq       mm2, mm0
                movq       mm3, mm1
                punpckldq  mm0, mm0       ; x4_x0_x4_x0
                punpckhdq  mm2, mm2       ; x5_x1_x5_x1
                punpckldq  mm1, mm1       ; x6_x2_x6_x2
                punpckhdq  mm3, mm3       ; x7_x3_x7_x3
                pmaddwd    mm4, mm0       ; x4*w14+x0*w12_x4*w10+x0*w08
                pmaddwd    mm5, mm1       ; x6*w15+x2*w13_x6*w11+x2*w09
                pmaddwd    mm6, mm2       ; x5*w30+x1*w28_x5*w26+x1*w24
                pmaddwd    mm7, mm3       ; x7*w31+x3*x29_x7*w27+x3*w25
                pmaddwd    mm0, [eax]     ; x4*w06+x0*w04_x4*w02+x0*w00
                pmaddwd    mm1, [eax+8]   ; x6*w07+x0*w05_x6*w03+x0*w01
                pmaddwd    mm2, [eax+32]  ; x5*w22+x1*w20_x5*w18+x1*w16
                pmaddwd    mm3, [eax+40]  ; x7*w23+x3*w21_x7*w19+x3*w17
                paddd      mm4, mm5       ; a3_a2
                paddd      mm6, mm7       ; b3_b2
                paddd      mm0, mm1       ; a1_a0
                paddd      mm2, mm3       ; b1_b0
                paddd      mm4, half11
                paddd      mm0, half11
                movq       mm5, mm6
                movq       mm1, mm2
                paddd      mm2, mm0       ; a1+b1_a0+b0
                paddd      mm6, mm4       ; a3+b3_a2+b2
                psubd      mm0, mm1       ; a1-b1_a0-b0
                psubd      mm4, mm5       ; a3-b3_a2-b2
                psrad      mm2, 11        ; y1_y0
                psrad      mm6, 11        ; y3_y2
                psrad      mm0, 11        ; y6_y7
                psrad      mm4, 11        ; y4_y5
                packssdw   mm2, mm6       ; y3_y2_y1_y0
                packssdw   mm4, mm0       ; y6_y7_y4_y5
                movq       [esi], mm2     ;
                movq       mm7, mm4       ; 
                psrld      mm4, 16        ; 00_y6_00_y4
                pslld      mm7, 16        ; y7_00_y5_00
                por        mm4, mm7       ; y7_y6_y5_y4
                movq       [esi+8], mm4   ;
            ; row 4
                movd       mm0, [esi+64]  ; 00_00_x1_x0
                movd       mm1, [esi+68]  ; 00_00_x3_x2
                movd       mm2, [esi+72]  ; 00_00_x5_x4
                movd       mm3, [esi+76]  ; 00_00_x7_x4
                movq       mm4, [eax+16]  ; w14_w12_w10_w08
                movq       mm5, [eax+24]  ; w15_w13_w11_w09
                movq       mm6, [eax+48]  ; w30_w28_w26_w24
                movq       mm7, [eax+56]  ; w31_w29_w27_w25
                punpcklwd  mm0, mm2       ; x5_x1_x4_x0
                punpcklwd  mm1, mm3       ; x7_x3_x6_x2
                movq       mm2, mm0
                movq       mm3, mm1
                punpckldq  mm0, mm0       ; x4_x0_x4_x0
                punpckhdq  mm2, mm2       ; x5_x1_x5_x1
                punpckldq  mm1, mm1       ; x6_x2_x6_x2
                punpckhdq  mm3, mm3       ; x7_x3_x7_x3
                pmaddwd    mm4, mm0       ; x4*w14+x0*w12_x4*w10+x0*w08
                pmaddwd    mm5, mm1       ; x6*w15+x2*w13_x6*w11+x2*w09
                pmaddwd    mm6, mm2       ; x5*w30+x1*w28_x5*w26+x1*w24
                pmaddwd    mm7, mm3       ; x7*w31+x3*x29_x7*w27+x3*w25
                pmaddwd    mm0, [eax]     ; x4*w06+x0*w04_x4*w02+x0*w00
                pmaddwd    mm1, [eax+8]   ; x6*w07+x0*w05_x6*w03+x0*w01
                pmaddwd    mm2, [eax+32]  ; x5*w22+x1*w20_x5*w18+x1*w16
                pmaddwd    mm3, [eax+40]  ; x7*w23+x3*w21_x7*w19+x3*w17
                paddd      mm4, mm5       ; a3_a2
                paddd      mm6, mm7       ; b3_b2
                paddd      mm0, mm1       ; a1_a0
                paddd      mm2, mm3       ; b1_b0
                paddd      mm4, half11
                paddd      mm0, half11
                movq       mm5, mm6
                movq       mm1, mm2
                paddd      mm2, mm0       ; a1+b1_a0+b0
                paddd      mm6, mm4       ; a3+b3_a2+b2
                psubd      mm0, mm1       ; a1-b1_a0-b0
                psubd      mm4, mm5       ; a3-b3_a2-b2
                psrad      mm2, 11        ; y1_y0
                psrad      mm6, 11        ; y3_y2
                psrad      mm0, 11        ; y6_y7
                psrad      mm4, 11        ; y4_y5
                packssdw   mm2, mm6       ; y3_y2_y1_y0
                packssdw   mm4, mm0       ; y6_y7_y4_y5
                movq       [esi+64], mm2  ;
                movq       mm7, mm4       ; 
                psrld      mm4, 16        ; 00_y6_00_y4
                pslld      mm7, 16        ; y7_00_y5_00
                por        mm4, mm7       ; y7_y6_y5_y4
                movq       [esi+72], mm4  ;
            ; row 1
                lea        eax, table_17
                movd       mm0, [esi+16]  ; 00_00_x1_x0
                movd       mm1, [esi+20]  ; 00_00_x3_x2
                movd       mm2, [esi+24]  ; 00_00_x5_x4
                movd       mm3, [esi+28]  ; 00_00_x7_x4
                movq       mm4, [eax+16]  ; w14_w12_w10_w08
                movq       mm5, [eax+24]  ; w15_w13_w11_w09
                movq       mm6, [eax+48]  ; w30_w28_w26_w24
                movq       mm7, [eax+56]  ; w31_w29_w27_w25
                punpcklwd  mm0, mm2       ; x5_x1_x4_x0
                punpcklwd  mm1, mm3       ; x7_x3_x6_x2
                movq       mm2, mm0
                movq       mm3, mm1
                punpckldq  mm0, mm0       ; x4_x0_x4_x0
                punpckhdq  mm2, mm2       ; x5_x1_x5_x1
                punpckldq  mm1, mm1       ; x6_x2_x6_x2
                punpckhdq  mm3, mm3       ; x7_x3_x7_x3
                pmaddwd    mm4, mm0       ; x4*w14+x0*w12_x4*w10+x0*w08
                pmaddwd    mm5, mm1       ; x6*w15+x2*w13_x6*w11+x2*w09
                pmaddwd    mm6, mm2       ; x5*w30+x1*w28_x5*w26+x1*w24

⌨️ 快捷键说明

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