📄 mdctasm.asm
字号:
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 + -