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

📄 cs_dec.s

📁 关于DVD上的PCM的解码的代码,PCM的DSP压缩,解调的算法,用RISC32指令来写.
💻 S
📖 第 1 页 / 共 2 页
字号:
//=====================================================================
// (c)1996-2000 Copyright LuxSonor Semiconductors Inc.,
// All Rights Reserved !!!
// File name: <cs56k.h>
// Circle Surround equates
// Target Processor: LS500 DSP Processor
// Target System: ISA Board/Stand Alone Machine.
//
// $Initial Version: Corin Chen 
//		     Richard Huang
//		     Tan Chou
//
//=====================================================================
	.nolist
#include "regdef.h"
#include "regdef2.h"
#include "globalv.h"
#include "user.h"
#include "stereo_user.h"
#include "SRScoeff.h"
	.rdata
	.list

	.global	SUB_CS_DEC


SUB_CS_DEC:
// PCM and CS context switch
	jsr	r30, SUB_save_pcm_context1000
	jsr	r30, SUB_restore_SRS_context

	movi	r0, local_FApcm_buf_byte	//L

	movw	storedataptr, r0
	movw	in_Mat_ptr, r0

	movi	r20, 0	// counter

	movh	r1, Lhini_flag
	tsti	r1, 0x0
	bne	jump_SRS_init
// Initialize filter coeffs and variable
	movi	r1, 0x1
	movi	r7, 0x0009
	nop
	nop
	movh	Lhini_flag, r1
	movh	Lhcsflag, r7	//Narrow and Music mode
// Low and high ends of the Time constant control voltage
	li	r3, 0x00094d28
	li	r4, 0x0013ee7b
	li	r5, 0xff9db41c
	li	r6, 0x00434502
	movw	vartclow, r3
	movw	vartchigh, r4
// Coefficient Evaluation (slope and intercept) - high band signal path
	movw	hbslope ,r5
	movw	hpinter, r6
// Coefficient Evaluation (Slope and intercept) - lowband/frontback signal path
	li	r3, 0xffd0e347
	li	r4, 0x004191d5
	movi	r0, 0
	movw	lofbslope, r3
	movw	lofbinter, r4
// Evaluated Coefficients - High band
	movw	hba1, r0
	movw	hbb0, r0
// Evaluated Coefficients - Low band / Front back
	movw	lofba1, r0
	movw	lofbb0, r0
// Exponential Ratio circuit - Coefficients
	li	r3, 0x00044a58
	li	r4, 0x00564faf
	li	r5, 0xfffa50eb
	movw	exprcoeff1, r3
	movw	exprcoeff2, r4
	movw	exprcoeff3, r5
// Variable Multiplier Control parameters
	li	r2, 0x0014dc99
	li	r3, 0x001f39e3
	li	r4, 0xfff3c209
	li	r5, 0x004ccccd
	li	r6, 0x00004666
	movw	vmlowend, r2
	movw	vmupend, r3
	movw	vminter, r4
	movw	vmslope, r5
	movw	multval, r6
// Rear Audio Path filters - 2KHz - low and high pass
	li	r1, 0x000ee41d
	li	r2, 0x006237c5
	li	r3, 0xff8ee41d
	li	r4, 0x006237c5
	movw	l1p2k_1, r1
	movw	l1p2k_2, r2

	movw	h1p2k_1, r3
	movw	h1p2k_2, r4
// Sub Woofer Path filters - 80Hz - low pass II order
	li	r1, 0xffc0f0da
	li	r2, 0x007f0d5d
	li	r3, 0x000000e4
	li	r4, 0x000001c9
	movw	l2p80_1, r1
	movw	l2p80_2, r2
	movw	l2p80_3, r3
	movw	l2p80_4, r4
// Center Channel - 100 Hz high pass I order filter
	li	r1, 0x007f2aed
	li	r2, 0x007e55da
	li	r3, 0x00000583
	li	r4, 0x00000b06
	li	r5, 0x007da177
	li	r6, 0xff84a705
	movw	h1p100_1, r1
	movw	h1p100_2, r2
// Front Left, Right filters - 200Hz - low pass II order
	movw	l2p200_1, r3
	movw	l2p200_2, r4
	movw	l2p200_3, r5
	movw	l2p200_4, r6
	li	r1, 0xffddb3d8
	li	r2, 0x002ed9ec
	li	r3, 0x00783333
	li	r4, 0x007c199a
	movw	h1p16k_1, r1
	movw	h1p16k_2, r2
// 480Hz high pass filter Coefficients
	movw	h1p480_1, r3
	movw	h1p480_2, r4
// 32Hz Low pass filter Coefficients
	li	r1, 0x007f77ff
	li	r2, 0x00008801
	li	r3, 0x007fd846
	li	r4, 0x000037fb
	li	r5, 0x002d3f7c
	li	r6, 0x0071cac1
	movw	l1p32_1, r1
	movw	l1p32_2, r2
// 16Hz Low pass filter Coefficients
	movw	l1p16_1, r3
	movw	l1p16_2, r4
// Center and Surround scaling coefficients
	movw	cscale, r5
	movw	sscale, r6

jump_SRS_init:
//=============================================================
// Input Matrix : L,R,L-R,L+R,-L,-R are evaluated.
//=============================================================
	movw	r8, in_Mat_ptr
	mov	AGRAdr0, r8
	movi	AGRSiz0, 0xffff
	movi	AGRAdr1, L
	movi	AGRSiz1, 0xffff
	movi	AGRAdr2, R
	movi	AGRSiz2, 0xffff
	movi	AGRAdr3, LMR
	movi	AGRSiz3, 0xffff
	movi	AGRAdr4, LPR
	movi	AGRSiz4, 0xffff
	movi	AGRAdr5, AL
	movi	AGRSiz5, 0xffff
	movi	AGRAdr6, AR
	movi	AGRSiz6, 0xffff

	movi	r7, 0
	li	r9, 0xFFFFFF00
	loop	BLOCKSIZE, InputMatrix
	shra	r3, a0(0*4), 8
	and	r3, r9		// r3 = R, 24-bit format
	shl	r4, a0(3*4), 16
	shra	r4, 8		// r4 = L, 24-bit format

	sub	a6(1*4), r7, r3	// -R
	sub	a5(1*4), r7, r4	// -L
	sub	r5, r4, r3	// L-R
	add	r6, r4, r3	// L+R
	mov	a1(1*4), r4
	mov	a2(1*4), r3
	shra	r5, 1	// L-R divided by 2
	shra	r6, 1	// L+R divided by 2
	mov	a3(1*4), r5	// L-R
	mov	a4(1*4), r6	// L+R
InputMatrix:
	mov	r8, AGRAdr0
	movw	in_Mat_ptr, r8
//=============================================================
//               AUDIO       PATH      PROCESSING
//=============================================================
Start_SRS_processing:
//----------------------------------
//  Front Left Channel Processing
//----------------------------------
	
	movw	r1, cscale
	movw	r0, vca2
	mulf	r10, r0, r1

	movi	AGRAdr1, AR	// -R		
	movi	AGRInc1, 0x4
	movi	AGRSiz1, 15*4	//modulo 16 words
//	movi	AGRAdr3, vca2buffer
//	movi	AGRSiz3, 15*4	//modulo 16 words

//	nop

//	loop	BLOCKSIZE/2, vca2up
//	mulf	r2, r10, a1(1*4)//1.23, 1.23, 1.23
//	mulf	r6, r10, a1(1*4)//1.23, 1.23, 1.23
//	mov	a3(1*4), r2	//1.23
//	mov	a3(1*4), r6	//1.23
//vca2up:
	
	movi	AGRAdr2, Lfiltbuffer
	movi	AGRSiz2, 15*4	//modulo 16 words
	movw	r1, x2L1filt
	movw	r2, x1L1filt
	mov	r4, a2(-2*4)	// Set pointer, dummy

	loop	BLOCKSIZE, lowpass7
	mulf	r8, r2, l2p200_2
//	nop
//	mov	r3, a3(1*4)
	mulf	r4, r10,a1(1*4)
	madd	r8, r1, l2p200_1
	madd	r8, r4, l2p200_1
	mov	r3, a2(1*4)
	madd	r8, r3, l2p200_4
	mov	r5, a2(1*4)
	madd	r8, r5, l2p200_3
	mov	r1, r2
	madd	r8, r5, l2p200_3
	mov	r2, r4
	rnd	a2(-1*4), r8
lowpass7:
	movw	x2L1filt, r1
	movw	x1L1filt, r2

	movi	AGRAdr3, Lfiltbuffer
	movi	AGRSiz3, 0xffff		
	movi	AGRAdr2, vca4buffer
//	movi	AGRSiz2, 15*4	// modulo 16 words
	movw	r1, x2L2filt
	movw	r2, x1L2filt
	mov	r4, a2(-2*4)	// Set pointer, dummy
	
	loop	BLOCKSIZE, lowpass8
	mulf	r8, r2, l2p200_2
//	nop
	madd	r8, r1, l2p200_1
	mov	r3, a3(1*4)
	madd	r8, r3, l2p200_1
	mov	r4, a2(1*4)
	madd	r8, r4, l2p200_4
	mov	r5, a2(1*4)
	madd	r8, r5, l2p200_3
	mov	r1, r2
	madd	r8, r5, l2p200_3
	mov	r2, r3
	rnd	a2(-1*4), r8
lowpass8:
	movw	x2L2filt, r1
	movw	x1L2filt, r2

	movi	AGRAdr2, LFRF+2
//	movi	AGRSiz2, 0xffff		
	movi	AGRInc2, 0x4
//	movi	AGRAdr3, vca2buffer
	movi	AGRAdr4, vca4buffer
	movi	AGRAdr3, L
//	movi	AGRSiz3, 0xffff		
	movw	r12, vca34

	loop	BLOCKSIZE, LeftFront
//	mov	r2, a3(1*4)
	mulf	r2, r10,a1(1*4)
	add	r6, r2, a3(1*4)
	sub	r2, r6, a4(1*4)
	mulhf	i2, r2, r12
LeftFront:
//----------------------------------
//  Front Right Channel Processing
//----------------------------------
	movi	AGRAdr1, AL	// -L
//	movi	AGRInc1, 0x4
	
	//dlw	r1, cscale
	movw	r0, vca1
	mulf	r10, r0, cscale

//	movi	AGRAdr3, vca1buffer
//	movi	AGRSiz3, 15*4	//modulo 16 words

//	loop	BLOCKSIZE/2, vca1up
//	mulf	r2, r10, a1(1*4)//1.23, 1.23, 1.15
//	mulf	r6, r10, a1(1*4)//1.23, 1.23, 1.15
//	mov	a3(1*4), r2	//1.23
//	mov	a3(1*4), r6	//1.23
//vca1up:

	movi	AGRAdr2, Rfiltbuffer
//	movi	AGRSiz2, 15*4	//modulo 16 words
	movw	r1, x2R1filt
	movw	r2, x1R1filt
	mov	r4, a2(-2*4)	// Set pointer, dummy
	
	loop	BLOCKSIZE, lowpass9
	mulf	r8, r2, l2p200_2
//	nop
//	mov	r3, a3(1*4)
	mulf	r4, r10,a1(1*4)
	madd	r8, r1, l2p200_1
	madd	r8, r4, l2p200_1
	mov	r3, a2(1*4)
	madd	r8, r3, l2p200_4
	mov	r5, a2(1*4)
	madd	r8, r5, l2p200_3
	mov	r1, r2
	madd	r8, r5, l2p200_3
	mov	r2, r4
	rnd	a2(-1*4), r8
lowpass9:
	movw	x2R1filt, r1
	movw	x1R1filt, r2

	movi	AGRAdr3, Rfiltbuffer
	movi	AGRAdr2, vca3buffer
	movw	r1, x2R2filt
	movw	r2, x1R2filt
	mov	r4, a2(-2*4)	// Set pointer, dummy
	
	loop	BLOCKSIZE, lowpass10
	mulf	r8, r2, l2p200_2
//	nop
	madd	r8, r1, l2p200_1
	mov	r3, a3(1*4)
	madd	r8, r3, l2p200_1
	mov	r4, a2(1*4)
	madd	r8, r4, l2p200_4
	mov	r5, a2(1*4)
	madd	r8, r5, l2p200_3
	mov	r1, r2
	madd	r8, r5, l2p200_3
	mov	r2, r3
	rnd	a2(-1*4), r8
lowpass10:
	movw	x2R2filt, r1
	movw	x1R2filt, r2

	movi	AGRAdr2, LFRF
	movi	AGRSiz2, 0xffff		
	movi	AGRInc2, 0x4
//	movi	AGRAdr3, vca1buffer
	movi	AGRAdr4, vca3buffer
	movi	AGRAdr3, R
//	movw	r12, vca34

	loop	BLOCKSIZE, RightFront
//	mov	r2, a3(1*4)
	mulf	r2, r10,a1(1*4)
	add	r6, r2, a3(1*4)
	sub	r2, r6, a4(1*4)
	mulhf	i2, r2, r12
RightFront:

//----------------------------------
//   Center Channel Processing
//----------------------------------
	movi	AGRAdr1, LPR	// L+R		
//	movi	AGRSiz1, 0xffff		
	
//	dlw	r1, cscale
	movw	r0, vca5
	mulf	r10, r0, cscale

//	movi	AGRAdr3, vca5buffer
//	movi	AGRSiz3, 15*4	//modulo 16 words
	
//	loop	BLOCKSIZE/4, vca5up
//	mulf	r2, r10, a1(1*4)//1.23, 1.23, 1.23
//	mulf	r4, r10, a1(1*4)//1.23, 1.23, 1.23
//	mulf	r6, r10, a1(1*4)//1.23, 1.23, 1.23
//	mulf	r8, r10, a1(1*4)//1.23, 1.23, 1.23
//	shl	a3(1*4), r2, 1
//	shl	a3(1*4), r4, 1
//	shl	a3(1*4), r6, 1
//	shl	a3(1*4), r8, 1
//vca5up:

	movi	AGRAdr2, CTSW+2
//	movi	AGRSiz2, 0xffff		
	movi	AGRInc2, 0x4

	movw	r2, x1ctfilt
	movw	r4, lastcenterval
	shl	r10,1

	loop	BLOCKSIZE, highpassct
	mulnf	r8, r2, h1p100_1	//1.23, 1.23, 1.23
//	nop
//	mov	r2, a3(1*4)		//update x1ctfilt
	mulf	r2, r10,a1(1*4)
	madd	r8, r4, h1p100_2	//1.23, 1.23, 1.23
	madd	r8, r2, h1p100_1	//1.23, 1.23, 1.23
	nop
	rnd	r4, r8		//update lastcenterval(1.23)
	movhf	i2, r4
highpassct:
	movw	lastcenterval, r4
	movw	x1ctfilt, r2

//----------------------------------
//   Sub Woofer Path Processing
//----------------------------------
	movi	AGRAdr1, LPR	// L+R
	movi	AGRSiz1, 15*4	//modulo 16 words

	movi	AGRAdr2, subfilt 
	movi	AGRSiz2, 15*4	//modulo 16 words

	movi	AGRAdr0, local_iir_filter_byte //0x980
	movw	r0, subfilt_lowpass5_past2
	movw	r1, subfilt_lowpass5_past1
	movw	r8, LpR2_past2	// LpR2_past2 is past value of LpRaudio2
	movw	r9, LpR2_past1


	loop	BLOCKSIZE, lowpass5 
	mulf	r6, r0, l2p80_1 //1.23, 1.23, 1.23
//	nop
	madd	r6, r1, l2p80_2 //1.23, 1.23, 1.23
	mov	r0, a1(1*4)
	shl	r6, 1
	madd	r6, r8, l2p80_3
	mov	r8, r9
	madd	r6, r9, l2p80_4
	mov	r9, r0
	madd	r6, r0, l2p80_3 //1.23, 1.23, 1.15
	mov	r0, r1		// store for next calculation
	mov	a2(1*4), r6	// store to buffer "subfilt"
	mov	r1, r6		// store for next calculation
lowpass5:
	movw	LpR2_past2, r8	// store for next calculation
	movw	LpR2_past1, r9	// store for next calculation
	movw	subfilt_lowpass5_past2, r0
	movw	subfilt_lowpass5_past1, r1

	movi	AGRAdr1, subfilt
	movi	AGRAdr2, CTSW
	movi	AGRInc2, 0x4

	movw	r0, CTSW_sub_past2
	movw	r1, CTSW_sub_past1	//sub_past1 is latest past value
	movw	r8, subfilt_lowpass6_past2
	movw	r9, subfilt_lowpass6_past1

	loop	BLOCKSIZE, lowpass6 
	mulf	r6, r0, l2p80_1 //1.23, 1.23, 1.23
//	nop
	madd	r6, r1, l2p80_2 //1.23, 1.23, 1.23
	mov	r0, a1(1*4)
	shl	r6, 1
	madd	r6, r8, l2p80_3 //1.23, 1.23, 1.23
	mov	r8, r9		// store for next calculation
	madd	r6, r9, l2p80_4 //1.23, 1.23, 1.23
	mov	r9, r0		// store for next calculation
	madd	r6, r0, l2p80_3 //1.23, 1.23, 1.23
	mov	r0, r1		// store for next calculation
	movhf	i2, r6
	mov	r1, r6		// store for next calculation
lowpass6:
	movw	subfilt_lowpass6_past2, r8
	movw	subfilt_lowpass6_past1, r9
	movw	CTSW_sub_past2, r0
	movw	CTSW_sub_past1, r1 	//sub_past1 is latest past value

// Phantom mode processing
/*	//+++++++++++++++++++++++++++
	//add test phantom mode here
	//+++++++++++++++++++++++++++
	li	r5, 0x00FFFF00
	li	r0, 0x5A8279	// 0.7071068
	movi	AGRInc2, 0x2		
	mov	r4, a2(-17*4)	// set pointer to position, dummy
	mov	r4, i2		// set pointer to center channel
	movi	r4, 0
	movi	AGRAdr1, LFRF
	movi	AGRInc1, 0x2		
	loop	BLOCKSIZE, ph_loop
	mov	r10, a1(0*4)
	shr	r11, r10, 8
	shl	r10, 8
	and	r11, r5		//1.23(Left)
	and	r10, r5		//1.23(Right)
	mov	r1, a2(0*4)	// move center value(1.23)
	mulf	r8, r0, r1
	addhf	i1, r8, r11
	addhf	i1, r8, r10
	mov	a2(1*4),r4
ph_loop:
*/
//----------------------------------
//  Surround Audio Path Processing
//----------------------------------
// vca8 implementation on the rears
	movi	AGRAdr1, LMR
//	movi	AGRAdr3, vca8buffer
//	movi	AGRSiz3, 15*4	//modulo 16 words		
	movw	r10, vca8

//	loop	BLOCKSIZE/4, Rearvca
//	mulf	r2, r10, a1(1*4)	//1.23, 1.23, 1.23
//	mulf	r4, r10, a1(1*4)	//1.23, 1.23, 1.23
//	mulf	r6, r10, a1(1*4)	//1.23, 1.23, 1.23
//	mulf	r8, r10, a1(1*4)	//1.23, 1.23, 1.23
//	mov	a3(1*4), r2
//	mov	a3(1*4), r4
//	mov	a3(1*4), r6
//	mov	a3(1*4), r8
//Rearvca:

// Low Pass filter - 2KHz
	movw	r2,rearxstat			//r2=x(n-1)
	movw	r3,rearLPfiltstat		//r3=y(n-1)

	movi	AGRAdr4, RearLPfilt		//output
//	movi	AGRSiz4, 0xffff
	movi	AGRInc4, 4

	loop	BLOCKSIZE,Lowpass4
	mulf	r0, r2, l1p2k_1		//r0=b0*x(n-1)
//	mov	r2, a3(1*4)
	mulf	r2, r10,a1(1*4)
	madd	r0, r3, l1p2k_2		//r8=a1*y(n-1)
	madd	r0, r2, l1p2k_1
	nop
	mov	a4(1*4), r0
	mov	r3, r0
Lowpass4:
	movw	rearLPfiltstat,r3		//Store the final output for next pass

//High Pass filter - 2kHz
	movw	r2,rearxstat			//r2=x(n-1)
	movw	r3,rearHPfiltstat		//r3=y(n-1)
	movi	AGRAdr4,RearHPfilt		//output
	movi	AGRInc4,4

	loop	BLOCKSIZE,Highpass
	mulf	r0, r2, h1p2k_1			//r0=b0*x(n-1)
	mov	r2, a3(1*4)
	madd	r0, r3, h1p2k_2
	msub	r0, r2, h1p2k_1
	nop
	mov	a4(1*4), r0
	mov	r3, r0
Highpass:
	movw	rearHPfiltstat,r3	//Store the final output for next pass
	movw    rearxstat,r2		//save the final x(n)

//Surround Delay, Vcas 9-12 and output buffer update
//Surround Delay, doesn't implement right now !!!
	movi	AGRAdr4, RearLPfilt		//output
	movi	AGRSiz4, 0xffff
	movi	AGRInc4, 0x4
	movi	AGRAdr5, RearHPfilt		//output
	movi	AGRSiz5, 0xffff
	movi	AGRInc5, 0x4
	movi	AGRAdr1, LSRS+2
	movi	AGRSiz1, 0xffff

	movw	r1, vca09
	movw	r2, vca10
	movw	r3, vca11
	movw	r4, vca12
	li	r5, 0x00FFFF00
	loop	BLOCKSIZE, Rearvca2
	mulf	r6, r1, a5(0*4)
	mulf	r8, r3, a5(1*4)
	madd	r6, r2, a4(0*4)
	madd	r8, r4, a4(1*4)
	movhf	a1(-1*2),r6
	movhf	a1(1*6),r8

Rearvca2:

//=========================================================
//               STEERING        PROCESSING
//=========================================================
// Steering Filter L,R 16KHz high pass filters
	movi	AGRAdr2, L+(BLOCKSIZE-1) * 4
	movi	AGRSiz2, 0xffff
	movi	AGRAdr3, R+(BLOCKSIZE-1) * 4
	movi	AGRSiz3, 0xffff

	movi	AGRAdr0, L16k+(BLOCKSIZE-1) * 4
	movi	AGRSiz0, 0xffff
	movi	AGRAdr1, R16k+(BLOCKSIZE-1) * 4
	movi	AGRSiz1, 0xffff

	movi	AGRAdr4, iir_h1p16k_1
	movi	AGRInc4, 0
	movi	AGRAdr5, iir_h1p16k_2
	movi	AGRInc5, 0

	mulf	r10, i4,a0(-15*4)	//1.23, 1.23, 1.23
	msub	r10, i5,a2(-15*4)
	mulf	r12, i4,a1(-15*4)	//1.23, 1.23, 1.23
	msub	r12, i5,a3(-15*4)
	madd	r10, i5,a2(0*4)
	madd	r12, i5,a3(0*4)
	mov		a0(0*4), r10
	mov		a1(0*4), r12

	loop	BLOCKSIZE-1, strLR16k
	mulf	r10, i4,a0(1*4)			//1.23, 1.23, 1.23
	msub	r10, i5,a2(1*4)
	mulf	r12, i4,a1(1*4)			//1.23, 1.23, 1.23
	msub	r12, i5,a3(1*4)
	madd	r10, i5,a2(0*4)
	madd	r12, i5,a3(0*4)
	mov		a0(0*4), r10
	mov		a1(0*4), r12
strLR16k:

// Steering Filter L,R 480Hz high pass filters
	movi	AGRAdr2, L+(BLOCKSIZE-1) * 4
	movi	AGRAdr3, R+(BLOCKSIZE-1) * 4

	movi	AGRAdr0, L480+(BLOCKSIZE-1) * 4
	movi	AGRAdr1, R480+(BLOCKSIZE-1) * 4

	movi	AGRAdr4, iir_h1p480_1
	movi	AGRAdr5, iir_h1p480_2

	mulf	r10, i4,a0(-15*4)			//1.23, 1.23, 1.23
	msub	r10, i5,a2(-15*4)
	mulf	r12, i4,a1(-15*4)			//1.23, 1.23, 1.23
	msub	r12, i5,a3(-15*4)
	madd	r10, i5,a2(0*4)
	madd	r12, i5,a3(0*4)
	mov		a0(0*4), r10
	mov		a1(0*4), r12

	loop	BLOCKSIZE-1, strLR480
	mulf	r10, i4,a0(1*4)			//1.23, 1.23, 1.23
	msub	r10, i5,a2(1*4)
	mulf	r12, i4,a1(1*4)			//1.23, 1.23, 1.23
	msub	r12, i5,a3(1*4)
	madd	r10, i5,a2(0*4)
	madd	r12, i5,a3(0*4)
	mov		a0(0*4), r10
	mov		a1(0*4), r12
strLR480:

// Steering Filter L-R,L+R 480Hz high pass filters
	movi	AGRAdr2, LMR+(BLOCKSIZE-1) * 4
	movi	AGRAdr3, LPR+(BLOCKSIZE-1) * 4

	movi	AGRAdr0, LMR480+(BLOCKSIZE-1) * 4
	movi	AGRAdr1, LPR480+(BLOCKSIZE-1) * 4

	mulf	r10, i4,a0(-15*4)			//1.23, 1.23, 1.23
	msub	r10, i5,a2(-15*4)
	mulf	r12, i4,a1(-15*4)			//1.23, 1.23, 1.23
	msub	r12, i5,a3(-15*4)
	madd	r10, i5,a2(0*4)
	madd	r12, i5,a3(0*4)
	mov		a0(0*4), r10
	mov		a1(0*4), r12

	loop	BLOCKSIZE-1, strLMPR480
	mulf	r10, i4,a0(1*4)			//1.23, 1.23, 1.23
	msub	r10, i5,a2(1*4)
	mulf	r12, i4,a1(1*4)			//1.23, 1.23, 1.23
	msub	r12, i5,a3(1*4)
	madd	r10, i5,a2(0*4)
	madd	r12, i5,a3(0*4)
	mov		a0(0*4), r10
	mov		a1(0*4), r12
strLMPR480:

//Log Difference for 16KHz high pass filtered L,R signals

⌨️ 快捷键说明

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