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

📄 mdctasm.asm

📁 vc++ mp3 源码下载 使用vc写的mp3 播放器
💻 ASM
📖 第 1 页 / 共 5 页
字号:
        fsub   st0,st2                 ;/* f[11]'      f[10]'     f[9]' f[8] */
;//   f[9] = f[9] - f[8];
        fxch   st3                     ;/* f[8]        f[10]'     f[9]' f[11]' */
        fsubp  st2,st0                 ;/* f[10]'      f[9]       f[11]' */
        fxch   st1                     ;/* f[9]        f[10]'     f[11]' */
        fst    dword [ebp+9*4]         ;/* f[9]        f[10]'     f[11]' */
;//   f[10] = f[10] - f[9];
        fsubp  st1,st0                 ;/* f[10]       f[11]' */
        fst    dword [ebp+10*4]        ;/* f[10]       f[11]' */
        fxch   st1                     ;/* f[11]'      f[10]  */
;//   f[12] = 0.5f * (a[0] + a[2] + a[3]) - a[1] - a[4];
        fld    dword [tab_a+0*4]       ;/* a[0] f[11]' f[10]  */
        fadd   dword [tab_a+2*4]       ;/* a[0]+a[2] f[11]' f[10]  */
        fadd   dword [tab_a+3*4]       ;/* a[0]+a[2]+a[3] f[11]' f[10]  */
        fmul   dword [My_FPU_Half]       ;/* 0.5*(a[0]+a[2]+a[3]) f[11]' f[10]  */
        fsub   dword [tab_a+1*4]       ;/* 0.5*(a[0]+a[2]+a[3])-a[1] f[11]' f[10]  */
        fsub   dword [tab_a+4*4]       ;/* f[12]' f[11]' f[10]  */
;//   f[13] = 0.5f * (b[0] + b[2] + b[3]) - b[1] - b[4] - f[11];
        fld    dword [tab_b+0*4]       ;/* b[0] f[12]' f[11]' f[10]  */
        fadd   dword [tab_b+2*4]       ;/* b[0]+b[2] f[12]' f[11]' f[10]  */
        fadd   dword [tab_b+3*4]       ;/* b[0]+b[2]+b[3] f[12]' f[11]' f[10]  */
        fmul   dword [My_FPU_Half]       ;/* 0.5*(b[0]+b[2]+b[3]) f[12]' f[11]' f[10]  */
        fsub   dword [tab_b+1*4]       ;/* 0.5*(b[0]+b[2]+b[3])-b[1] f[12]' f[11]' f[10]  */
        fsub   dword [tab_b+4*4]       ;/* 0.5*(b[0]+b[2]+b[3])-b[1]-b[4] f[12]' f[11]' f[10]  */
        fsub   st2                     ;/* f[13]' f[12]' f[11]' f[10]  */
;//   f[11] = f[11] - f[10];
        fxch   st3                     ;/* f[10]  f[12]' f[11]' f[13]' */
        fsubp  st2,st0                 ;/* f[12]' f[11]  f[13]' */
        fxch   st1                     ;/* f[11]  f[12]' f[13]' */
        fst    dword [ebp+11*4]        ;/* f[11]  f[12]' f[13]' */
;//   f[12] = f[12] - f[11];
        fsubp  st1,st0                 ;/* f[12]       f[13]' */
        fst    dword [ebp+12*4]        ;/* f[12]       f[13]' */
        fxch   st1                     ;/* f[13]'      f[12]  */
;//   f[14] = coef[7][0]*a[5]+coef[7][1]*a[6]+coef[7][2]*a[7]+coef[7][3]*a[8];
        fld    dword [_coef+7*16+0*4]  ;/* coef[7][0]  f[13]' f[12] */
        fld    dword [_coef+7*16+1*4]  ;/* coef[7][1]  coef[7][0] f[13]' f[12] */
        fld    dword [_coef+7*16+2*4]  ;/* coef[7][2]  coef[7][1] coef[7][0] f[13]' f[12] */
        fld    dword [_coef+7*16+3*4]  ;/* coef[7][3]  coef[7][2] coef[7][1] coef[7][0] f[13]' f[12] */
        fld    st3                     ;/* coef[7][0]  coef[7][3] coef[7][2] coef[7][1] coef[7][0] f[13]' f[12] */
        fmul   dword [tab_a+5*4]       ;/* v0          coef[7][3] coef[7][2] coef[7][1] coef[7][0] f[13]' f[12] */
        fld    st3                     ;/* coef[7][1]  v0         coef[7][3] coef[7][2] coef[7][1] coef[7][0] f[13]' f[12] */
        fmul   dword [tab_a+6*4]       ;/* v1          v0         coef[7][3] coef[7][2] coef[7][1] coef[7][0] f[13]' f[12] */
        faddp  st1,st0                 ;/* v1+v0       coef[7][3] coef[7][2] coef[7][1] coef[7][0] f[13]' f[12] */
        fld    st2                     ;/* coef[7][2]  v1+v0      coef[7][3] coef[7][2] coef[7][1] coef[7][0] f[13]' f[12] */
        fmul   dword [tab_a+7*4]       ;/* v2 v1+v0    coef[7][3] coef[7][2] coef[7][1] coef[7][0] f[13]' f[12] */
        faddp  st1,st0                 ;/* v2+v1+v0    coef[7][3] coef[7][2] coef[7][1] coef[7][0] f[13]' f[12] */
        fld    st1                     ;/* coef[7][3]  v2+v1+v0   coef[7][3] coef[7][2] coef[7][1] coef[7][0] f[13]' f[12] */
        fmul   dword [tab_a+8*4]       ;/* v3 v2+v1+v0 coef[7][3] coef[7][2] coef[7][1] coef[7][0] f[13]' f[12] */
        faddp  st1,st0                 ;/* f[14]'      coef[7][3] coef[7][2] coef[7][1] coef[7][0] f[13]' f[12] */
;//   f[15] = coef[7][0]*b[5]+coef[7][1]*b[6]+coef[7][2]*b[7]+coef[7][3]*b[8]-f[13];
        fxch   st4                     ;/* coef[7][0]  coef[7][3] coef[7][2] coef[7][1] f[14]'     f[13]' f[12] */
        fmul   dword [tab_b+5*4]       ;/* v0          coef[7][3] coef[7][2] coef[7][1] f[14]'     f[13]' f[12] */
        fxch   st3                     ;/* coef[7][1]  coef[7][3] coef[7][2] v0         f[14]'     f[13]' f[12] */
        fmul   dword [tab_b+6*4]       ;/* v1          coef[7][3] coef[7][2] v0         f[14]'     f[13]' f[12] */
        faddp  st3,st0                 ;/* coef[7][3]  coef[7][2] v0+v1      f[14]'     f[13]' f[12] */
        fxch   st1                     ;/* coef[7][2]  coef[7][3] v0+v1      f[14]'     f[13]' f[12] */
        fmul   dword [tab_b+7*4]       ;/* v2          coef[7][3] v0+v1      f[14]'     f[13]' f[12] */
        faddp  st2,st0                 ;/* coef[7][3]  v0+v1+v2   f[14]'     f[13]' f[12] */
        fmul   dword [tab_b+8*4]       ;/* v3          v0+v1+v2   f[14]'     f[13]' f[12] */
        faddp  st1,st0                 ;/* v0+v1+v2+v3 f[14]'     f[13]' f[12] */
        fsub   st0,st2                 ;/* f[15]'      f[14]'     f[13]' f[12] */
;//   f[13] = f[13] - f[12];
        fxch   st3                     ;/* f[12]  f[14]' f[13]' f[15]' */
        fsubp  st2,st0                 ;/* f[14]' f[13]  f[15]' */
        fxch   st1                     ;/* f[13]  f[14]' f[15]' */
        fst    dword [ebp+13*4]        ;/* f[13]  f[14]' f[15]' */
;//   f[14] = f[14] - f[13];
        fsubp  st1,st0                 ;/* f[14]       f[15]' */
        fst    dword [ebp+14*4]        ;/* f[14]       f[15]' */
        fxch   st1                     ;/* f[15]'      f[14]  */
;//   f[16] = coef[8][0]*a[0]+coef[8][1]*a[1]+coef[8][2]*a[2]+coef[8][3]*a[3]+a[4];
        fld    dword [_coef+8*16+0*4]  ;/* c[8,0] f[15]' f[14] */
        fld    dword [_coef+8*16+1*4]  ;/* c[8,1] c[8,0] f[15]' f[14] */
        fld    dword [_coef+8*16+2*4]  ;/* c[8,2] c[8,1] c[8,0] f[15]' f[14] */
        fld    dword [_coef+8*16+3*4]  ;/* c[8,3] c[8,2] c[8,1] c[8,0] f[15]' f[14] */
        fld    st3                     ;/* c[8,0] c[8,3] c[8,2] c[8,1] c[8,0] f[15]' f[14] */
        fmul   dword [tab_a+0*4]       ;/* v0     c[8,3] c[8,2] c[8,1] c[8,0] f[15]' f[14] */
        fld    st3                     ;/* c[8,1] v0     c[8,3] c[8,2] c[8,1] c[8,0] f[15]' f[14] */
        fmul   dword [tab_a+1*4]       ;/* v1     v0     c[8,3] c[8,2] c[8,1] c[8,0] f[15]' f[14] */
        faddp  st1,st0                 ;/* v1+v0  c[8,3] c[8,2] c[8,1] c[8,0] f[15]' f[14] */
        fld    st2                     ;/* c[8,2] v1+v0  c[8,3] c[8,2] c[8,1] c[8,0] f[15]' f[14] */
        fmul   dword [tab_a+2*4]       ;/* v2     v1+v0  c[8,3] c[8,2] c[8,1] c[8,0] f[15]' f[14] */
        faddp  st1,st0                 ;/* v0v1v2 c[8,3] c[8,2] c[8,1] c[8,0] f[15]' f[14] */
        fld    st1                     ;/* c[8,3] v0v1v2 c[8,3] c[8,2] c[8,1] c[8,0] f[15]' f[14] */
        fmul   dword [tab_a+3*4]       ;/* v3     v0v1v2 c[8,3] c[8,2] c[8,1] c[8,0] f[15]' f[14] */
        faddp  st1,st0                 ;/* f[8]'  c[8,3] c[8,2] c[8,1] c[8,0] f[15]' f[14] */
        fadd   dword [tab_a+4*4]       ;/* f[8]'  c[8,3] c[8,2] c[8,1] c[8,0] f[15]' f[14] */        ;// CHECK HERE
        fxch   st4                     ;/* c[8,0] c[8,3] c[8,2] c[8,1] f[16]' f[15]' f[14] */
;//   f[17] = coef[8][0]*b[0]+coef[8][1]*b[1]+coef[8][2]*b[2]+coef[8][3]*b[3]+b[4]-f[15];
        fmul   dword [tab_b+0*4]       ;/* v0     c[8,3] c[8,2] c[8,1] f[16]'  f[15]' f[14] */
        fxch   st3                     ;/* c[8,1] c[8,3] c[8,2] v0     f[16]'  f[15]' f[14] */
        fmul   dword [tab_b+1*4]       ;/* v1     c[8,3] c[8,2] v0     f[16]'  f[15]' f[14] */
        faddp  st3,st0                 ;/* c[8,3] c[8,2] v0+v1  f[16]'  f[15]' f[14] */
        fxch   st1                     ;/* c[8,2] c[8,3] v0+v1  f[16]'  f[15]' f[14] */
        fmul   dword [tab_b+2*4]       ;/* v2     c[8,3] v0+v1  f[16]'  f[15]' f[14] */
        faddp  st2,st0                 ;/* c[8,3] v0v1v2 f[16]'  f[15]' f[14] */
        fmul   dword [tab_b+3*4]       ;/* v3     v0v1v2 f[16]'  f[15]' f[14] */
        faddp  st1,st0                 ;/* f[17]'' f[16]'  f[15]' f[14] */
        fadd   dword [tab_b+4*4]       ;/* f[17]'' f[16]'  f[15]' f[14] */  ;// CHECK HERE
        fsub   st0,st2                 ;/* f[17]'  f[16]'  f[15]' f[14] */
;//   f[15] = f[15] - f[14];
        fxch   st3                     ;/* f[14]  f[16]' f[15]' f[17]' */
        fsubp  st2,st0                 ;/* f[16]' f[15]  f[17]' */
        fxch   st1                     ;/* f[15]  f[16]' f[17]' */
        fst    dword [ebp+15*4]        ;/* f[15]  f[16]' f[17]' */
;//   f[16] = f[16] - f[15];
        fsubp  st1,st0                 ;/* f[16]       f[17]' */
        fst    dword [ebp+16*4]        ;/* f[16]       f[17]' */
;//   f[17] = f[17] - f[16];
        fsubp  st1,st0                 ;/* f[17] */
        fstp   dword [ebp+17*4]        ;/* - */

        pop    ebp
%endmacro

;/*
; * imdct6_3 ASM MACRO Version
; */
%macro imdct6_3 1 ;// PROC f[]
        push   ebp

        mov    ebp,%1                  ;/* Save arg */
;/* Unroll the loop because it is a known-value count */
%assign p 0
%rep 3
        fld    dword [ebp+(p+(3*0))*4] ;/* f[3*0] */
        fmul   dword [_mdct6_3v+0*4]   ;/* g1 */
        fld    dword [ebp+(p+(3*5))*4] ;/* f[3*5] g1 */
        fmul   dword [_mdct6_3v+5*4]   ;/* g2 g1 */
        fld    st0                     ;/* g2 g2 g1 */
        fadd   st2                     ;/* a[0] g2 g1 */
        fstp   dword [tab_a+(p*6+0)*4] ;/* g2 g1 */
        fsubp  st1,st0                 ;/* g1-g2 */
        fmul   dword [_mdct6_3v2+0*4]  ;/* a[3+0] */
        fstp   dword [tab_a+(p*6+3)*4] ;/* - */

        fld    dword [ebp+(p+(3*1))*4] ;/* f[3*1] */
        fmul   dword [_mdct6_3v+1*4]   ;/* g1 */
        fld    dword [ebp+(p+(3*4))*4] ;/* f[3*4] g1 */
        fmul   dword [_mdct6_3v+4*4]   ;/* g2 g1 */
        fld    st0                     ;/* g2 g2 g1 */
        fadd   st2                     ;/* a[1] g2 g1 */
        fstp   dword [tab_a+(p*6+1)*4] ;/* g2 g1 */
        fsubp  st1,st0                 ;/* g1-g2 */
        fmul   dword [_mdct6_3v2+1*4]  ;/* a[3+1] */
        fstp   dword [tab_a+(p*6+3+1)*4] ;/* - */

        fld    dword [ebp+(p+(3*2))*4] ;/* f[3*2] */
        fmul   dword [_mdct6_3v+2*4]   ;/* g1 */
        fld    dword [ebp+(p+(3*3))*4] ;/* f[3*3] g1 */
        fmul   dword [_mdct6_3v+3*4]   ;/* g2 g1 */
        fld    st0                     ;/* g2 g2 g1 */
        fadd   st2                     ;/* a[2] g2 g1 */
        fstp   dword [tab_a+(p*6+2)*4] ;/* g2 g1 */
        fsubp  st1,st0                 ;/* g1-g2 */
        fmul   dword [_mdct6_3v2+2*4]  ;/* a[3+2] */
        fstp   dword [tab_a+(p*6+3+2)*4] ;/* - */
%assign p p+1
%endrep

;/* Unroll the loop because it is a known-value count */
%assign p 0
%rep 3
        fld    dword [tab_a+(p*6+0)*4] ;/* a[0] */
        fadd   dword [tab_a+(p*6+2)*4] ;/* a02 */
        fld    dword [tab_a+(p*6+3+0)*4] ;/* a[3+0] a02 */
        fadd   dword [tab_a+(p*6+3+2)*4] ;/* b02 a02 */
        fld    st1                     ;/* a02 b02 a02 */
        fadd   dword [tab_a+(p*6+1)*4] ;/* c[0] b02 a02 */
        fst    dword [ebp+(p*6+0)*4]   ;/* c[0] b02 a02 */
        fld    st1                     ;/* b02 c[0] b02 a02 */
        fadd   dword [tab_a+(p*6+3+1)*4] ;/* c[1]' c[0] b02 a02 */
        fld    dword [tab_a+(p*6+0)*4] ;/* a[0] c[1]' c[0] b02 a02 */
        fsub   dword [tab_a+(p*6+2)*4] ;/* a[0]-a[2] c[1]' c[0] b02 a02 */
        fmul   dword [_coef87]         ;/* c[2]' c[1]' c[0] b02 a02 */
        fld    dword [tab_a+(p*6+3)*4] ;/* a[3] c[2]' c[1]' c[0] b02 a02 */
        fsub   dword [tab_a+(p*6+3+2)*4] ;/* a[3]-a[5] c[2]' c[1]' c[0] b02 a02 */
        fmul   dword [_coef87]         ;/* c[3]'' c[2]' c[1]' c[0] b02 a02 */
        fsub   st2                     ;/* c[3]' c[2]' c[1]' c[0] b02 a02 */
        fxch   st3                     ;/* c[0] c[2]' c[1]' c[3]' b02 a02 */
        fsubp  st2,st0                 ;/* c[2]' c[1] c[3]' b02 a02 */
        fxch   st1                     ;/* c[1] c[2]' c[3]' b02 a02 */
        fst    dword [ebp+(p*6+1)*4]   ;/* c[1] c[2]' c[3]' b02 a02 */
        fsubp  st1,st0                 ;/* c[2] c[3]' b02 a02 */
        fst    dword [ebp+(p*6+2)*4]   ;/* c[2] c[3]' b02 a02 */
        fxch   st3                     ;/* a02 c[3]' b02 c[2] */
        fsub   dword [tab_a+(p*6+1)*4] ;/* a02-a[1] c[3]' b02 c[2] */
        fsub   dword [tab_a+(p*6+1)*4] ;/* c[4]' c[3]' b02 c[2] */
        fxch   st2                     ;/* b02 c[3]' c[4]' c[2] */
        fsub   dword [tab_a+(p*6+3+1)*4] ;/* b02-a[3+1] c[3]' c[4]' c[2] */
        fsub   dword [tab_a+(p*6+3+1)*4] ;/* c[5]'' c[3]' c[4]' c[2] */
        fsub   st0,st1                 ;/* c[5]' c[3]' c[4]' c[2] */
        fxch   st3                     ;/* c[2] c[3]' c[4]' c[5]' */

⌨️ 快捷键说明

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