📄 mpegsubf.a
字号:
;; Window a sub band filtered sample;; a0: out_filter_buffer (float *); a1: out_sample_buffer (float *); a2: dewindow (float *) (##2); d0: buffer offset; d1.w: w_begin (#1); d2.w: w_width (#1); d3.w: freq_div (#1); -> a1 = out_sample_buffer + out_sample_length@MPEGSUBF_window_band_MPEGSUBF_window_band movem.l d2-d7/a2-a6,-(sp) fmovem.x fp0-fp7,-(sp); move.w w_begin,d1 ; #1 move.w d2,-(sp) ; #1 move.l a2,a4 ; ##2 lea.l pcm_loops,a2 ; #1 move.w (a2,d3.w*2),d6 ; #1 move.w d3,d2 ; #1; lea.l window_table,a2 ; #2 Suppressed (external now); lea.l (a2,d1.w*2),a2 ; a2 = &dewindow[ w_begin ] lea.l (a4,d1.w*4),a2 ; ##2 a2 = &dewindow[ w_begin ] 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 ] lea (a0,d1.w*4),a3 ; buf1 = &buf_ptr[ start ]; move.w w_width,d3 ; #1 move.w (sp),d3 ; #1 add.w d1,d3 cmp.w #16,d3 ble window_band1 moveq.l #16,d3 ; d3 = topwindow_band1 sub.w d1,d3 ; d3 = cnt1; move.w w_width,d4 ; #1 move.w (sp),d4 ; #1 sub.w d3,d4 ; d4 = cnt0; move.w freq_div,d2 ; #1 lsl.w #4,d2 move.w d2,d5 sub.w d3,d5 ; off1 = freq_div*16 - cnt1 ext.l d5; add.l d5,d5 lsl.l #2,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 lsl.l #2,d5 move.l d5,a6 ; a6 = off0; sub.w w_width,d2 ; offd = freq_div*16 - w_width ; #1 sub.w (sp),d2 ; offd = freq_div*16 - w_width ; #1 ext.l d2; add.l d2,d2 lsl.l #2,d2; move.w pcm_count,d6 ; #1; subq.w #1,d6 ; for DBRA loop ; #1 IFD OLD_WIN ; ##1 subq.w #1,d3 ; for DBRA loop subq.w #1,d4 ; for DBRA loopwindow_band2; clr.l d5 ; d5 = sum MOVM #0,fp5 move.w d3,d0 ; d0 = cnt1 bmi window_band4window_band3 MOVM (a3)+,fp1 MULM (a2)+,fp1 ADDR fp1,fp5 dbra d0,window_band3window_band4 add.l a5,a3 ; buf1 += off1 move.w d4,d0 ; d0 = cnt0 bmi window_band6window_band5 MOVM (a4)+,fp1 MULM (a2)+,fp1 ADDR fp1,fp5 dbra d0,window_band5window_band6 add.l a6,a4 ; buf0 += off0 add.l d2,a2 ; dewindow += offd; asr.l d7,d5 ; sum >>= (WINDOW_FACTOR+INT_FACTOR-15); MULI 32768,fp5 -> done in dewindow table fmove.l fp5,d5 IFD WINDOW_CLIP cmp.l #-32768,d5 blt window_band4l cmp.l #32767,d5 bgt window_band4hwindow_band4n ENDC move.w d5,(a1)+ dbra d6,window_band2 IFD WINDOW_CLIP bra window_band9window_band4l move.l #-32768,d5 bra.s window_band4nwindow_band4h move.l #32767,d5 bra.s window_band4n ENDCwindow_band9 move.w (sp)+,d2 ; #1 fmovem.x (sp)+,fp0-fp7 movem.l (sp)+,d2-d7/a2-a6 rts ; ##1 Begin ELSE; MULADDWIN {a3|a4}MULADDWIN MACRO MOVM (\1)+,fp1 MULM (a2)+,fp1 ADDR fp1,fp5 ENDM ; WARING GENAM bug in rept & macros ; rept part is moved to END of MACRO ! ;; MULADDN <rept num>,{a3|a4}MULADDN MACRO IFNE \2 REPT \2 MULADDWIN \1 ENDR ENDC ENDM; MULADD0 <rept num>MULADD0 MACRO; clr.l d5 MOVM #0,fp5 MULADDN a3,\1 ENDM; MULADD1 <rept num>MULADD1 MACRO add.l a5,a3 MULADDN a4,\1 ENDM ; CHECKBOUNDS <loop label>CHECKBOUNDS MACRO add.l a6,a4 add.l d2,a2; asr.l d7,d5; MULI 32768,fp5 -> done in dewindow table fmove.l fp5,d5 IFD WINDOW_CLIP cmp.l #-32768,d5 blt .window_bandl cmp.l #32767,d5 bgt .window_bandh.window_bandn ENDC move.w d5,(a1)+ dbra d6,\1 bra window_band9 IFD WINDOW_CLIP bra window_band9.window_bandl move.w #-32768,d5 bra.s .window_bandn.window_bandh move.w #32767,d5 bra.s .window_bandn ENDC ENDM; move.w w_width,d3 ; #1 move.w (sp),d3 ; #1 lea window_q0muls,a0 cmp.w #4,d3 ble window_qmul lea window_q1muls,a0 cmp.w #8,d3 ble window_qmul lea window_q2muls,a0window_qmul move.l (a0,d4.w*4),a0 jmp (a0)window_q2mul0 MULADD0 16 MULADD1 0 CHECKBOUNDS window_q2mul0window_q2mul1 MULADD0 15 MULADD1 1 CHECKBOUNDS window_q2mul1window_q2mul2 MULADD0 14 MULADD1 2 CHECKBOUNDS window_q2mul2window_q2mul3 MULADD0 13 MULADD1 3 CHECKBOUNDS window_q2mul3window_q2mul4 MULADD0 12 MULADD1 4 CHECKBOUNDS window_q2mul4window_q2mul5 MULADD0 11 MULADD1 5 CHECKBOUNDS window_q2mul5window_q2mul6 MULADD0 10 MULADD1 6 CHECKBOUNDS window_q2mul6window_q2mul7 MULADD0 9 MULADD1 7 CHECKBOUNDS window_q2mul7window_q2mul8 MULADD0 8 MULADD1 8 CHECKBOUNDS window_q2mul8window_q2mul9 MULADD0 7 MULADD1 9 CHECKBOUNDS window_q2mul9window_q2mul10 MULADD0 6 MULADD1 10 CHECKBOUNDS window_q2mul10window_q2mul11 MULADD0 5 MULADD1 11 CHECKBOUNDS window_q2mul11window_q2mul12 MULADD0 4 MULADD1 12 CHECKBOUNDS window_q2mul12window_q2mul13 MULADD0 3 MULADD1 13 CHECKBOUNDS window_q2mul13window_q2mul14 MULADD0 2 MULADD1 14 CHECKBOUNDS window_q2mul14window_q2mul15 MULADD0 1 MULADD1 15 CHECKBOUNDS window_q2mul15window_q1mul0 MULADD0 8 MULADD1 0 CHECKBOUNDS window_q1mul0window_q1mul1 MULADD0 7 MULADD1 1 CHECKBOUNDS window_q1mul1window_q1mul2 MULADD0 6 MULADD1 2 CHECKBOUNDS window_q1mul2window_q1mul3 MULADD0 5 MULADD1 3 CHECKBOUNDS window_q1mul3window_q1mul4 MULADD0 4 MULADD1 4 CHECKBOUNDS window_q1mul4window_q1mul5 MULADD0 3 MULADD1 5 CHECKBOUNDS window_q1mul5window_q1mul6 MULADD0 2 MULADD1 6 CHECKBOUNDS window_q1mul6window_q1mul7 MULADD0 1 MULADD1 7 CHECKBOUNDS window_q1mul7window_q0mul0 MULADD0 4 MULADD1 0 CHECKBOUNDS window_q0mul0window_q0mul1 MULADD0 3 MULADD1 1 CHECKBOUNDS window_q0mul1window_q0mul2 MULADD0 2 MULADD1 2 CHECKBOUNDS window_q0mul2window_q0mul3 MULADD0 1 MULADD1 3 CHECKBOUNDS window_q0mul3window_band9 move.w (sp)+,d2 ; #1 fmovem.x (sp)+,fp0-fp7 movem.l (sp)+,d2-d7/a2-a6 rtswindow_q2muls dc.l window_q2mul0, window_q2mul1, window_q2mul2, window_q2mul3 dc.l window_q2mul4, window_q2mul5, window_q2mul6, window_q2mul7 dc.l window_q2mul8, window_q2mul9, window_q2mul10, window_q2mul11 dc.l window_q2mul12, window_q2mul13, window_q2mul14, window_q2mul15window_q1muls dc.l window_q1mul0, window_q1mul1, window_q1mul2, window_q1mul3 dc.l window_q1mul4, window_q1mul5, window_q1mul6, window_q1mul7window_q0muls dc.l window_q0mul0, window_q0mul1, window_q0mul2, window_q0mul3 ENDC ; ##1 End; ##2 Begin (suppressed) IFD OLD_DEW_TABLE section ASM_TABLES,data evenwindow_table dc.s 0.0, -14.5, 106.5, -229.5, 1018.5,-2576.5, 3287.0,-18744.5 dc.s 37519.0,18744.5, 3287.0, 2576.5, 1018.5, 229.5, 106.5, 14.5 dc.s -5e-1, -15.5, 109.0, -259.5, 1000.0,-2758.5, 2979.5,-19668.0 dc.s 37496.0,17820.0, 3567.0, 2394.0, 1031.5, 200.5, 104.0, 13.0 dc.s -5e-1, -17.5, 111.0, -290.5, 976.0,-2939.5, 2644.0,-20588.0 dc.s 37428.0,16895.5, 3820.0, 2212.5, 1040.0, 173.5, 101.0, 12.0 dc.s -5e-1, -19.0, 112.5, -322.5, 946.5,-3118.5, 2280.5,-21503.0 dc.s 37315.0,15973.5, 4046.0, 2031.5, 1043.5, 147.0, 98.0, 10.5 dc.s -5e-1, -20.5, 113.5, -355.5, 911.0,-3294.5, 1888.0,-22410.5 dc.s 37156.5,15056.0, 4246.0, 1852.5, 1042.5, 122.0, 95.0, 9.5 dc.s -5e-1, -22.5, 114.0, -389.5, 869.5,-3467.5, 1467.5,-23308.5 dc.s 36954.0,14144.5, 4420.0, 1675.5, 1037.5, 98.5, 91.5, 8.5 dc.s -5e-1, -24.5, 114.0, -424.0, 822.0,-3635.5, 1018.5,-24195.0 dc.s 36707.5,13241.0, 4569.5, 1502.0, 1028.5, 76.5, 88.0, 8.0 dc.s -1.0, -26.5, 113.5, -459.5, 767.5,-3798.5, 541.0,-25068.5 dc.s 36417.5,12347.0, 4694.5, 1331.5, 1016.0, 55.5, 84.5, 7.0 dc.s -1.0, -29.0, 112.0, -495.5, 707.0,-3955.0, 35.0,-25926.5 dc.s 36084.5,11464.5, 4796.0, 1165.0, 1000.5, 36.0, 80.5, 6.5 dc.s -1.0, -31.5, 110.5, -532.0, 640.0,-4104.5, -499.0,-26767.0 dc.s 35710.0,10594.5, 4875.0, 1003.0, 981.0, 18.0, 77.0, 5.5 dc.s -1.0, -34.0, 107.5, -568.5, 565.5,-4245.5,-1061.0,-27589.0 dc.s 35295.0, 9739.0, 4931.5, 846.0, 959.5, 1.0, 73.5, 5.0 dc.s -1.5, -36.5, 104.0, -605.0, 485.0,-4377.5,-1650.0,-28389.0 dc.s 34839.5, 8899.5, 4967.5, 694.0, 935.0, -14.5, 69.5, 4.5 dc.s -1.5, -39.5, 100.0, -641.5, 397.0,-4499.0,-2266.5,-29166.5 dc.s 34346.0, 8077.5, 4983.0, 547.5, 908.5, -28.5, 66.0, 4.0 dc.s -2.0, -42.5, 94.5, -678.0, 302.5,-4609.5,-2909.0,-29919.0 dc.s 33814.5, 7274.0, 4979.5, 407.0, 879.5, -41.5, 62.5, 3.5 dc.s -2.0, -45.5, 88.5, -714.0, 201.0,-4708.0,-3577.0,-30644.5 dc.s 33247.0, 6490.0, 4958.0, 272.5, 849.0, -53.0, 58.5, 3.5 dc.s -2.5, -48.5, 81.5, -749.0, 92.5,-4792.5,-4270.0,-31342.0 dc.s 32645.0, 5727.5, 4919.0, 144.0, 817.0, -63.5, 55.5, 3.0 dc.s -2.5, -52.0, 73.0, -783.5, -22.5,-4863.5,-4987.5,-32009.5 dc.s 32009.5, 4987.5, 4863.5, 22.5, 783.5, -73.0, 52.0, 2.5 dc.s -3.0, -55.5, 63.5, -817.0, -144.0,-4919.0,-5727.5,-32645.0 dc.s 31342.0, 4270.0, 4792.5, -92.5, 749.0, -81.5, 48.5, 2.5 dc.s -3.5, -58.5, 53.0, -849.0, -272.5,-4958.0,-6490.0,-33247.0 dc.s 30644.5, 3577.0, 4708.0, -201.0, 714.0, -88.5, 45.5, 2.0 dc.s -3.5, -62.5, 41.5, -879.5, -407.0,-4979.5,-7274.0,-33814.5 dc.s 29919.0, 2909.0, 4609.5, -302.5, 678.0, -94.5, 42.5, 2.0 dc.s -4.0, -66.0, 28.5, -908.5, -547.5,-4983.0,-8077.5,-34346.0 dc.s 29166.5, 2266.5, 4499.0, -397.0, 641.5, -100.0, 39.5, 1.5 dc.s -4.5, -69.5, 14.5, -935.0, -694.0,-4967.5,-8899.5,-34839.5 dc.s 28389.0, 1650.0, 4377.5, -485.0, 605.0, -104.0, 36.5, 1.5 dc.s -5.0, -73.5, -1.0, -959.5, -846.0,-4931.5,-9739.0,-35295.0 dc.s 27589.0, 1061.0, 4245.5, -565.5, 568.5, -107.5, 34.0, 1.0 dc.s -5.5, -77.0, -18.0, -981.0,-1003.0,-4875.0,-10594.5,-35710.0 dc.s 26767.0, 499.0, 4104.5, -640.0, 532.0, -110.5, 31.5, 1.0 dc.s -6.5, -80.5, -36.0,-1000.5,-1165.0,-4796.0,-11464.5,-36084.5 dc.s 25926.5, -35.0, 3955.0, -707.0, 495.5, -112.0, 29.0, 1.0 dc.s -7.0, -84.5, -55.5,-1016.0,-1331.5,-4694.5,-12347.0,-36417.5 dc.s 25068.5, -541.0, 3798.5, -767.5, 459.5, -113.5, 26.5, 1.0 dc.s -8.0, -88.0, -76.5,-1028.5,-1502.0,-4569.5,-13241.0,-36707.5 dc.s 24195.0,-1018.5, 3635.5, -822.0, 424.0, -114.0, 24.5, 5e-1 dc.s -8.5, -91.5, -98.5,-1037.5,-1675.5,-4420.0,-14144.5,-36954.0 dc.s 23308.5,-1467.5, 3467.5, -869.5, 389.5, -114.0, 22.5, 5e-1 dc.s -9.5, -95.0, -122.0,-1042.5,-1852.5,-4246.0,-15056.0,-37156.5 dc.s 22410.5,-1888.0, 3294.5, -911.0, 355.5, -113.5, 20.5, 5e-1 dc.s -10.5, -98.0, -147.0,-1043.5,-2031.5,-4046.0,-15973.5,-37315.0 dc.s 21503.0,-2280.5, 3118.5, -946.5, 322.5, -112.5, 19.0, 5e-1 dc.s -12.0, -101.0, -173.5,-1040.0,-2212.5,-3820.0,-16895.5,-37428.0 dc.s 20588.0,-2644.0, 2939.5, -976.0, 290.5, -111.0, 17.5, 5e-1 dc.s -13.0, -104.0, -200.5,-1031.5,-2394.0,-3567.0,-17820.0,-37496.0 dc.s 19668.0,-2979.5, 2758.5,-1000.0, 259.5, -109.0, 15.5, 5e-1 ENDC; ##2 End
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -