📄 mpegsubf.a
字号:
MOVM (ps1)+,fp4 FF4_MUL fp1,fp2,fp3,fp4 lea -16*4(a6),ps1 ; ps1=@pp(0) ; #1 lea -32*4(a6),pd1 ; pd1=@p(0) ; #1 MOVM #7.0710678118655e-1,fp3 moveq.l #8-1,d4fast_filter_s2 MOVM (ps1)+,fp1 MOVM (ps1)+,fp2 FF2_MUL fp1,fp2,fp3 dbra d4,fast_filter_s2 rts;; GET_P <index> <dest ea>; copy p[ index ] into a destination <ea>; p is ps1;GET_P MACRO MOVM \1*TSIZE(ps1),\2 ENDM;; ADD_P <index> <dest ea>; add p[ index ] to a destination <ea>; p is ps1;ADD_P MACRO ADDM \1*TSIZE(ps1),\2 ENDM;; SET_S0 <index> <src ea>; copy a source <ea> into s0[ index ]; s0 is a1;SET_S0 MACRO MOVM \2,\1*DSIZE*16(a1) ENDM;; SET_S1 <index> <src ea>; copy a source <ea> into s1[ index ]; s1 is a2;SET_S1 MACRO MOVM \2,\1*DSIZE*16(a2) ENDM;; SET_S0_P <index> <src reg>; copy <reg> into s0[ index ]; copy -<reg> into s0[ 32-index ]; s0 is a1; <reg> is modified;SET_S0_P MACRO MOVM \2,\1*DSIZE*16(a1) NEGR \2 MOVM \2,-\1*DSIZE*16+32*DSIZE*16(a1) ENDM;; SET_S1_P <index> <src reg>; copy -<reg> into s1[ index ]; copy -<reg> into s1[ 32-index ]; s1 is a2; <reg> is modified;SET_S1_P MACRO NEGR \2 MOVM \2,\1*DSIZE*16(a2) MOVM \2,-\1*DSIZE*16+32*DSIZE*16(a2) ENDM; Apply the FAST synthesis filter to a sub band; Generate full frequency sample;; a0: bandPtr (=fraction) (float *); a1: out_filter_buffer 0 (float *); a2: out_filter_buffer 1 (float *); d0.w: freq_div ; #1;; registers allocation: d6=MUL_SHIFT;@MPEGSUBF_filter_band_MPEGSUBF_filter_band movem.l d2-d7/a2-a6,-(sp) fmovem.x fp0-fp7,-(sp) move.w d0,d7 ; #1 link a6,#-32*4 ; #1 need of 2*16 longs move.l a0,ps1 ; ps1=fraction(0) lea 32*SSIZE(ps1),ps2 ; ps2=fraction(32) lea -32*4(a6),pd1 ; pd1=@p(0) ; #1; move.w freq_div,d0; cmp.w #4,d0 cmp.w #4,d7 ; #1 bne filter_band1 ; Filter only 1/4 freq moveq.l #8-1,d2filter_band_q1 ; p(i=0..7) = f(i) move.l (ps1)+,(pd1)+ ; FPU Version -> Floats on both sides dbra d2,filter_band_q1 lea -32*4(a6),ps1 ; ps1=@p(0) ; #1 lea 8*TSIZE(ps1),ps2 ; ps2=@p(8) lea -16*4(a6),pd1 ; pd1=@pp(0) ; #1 FFF_MUL 5.0979557910416e-1,4 ; pp(i=0..3) = p(i) + p(7-i) FFF_MUL 6.0134488693505e-1,4 ; pp(i=4..7) = COSx*[p(i) - p(7-i)] FFF_MUL 8.9997622313642e-1,4 FFF_MUL 2.56291544774151,4 lea -16*4(a6),ps1 ; ps1=@pp(0) ; #1 lea -32*4(a6),pd1 ; pd1=@p(0) ; #1 MOVM (ps1)+,fp1 ; get pp0..pp3 MOVM (ps1)+,fp2 MOVM (ps1)+,fp3 MOVM (ps1)+,fp4 FF4_MUL fp1,fp2,fp3,fp4 MOVM (ps1)+,fp1 ; get pp4..pp7 MOVM (ps1)+,fp2 MOVM (ps1)+,fp3 MOVM (ps1)+,fp4 FF4_MUL fp1,fp2,fp3,fp4 lea -32*4(a6),ps1 ; ps1=@p(0) ; #1 lea -32*4(a6),pd1 ; pd1=@p(0) ; #1 MOVM #7.0710678118655e-1,fp3 moveq.l #4-1,d4fast_filter_q2 MOVM (ps1)+,fp1 MOVM (ps1)+,fp2 FF2_MUL fp1,fp2,fp3 dbra d4,fast_filter_q2 lea -32*4(a6),ps1 ; ps1=@p(0) ; #1 GET_P 1,fp1 SET_S0 0,fp1 NEGR fp1 SET_S1 0,fp1 GET_P 5,fp1 ADD_P 7,fp1 SET_S0_P 4,fp1 GET_P 3,fp1 SET_S0_P 8,fp1 GET_P 7,fp1 SET_S0_P 12,fp1; SET_S0 16,#0 clr.l 16*DSIZE*16(a1) GET_P 6,fp3 ADD_P 7,fp3 MOVR fp3,fp4 ADD_P 5,fp4 SET_S1_P 4,fp4 GET_P 2,fp4 ADD_P 3,fp4 SET_S1_P 8,fp4 MOVR fp3,fp4 ADD_P 4,fp4 SET_S1_P 12,fp4 GET_P 0,fp4 NEGR fp4 SET_S1 16,fp4 bra filter_band9filter_band1; cmp.w #2,d0 cmp.w #2,d7 ; #1 bne filter_band2 ; Filter only 1/2 freq moveq.l #16-1,d2filter_band_h1 ; p(i=0..15) = f(i); WARNING whith integer: ps1 is w and pd1 is l move.l (ps1)+,(pd1)+ dbra d2,filter_band_h1 bra filter_band3filter_band2 ; Filter full freq moveq.l #16-1,d2filter_band_f1 ; p(i=0..15) = f(i) + f(31-i) MOVM (ps1)+,fp0 ADDM -(ps2),fp0 MOVM fp0,(pd1)+ dbra d2,filter_band_f1filter_band3 bsr fast_filter_sub lea -32*4(a6),ps1 ; ps1=@p(0) ; #1 GET_P 13,fp0 ADD_P 15,fp0 GET_P 1,fp1 SET_S0 0,fp1 NEGR fp1 SET_S1 0,fp1 MOVR fp0,fp1 ADD_P 9,fp1 SET_S0_P 2,fp1 GET_P 5,fp1 ADD_P 7,fp1 SET_S0_P 4,fp1 MOVR fp0,fp1 ADD_P 11,fp1 SET_S0_P 6,fp1 GET_P 3,fp1 SET_S0_P 8,fp1 GET_P 11,fp1 ADD_P 15,fp1 SET_S0_P 10,fp1 GET_P 7,fp1 SET_S0_P 12,fp1 GET_P 15,fp1 SET_S0_P 14,fp1; SET_S0 16,#0 clr.l 16*DSIZE*16(a1) ADD_P 14,fp0 GET_P 12,fp1 ADD_P 14,fp1 ADD_P 15,fp1 GET_P 10,fp2 ADD_P 11,fp2 GET_P 6,fp3 ADD_P 7,fp3 MOVR fp0,fp4 ADD_P 9,fp4 SET_S1_P 2,fp4 MOVR fp3,fp4 ADD_P 5,fp4 SET_S1_P 4,fp4 MOVR fp0,fp4 ADDR fp2,fp4 SET_S1_P 6,fp4 GET_P 2,fp4 ADD_P 3,fp4 SET_S1_P 8,fp4 MOVR fp1,fp4 ADDR fp2,fp4 SET_S1_P 10,fp4 MOVR fp3,fp4 ADD_P 4,fp4 SET_S1_P 12,fp4 MOVR fp1,fp4 ADD_P 8,fp4 SET_S1_P 14,fp4 GET_P 0,fp4 NEGR fp4 SET_S1 16,fp4; move.w freq_div,d0; cmp.w #1,d0 cmp.w #1,d7 ; #1 bne filter_band9 move.l a0,ps1 ; ps1=fraction(0) lea 32*SSIZE(ps1),ps2 ; ps2=fraction(32) lea -32*4(a6),pd1 ; pd1=@p(0) ; #1 lea filter_cos64,a0 moveq.l #16-1,d2filter_band_f2 ; p(i=0..15) = COSx*[f(i) - f(31-i)] MOVM (ps1)+,fp0 MOVM -(ps2),fp1 SUBR fp1,fp0 MULM (a0)+,fp0 MOVM fp0,(pd1)+ dbra d2,filter_band_f2 bsr fast_filter_sub lea -32*4(a6),ps1 ; ps1=@p(0) ; #1 GET_P 13,fp0 ADD_P 15,fp0 GET_P 11,fp1 ADD_P 15,fp1 GET_P 5,fp2 ADD_P 7,fp2 MOVR fp0,fp3 ADD_P 9,fp3 MOVR fp3,fp4 ADD_P 1,fp4 SET_S0_P 1,fp4 MOVR fp2,fp4 ADDR fp3,fp4 SET_S0_P 3,fp4 MOVR fp0,fp3 ADD_P 11,fp3 MOVR fp3,fp4 ADDR fp2,fp4 SET_S0_P 5,fp4 MOVR fp3,fp4 ADD_P 3,fp4 SET_S0_P 7,fp4 MOVR fp1,fp4 ADD_P 3,fp4 SET_S0_P 9,fp4 MOVR fp1,fp4 ADD_P 7,fp4 SET_S0_P 11,fp4 GET_P 7,fp4 ADD_P 15,fp4 SET_S0_P 13,fp4 GET_P 15,fp4 SET_S0_P 15,fp4 ADD_P 14,fp0 GET_P 12,fp1 ADD_P 14,fp1 ADD_P 15,fp1 GET_P 10,fp2 ADD_P 11,fp2 GET_P 6,fp3 ADD_P 7,fp3 GET_P 1,fp4 ADD_P 9,fp4 ADDR fp0,fp4 SET_S1_P 1,fp4 GET_P 5,fp5 ADDR fp3,fp5 ADDR fp0,fp5 GET_P 9,fp4 ADDR fp5,fp4 SET_S1_P 3,fp4 MOVR fp5,fp4 ADDR fp2,fp4 SET_S1_P 5,fp4 GET_P 2,fp5 ADD_P 3,fp5 ADDR fp2,fp5 MOVR fp0,fp4 ADDR fp5,fp4 SET_S1_P 7,fp4 MOVR fp1,fp4 ADDR fp5,fp4 SET_S1_P 9,fp4 GET_P 4,fp5 ADDR fp3,fp5 ADDR fp1,fp5 MOVR fp2,fp4 ADDR fp5,fp4 SET_S1_P 11,fp4 GET_P 8,fp4 ADDR fp5,fp4 SET_S1_P 13,fp4 GET_P 0,fp4 ADD_P 8,fp4 ADDR fp1,fp4 SET_S1_P 15,fp4filter_band9 unlk a6 ; #1 fmovem.x (sp)+,fp0-fp7 movem.l (sp)+,d2-d7/a2-a6 rts section ASMCODE,codeWINDOW_CLIP equ 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -