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

📄 idct_ap922_mmx.asm

📁 由bmp生成mpeg2 的I_frame 数据
💻 ASM
📖 第 1 页 / 共 3 页
字号:
                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+80], 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+88], mm4  ;
            ; 楍張棟
            ; col 0-3
                movq       mm0, [esi+5*16]
                movq       mm1, tan_3      ; tan_3
                movq       mm2, mm0        ; x5
                movq       mm3, [esi+3*16] ; x3
                pmulhw     mm0, mm1        ; x5 * tan_3
                movq       mm4, [esi+7*16] ; x7
                pmulhw     mm1, mm3        ; x3 * tan_3
                movq       mm5, tan_1      ; tan_1
                movq       mm6, mm4        ; x7
                pmulhw     mm4, mm5        ; x7 * tan_1
                paddsw     mm0, mm2        ; x5 * tan_3 
                pmulhw     mm5, [esi+1*16] ; x1 * tan_1
                paddsw     mm1, mm3        ; x3 * tan_3
                movq       mm7, [esi+6*16] ; x6
                paddsw     mm0, mm3        ; x5 * tan_3 + x3 : tm765 
                movq       mm3, tan_2      ; tan_2
                psubsw     mm2, mm1        ; x5 - x3 * tan_3 : tm465
                pmulhw     mm7, mm3        ; x6 * tan_2
                movq       mm1, mm0        ; tm765
                pmulhw     mm3, [esi+2*16] ; x2 * tan_2
                psubsw     mm5, mm6        ; x1 * tan_1 - x7 : tp465
                paddsw     mm4, [esi+1*16] ; x1 + x7 * tan_1 : tp765
                paddsw     mm0, mm4        ; tp765 + tm765   : t7
                paddsw     mm0, one        ; t7 + round
                psubsw     mm4, mm1        ; tp765 - tm765   : tp65 
                paddsw     mm7, [esi+2*16] ; x2 + x6 * tan_2 : tm03
                movq       mm6, mm5        ; tp465
                psubsw     mm3, [esi+6*16] ; x2 * tan_2 - x6 : tm12
                psubsw     mm5, mm2        ; tp465 - tm465   : tm65
                paddsw     mm5, one        ; tm65 + round
                paddsw     mm6, mm2        ; tp465 + tm465   : t4
                movq       [esi+7*16], mm0 ; temporal save t7
                movq       mm1, mm4        ; tp65
                movq       mm2, cos_4      ; cos_4
                paddsw     mm4, mm5        ; tp65 + tm65
                movq       mm0, cos_4      ; cos_4
                pmulhw     mm2, mm4        ; (tp65 + tm65) * cos_4
                movq   	    [esi+3*16], mm6 ; temporal save t4
                psubsw     mm1, mm5        ; tp65 - tm65
                movq       mm6, [esi]      ; x0
                pmulhw     mm0, mm1        ; (tp65 - tm65) * cos_4
                movq       mm5, [esi+4*16] ; x4
                paddsw     mm4, mm2        ; (tp65 + tm65) * cos_4 : t6
                por        mm4, one        ; t6 |= round
                paddsw     mm5, mm6        ; x0 + x4 : tp03      
                psubsw     mm6, [esi+4*16] ; x0 - x4 : tp12
                paddsw     mm0, mm1        ; (tp65 - tm65) * cos_4 : t5
                por        mm0, one        ; t5 + round
                movq       mm2, mm5        ; tp03
                paddsw     mm5, mm7        ; tp03 + tm03 : t0
                movq       mm1, mm6        ; x6
                paddsw     mm5, half06     ; t0 + half
                psubsw     mm2, mm7        ; tp03 - tm03 : t3
                movq       mm7, [esi+7*16] ; t7
                paddsw     mm6, mm3        ; tp12 + tm12 : t1 
                paddsw     mm6, half06     ; t1 + half
                paddsw     mm7, mm5        ; t7 + (t0 + half)
                psraw      mm7, 6          ; (t0 + t7 + half) >> 6 : y0
                psubsw     mm1, mm3        ; tp12 - tm12 : t2
                paddsw     mm2, half06a    ; t3 + half
                movq       mm3, mm6        ; t1 + half
                paddsw     mm1, half06a    ; t2 + half
                paddsw     mm6, mm4        ; (t1 + half) + t6
                movq       [esi], mm7      ; save y0
                psraw      mm6, 6          ; (t1 + t6 + half) >> 6 : y1 
                movq       mm7, mm1        ; t2 + half
                paddsw     mm1, mm0        ; t2 + half + t5
                movq       [esi+1*16], mm6 ; save y1
                psraw      mm1, 6          ; (t2 + half + t5) >> 6 : y2
                movq       mm6, [esi+3*16] ; t4
                psubsw     mm7, mm0        ; t2 + half - t5
                paddsw     mm6, mm2        ; t4 + t3 + half
                psubsw     mm2, [esi+3*16] ; t3 + half - t4
                psraw      mm7, 6          ; (t2 + half - t5) >> 6 ; y5
                movq       [esi+2*16], mm1 ; save y2
                psraw      mm6, 6          ; (t3 + half + t4) >> 6 ; y3
                psubsw     mm5, [esi+7*16] ; t0 + half - t7
                psraw      mm2, 6          ; (t3 + half - t4) >> 6 ; y4
                movq       [esi+3*16], mm6 ; save y3
                psubsw     mm3, mm4        ; t1 + half - t6
                movq       [esi+4*16], mm2 ; save y4
                psraw      mm3, 6          ; (t1 + half - t6) >> 6 ; y6
                movq       [esi+5*16], mm7 ; save y5
                psraw      mm5, 6          ; (t0 + half - t7) >> 6 ; y7
                movq       [esi+6*16], mm3 ; save y6
                movq       [esi+7*16], mm5 ; save y7
            ; col 4-7
                movq       mm0, [esi+5*16+8] ; x5
                add        esi, 8 
                movq       mm1, tan_3      ; tan_3
                movq       mm2, mm0        ; x5
                movq       mm3, [esi+3*16] ; x3
                pmulhw     mm0, mm1        ; x5 * tan_3
                movq       mm4, [esi+7*16] ; x7
                pmulhw     mm1, mm3        ; x3 * tan_3
                movq       mm5, tan_1      ; tan_1
                movq       mm6, mm4        ; x7
                pmulhw     mm4, mm5        ; x7 * tan_1
                paddsw     mm0, mm2        ; x5 * tan_3 
                pmulhw     mm5, [esi+1*16] ; x1 * tan_1
                paddsw     mm1, mm3        ; x3 * tan_3
                movq       mm7, [esi+6*16] ; x6
                paddsw     mm0, mm3        ; x5 * tan_3 + x3 : tm765 
                movq       mm3, tan_2      ; tan_2
                psubsw     mm2, mm1        ; x5 - x3 * tan_3 : tm465
                pmulhw     mm7, mm3        ; x6 * tan_2
                movq       mm1, mm0        ; tm765
                pmulhw     mm3, [esi+2*16] ; x2 * tan_2
                psubsw     mm5, mm6        ; x1 * tan_1 - x7 : tp465
                paddsw     mm4, [esi+1*16] ; x1 + x7 * tan_1 : tp765
                paddsw     mm0, mm4        ; tp765 + tm765   : t7
                paddsw     mm0, one        ; t7 + round
                psubsw     mm4, mm1        ; tp765 - tm765   : tp65 
                paddsw     mm7, [esi+2*16] ; x2 + x6 * tan_2 : tm03
                movq       mm6, mm5        ; tp465
                psubsw     mm3, [esi+6*16] ; x2 * tan_2 - x6 : tm12
                psubsw     mm5, mm2        ; tp465 - tm465   : tm65
                paddsw     mm5, one        ; tm65 + round
                paddsw     mm6, mm2        ; tp465 + tm465   : t4
                movq       [esi+7*16], mm0 ; temporal save t7
                movq       mm1, mm4        ; tp65
                movq       mm2, cos_4      ; cos_4
                paddsw     mm4, mm5        ; tp65 + tm65
                movq       mm0, cos_4      ; cos_4
                pmulhw     mm2, mm4        ; (tp65 + tm65) * cos_4
                movq       [esi+3*16], mm6 ; temporal save t4
                psubsw     mm1, mm5        ; tp65 - tm65
                movq       mm6, [esi]      ; x0
                pmulhw     mm0, mm1        ; (tp65 - tm65) * cos_4
                movq       mm5, [esi+4*16] ; x4
                paddsw     mm4, mm2        ; (tp65 + tm65) * cos_4 : t6
                por        mm4, one        ; t6 |= round
                paddsw     mm5, mm6        ; x0 + x4 : tp03      
                psubsw     mm6, [esi+4*16] ; x0 - x4 : tp12
                paddsw     mm0, mm1        ; (tp65 - tm65) * cos_4 : t5
                por        mm0, one        ; t5 |= round
                movq       mm2, mm5        ; tp03
                paddsw     mm5, mm7        ; tp03 + tm03 : t0
                movq       mm1, mm6        ; x6
                paddsw     mm5, half06     ; t0 + half
                psubsw     mm2, mm7        ; tp03 - tm03 : t3
                movq       mm7, [esi+7*16] ; t7
                paddsw     mm6, mm3        ; tp12 + tm12 : t1 
                paddsw     mm6, half06     ; t1 + half
                paddsw     mm7, mm5        ; t7 + (t0 + half)
                psraw      mm7, 6          ; (t0 + t7 + half) >> 6 : y0
                psubsw     mm1, mm3        ; tp12 - tm12 : t2
                paddsw     mm2, half06a    ; t3 + half
                movq       mm3, mm6        ; t1 + half
                paddsw     mm1, half06a    ; t2 + half
                paddsw     mm6, mm4        ; (t1 + half) + t6
                movq       [esi], mm7      ; save y0
                psraw      mm6, 6          ; (t1 + t6 + half) >> 6 : y1 
                movq       mm7, mm1        ; t2 + half
                paddsw     mm1, mm0        ; t2 + half + t5
                movq       [esi+1*16], mm6 ; save y1
                psraw      mm1, 6          ; (t2 + half + t5) >> 6 : y2
                movq       mm6, [esi+3*16] ; t4
                psubsw     mm7, mm0        ; t2 + half - t5
                paddsw     mm6, mm2        ; t4 + t3 + half
                psubsw     mm2, [esi+3*16] ; t3 + half - t4
                psraw      mm7, 6          ; (t2 + half - t5) >> 6 ; y5
                movq       [esi+2*16], mm1 ; save y2
                psraw      mm6, 6          ; (t3 + half + t4) >> 6 ; y3
                psubsw     mm5, [esi+7*16] ; t0 + half - t7
                psraw      mm2, 6          ; (t3 + half - t4) >> 6 ; y4
                movq       [esi+3*16], mm6 ; save y3
                psubsw     mm3, mm4        ; t1 + half - t6
                movq       [esi+4*16], mm2 ; save y4
                psraw      mm3, 6          ; (t1 + half - t6) >> 6 ; y6
                movq       [esi+5*16], mm7 ; save y5
                psraw      mm5, 6          ; (t0 + half - t7) >> 6 ; y7
                movq       [esi+6*16], mm3 ; save y6
                movq       [esi+7*16], mm5 ; save y7
;-------------------------------------------------------------------
;-------------------------------------------------------------------
; 屻巒枛
                pop        eax
                pop        esi

                ret        4
;-------------------------------------------------------------------
_idct_ap922_mmx@4 ENDP
;-------------------------------------------------------------------
; 廔椆

END

⌨️ 快捷键说明

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