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

📄 example 6-18.sa

📁 《基于TI DSP的通用算法实现》程序代码
💻 SA
字号:

; Example 6 - 18. Residu Implementation Partitioned SA Listing for the TMS320C62x DSP


_Residu_psa: .cproc A_a_ptr, B_x_ptr, A_y_ptr, B_lg ;arg_list

	.no_mdep
	.reg A_a_0 		; coef: a[0]
	.reg A_x_ba 		; input: x[i+1,i]
	.reg A_x_98 		; input: x[i–1,i–2]
	.reg A_x_76 		; input: x[i–3,i–4]
	.reg A_x_54 		; input: x[i–5,i–6]
	.reg A_x_32 		; input: x[i–7,i–8]
	.reg A_x_10 		; input: x[i–9,i–10]
	.reg A_p00 		; prod: x[i ]*a[0]
	.reg A_p01 		; prod: x[i–1]*a[1]
	.reg A_p02 		; prod: x[i–2]*a[2]
	.reg A_p03 		; prod: x[i–3]*a[3]
	.reg A_p04 		; prod: x[i–4]*a[4]
	.reg A_p05 		; prod: x[i–5]*a[5]
	.reg A_p06 		; prod: x[i–6]*a[6]
	.reg A_p07 		; prod: x[i–7]*a[7]
	.reg A_p08 		; prod: x[i–8]*a[8]
	.reg A_p09 		; prod: x[i–9]*a[9]
	.reg A_p0a 		; prod: x[i–10]*a[10]
	.reg A_s0 		; sum0
	.reg A_y0 		; y0

	.reg B_i 		; outloop counter
	.reg B_a_0 		; coef: a[0]
	.reg B_a_10 		; coef: a[1,0]
	.reg B_a_32 		; coef: a[3,2]
	.reg B_a_54 		; coef: a[5,4]
	.reg B_a_76 		; coef: a[7,6]
	.reg B_a_98 		; coef: a[9,8]
	.reg B_a_ba 		; coef: a[11,10]
	.reg B_p10 		; prod: x[i+1]*a[0]
	.reg B_p11 		; prod: x[i ]*a[1]
	.reg B_p12 		; prod: x[i–1]*a[2]
	.reg B_p13 		; prod: x[i–2]*a[3]
	.reg B_p14 		; prod: x[i–3]*a[4]
	.reg B_p15		; prod: x[i–4]*a[5]
	.reg B_p16 		; prod: x[i–5]*a[6]
	.reg B_p17 		; prod: x[i–6]*a[7]
	.reg B_p18 		; prod: x[i–7]*a[8]
	.reg B_p19 		; prod: x[i–8]*a[9]
	.reg B_p1a 		; prod: x[i–9]*a[10]
	.reg B_s1 		; sum1
	.reg B_y1 		; y1

	LDW .D1T2 *A_a_ptr++,B_a_10 	; load a[1] & a[0], a[0] = 4096
	LDW .D1T2 *A_a_ptr++,B_a_32 	; load a[3] & a[2]
	LDW .D1T2 *A_a_ptr++,B_a_54 	; load a[5] & a[4]
	LDW .D1T2 *A_a_ptr++,B_a_76 	; load a[7] & a[6]
	LDW .D1T2 *A_a_ptr++,B_a_98 	; load a[9] & a[8]
	LDH .D1T2 *A_a_ptr,B_a_ba 	; load a[11] & a[10]
	SHR .2 B_lg,1,B_i 		; outloop loop counter, lg/2
	MVK .1 4096,A_a_0 		; a[0] = 4096
	MVK .2 4096,B_a_0 		; a[0] = 4096

LOOP:
	LDW .D2T1 *B_x_ptr––,A_x_ba 	; load x[ 1] & x[ 0]
	LDW .D2T1 *B_x_ptr––,A_x_98 	; load x[–1] & x[–2]
	LDW .D2T1 *B_x_ptr––,A_x_76 	; load x[–3] & x[–4]
	LDW .D2T1 *B_x_ptr––,A_x_54 	; load x[–5] & x[–6]
	LDW .D2T1 *B_x_ptr––,A_x_32 	; load x[–7] & x[–8]
	LDW .D2T1 *B_x_ptr++[6],A_x_10	; load x[–9] & x[–10]
	SMPY .1 A_x_ba,A_a_0,A_p00 	; smpy(x[i ],a[0])
	SMPYH .1X A_x_98,B_a_10,A_p01 	; smpy(x[i–1],a[1])
	SMPY .1X A_x_98,B_a_32,A_p02 	; smpy(x[i–2],a[2])
	SMPYH .1X A_x_76,B_a_32,A_p03 	; smpy(x[i–3],a[3])
	SMPY .1X A_x_76,B_a_54,A_p04 	; smpy(x[i–4],a[4])
	SMPYH .1X A_x_54,B_a_54,A_p05 	; smpy(x[i–5],a[5])
	SMPY .1X A_x_54,B_a_76,A_p06 	; smpy(x[i–6],a[6])
	SMPYH .1X A_x_32,B_a_76,A_p07 	; smpy(x[i–7],a[7])
	SMPY .1X A_x_32,B_a_98,A_p08 	; smpy(x[i–8],a[8])
	SMPYH .1X A_x_10,B_a_98,A_p09 	; smpy(x[i–9],a[9])
	SMPY .1X A_x_10,B_a_ba,A_p0a 	; smpy(x[i–10],a[10])
	SMPYLH .2X B_a_10,A_x_ba,B_p10 ; smpy(x[i+1],a[0])
	SMPYHL .2X B_a_10,A_x_ba,B_p11 ; smpy(x[i ],a[1])
	SMPYLH .2X B_a_32,A_x_98,B_p12 ; smpy(x[i–1],a[2])
	SMPYHL .2X B_a_32,A_x_98,B_p13 ; smpy(x[i–2],a[3])
	SMPYLH .2X B_a_54,A_x_76,B_p14 ; smpy(x[i–3],a[4])
	SMPYHL .2X B_a_54,A_x_76,B_p15 ; smpy(x[i–4],a[5])
	SMPYLH .2X B_a_76,A_x_54,B_p16 ; smpy(x[i–5],a[6])
	SMPYHL .2X B_a_76,A_x_54,B_p17 ; smpy(x[i–6],a[7])
	SMPYLH .2X B_a_98,A_x_32,B_p18 ; smpy(x[i–7],a[8])
	SMPYHL .2X B_a_98,A_x_32,B_p19 ; smpy(x[i–8],a[9])
	SMPYLH .2X B_a_ba,A_x_10,B_p1a ; smpy(x[i–9],a[10])
	SADD .1 A_p00,A_p01,A_s0	; s0 = sadd(smpy(x[–1], a[0]),
					; smpy(x[–1], a[1]))
	SADD .1 A_s0,A_p02,A_s0 ; s0 = sadd(s0,smpy(x[–2],a[2]))
	SADD .1 A_s0,A_p03,A_s0 ; s0 = sadd(s0,smpy(x[–3],a[3]))
	SADD .1 A_s0,A_p04,A_s0 ; s0 = sadd(s0,smpy(x[–4],a[4]))
	SADD .1 A_s0,A_p05,A_s0 ; s0 = sadd(s0,smpy(x[–5],a[5]))
	SADD .1 A_s0,A_p06,A_s0 ; s0 = sadd(s0,smpy(x[–6],a[6]))
	SADD .1 A_s0,A_p07,A_s0 ; s0 = sadd(s0,smpy(x[–7],a[7]))
	SADD .1 A_s0,A_p08,A_s0 ; s0 = sadd(s0,smpy(x[–8],a[8]))
	SADD .1 A_s0,A_p09,A_s0 ; s0 = sadd(s0,smpy(x[–9],a[9]))
	SADD .1 A_s0,A_p0a,A_s0 ; s0 = sadd(s0,smpy(x[–10],a[10]))

	SADD .2 B_p10,B_p11,B_s1 	; s1 = sadd(smpy(x[1],a[0]),
					; smpy(x[0],a[1]))
	SADD .2 B_s1,B_p12,B_s1 	; s1 = sadd(s1,smpy(x[–1],a[2]))
	SADD .2 B_s1,B_p13,B_s1 	; s1 = sadd(s1,smpy(x[–2],a[3]))
	SADD .2 B_s1,B_p14,B_s1 	; s1 = sadd(s1,smpy(x[–3],a[4]))
	SADD .2 B_s1,B_p15,B_s1 	; s1 = sadd(s1,smpy(x[–4],a[5]))
	SADD .2 B_s1,B_p16,B_s1 	; s1 = sadd(s1,smpy(x[–5],a[6]))
	SADD .2 B_s1,B_p17,B_s1 	; s1 = sadd(s1,smpy(x[–6],a[7]))
	SADD .2 B_s1,B_p18,B_s1 	; s1 = sadd(s1,smpy(x[–7],a[8]))
	SADD .2 B_s1,B_p19,B_s1 	; s1 = sadd(s1,smpy(x[–8],a[9]))
	SADD .2 B_s1,B_p1a,B_s1 	; s1 = sadd(s1,smpy(x[–9],a[10]))
	MVk .1 4096,A_a_0 		; a[0] = 4096
	SADD .1 A_s0,A_a_0,A_y0 	; s0 = sadd(s0,4096)
	SADD .2 B_s1,B_a_0,B_y1 	; s1 = sadd(s1,4096)
	SSHL .1 A_y0,3,A_y0 		; s0 = L_shl(s0,3)
	SSHL .2 B_y1,3,B_y1 		; s1 = L_shl(s1,3)
	SHR .1 A_y0,16,A_y0 		; y[0] = shr(s0,16)
	SHR .2 B_y1,16,B_y1 		; y[1] = shr(s1,16)
	STH .1 A_y0,*A_y_ptr++ 		; store y[0]
	STH .D1T2 B_y1,*A_y_ptr++ 	; store y[1]

[B_i]	SUB .2 B_i,1,B_i 		; decrement loop counter
[B_i]	B LOOP 				; branch to the loop
	.endproc
	
	
	

⌨️ 快捷键说明

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