⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mpegsubf.a

📁 uclinux下s3c4510B CPU播放mp3 C程序
💻 A
📖 第 1 页 / 共 3 页
字号:
;------------------------------------------------------------------------------;;   File    :   MPEGSUBF.a;;   Author  :   St閜hane TAVENARD;;   (C) Copyright 1997-1998 St閜hane TAVENARD;       All Rights Reserved;;   #Rev|   Date   |                      Comment;   ----|----------|--------------------------------------------------------;   0   |02/06/1997| Initial revision                                     ST;   1   |01/11/1997| Use link instead of static vars                      ST;   2   |21/06/1998| Use external scaled dewindow now                     ST;;   ------------------------------------------------------------------------;;   MPEG SUBroutines optimized (FPU version) !;   *** WARNING BUG in GENAM -> 0.5 is set as 0.05 !!! ***;;------------------------------------------------------------------------------               XDEF     @MPEGSUBF_antialias               XDEF     _MPEGSUBF_antialias               XDEF     @MPEGSUBF_filter_band               XDEF     _MPEGSUBF_filter_band               XDEF     @MPEGSUBF_window_band               XDEF     _MPEGSUBF_window_band;               XDEF     @MPEGSUBF_config ; #1;               XDEF     _MPEGSUBF_config ; #1SSIZE          equ      4 ; Source size in bytesDSIZE          equ      4 ; Destination size in bytesTSIZE          equ      4 ; Temp data size in bytesWSIZE          equ      4 ; Window data size in bytesps1            equr     a3ps2            equr     a4pd1            equr     a5; pd2            equr     a6 ; #1;;              Filter COS values for fast cosine transform;COS1_64        fequ      0.50060299823520COS3_64        fequ      0.50547095989754COS5_64        fequ      0.51544730992262COS7_64        fequ      0.53104259108978COS9_64        fequ      0.55310389603444COS11_64       fequ      0.58293496820613COS13_64       fequ      0.62250412303566COS15_64       fequ      0.67480834145501COS17_64       fequ      0.74453627100230COS19_64       fequ      0.83934964541553COS21_64       fequ      0.97256823786196COS23_64       fequ      1.16943993343288COS25_64       fequ      1.48416461631417COS27_64       fequ      2.05778100995341COS29_64       fequ      3.40760841846872COS31_64       fequ      10.1900081235480COS1_32        fequ      0.50241928618816COS3_32        fequ      0.52249861493969COS5_32        fequ      0.56694403481636COS7_32        fequ      0.64682178335999COS9_32        fequ      0.78815462345125COS11_32       fequ      1.06067768599035COS13_32       fequ      1.72244709823833COS15_32       fequ      5.10114861868917COS1_16        fequ      0.50979557910416COS3_16        fequ      0.60134488693505COS5_16        fequ      0.89997622313642COS7_16        fequ      2.56291544774151COS1_8         fequ      0.54119610014620COS3_8         fequ      1.30656296487638COS1_4         fequ      0.70710678118655;               section  ASMVARS,bss (#1 suppressed vars);               CNOP     0,4;filter_p       ds.l     16;filter_pp      ds.l     16;               section  ASMVARS,bss;freq_div       ds.w     1  ; 1,2 or 4;output_8bits   ds.w     1  ; 0 if 16 bits output;quality        ds.w     1  ; 0..2 (best);w_begin        ds.w     1  ; start offset for windowing;w_width        ds.w     1  ; #coeff used for windowing;pcm_count      ds.w     1  ; # of samples per subband               section  ASMDATA,data               CNOP     0,4filter_cos64   dc.s     5.0060299823520e-1, 5.0547095989754e-1               dc.s     5.1544730992262e-1, 5.3104259108978e-1               dc.s     5.5310389603444e-1, 5.8293496820613e-1               dc.s     6.2250412303566e-1, 6.7480834145501e-1               dc.s     7.4453627100230e-1, 8.3934964541553e-1               dc.s     9.7256823786196e-1, 1.16943993343288               dc.s     1.48416461631417, 2.05778100995341               dc.s     3.40760841846872, 10.1900081235480               ; #1 Begin               ; pcm_loops[ freq_div ] = = (32 / freq_div) - 1pcm_loops      dc.w     0, 31, 15, 9, 7, 0               ; #1 End               section  ASMCODE,code               ; #1 Begin (suppressed)               IFNE  0;              Configure subband routines;;              d0 = freq_div;              d1 = quality;              d2 = output_8bits;@MPEGSUBF_config_MPEGSUBF_config               movem.l  d2-d7/a2-a6,-(sp)               move.w   d0,freq_div               move.w   d1,quality               move.w   d2,output_8bits               move.w   #32,d3         ; pcm_count for full freq output               cmp.w    #2,d0               beq      init_decode_1               cmp.w    #4,d0               beq      init_decode_2               bra      init_decode_5init_decode_1  move.w   #16,d3         ; pcm_count for half freq output               bra      init_decode_5init_decode_2  moveq.l  #8,d3          ; pcm_count for quarter freq outputinit_decode_5  move.w   d3,pcm_count               moveq.l  #0,d3          ; start offset for windowing               moveq.l  #16,d4         ; #coeff used for windowing               move.w   quality,d2               cmp.b    #2,d2          ; best quality               beq.s    init_decode_6               move.w   #4,d3               moveq.l  #8,d4               cmp.b    #1,d2               beq.s    init_decode_6               move.w   #6,d3               moveq.l  #4,d4init_decode_6  move.w   d3,w_begin               move.w   d4,w_width               movem.l  (sp)+,d2-d7/a2-a6               rts               ENDC               ; #1 End; MOVM <reg>,<ea>; MOVM <ea>,<reg>; Move a value from/to memoryMOVM           MACRO               fmove.s  \1,\2               ENDM; MOVR <reg1>,<reg2>; Move a from register to registerMOVR           MACRO               fmove.x  \1,\2               ENDM; ADDR <reg>,<ea>; Add a register value with <ea>ADDR           MACRO               fadd.x   \1,\2               ENDM; ADDM <mem>,<ea>; Add a memory value with <ea>ADDM           MACRO               fadd.s    \1,\2               ENDM; SUBR <reg>,<ea>; Sub a register value with <ea>SUBR           MACRO               fsub.x   \1,\2               ENDM; SUBM <mem>,<ea>; Sub a memory value with <ea>SUBM           MACRO               fsub.s   \1,\2               ENDM; NEGR <reg>; Negate a registerNEGR           MACRO               fneg.x   \1               ENDM; MULI <imm>,<ea>; Multiply immediate value with <ea>MULI           MACRO               fmul.s   #\1,\2               ENDM; MULR <reg>,<ea>; Multiply a register value with <ea>MULR           MACRO               fmul.x   \1,\2               ENDM; MULM <mem>,<reg>; Multiply a memory value with <reg>MULM           MACRO               fmul.s   \1,\2               ENDM;; ALIAS_U bu,csi,bd,cai,<tmp reg>,<reg>; performs: (bu * csi) - (bd * cai) -> <reg>; <tmp reg> is used for calculation; d6 must be set to ALIAS_BITS;ALIAS_U        MACRO               MOVR     \1,\6               MULI     \2,\6               MOVR     \3,\5               MULI     \4,\5               SUBR     \5,\6               ENDM;; ALIAS_D bd,csi,bu,cai,<tmp reg>,<reg>; performs: (bd * csi) + (bu * cai) -> <reg>; <tmp reg> is used for calculation; d6 must be set to ALIAS_BITS;ALIAS_D        MACRO               MOVR     \1,\6               MULI     \2,\6               MOVR     \3,\5               MULI     \4,\5               ADDR     \5,\6               ENDMbd             equr     a1bu             equr     a2;; ALIAS_B csi,cai; perform 1 alias butterfly; uses fp0..fp3;ALIAS_B        MACRO               MOVM     -(bu),fp2               MOVM     (bd),fp3               ALIAS_U  fp2,\1,fp3,\2,fp0,fp1               MOVM     fp1,(bu)               ALIAS_D  fp3,\1,fp2,\2,fp0,fp1               MOVM     fp1,(bd)+               ENDM; Layer III antialiasing filter;; a0 = sample buffer xr (INT16); d0 = sblimit;@MPEGSUBF_antialias_MPEGSUBF_antialias               movem.l  d2-d7/a2,-(sp)               fmovem.x fp0-fp3,-(sp)               move.w   d0,d7               subq.w   #1,d7               bmi      antialias2               clr.l    d5              ; d5 = i = 0antialias1               add.l    #18,d5          ; i += SSLIMIT               lea      (a0,d5.w*4),bu  ; bu = xr[ i ]               move.l   bu,bd           ; bd = bu               ALIAS_B  8.57492924e-1,-5.14495730e-1               ALIAS_B  8.81741941e-1,-4.71731961e-1               ALIAS_B  9.49628592e-1,-3.13377440e-1               ALIAS_B  9.83314574e-1,-1.81913197e-1               ALIAS_B  9.95517790e-1,-9.4574191e-2               ALIAS_B  9.99160528e-1,-4.0965579e-2               ALIAS_B  9.99899149e-1,-1.4198568e-2               ALIAS_B  9.99993145e-1,-3.699975e-3               dbra     d7,antialias1antialias2               fmovem.x (sp)+,fp0-fp3               movem.l  (sp)+,d2-d7/a2               rtsFFF_MUL        MACRO               MOVM     (ps1)+,fp0               MOVR     fp0,fp1               MOVM     -(ps2),fp2               ADDR     fp2,fp1               MOVM     fp1,(pd1)+               SUBR     fp2,fp0               MULI     \1,fp0               MOVM     fp0,\2*TSIZE-TSIZE(pd1)               ENDM;;              FF4_MUL s1,s2,s3,s4;              s1..s4 must be registers;              fp0, s1, s2 modified;;              s1 + s4 -> (pd1)+;              s2 + s3 -> (pd1)+;              (s1 - s4) * 0.54119610014620 -> (pd1)+;              (s2 - s3) * 1.30656296487638 -> (pd1)+;FF4_MUL        MACRO               MOVR     \1,fp0               ADDR     \4,fp0               MOVM     fp0,(pd1)+               MOVR     \2,fp0               ADDR     \3,fp0               MOVM     fp0,(pd1)+               SUBR     \4,\1               MULI     5.4119610014620e-1,\1               MOVM     \1,(pd1)+               SUBR     \3,\2               MULI     1.30656296487638,\2               MOVM     \2,(pd1)+               ENDM;;              FF2_MUL s1,s2,COSx;              s1..s2, COSx must be registers;              fp0, s1 modified;;              s1 + s2 -> (pd1)+;              (s1 - s2) * COSx -> (pd1)+;FF2_MUL        MACRO               MOVR     \1,fp0               ADDR     \2,fp0               MOVM     fp0,(pd1)+               SUBR     \2,\1               MULR     \3,\1               MOVM     \1,(pd1)+               ENDMfast_filter_sub               lea      -32*4(a6),ps1   ; ps1=@p(0) ; #1               lea      16*TSIZE(ps1),ps2  ; ps2=@p(16)               lea      -16*4(a6),pd1  ; pd1=@pp(0) ; #1               FFF_MUL  5.0241928618816e-1,8      ; pp(i=0..7)  = p(i) + p(15-i)               FFF_MUL  5.2249861493969e-1,8      ; pp(i=8..15) = COSx*[p(i) - p(15-i)]               FFF_MUL  5.6694403481636e-1,8               FFF_MUL  6.4682178335999e-1,8               FFF_MUL  7.8815462345125e-1,8               FFF_MUL  1.06067768599035,8               FFF_MUL  1.72244709823833,8               FFF_MUL  5.10114861868917,8               lea      -16*4(a6),ps1  ; ps1=@pp(0) ; #1               lea      8*TSIZE(ps1),ps2   ; ps2=@pp(8)               lea      -32*4(a6),pd1   ; pd1=@p(0) ; #1               FFF_MUL  5.0979557910416e-1,4      ; p(i=0..3) = pp(i) + pp(7-i)               FFF_MUL  6.0134488693505e-1,4      ; p(i=4..7) = COSx*[pp(i) - pp(7-i)]               FFF_MUL  8.9997622313642e-1,4               FFF_MUL  2.56291544774151,4               lea      4*TSIZE(ps1),ps1   ; ps1=@pp(8)               lea      8*TSIZE(ps1),ps2   ; ps2=@pp(16)               lea      4*TSIZE(pd1),pd1   ; pd1=@p(8)               FFF_MUL  5.0979557910416e-1,4               FFF_MUL  6.0134488693505e-1,4               FFF_MUL  8.9997622313642e-1,4               FFF_MUL  2.56291544774151,4               lea      -32*4(a6),ps1   ; ps1=@p(0) ; #1               lea      -16*4(a6),pd1  ; pd1=@pp(0) ; #1               MOVM     (ps1)+,fp1     ; get p0..p3               MOVM     (ps1)+,fp2               MOVM     (ps1)+,fp3               MOVM     (ps1)+,fp4               FF4_MUL  fp1,fp2,fp3,fp4               MOVM     (ps1)+,fp1     ; get p4..p7               MOVM     (ps1)+,fp2               MOVM     (ps1)+,fp3               MOVM     (ps1)+,fp4               FF4_MUL  fp1,fp2,fp3,fp4               MOVM     (ps1)+,fp1     ; get p8..p11               MOVM     (ps1)+,fp2               MOVM     (ps1)+,fp3               MOVM     (ps1)+,fp4               FF4_MUL  fp1,fp2,fp3,fp4               MOVM     (ps1)+,fp1     ; get p12..p15               MOVM     (ps1)+,fp2               MOVM     (ps1)+,fp3

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -