📄 decimdct.s
字号:
emad ma0 ,x0y0 ,y0 ,@rp3+s0 ; ma0a<-t[3]*co[7]+prev_a[0], p<- -t[4]*co[8],y0<-co[9]
ernd ma0
eld ma0 ,p ,@rp1+d0,ma0 ;ma0<--t[4]*co[8],save a[0]
esla ma0 ;rescaling
eld p ,@rp2+s0 ;p<-prev_a[4]
emad ma0 ,x0y0 ,x0 ,@rp0+s0,y0 ,@rp3+s0; ma0a<--t[4]*co[8]+prev_a[4], p<- t[4]*co[9],x0<-t[5],y0<-(-co[10])
ernd ma0
eld @rp2+d1 ,ma0 ;save a[4]
eld ma0 ,@rp1+s0 ;ma0<-prev_a[1]
emad ma0 ,x0y0 ,y0 ,@rp3+s0 ; ma0a<-t[4]*co[9]+prev_a[1],p<- -t[5]*co[10],y0<-(-co[11])
ernd ma0
eld ma0 ,p ,@rp1+d0,ma0 ;ma0<--t[5]*co[10],save a[1]
esla ma0 ;rescaling
esla ma0 ;rescaling
eld p ,@rp2+s0 ;p<-prev_a[3]
emad ma0 ,x0y0 ; ma0a<--t[5]*co[10]+prev_a[3], p<- t[5]*co[11]
ernd ma0
eld ma0 ,p ,@rp2+d1,ma0 ;ma0<--t[5]*co[10],save a[3]
esla ma0 ;rescaling
esla ma0 ;rescaling
eld p ,@rp1+s0 ;p<-prev_a[1]
eadd ma0 ,p ;ma0<-t[5]*co[11]+prev_a[1]
ernd ma0
eld @rp1+d0 ,ma0 ;save a[2]
erpn rp1 ,#11
eld b ,rp1
eld c ,rpd1.index_LRPxBackupBuffer ;ptr_imdctInputBuffer[i]
eld rp0 ,c
erps rp0+s0 ;rp0 += 1
eld c ,rp0
eld rpd1.index_LRPxBackupBuffer ,c ;ptr_imdctInputBuffer[i]
cmp eq ,r6 ,#0
brfd DecodingImdctShortWindowLoop
dec r6
erpn rp0 ,#-3 ;rp0 points sb*18
eld rp1 ,#Area_imdctTempBuffer2
eld rp2 ,#Area_imdctTempBuffer2+12
eld c ,rpd1.index_LptrImdctprevious
eld rp3 ,c
esd3 s0 ,#0
esd0 d0 ,#1
ld r6 ,#5
DecodingImdcShortCopyPreviousLoop
eld ma0 ,@rp3 ;ma0<- *prev
ldb r4 ,@[a13+Index_EQ_VolumeFlag]
// ldb r4 ,@[a10+Index_OptionalFunctionOnOff]
and r4 ,#0x02
cmp eq ,r4 ,#0x02
brf MP3DigitalEQ_PassSub1
//.ifdef EQUALIZER_MODE //2000. 03.16 scaling up for equalizer
esla ma0
esla ma0
esla ma0
//.endif
MP3DigitalEQ_PassSub1
//.ifdef EQUALIZER_MODE //2000. 03.16 scaling up for equalizer
// esla ma0
//.endif
eld @rp0+d0 ,ma0 ;current[i] <-ma0
eld a ,@rp2+s1 ;a<-current[18+i]
bnzd r6 ,DecodingImdcShortCopyPreviousLoop
eld @rp3+d0 ,a ;*prev++ = current[18+i]
eld a ,#0
ld r6 ,#5
DecodingImdcShortAddPreviousLoop
eld ma0 ,@rp1 ;ma0<-window_sequence
eld p ,@rp3 ;p<-*prev
eadd ma0 ,p ,@rp1+d0,a ;ma0<- *prev+window_sequence
ldb r4 ,@[a13+Index_EQ_VolumeFlag]
// ldb r4 ,@[a10+Index_OptionalFunctionOnOff]
and r4 ,#0x02
cmp eq ,r4 ,#0x02
brf MP3DigitalEQ_PassSub2
//.ifdef EQUALIZER_MODE //2000. 03.16 scaling up for equalizer
esla ma0
esla ma0
esla ma0
//.endif
MP3DigitalEQ_PassSub2 ;clear for next use
//.ifdef EQUALIZER_MODE //2000. 03.16 scaling up for equalizer
// esla ma0
//.endif
eld @rp0+d0 ,ma0 ;current[i] <-ma0
eld ma0 ,@rp2+s1 ;ma0<-current[18+i]
bnzd r6 ,DecodingImdcShortAddPreviousLoop
eld @rp3+d0 ,ma0 ;*prev++ = current[18+i]
ld r6 ,#5
DecodingImdcShortCopyZeroLoop
eld ma0 ,@rp1+s1 ;ma0<-window_sequence
eld p ,@rp3 ;p<- *prev
eadd ma0 ,p ,@rp3+d0,a ;ma0<- *prev+window_sequence
;clear for next use
ldb r4 ,@[a13+Index_EQ_VolumeFlag]
// ldb r4 ,@[a10+Index_OptionalFunctionOnOff]
and r4 ,#0x02
cmp eq ,r4 ,#0x02
brf MP3DigitalEQ_PassSub3
//.ifdef EQUALIZER_MODE //2000. 03.16 scaling up for equalizer
esla ma0
esla ma0
esla ma0
//.endif
MP3DigitalEQ_PassSub3
//.ifdef EQUALIZER_MODE //2000. 03.16 scaling up for equalizer
// esla ma0
//.endif
bnzd r6 ,DecodingImdcShortCopyZeroLoop
eld @rp0+d0 ,ma0 ;current[i] <-ma0
eld c ,rp0
eld rpd1.index_LRPxBackupBuffer ,c ;ptr_imdctInputBuffer[i]
eld c ,rp3
eld rpd1.index_LptrImdctprevious,c ;adjust
cmp eq ,r7 ,#0
brfd DecodingImdctShortSubbandLoop
dec r7
;end-pure short block
ret
;--------------------seperate even-odd-----------------------
;
; rp0 In ptr_imdctInputBuffer+sb*18
;for i=1;i < 17;++i
; out[i] = in[i]+in[i-1];
;---- odd ----
;for i=3;i<17;i+=2
; out [i] = out[i]+out[i-2];
;
;Status at this routine
; d1 d0 s1 s0
; sd0 = -2 | 1 | 1 | 0
; sd1 = xx | xx | xx | xx
; sd2 = xx | xx | xx | xx
; sd3 = xx | xx | xx | xx
;
;Needing status at this routine
; d1 d0 s1 s0
; sd0 = xx | 1 | 1 | 0
; sd1 = xx | xx | xx | xx
; sd2 = xx | xx | xx | xx
; sd3 = xx | xx | xx | xx
;------------------------------------------------------------
DecodingImdctLong:
eld sd0 ,#((-2&0fh)<<12)|(1<<8)|((1&0fh)<<4)|(0<<0)
eld a ,@rp0+s1 ;a<-x0
eld ma0 ,@rp0 ;ma0<-x1
eadd a ,ma0 ;a<-x0+x1
eld p ,a ;p<-updated x1
eld a ,ma0 ,@rp0+d0,a ;a<-x1, x1<-x0+x1
ld r6 ,#7
DecodingImdctLongInitLoop
eld ma0 ,@rp0 ;ma0<-x2
eadd a ,ma0 ;a<-x1+x2
eld a ,ma0 ,@rp0+d0,a ;a<-ma0, x2<-x2+x1, even
eld ma0 ,@rp0 ;ma0<-x3
eadd a ,ma0 ;a<-x2+x3
eld x0 ,a
eadd a ,p ;a<-x2+x3+updated x1
eld a ,ma0 ,@rp0+d0,a ;a<-x3, x3<-x2+x3+updated x1,odd
bnzd r6 ,DecodingImdctLongInitLoop
eld p ,x0 ;pl<-x3
;----------------------even-part-----------------------------
;
;for i=0;i<9;++i
;{
; sum = in[0];
; for j=2,k=0;j<17;j+=2,k++
; sum += in[j]*dct99[i*8+k];
; out[i] = sum;
;}
;
;Status at this routine
; d1 d0 s1 s0
; sd0 = -2 | 1 | -2 | 0
; sd1 = xx | xx | xx | xx
; sd2 = -1 | 1 | -1 | 1
; sd3 = -1 | 1 | -1 | 1
;
;Needing status at this routine
; d1 d0 s1 s0
; sd0 = xx | xx | -2 | 2
; sd1 = xx | xx | xx | xx
; sd2 = xx | 1 | xx | 1
; sd3 = xx | xx | xx | 1
;------------------------------------------------------------
esd0 s0 ,#2
esd0 s1 ,#-2
eld sd2 ,#((-1&0fh)<<12)|(1<<8)|((-1&0fh)<<4)|(1<<0)
eld sd3 ,sd2
eld c ,rpd1.index_LRPxBackupBuffer ;ptr_imdctInputBuffer[i]
eld rp0 ,c
eld rp2 ,#Area_imdctTempBuffer1
eld rp3 ,#tbl_imdct9x9
ld r6 ,#3
eld ma0 ,@rp0+s0 ;ma0<-X[0]
eld x0 ,@rp0+s0,y0 ,@rp3+s0 ;x0<-X[2],y0<-c(0)
emul x0y0 ,x0 ,@rp0+s0,y0 ,@rp3+s0 ;p = X[2]*c(0)
DecodingImdctLongEvenLoop
emad ma0 ,x0y0 ,x0 ,@rp0+s0,y0 ,@rp3+s0; ma0a= X[0]+X[2]*c(0)
emad ma0 ,x0y0 ,x0 ,@rp0+s0,y0 ,@rp3+s0; ma0a= X[0]+..+X[4]*c(1)
emad ma0 ,x0y0 ,x0 ,@rp0+s0,y0 ,@rp3+s0; ma0a= X[0]+..+X[6]*c(2)
emad ma0 ,x0y0 ,x0 ,@rp0+s0,y0 ,@rp3+s0; ma0a= X[0]+..+X[8]*c(3)
emad ma0 ,x0y0 ,x0 ,@rp0+s0,y0 ,@rp3+s0; ma0a= X[0]+..+X[10]*c(4)
emad ma0 ,x0y0 ,x0 ,@rp0+s1,y0 ,@rp3+s0; ma0a= X[0]+..+X[12]*c(5)
emad ma0 ,x0y0 ,y0 ,@rp3+s0 ; ma0a= X[0]+..+X[14]*c(6)
emad ma0 ,x0y0 ,x0 ,@rp0+s1,y0 ,@rp3+s0; ma0a= X[0]+..+X[16]*c(7)
;p<-X[16]*c(8)
ernd ma0 ;insert rounding 1999/6/24
eld ma0 ,p ,@rp2+d0,ma0 ;save ma0, ma0= X[16]*c(8)
emul x0y0 ,x0 ,@rp0+s1,y0 ,@rp3+s0 ;ma0= X[16]*c(8)
emad ma0 ,x0y0 ,x0 ,@rp0+s1,y0 ,@rp3+s0; ma0a= X[16]*c(8)..+X[14]*c(9)
emad ma0 ,x0y0 ,x0 ,@rp0+s1,y0 ,@rp3+s0; ma0a= X[16]*c(8)+..+X[12]*c(10)
emad ma0 ,x0y0 ,x0 ,@rp0+s1,y0 ,@rp3+s0; ma0a= X[16]*c(8)+..+X[10]*c(11)
emad ma0 ,x0y0 ,x0 ,@rp0+s1,y0 ,@rp3+s0; ma0a= X[16]*c(8)+..+X[8]*c(12)
emad ma0 ,x0y0 ,x0 ,@rp0+s1,y0 ,@rp3+s0; ma0a= X[16]*c(8)+..+X[6]*c(13)
emad ma0 ,x0y0 ,y0 ,@rp3+s0 ; ma0a= X[16]*c(8)+..+X[4]*c(14)
;y0<-c[16]
eadd ma0 ,p ,x0 ,@rp0+s0 ;ma0= X[16]*c(8)+..+X[2]*c(15)
;x0<-X[0]
eld p ,x0
eadd ma0 ,p ,x0 ,@rp0+s0 ;ma0= X[16]*c(8)+..+X[0]
;x0<-X[2]
ernd ma0 ;insert rounding 1999/6/24
eld ma0 ,p ,@rp2+d0,ma0 ;ma0= X[0]
bnzd r6 ,DecodingImdctLongEvenLoop ;
emul x0y0 ,x0 ,@rp0+s0,y0 ,@rp3+s0 ;ma0= X[0], p<-X[2]*c[15]
emad ma0 ,x0y0 ,x0 ,@rp0+s0,y0 ,@rp3+s0; ma0a= X[0]*c(0)+X[2]*c(0)
emad ma0 ,x0y0 ,x0 ,@rp0+s0,y0 ,@rp3+s0; ma0a= X[0]*c(0)+..+X[4]*c(1)
emad ma0 ,x0y0 ,x0 ,@rp0+s0,y0 ,@rp3+s0; ma0a= X[0]*c(0)+..+X[6]*c(2)
emad ma0 ,x0y0 ,x0 ,@rp0+s0,y0 ,@rp3+s0; ma0a= X[0]*c(0)+..+X[8]*c(3)
emad ma0 ,x0y0 ,x0 ,@rp0+s0,y0 ,@rp3+s0; ma0a= X[0]*c(0)+..+X[10]*c(4)
emad ma0 ,x0y0 ,x0 ,@rp0+s1,y0 ,@rp3+s0; ma0a= X[0]*c(0)+..+X[12]*c(5)
emad ma0 ,x0y0 ; ma0a= X[0]*c(0)+..+X[14]*c(6)
eadd ma0 ,p ;ma0= X[0]*c(0)+..+X[16]*c(7)
;x0<-X[2]
ernd ma0 ;insert rounding 1999/6/24
eld @rp2+d0 ,ma0 ;save ma0
;----------------------odd-part------------------------------
;
;for i=0;i<9;++i
;{
; sum = in[1];
; for j=3,k=0;j<17;j+=2,k++
; sum += in[j]*dct99[i*8+k];
; out[17-i] = sum;
;}
; rp2 In Area_imdctTempBuffer1+9
;
;Status at this routine
; d1 d0 s1 s0
; sd0 = -2 | 1 | -2 | 0
; sd1 = xx | xx | xx | xx
; sd2 = -1 | 1 | -1 | 1
; sd3 = -1 | 1 | -1 | 1
;
;Needing status at this routine
; d1 d0 s1 s0
; sd0 = xx | xx | -2 | 2
; sd1 = xx | xx | xx | xx
; sd2 = xx | -1 | xx | 1
; sd3 = xx | xx | xx | 1
;------------------------------------------------------------
erpn rp0 ,#-13 ;rp0<-X[1]
erpn rp2 ,#8 ;rp2<-out[17]
eld rp3 ,#tbl_imdct9x9
ld r6 ,#3
eld ma0 ,@rp0+s0 ;ma0<-X[1]
eld x0 ,@rp0+s0,y0 ,@rp3+s0 ;x0<-X[3],y0<-c(0)
emul x0y0 ,x0 ,@rp0+s0,y0 ,@rp3+s0 ;p = X[3]*c(0)
DecodingImdctLongOddLoop
emad ma0 ,x0y0 ,x0 ,@rp0+s0,y0 ,@rp3+s0; ma0a= X[1]+X[3]*c(0)
emad ma0 ,x0y0 ,x0 ,@rp0+s0,y0 ,@rp3+s0; ma0a= X[1]+..+X[5]*c(1)
emad ma0 ,x0y0 ,x0 ,@rp0+s0,y0 ,@rp3+s0; ma0a= X[1]+..+X[7]*c(2)
emad ma0 ,x0y0 ,x0 ,@rp0+s0,y0 ,@rp3+s0; ma0a= X[1]+..+X[9]*c(3)
emad ma0 ,x0y0 ,x0 ,@rp0+s0,y0 ,@rp3+s0; ma0a= X[1]+..+X[11]*c(4)
emad ma0 ,x0y0 ,x0 ,@rp0+s1,y0 ,@rp3+s0; ma0a= X[1]+..+X[13]*c(5)
emad ma0 ,x0y0 ,y0 ,@rp3+s0 ; ma0a= X[1]+..+X[15]*c(6)
emad ma0 ,x0y0 ,x0 ,@rp0+s1,y0 ,@rp3+s0; ma0a= X[1]+..+X[17]*c(7)
;p<-X[17]*c(8)
ernd ma0 ;insert rounding 1999/6/24
eld ma0 ,p ,@rp2+d1,ma0 ;save ma0, ma0= X[17]*c(8)
emul x0y0 ,x0 ,@rp0+s1,y0 ,@rp3+s0 ;ma0= X[17]*c(8)
emad ma0 ,x0y0 ,x0 ,@rp0+s1,y0 ,@rp3+s0; ma0a= X[17]*c(8)..+X[15]*c(9)
emad ma0 ,x0y0 ,x0 ,@rp0+s1,y0 ,@rp3+s0; ma0a= X[17]*c(8)+..+X[13]*c(10)
emad ma0 ,x0y0 ,x0 ,@rp0+s1,y0 ,@rp3+s0; ma0a= X[17]*c(8)+..+X[11]*c(11)
emad ma0 ,x0y0 ,x0 ,@rp0+s1,y0 ,@rp3+s0; ma0a= X[17]*c(8)+..+X[9]*c(12)
emad ma0 ,x0y0 ,x0 ,@rp0+s1,y0 ,@rp3+s0; ma0a= X[17]*c(8)+..+X[7]*c(13)
emad ma0 ,x0y0 ,y0 ,@rp3+s0 ; ma0a= X[17]*c(8)+..+X[5]*c(14)
;y0<-c[16]
eadd ma0 ,p ,x0 ,@rp0+s0 ;ma0= X[17]*c(8)+..+X[3]*c(15)
;x0<-X[1]
eld p ,x0
eadd ma0 ,p ,x0 ,@rp0+s0 ;ma0= X[17]*c(8)+..+X[1]
;x0<-X[3]
ernd ma0 ;insert rounding 1999/6/24
eld ma0 ,p ,@rp2+d1,ma0 ;save ma0, ma0= X[1]
bnzd r6 ,DecodingImdctLongOddLoop ;
emul x0y0 ,x0 ,@rp0+s0,y0 ,@rp3+s0 ;ma0= X[1], p<-X[3]*c[15]
emad ma0 ,x0y0 ,x0 ,@rp0+s0,y0 ,@rp3+s0; ma0a= X[1]*c(0)+X[3]*c(0)
emad ma0 ,x0y0 ,x0 ,@rp0+s0,y0 ,@rp3+s0; ma0a= X[1]*c(0)+..+X[5]*c(1)
emad ma0 ,x0y0 ,x0 ,@rp0+s0,y0 ,@rp3+s0; ma0a= X[1]*c(0)+..+X[7]*c(2)
emad ma0 ,x0y0 ,x0 ,@rp0+s0,y0 ,@rp3+s0; ma0a= X[1]*c(0)+..+X[9]*c(3)
emad ma0 ,x0y0 ,x0 ,@rp0+s0,y0 ,@rp3+s0; ma0a= X[1]*c(0)+..+X[11]*c(4)
emad ma0 ,x0y0 ,x0 ,@rp0+s1,y0 ,@rp3+s0; ma0a= X[1]*c(0)+..+X[13]*c(5)
emad ma0 ,x0y0 ; ma0a= X[1]*c(0)+..+X[15]*c(6)
eadd ma0 ,p ;ma0= X[1]*c(0)+..+X[17]*c(7)
ernd ma0 ;insert rounding 1999/6/24
eld @rp2 ,ma0 ;save out[9]
;-----------------------butterfly----------------------------
;
;for i=0;i<9;++i
;{
; temp = in[i];
; in[i] += in[17-i]*coeficient;
; in[17-i] = temp-in[17-i]*coeficient;
;}
;
;Status at this routine
; d1 d0 s1 s0
; sd0 = -1 | 1 | -1 | 0
; sd1 = xx | xx | xx | xx
; sd2 = -1 | 1 | -1 | 0
; sd3 = -1 | 1 | -1 | 1
;
;Needing status at this routine
; d1 d0 s1 s0
; sd0 = -1 | xx | -1 | 0
; sd1 = xx | xx | xx | xx
; sd2 = xx | 1 | xx | 0
; sd3 = xx | xx | xx | 1
;------------------------------------------------------------
esd2 s0 ,#0
eld sd0 ,sd2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -