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

📄 decimdct.s

📁 samsung 9908DVD源代码,
💻 S
📖 第 1 页 / 共 3 页
字号:
	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 + -