📄 mpegimdf.a
字号:
; Get input *3 samples; GET_I3 <num>,<reg>GET_I3 MACRO MOVM \1*3*SSIZE(a0),\2 ENDM;DCT12_PART1 MACRO GET_I3 5,fp5 ; in5 = in[5*3] GET_I3 4,fp4 ADDR fp4,fp5 ; in5 += (in4 = in[4*3]) GET_I3 3,fp3 ADDR fp3,fp4 ; in4 += (in3 = in[3*3]) GET_I3 2,fp2 ADDR fp2,fp3 ; in3 += (in2 = in[2*3]) GET_I3 1,fp1 ADDR fp1,fp2 ; in2 += (in1 = in[1*3]) GET_I3 0,fp0 ADDR fp0,fp1 ; in1 += (in0 = in[0*3]) ADDR fp3,fp5 ; in5 += in3 ADDR fp1,fp3 ; in3 += in1 MULI 8.660254038e-1,fp2 ; COS_MULT( in2, COS6_1 ) MULI 8.660254038e-1,fp3 ; COS_MULT( in3, COS6_1 ) ENDM;DCT12_PART2 MACRO MULI 5e-1,fp4 ; in0 += COS_MULT( in4, COS6_2 ) ADDR fp4,fp0 MOVR fp0,fp4 ; in4 = in0 + in2 ADDR fp2,fp4 SUBR fp2,fp0 ; in0 -= in2 MULI 5e-1,fp5 ; in1 += COS_MULT( in5, COS6_2 ) ADDR fp5,fp1 MOVR fp1,fp5 ; in5 = T12_MULT( (in1 + in3), 0 ) ADDR fp3,fp5 MULI 5.176380902e-1,fp5 SUBR fp3,fp1 ; in1 = T12_MULT( (in1 - in3), 2 ) MULI 1.931851653,fp1 MOVR fp4,fp3 ; in3 = in4 + in5 ADDR fp5,fp3 SUBR fp5,fp4 ; in4 -= in5 MOVR fp0,fp2 ; in2 = in0 + in1 ADDR fp1,fp2 SUBR fp1,fp0 ; in0 -= in1 ENDM; Multiply <reg> by window coeff; MUL_WIN <i>,<reg>;MUL_WIN MACRO MULM \1*WSIZE(a2),\2 ENDM; Add a <reg> with an out block; ADD_OUT <i>,<reg>;ADD_OUT MACRO ADDM 32*DSIZE*\1(a1),\2 MOVM \2,32*DSIZE*\1(a1) ENDM; Add a <reg> with a prev block; ADD_PREV <i>,<reg>;ADD_PREV MACRO ADDM \1*DSIZE(a3),\2 MOVM \2,\1*DSIZE(a3) ENDM; Calculate: tmp0 (fp6) & tmp1 (fp7);CALC_TEMP MACRO MOVR fp0,fp7 ; tmp1 = fp7 = (in0 - in4) SUBR fp4,fp7 MOVR fp1,fp6 ; fp6 = tmp2 = T12_MULT( (in1 - in5), 1 ) SUBR fp5,fp6 MULI 7.071067812e-1,fp6 SUBR fp6,fp7 ; fp7 = tmp1 = tmp1 - tmp2 ADDR fp0,fp6 ; fp6 = tmp0 = (in0 - in4) + tmp2 SUBR fp4,fp6 MOVM fp6,0(a5) ; tmp0 *** CAN BE SAVED IN A D REG ENDM;; IMDCT for Short blocks;; a0: input array (float *); a1: output out (float *); a2: window array (float *); a3: prev block (float *)imdct_s link a6,#-2*4 ; need 2 floats lea -2*4(a6),a5 ; tmp0..tmp1 ; STEP 1 ; i=0..5: ts[SBLIMIT*i] = prev[i] ; move.l a3,a4 ; a4 = prev block move.l (a4)+,32*DSIZE*0(a1) move.l (a4)+,32*DSIZE*1(a1) move.l (a4)+,32*DSIZE*2(a1) move.l (a4)+,32*DSIZE*3(a1) move.l (a4)+,32*DSIZE*4(a1) move.l (a4),32*DSIZE*5(a1) ; DCT12_PART1 ; CALC_TEMP ; MUL_WIN 10,fp6 ; ts[(17-1)*SBLIMIT] = prev[17-1] + WIN_MULT( tmp0, 11-1 ) ADD_PREV 16,fp6 SET_OUT 16,fp6 MOVM 0(a5),fp6 ; ts[(12+1)*SBLIMIT] = prev[12+1] + WIN_MULT( tmp0, 6+1 ) MUL_WIN 7,fp6 ADD_PREV 13,fp6 SET_OUT 13,fp6 MOVR fp7,fp6 ; ts[(6 +1)*SBLIMIT] = prev[6 +1] + WIN_MULT( tmp1, 1 ) MUL_WIN 1,fp6 ADD_PREV 7,fp6 SET_OUT 7,fp6 MUL_WIN 4,fp7 ; ts[(11-1)*SBLIMIT] = prev[11-1] + WIN_MULT( tmp1, 5-1 ) ADD_PREV 10,fp7 SET_OUT 10,fp7 ; DCT12_PART2 ; MOVR fp2,fp7 ; ts[(17-0)*SBLIMIT] = prev[17-0] + WIN_MULT( in2, 11-0 ) MUL_WIN 11,fp7 ADD_PREV 17,fp7 SET_OUT 17,fp7 MUL_WIN 6,fp2 ; ts[(12+0)*SBLIMIT] = prev[12+0] + WIN_MULT( in2, 6+0 ) ADD_PREV 12,fp2 SET_OUT 12,fp2 MOVR fp3,fp7 ; ts[(12+2)*SBLIMIT] = prev[12+2] + WIN_MULT( in3, 6+2 ) MUL_WIN 8,fp7 ADD_PREV 14,fp7 SET_OUT 14,fp7 MUL_WIN 9,fp3 ; ts[(17-2)*SBLIMIT] = prev[17-2] + WIN_MULT( in3, 11-2 ) ADD_PREV 15,fp3 SET_OUT 15,fp3 MOVR fp0,fp7 ; ts[(6+0)*SBLIMIT] = prev[6+0] + WIN_MULT( in0, 0 ) MUL_WIN 0,fp7 ADD_PREV 6,fp7 SET_OUT 6,fp7 MUL_WIN 5,fp0 ; ts[(11-0)*SBLIMIT] = prev[11-0] + WIN_MULT( in0, 5-0 ) ADD_PREV 11,fp0 SET_OUT 11,fp0 MOVR fp4,fp7 ; ts[(6+2)*SBLIMIT] = prev[6+2] + WIN_MULT( in4, 2 ) MUL_WIN 2,fp7 ADD_PREV 8,fp7 SET_OUT 8,fp7 MUL_WIN 3,fp4 ; ts[(11-2)*SBLIMIT] = prev[11-2] + WIN_MULT( in4, 5-2 ) ADD_PREV 9,fp4 SET_OUT 9,fp4 ; STEP 2 ; addq.l #SSIZE,a0 ; in++ ; DCT12_PART1 ; CALC_TEMP ; MUL_WIN 10,fp6 ; prev[5-1] = WIN_MULT( tmp0, 11-1 ) SET_PREV 4,fp6 MOVM 0(a5),fp6 ; prev[0+1] = WIN_MULT( tmp0, 6+1 ) MUL_WIN 7,fp6 SET_PREV 1,fp6 MOVR fp7,fp6 ; ts[(12+1)*SBLIMIT] += WIN_MULT( tmp1, 1 ) MUL_WIN 1,fp6 ADD_OUT 13,fp6 MUL_WIN 4,fp7 ; ts[(17-1)*SBLIMIT] += WIN_MULT( tmp1, 5-1 ) ADD_OUT 16,fp7 ; DCT12_PART2 ; MOVR fp2,fp7 ; prev[5-0] = WIN_MULT( in2, 11-0 ) MUL_WIN 11,fp7 SET_PREV 5,fp7 MUL_WIN 6,fp2 ; prev[0+0] = WIN_MULT( in2, 6+0 ) SET_PREV 0,fp2 MOVR fp3,fp7 ; prev[0+2] = WIN_MULT( in3, 6+2 ) MUL_WIN 8,fp7 SET_PREV 2,fp7 MUL_WIN 9,fp3 ; prev[5-2] = WIN_MULT( in3, 11-2 ) SET_PREV 3,fp3 MOVR fp0,fp7 ; ts[(12+0)*SBLIMIT] += WIN_MULT( in0, 0 ) MUL_WIN 0,fp7 ADD_OUT 12,fp7 MUL_WIN 5,fp0 ; ts[(17-0)*SBLIMIT] += WIN_MULT( in0, 5-0 ) ADD_OUT 17,fp0 MOVR fp4,fp7 ; ts[(12+2)*SBLIMIT] += WIN_MULT( in4, 2 ) MUL_WIN 2,fp7 ADD_OUT 14,fp7 MUL_WIN 3,fp4 ; ts[(17-2)*SBLIMIT] += WIN_MULT( in4, 5-2 ) ADD_OUT 15,fp4 ; STEP 3 ; addq.l #SSIZE,a0 ; in++ ; ; prev[12]=prev[13]=prev[14]=prev[15]=prev[16]=prev[17]=0 lea 12*DSIZE(a3),a4 ; a4 = &prev[12] moveq.l #0,d0 move.l d0,(a4)+ move.l d0,(a4)+ move.l d0,(a4)+ move.l d0,(a4)+ move.l d0,(a4)+ move.l d0,(a4) ; DCT12_PART1 ; CALC_TEMP ; MUL_WIN 10,fp6 ; prev[11-1] = WIN_MULT( tmp0, 11-1 ) SET_PREV 10,fp6 MOVM 0(a5),fp6 ; prev[6+1] = WIN_MULT( tmp0, 6+1 ) MUL_WIN 7,fp6 SET_PREV 7,fp6 MOVR fp7,fp6 ; prev[0+1] += WIN_MULT( tmp1, 1 ) MUL_WIN 1,fp6 ADD_PREV 1,fp6 MUL_WIN 4,fp7 ; prev[5-1] += WIN_MULT( tmp1, 5-1 ) ADD_PREV 4,fp7 ; DCT12_PART2 ; MOVR fp2,fp7 ; prev[11-0] = WIN_MULT( in2, 11-0 ) MUL_WIN 11,fp7 SET_PREV 11,fp7 MUL_WIN 6,fp2 ; prev[6+0] = WIN_MULT( in2, 6+0 ) SET_PREV 6,fp2 MOVR fp3,fp7 ; prev[6+2] = WIN_MULT( in3, 6+2 ) MUL_WIN 8,fp7 SET_PREV 8,fp7 MUL_WIN 9,fp3 ; prev[11-2] = WIN_MULT( in3, 11-2 ) SET_PREV 9,fp3 MOVR fp0,fp7 ; prev[0+0] += WIN_MULT( in0, 0 ) MUL_WIN 0,fp7 ADD_PREV 0,fp7 MUL_WIN 5,fp0 ; prev[5-0] += WIN_MULT( in0, 5-0 ) ADD_PREV 5,fp0 MOVR fp4,fp7 ; prev[0+2] += WIN_MULT( in4, 2 ) MUL_WIN 2,fp7 ADD_PREV 2,fp7 MUL_WIN 3,fp4 ; prev[5-2] += WIN_MULT( in4, 5-2 ) ADD_PREV 3,fp4 subq.l #2*SSIZE,a0 ; restore in unlk a6 rtsimdct_e_win0 dc.s 3.22824270e-2,1.07206352e-1,2.01414257e-1,3.25616330e-1, 5.00000000e-1,7.67774701e-1 dc.s 1.24122286,2.33195114,7.74415016,-8.45125675,-3.03905797,-1.94832957 dc.s -1.47488141,-1.20710671,-1.03272307,-9.08520997e-1,-8.14313114e-1,-7.39389181e-1 dc.s -6.77525342e-1,-6.24844432e-1,-5.78791738e-1,-5.37601590e-1,-4.99999970e-1,-4.65028346e-1 dc.s -4.31934267e-1,-4.00099576e-1,-3.68989855e-1,-3.38116914e-1,-3.07007194e-1,-2.75172472e-1 dc.s -2.42078424e-1,-2.07106769e-1,-1.69505134e-1,-1.28315032e-1,-8.22623298e-2,-2.95813959e-2imdct_e_win1 dc.s 3.22824270e-2,1.07206352e-1,2.01414257e-1,3.25616330e-1, 5.00000000e-1,7.67774701e-1 dc.s 1.24122286,2.33195114,7.74415016,-8.45125675,-3.03905797,-1.94832957 dc.s -1.47488141,-1.20710671,-1.03272307,-9.08520997e-1,-8.14313114e-1,-7.39389181e-1 dc.s -6.78170800e-1,-6.30236149e-1,-5.92844486e-1,-5.63690960e-1,-5.41196048e-1,-5.24264514e-1 dc.s -5.07758319e-1,-4.65925813e-1,-3.97054553e-1,-3.04670691e-1,-1.92992792e-1,-6.68476522e-2 dc.s 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000imdct_e_win2 dc.s 1.07206352e-1, 5.00000000e-1,2.33195114,-3.03905797,-1.20710671,-8.14313114e-1 dc.s -6.24844432e-1,-4.99999970e-1,-4.00099576e-1,-3.07007194e-1,-2.07106769e-1,-8.22623298e-2imdct_e_win3 dc.s 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000 dc.s 3.01530272e-1,1.46592581,6.97810602,-9.09404469,-3.53905797,-2.29034972 dc.s -1.66275465,-1.30656290,-1.08284020,-9.30579484e-1,-8.21339786e-1,-7.40093589e-1 dc.s -6.77525342e-1,-6.24844432e-1,-5.78791738e-1,-5.37601590e-1,-4.99999970e-1,-4.65028346e-1 dc.s -4.31934267e-1,-4.00099576e-1,-3.68989855e-1,-3.38116914e-1,-3.07007194e-1,-2.75172472e-1 dc.s -2.42078424e-1,-2.07106769e-1,-1.69505134e-1,-1.28315032e-1,-8.22623298e-2,-2.95813959e-2imdct_o_win0 dc.s 3.22824270e-2,-1.07206352e-1,2.01414257e-1,-3.25616330e-1, 5.00000000e-1,-7.67774701e-1 dc.s 1.24122286,-2.33195114,7.74415016,8.45125675,-3.03905797,1.94832957 dc.s -1.47488141,1.20710671,-1.03272307,9.08520997e-1,-8.14313114e-1,7.39389181e-1 dc.s -6.77525342e-1,6.24844432e-1,-5.78791738e-1,5.37601590e-1,-4.99999970e-1,4.65028346e-1 dc.s -4.31934267e-1,4.00099576e-1,-3.68989855e-1,3.38116914e-1,-3.07007194e-1,2.75172472e-1 dc.s -2.42078424e-1,2.07106769e-1,-1.69505134e-1,1.28315032e-1,-8.22623298e-2,2.95813959e-2imdct_o_win1 dc.s 3.22824270e-2,-1.07206352e-1,2.01414257e-1,-3.25616330e-1, 5.00000000e-1,-7.67774701e-1 dc.s 1.24122286,-2.33195114,7.74415016,8.45125675,-3.03905797,1.94832957 dc.s -1.47488141,1.20710671,-1.03272307,9.08520997e-1,-8.14313114e-1,7.39389181e-1 dc.s -6.78170800e-1,6.30236149e-1,-5.92844486e-1,5.63690960e-1,-5.41196048e-1,5.24264514e-1 dc.s -5.07758319e-1,4.65925813e-1,-3.97054553e-1,3.04670691e-1,-1.92992792e-1,6.68476522e-2 dc.s 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000imdct_o_win2 dc.s 1.07206352e-1, -5.00000000e-1,2.33195114,3.03905797,-1.20710671,8.14313114e-1 dc.s -6.24844432e-1,4.99999970e-1,-4.00099576e-1,3.07007194e-1,-2.07106769e-1,8.22623298e-2imdct_o_win3 dc.s 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000 dc.s 3.01530272e-1,-1.46592581,6.97810602,9.09404469,-3.53905797,2.29034972 dc.s -1.66275465,1.30656290,-1.08284020,9.30579484e-1,-8.21339786e-1,7.40093589e-1 dc.s -6.77525342e-1,6.24844432e-1,-5.78791738e-1,5.37601590e-1,-4.99999970e-1,4.65028346e-1 dc.s -4.31934267e-1,4.00099576e-1,-3.68989855e-1,3.38116914e-1,-3.07007194e-1,2.75172472e-1 dc.s -2.42078424e-1,2.07106769e-1,-1.69505134e-1,1.28315032e-1,-8.22623298e-2,2.95813959e-2imdct_e_win dc.l imdct_e_win0 dc.l imdct_e_win1 dc.l imdct_e_win2 dc.l imdct_e_win3imdct_o_win dc.l imdct_o_win0 dc.l imdct_o_win1 dc.l imdct_o_win2 dc.l imdct_o_win3 END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -