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

📄 mpegimdf.a

📁 Application (fix point) for playing MP3 data on embedded systems. mp3play is designed to be able to
💻 A
📖 第 1 页 / 共 3 页
字号:
; CM0 i,<cos>,<reg>CM0            MACRO               GET_I0   \1,\3               MULI     \2,\3               ENDM; Compute CM( I1(i), <cos> ) -> <reg>; CM1 i,<cos>,<reg>CM1            MACRO               GET_I1   \1,\3               MULI     \2,\3               ENDM; Multiply and Add input even samples; fp0 is modified; ADCM0 <i>,<cos>,<reg>ADCM0          MACRO               CM0      \1,\2,fp0               ADDR     fp0,\3               ENDM; Multiply and Add input odd samples; fp0 is modified; ADCM1 <i>,<cos>,<reg>ADCM1          MACRO               CM1      \1,\2,fp0               ADDR     fp0,\3               ENDM; Multiply and Sub input even samples; fp0 is modified; SUCM0 <i>,<cos>,<reg>SUCM0          MACRO               CM0      \1,\2,fp0               SUBR     fp0,\3               ENDM; Multiply and Sub input odd samples; fp0 is modified; SUCM1 <i>,<cos>,<reg>SUCM1          MACRO               CM1      \1,\2,fp0               SUBR     fp0,\3               ENDM; Set a value to out block; SET_OUT <i>,<reg>SET_OUT        MACRO               MOVM     \2,32*DSIZE*\1(a1)               ENDM; Set a value to previous block; SET_PREV <i>,<reg>SET_PREV       MACRO               MOVM     \2,DSIZE*\1(a3)               ENDM; Store output pair; uses fp0 & fp1 (sum0 & sum1); fp0..fp2 are modified; ST_PAIR <v>ST_PAIR        MACRO               MOVR     fp0,fp2               ADDR     fp1,fp2 ; fp2 = tmp = sum0 + sum1               SUBR     fp1,fp0 ; fp0 = sum0 - sum1               MOVR     fp0,fp1               ; ts[SBLIMIT*(8-(v))] = prev[8-(v)] + WIN_MULT( sum0, 8-(v) )               MULM     WSIZE*8-WSIZE*\1(a2),fp1               ADDM     DSIZE*8-DSIZE*\1(a3),fp1               MOVM     fp1,32*DSIZE*8-32*DSIZE*\1(a1)               ; prev[8-(v)] = WIN_MULT( tmp, 26-(v) )               MOVR     fp2,fp1               MULM     WSIZE*26-WSIZE*\1(a2),fp1               MOVM     fp1,DSIZE*8-DSIZE*\1(a3)               ; ts[SBLIMIT*(9+(v))] = prev[9+(v)] + WIN_MULT( sum0, 9+(v) )               MULM     WSIZE*9+WSIZE*\1(a2),fp0               ADDM     DSIZE*9+DSIZE*\1(a3),fp0               MOVM     fp0,32*DSIZE*9+32*DSIZE*\1(a1)               ; prev[9+(v)] = WIN_MULT( tmp, 27+(v) )               MULM     WSIZE*27+WSIZE*\1(a2),fp2               MOVM     fp2,DSIZE*9+DSIZE*\1(a3)               ENDM; Store low output; uses fp4..fp7 (tmp1a..tmp2b); fp0..fp2 are modified; ST1 <cost36>, <v>ST1            MACRO               MOVR     fp4,fp0               ADDR     fp6,fp0 ; fp0 = sum0 = tmp1a + tmp2a               MOVR     fp5,fp1               ADDR     fp7,fp1               MULI     \1,fp1 ; fp1 = sum1 = T36_MULT( tmp1b + tmp2b, v )               ST_PAIR  \2               ENDM; Store high output; uses fp4..fp7 (tmp1a..tmp2b); fp0..fp2 are modified; ST2 <cost36>, <v>ST2            MACRO               MOVR     fp6,fp0               SUBR     fp4,fp0 ; fp0 = sum0 = tmp2a - tmp1a               MOVR     fp7,fp1               SUBR     fp5,fp1               MULI     \1,fp1 ; fp1 = sum1 = T36_MULT( tmp2b - tmp1b, v )               ST_PAIR  \2               ENDM; Add inputs; ADD_IN <i1>,<i2> ie <i1> + <i2> -> <i1>ADD_IN         MACRO               MOVM     \1*SSIZE(a0),fp0               ADDM     \2*SSIZE(a0),fp0               MOVM     fp0,\1*SSIZE(a0)               ENDM;;              IMDCT for Long blocks;;              a0: input  array   (float *);              a1: output out     (float *);              a2: window array   (float *);              a3: prev block     (float *)imdct_l; THERE IS A BUG IN GENAM; BAD HANDLE OF FLOATING POINT CONTANTS !!!; 0.5 is coded as 0.05 !!!;               MOVM     #0.5019099188,fp0;               MOVM     #5.019099188e-1,fp0;               MOVM     #0.05019099188,fp0;               MOVM     #5.019099188e-2,fp0;               MOVM     #5.019099188,fp0               link     a6,#-4*4    ; need 4 floats               lea      -4*4(a6),a4 ; ta33..tb66 needs 4 floats               ADD_IN   17,16 ; in[17] += in[16]               ADD_IN   16,15               ADD_IN   15,14               ADD_IN   14,13               ADD_IN   13,12               ADD_IN   12,11               ADD_IN   11,10               ADD_IN   10,9               ADD_IN   9,8               ADD_IN   8,7               ADD_IN   7,6               ADD_IN   6,5               ADD_IN   5,4               ADD_IN   4,3               ADD_IN   3,2               ADD_IN   2,1               ADD_IN   1,0               ADD_IN   17,15               ADD_IN   15,13               ADD_IN   13,11               ADD_IN   11,9               ADD_IN   9,7               ADD_IN   7,5               ADD_IN   5,3               ADD_IN   3,1               ; Calculate ta33, ta66, tb33 & tb66               ;   x(a4) -> 0     1     2      3               ;               CM0      3,8.660254038e-1,fp0               MOVM     fp0,0*TSIZE(a4)               CM0      6,5e-1,fp0               MOVM     fp0,1*TSIZE(a4)               CM1      3,8.660254038e-1,fp0               MOVM     fp0,2*TSIZE(a4)               CM1      6,5e-1,fp0               MOVM     fp0,3*TSIZE(a4)               ; STEP 1               ;               ; fp4 = tmp1a = CF( CM( I0(1), 1 ) + ta33 + CM( I0(5), 5 ) + CM( I0(7), 7 ) )               MOVM     0*TSIZE(a4),fp4               ADCM0    1,9.848077530e-1,fp4               ADCM0    5,6.427876097e-1,fp4               ADCM0    7,3.420201433e-1,fp4               ; fp5 = tmp1b = CF( CM( I1(1), 1 ) + tb33 + CM( I1(5), 5 ) + CM( I1(7), 7 ) )               MOVM     2*TSIZE(a4),fp5               ADCM1    1,9.848077530e-1,fp5               ADCM1    5,6.427876097e-1,fp5               ADCM1    7,3.420201433e-1,fp5               ; fp6 = tmp2a = CF( CM1( I0(0) ) + CM( I0(2), 2 ) + CM( I0(4), 4 ) + ta66 + CM( I0(8), 8 ) )               MOVM     1*TSIZE(a4),fp6               ADD_I0   0,fp6               ADCM0    2,9.396926208e-1,fp6               ADCM0    4,7.660444431e-1,fp6               ADCM0    8,1.736481777e-1,fp6               ; fp7 = tmp2b = CF( CM1( I1(0) ) + CM( I1(2), 2 ) + CM( I1(4), 4 ) + tb66 + CM( I1(8), 8 ) )               MOVM     3*TSIZE(a4),fp7               ADD_I1   0,fp7               ADCM1    2,9.396926208e-1,fp7               ADCM1    4,7.660444431e-1,fp7               ADCM1    8,1.736481777e-1,fp7               ;               ST1      5.019099188e-1,0 ; COST36_0               ST2      5.736856623,8  ; COST36_8               ; STEP 2               ;               ; fp4 = tmp1a = CF( CM( I0(1) - I0(5) - I0(7), 3 ) )               GET_I0   1,fp4               SUB_I0   5,fp4               SUB_I0   7,fp4               MULI     8.660254038e-1,fp4               ; fp5 = tmp1b = CF( CM( I1(1) - I1(5) - I1(7), 3 ) )               GET_I1   1,fp5               SUB_I1   5,fp5               SUB_I1   7,fp5               MULI     8.660254038e-1,fp5               ; fp6 = tmp2a = CF( CM( I0(2) - I0(4) - I0(8), 6 ) + CM1( I0(0) - I0(6) ) )               GET_I0   2,fp6               SUB_I0   4,fp6               SUB_I0   8,fp6               MULI     5e-1,fp6               ADD_I0   0,fp6               SUB_I0   6,fp6               ; fp7 = tmp2b = CF( CM( I1(2) - I1(4) - I1(8), 6 ) + CM1( I1(0) - I1(6) ) )               GET_I1   2,fp7               SUB_I1   4,fp7               SUB_I1   8,fp7               MULI     5e-1,fp7               ADD_I1   0,fp7               SUB_I1   6,fp7               ;               ST1      5.176380902e-1,1 ; COST36_1               ST2      1.931851653,7  ; COST36_7               ; STEP 3               ;               ; fp4 = tmp1a = CF( CM( I0(1), 5 ) - ta33 - CM( I0(5), 7 ) + CM( I0(7), 1 ) )               CM0      1,6.427876097e-1,fp4               SUBM     0*TSIZE(a4),fp4               SUCM0    5,3.420201433e-1,fp4               ADCM0    7,9.848077530e-1,fp4               ; fp5 = tmp1b = CF( CM( I1(1), 5 ) - tb33 - CM( I1(5), 7 ) + CM( I1(7), 1 ) )               CM1      1,6.427876097e-1,fp5               SUBM     2*TSIZE(a4),fp5               SUCM1    5,3.420201433e-1,fp5               ADCM1    7,9.848077530e-1,fp5               ; fp6 = tmp2a = CF( CM1( I0(0) ) - CM( I0(2), 8 ) - CM( I0(4), 2 ) + ta66 + CM( I0(8), 4 ) )               GET_I0   0,fp6               SUCM0    2,1.736481777e-1,fp6               SUCM0    4,9.396926208e-1,fp6               ADDM     1*TSIZE(a4),fp6               ADCM0    8,7.660444431e-1,fp6               ; fp7 = tmp2b = CF( CM1( I1(0) ) - CM( I1(2), 8 ) - CM( I1(4), 2 ) + tb66 + CM( I1(8), 4 ) )               GET_I1   0,fp7               SUCM1    2,1.736481777e-1,fp7               SUCM1    4,9.396926208e-1,fp7               ADDM     3*TSIZE(a4),fp7               ADCM1    8,7.660444431e-1,fp7               ;               ST1      5.516889595e-1,2 ; COST36_2               ST2      1.183100792,6  ; COST36_6               ; STEP 4               ;               ; fp4 = tmp1a = CF( CM( I0(1), 7 ) - ta33 + CM( I0(5), 1 ) - CM( I0(7), 5 ) )               CM0      1,3.420201433e-1,fp4               SUBM     0*TSIZE(a4),fp4               ADCM0    5,9.848077530e-1,fp4               SUCM0    7,6.427876097e-1,fp4               ; fp5 = tmp1b = CF( CM( I1(1), 7 ) - tb33 + CM( I1(5), 1 ) - CM( I1(7), 5 ) )               CM1      1,3.420201433e-1,fp5               SUBM     2*TSIZE(a4),fp5               ADCM1    5,9.848077530e-1,fp5               SUCM1    7,6.427876097e-1,fp5               ; fp6 = tmp2a = CF( CM1( I0(0) ) - CM( I0(2), 4 ) + CM( I0(4), 8 ) + ta66 - CM( I0(8), 2 ) )               GET_I0   0,fp6               SUCM0    2,7.660444431e-1,fp6               ADCM0    4,1.736481777e-1,fp6               ADDM     1*TSIZE(a4),fp6               SUCM0    8,9.396926208e-1,fp6               ; fp7 = tmp2b = CF( CM1( I1(0) ) - CM( I1(2), 4 ) + CM( I1(4), 8 ) + tb66 - CM( I1(8), 2 ) )               GET_I1   0,fp7               SUCM1    2,7.660444431e-1,fp7               ADCM1    4,1.736481777e-1,fp7               ADDM     3*TSIZE(a4),fp7               SUCM1    8,9.396926208e-1,fp7               ;               ST1      6.103872944e-1,3 ; COST36_3               ST2      8.717233978e-1,5 ; COST36_5               ; STEP 5               ;               ; sum0 =  CF( CM1( I0(0) - I0(2) + I0(4) - I0(6) + I0(8) ) )               GET_I0   0,fp0               SUB_I0   2,fp0               ADD_I0   4,fp0               SUB_I0   6,fp0               ADD_I0   8,fp0               ; sum1 = T36_MULT( CF( CM1( I1(0) - I1(2) + I1(4) - I1(6) + I1(8) ) ), 4  )               GET_I1   0,fp1               SUB_I1   2,fp1               ADD_I1   4,fp1               SUB_I1   6,fp1               ADD_I1   8,fp1               MULI     7.071067812e-1,fp1 ; COST36_4               ST_PAIR  4               unlk     a6               rts; COS6_x = cos( pi / 6 * x )COS6_1         fequ     8.660254038e-1COS6_2         fequ     5e-1; COST36_x = 0.5 / cos( pi * (2x+1) / 12 )COST12_0       fequ     5.176380902e-1COST12_1       fequ     7.071067812e-1COST12_2       fequ     1.931851653

⌨️ 快捷键说明

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