📄 mpegsubb.a
字号:
movem.l (ps1)+,d1-d4 ; get pp0..pp3 FF4_MUL d1,d2,d3,d4 movem.l (ps1)+,d1-d4 ; get pp4..pp7 FF4_MUL d1,d2,d3,d4; lea filter_p,ps1 ; ps1=@p(0) lea -32*4(a6),ps1 ; ps1=@p(0); lea filter_p,pd1 ; pd1=@p(0) lea -32*4(a6),pd1 ; pd1=@p(0) move.l #COS1_4,d3 moveq.w #4-1,d4fast_filter_q2 movem.l (ps1)+,d1-d2 FF2_MUL d1,d2,d3 dbra d4,fast_filter_q2; lea filter_p,ps1 ; ps1=@p(0) lea -32*4(a6),ps1 ; ps1=@p(0) GET_P 1,d1 SET_S0 0,d1 neg.l d1 SET_S1 0,d1 GET_P 5,d1 ADD_P 7,d1 SET_S0_P 4,d1 GET_P 3,d1 SET_S0_P 8,d1 GET_P 7,d1 SET_S0_P 12,d1 SET_S0 16,#0 GET_P 6,d3 ADD_P 7,d3 move.l d3,d4 ADD_P 5,d4 SET_S1_P 4,d4 GET_P 2,d4 ADD_P 3,d4 SET_S1_P 8,d4 move.l d3,d4 ADD_P 4,d4 SET_S1_P 12,d4 GET_P 0,d4 neg.l d4 SET_S1 16,d4 bra filter_band9filter_band1; cmp.w #2,d0 cmp.w #2,d7 ; #2 bne filter_band2 ; Filter only 1/2 freq moveq.w #16-1,d2filter_band_h1 ; p(i=0..15) = f(i) move.w (ps1)+,d0 ext.l d0 move.l d0,(pd1)+ dbra d2,filter_band_h1 bra filter_band3filter_band2 ; Filter full freq moveq.w #16-1,d2filter_band_f1 ; p(i=0..15) = f(i) + f(31-i) move.w (ps1)+,d0 move.w -(ps2),d1 ext.l d0 ext.l d1 add.l d0,d1 move.l d1,(pd1)+ dbra d2,filter_band_f1filter_band3 bsr fast_filter_sub; lea filter_p,ps1 ; ps1=@p(0) lea -32*4(a6),ps1 ; ps1=@p(0) GET_P 13,d0 ADD_P 15,d0 GET_P 1,d1 SET_S0 0,d1 neg.l d1 SET_S1 0,d1 move.l d0,d1 ADD_P 9,d1 SET_S0_P 2,d1 GET_P 5,d1 ADD_P 7,d1 SET_S0_P 4,d1 move.l d0,d1 ADD_P 11,d1 SET_S0_P 6,d1 GET_P 3,d1 SET_S0_P 8,d1 GET_P 11,d1 ADD_P 15,d1 SET_S0_P 10,d1 GET_P 7,d1 SET_S0_P 12,d1 GET_P 15,d1 SET_S0_P 14,d1 SET_S0 16,#0 ADD_P 14,d0 GET_P 12,d1 ADD_P 14,d1 ADD_P 15,d1 GET_P 10,d2 ADD_P 11,d2 GET_P 6,d3 ADD_P 7,d3 move.l d0,d4 ADD_P 9,d4 SET_S1_P 2,d4 move.l d3,d4 ADD_P 5,d4 SET_S1_P 4,d4 move.l d0,d4 add.l d2,d4 SET_S1_P 6,d4 GET_P 2,d4 ADD_P 3,d4 SET_S1_P 8,d4 move.l d1,d4 add.l d2,d4 SET_S1_P 10,d4 move.l d3,d4 ADD_P 4,d4 SET_S1_P 12,d4 move.l d1,d4 ADD_P 8,d4 SET_S1_P 14,d4 GET_P 0,d4 neg.l d4 SET_S1 16,d4; move.w freq_div,d0; cmp.w #1,d0 cmp.w #1,d7 ; #2 bne filter_band9 move.l a0,ps1 ; ps1=fraction(0) lea 32*2(ps1),ps2 ; ps2=fraction(32); lea filter_p,pd1 ; pd1=@p(0) lea -32*4(a6),pd1 ; pd1=@p(0) lea filter_cos64,a0 moveq.w #16-1,d2filter_band_f2 ; p(i=0..15) = COSx*[f(i) - f(31-i)] move.w (ps1)+,d0 move.w -(ps2),d1 ext.l d0 ext.l d1 sub.l d1,d0 MUL32 (a0)+,d0 move.l d0,(pd1)+ dbra d2,filter_band_f2 bsr fast_filter_sub; lea filter_p,ps1 ; ps1=@p(0) lea -32*4(a6),ps1 ; ps1=@p(0) GET_P 13,d0 ADD_P 15,d0 GET_P 11,d1 ADD_P 15,d1 GET_P 5,d2 ADD_P 7,d2 move.l d0,d3 ADD_P 9,d3 move.l d3,d4 ADD_P 1,d4 SET_S0_P 1,d4 move.l d2,d4 add.l d3,d4 SET_S0_P 3,d4 move.l d0,d3 ADD_P 11,d3 move.l d3,d4 add.l d2,d4 SET_S0_P 5,d4 move.l d3,d4 ADD_P 3,d4 SET_S0_P 7,d4 move.l d1,d4 ADD_P 3,d4 SET_S0_P 9,d4 move.l d1,d4 ADD_P 7,d4 SET_S0_P 11,d4 GET_P 7,d4 ADD_P 15,d4 SET_S0_P 13,d4 GET_P 15,d4 SET_S0_P 15,d4 ADD_P 14,d0 GET_P 12,d1 ADD_P 14,d1 ADD_P 15,d1 GET_P 10,d2 ADD_P 11,d2 GET_P 6,d3 ADD_P 7,d3 GET_P 1,d4 ADD_P 9,d4 add.l d0,d4 SET_S1_P 1,d4 GET_P 5,d5 add.l d3,d5 add.l d0,d5 GET_P 9,d4 add.l d5,d4 SET_S1_P 3,d4 move.l d5,d4 add.l d2,d4 SET_S1_P 5,d4 GET_P 2,d5 ADD_P 3,d5 add.l d2,d5 move.l d0,d4 add.l d5,d4 SET_S1_P 7,d4 move.l d1,d4 add.l d5,d4 SET_S1_P 9,d4 GET_P 4,d5 add.l d3,d5 add.l d1,d5 move.l d2,d4 add.l d5,d4 SET_S1_P 11,d4 GET_P 8,d4 add.l d5,d4 SET_S1_P 13,d4 GET_P 0,d4 ADD_P 8,d4 add.l d1,d4 SET_S1_P 15,d4filter_band9 unlk a6 ; #2 movem.l (sp)+,d2-d7/a2-a6 rts section ASMDATA,data CNOP 0,4filter_cos64 dc.l COS1_64, COS3_64, COS5_64, COS7_64 dc.l COS9_64, COS11_64, COS13_64, COS15_64 dc.l COS17_64, COS19_64, COS21_64, COS23_64 dc.l COS25_64, COS27_64, COS29_64, COS31_64 ; #2 Begin ; pcm_loops[ freq_div ] = = (32 / freq_div) - 1pcm_loops dc.w 0, 31, 15, 9, 7, 0 ; #2 End; section ASMVARS,bss; CNOP 0,4;filter_p ds.l 16;filter_pp ds.l 16 section ASMCODE,codeWINDOW_CLIP equ 1;; Window a sub band filtered sample;; a0: out_filter_buffer; a1: out_sample_buffer; a2: dewindow (##4); d0: buffer offset; d1.w: w_begin (#2); d2.w: w_width (#2); d3.w: freq_div (#2); d4.l: dew_shift (##4); -> a1 = out_sample_buffer + out_sample_length@MPEGSUBB_window_band_MPEGSUBB_window_band movem.l d2-d7/a2-a6,-(sp); move.w w_begin,d1 ; #2 move.w d2,-(sp) ; #2 move.l a2,a4 ; ##4 lea.l pcm_loops,a2 ; #2 move.w (a2,d3.w*2),d6 ; #2 move.w d3,d2 ; #2; lea.l window_table,a2 ; ##4 External now lea.l (a4,d1.w*2),a2 ; ##4 a2 = &dewindow[ w_begin ] moveq.l #INT_FACTOR-15,d7 ; ##4 External now add.l d4,d7 ; ##4 new scale add.w d0,d1 and.w #15,d1 ; d1 = start move.l a0,a4 ; buf0 = &buf_ptr[ 0 ] lea (a0,d1.w*2),a3 ; buf1 = &buf_ptr[ start ]; move.w w_width,d3 ; #2 move.w (sp),d3 ; #2 add.w d1,d3 cmp.w #16,d3 ble window_band1 moveq.w #16,d3 ; d3 = topwindow_band1 sub.w d1,d3 ; d3 = cnt1; move.w w_width,d4 ; #2 move.w (sp),d4 ; #2 sub.w d3,d4 ; d4 = cnt0; move.w freq_div,d2 ; #2 lsl.w #4,d2 move.w d2,d5 sub.w d3,d5 ; off1 = freq_div*16 - cnt1 ext.l d5 add.l d5,d5 move.l d5,a5 ; a5 = off1 move.w d2,d5 sub.w d4,d5 ; off0 = freq_div*16 - cnt0 ext.l d5 add.l d5,d5 move.l d5,a6 ; a6 = off0; sub.w w_width,d2 ; offd = freq_div*16 - w_width (#2) sub.w (sp),d2 ; offd = freq_div*16 - w_width (#2) ext.l d2 add.l d2,d2; moveq.l #WINDOW_FACTOR+INT_FACTOR-15,d7 ; ##4 External now; move.w pcm_count,d6 ; #2; subq.w #1,d6 ; for DBRA loop ; #2 IFD OLD_WIN ; ##1 subq.w #1,d3 ; for DBRA loop subq.w #1,d4 ; for DBRA loopwindow_band2 clr.l d5 ; d5 = sum move.w d3,d0 ; d0 = cnt1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -