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

📄 c8_3_1.c

📁 dsp入门与实践一书的源代码
💻 C
字号:
int syn_acc_c 
( const 	unsigned char 	*restrict byte_i,
			unsigned char 	*s1,
			unsigned char 	*s2,
			const unsigned char 	*restrict beta,
			const unsigned char 	*restrict beta_RS_N_4,
			const unsigned char 	*restrict beta_RS_N_2,
			const unsigned char 	*restrict beta_RS_3N_4, 
			const unsigned char 	*restrict beta_RS_5N_4,
			int 				RS_N,
			int 				RS_2T	 )
	{
		double 			betadword0, betadword1, beta4dword0, beta4dword1;
		double 			beta2dword0, beta2dword1, beta3dword0, beta3dword1;
		double 			beta5dword0;//, beta5dword1;
		double 			*betaptr, *beta4ptr, *beta2ptr, *beta3ptr, *beta5ptr;
		unsigned int 		betaword0, betaword1, betaword2, betaword3;
		unsigned int 		beta4word0, beta4word1, beta4word2, beta4word3;
		unsigned int 		beta2word0, beta2word1, beta2word2, beta2word3;
		unsigned int 		beta3word0, beta3word1, beta3word2, beta3word3;
		unsigned int 		beta5word0, beta5word1;
		int 				N, i, offset1, offset2, offset3;
		int 				offset4, offset5, offset6, offset7;
		const unsigned char 	*byte_iptr, *byte_ioff1ptr, *byte_ioff2ptr;
		const unsigned char 	*byte_ioff3ptr,*byte_ioff4ptr, *byte_ioff5ptr;
		const unsigned char 	*byte_ioff6ptr, *byte_ioff7ptr;
		unsigned int 		byteval, byteval1, byteval2, byteval3;
		unsigned int 		byteval4, byteval5, byteval6, byteval7;
		unsigned int		s0_startval, s1_startval, s2_startval, s3_startval;
		unsigned int 		s4_startval, s5_startval, s6_startval, s7_startval;
		unsigned int 		s1_w0, s2_w0, s3_w0, s4_w0;
		unsigned int 		s1_w1, s2_w1, s3_w1, s4_w1;
		unsigned int 		s1_w2, s2_w2, s3_w2, s4_w2; 
		unsigned int 		s1_w3, s2_w3, s3_w3, s4_w3;
		unsigned int 		iters;
		int 				r, t, st, status, modval, diff, val;
		int 				zero = 0;
		int 				ret0, ret1, ret2, ret3, ret10, ret23, ret;
		unsigned int 		byte_i0, byte_i1, byte_i2, byte_i3;
		unsigned int 		byte_i4, byte_i5, byte_i6, byte_i7;
		unsigned int 		tmp1w0, tmp1w1, tmp1w2, tmp1w3;
		unsigned int 		tmp2w0, tmp2w1, tmp2w2, tmp2w3;
		unsigned int 		tmp3w0, tmp3w1, tmp3w2, tmp3w3;
		unsigned int		tmp4w0, tmp4w1, tmp4w2, tmp4w3;
		unsigned int		temp;
		unsigned int 		temp1w0, temp2w0, temp3w0, sum2w0, sum1w0, sumw0;
		unsigned int 		temp1w1, temp2w1, temp3w1, sum2w1, sum1w1, sumw1;
		unsigned int 		temp1w2, temp2w2, temp3w2, sum2w2, sum1w2, sumw2;
		unsigned int 		temp1w3, temp2w3, temp3w3, sum2w3, sum1w3, sumw3; 		

		unsigned int *s1ptr = (unsigned int *) (s1);
		betaptr = (double *) (beta);
		beta4ptr = (double *) (beta_RS_N_4);
		beta2ptr = (double *) (beta_RS_N_2);
		beta3ptr = (double *) (beta_RS_3N_4);
		beta5ptr = (double *) (beta_RS_5N_4);
		betadword0 = betaptr[0]; 			betadword1 = betaptr[1];
		beta4dword0 = beta4ptr[0]; 			beta4dword1 = beta4ptr[1];
		beta2dword0 = beta2ptr[0]; 			beta2dword1 = beta2ptr[1];
		beta3dword0 = beta3ptr[0]; 			beta3dword1 = beta3ptr[1];
		beta5dword0 = beta5ptr[0];
		betaword0 = _lo(betadword0); 		betaword1 = _hi(betadword0);
		betaword2 = _lo(betadword1); 		betaword3 = _hi(betadword1);
		beta4word0 = _lo(beta4dword0); 		beta4word1 = _hi(beta4dword0);
		beta4word2 = _lo(beta4dword1); 		beta4word3 = _hi(beta4dword1);
		beta2word0 = _lo(beta2dword0); 		beta2word1 = _hi(beta2dword0);
		beta2word2 = _lo(beta2dword1); 		beta2word3 = _hi(beta2dword1);
		beta3word0 = _lo(beta3dword0); 		beta3word1 = _hi(beta3dword0);
		beta3word2 = _lo(beta3dword1); 		beta3word3 = _hi(beta3dword1);
		beta5word0 = _lo(beta5dword0); 		beta5word1 = _hi(beta5dword0); 

		N = RS_N;
		r = 4;
		t = RS_2T >> 1;
		status = (t < 5) ? 1:0;
		if (status) r = 8;
		temp = N + r;
		val = r - 1; 
		modval = temp & val;
		if (!modval) modval = r;
		diff = r - modval;
		N = N + diff; 

		offset1 = N >> 3; 			offset2 = N >> 2; 			offset4 = N >> 1;
		offset3 = offset1 + offset2; 		offset5 = offset1 + offset4;		offset6 = offset2 + offset4; 				offset7 = offset1 + offset6;		offset1 -= diff; 				offset2 -= diff;
		offset3 -= diff; 				offset4 -= diff;				offset5 -= diff; 						offset6 -= diff;				offset7 -= diff;
		byte_iptr = byte_i; 				byte_ioff1ptr = byte_iptr + offset1;
		byte_ioff2ptr = byte_iptr + offset2; 	byte_ioff3ptr = byte_iptr + offset3;
		byte_ioff4ptr = byte_iptr + offset4; 	byte_ioff5ptr = byte_iptr + offset5;
		byte_ioff6ptr = byte_iptr + offset6; 	byte_ioff7ptr = byte_iptr + offset7; 
		
		byteval = 0;
		if (!diff) byteval = *byte_iptr++;
		if (diff) diff--;
		byteval1 = *byte_ioff1ptr++; 		byteval2 = *byte_ioff2ptr++;
		byteval3 = *byte_ioff3ptr++; 		byteval4 = *byte_ioff4ptr++;
		byteval5 = *byte_ioff5ptr++; 		byteval6 = *byte_ioff6ptr++;
		byteval7 = *byte_ioff7ptr++;

		st = status;
		iters = N >> 2;
		if (st) iters = N >> 3;
		iters--; 
		temp = _pack2(byteval,byteval);
		s1_startval = _packl4(temp, temp);
		s0_startval = s1_startval;
		temp = _pack2(byteval1,byteval1);
		if (st) s0_startval = _packl4(temp,temp);
		
		temp = _pack2(byteval2,byteval2);
		s3_startval = _packl4(temp, temp);
		s2_startval = s3_startval;
		temp = _pack2(byteval3,byteval3);
		if (st) s2_startval = _packl4(temp,temp);
		
		temp = _pack2(byteval4,byteval4);
		s5_startval = _packl4(temp, temp);
		s4_startval = s5_startval;
		temp = _pack2(byteval5,byteval5);
		if (st) s4_startval = _packl4(temp,temp);
		
		temp = _pack2(byteval6,byteval6);
		s7_startval = _packl4(temp, temp);
		s6_startval = s7_startval;
		temp = _pack2(byteval7,byteval7);
		if (st) s6_startval = _packl4(temp,temp);
		
		s1_w0 = s1_w1 = s1_startval; 		s2_w0 = s2_w1 = s3_startval;
		s3_w0 = s3_w1 = s5_startval; 		s4_w0 = s4_w1 = s7_startval;
		s1_w2 = s1_w3 = s0_startval; 		s2_w2 = s2_w3 = s2_startval;
		s3_w2 = s3_w3 = s4_startval; 		s4_w2 = s4_w3 = s6_startval; 

		for ( i = 0; i < iters; i++)
		{
				if (!diff) byteval = *byte_iptr++;
				if (diff) diff--;
				byteval2 = *byte_ioff2ptr++;
				byteval4 = *byte_ioff4ptr++;
				byteval6 = *byte_ioff6ptr++;
				if (st) byteval1 = *byte_ioff1ptr++;
				if (st) byteval3 = *byte_ioff3ptr++;
				if (st) byteval5 = *byte_ioff5ptr++;
				if (st) byteval7 = *byte_ioff7ptr++;

				temp = _pack2(byteval, byteval);
				byte_i1 = byte_i0 = _packl4(temp,temp);
				temp = _pack2(byteval1,byteval1);
				if (st) byte_i1 = _packl4(temp,temp);
				
				temp = _pack2(byteval2, byteval2);
				byte_i3 = byte_i2 = _packl4(temp,temp);
				temp = _pack2(byteval3,byteval3);
				if (st) byte_i3 = _packl4(temp,temp);
				
				temp = _pack2(byteval4, byteval4);
				byte_i5 = byte_i4 = _packl4(temp,temp);
				temp = _pack2(byteval5,byteval5);
				if (st) byte_i5 = _packl4(temp,temp);
				
				temp = _pack2(byteval6, byteval6);
				byte_i7 = byte_i6 = _packl4(temp,temp);
				temp = _pack2(byteval7,byteval7);
				if (st) byte_i7 = _packl4(temp,temp);
				
				tmp1w0 = _gmpy4(s1_w0, betaword0);
				s1_w0 = tmp1w0 ^ byte_i0;
				tmp2w0 = _gmpy4(s2_w0, betaword0);
				s2_w0 = tmp2w0 ^ byte_i2;
				tmp3w0 = _gmpy4(s3_w0, betaword0); 
				s3_w0 = tmp3w0 ^ byte_i4;
				tmp4w0 = _gmpy4(s4_w0, betaword0);
				s4_w0 = tmp4w0 ^ byte_i6; 

				tmp1w1 = _gmpy4(s1_w1, betaword1);
				s1_w1 = tmp1w1 ^ byte_i0;
				tmp2w1 = _gmpy4(s2_w1, betaword1);
				s2_w1 = tmp2w1 ^ byte_i2;
				tmp3w1 = _gmpy4(s3_w1, betaword1);
				s3_w1 = tmp3w1 ^ byte_i4;
				tmp4w1 = _gmpy4(s4_w1, betaword1);
			
				tmp1w2 = _gmpy4(s1_w2, betaword2);
				s1_w2 = tmp1w2 ^ byte_i1;
				tmp2w2 = _gmpy4(s2_w2, betaword2);
				s2_w2 = tmp2w2 ^ byte_i3;
				tmp3w2 = _gmpy4(s3_w2, betaword2);
				s3_w2 = tmp3w2 ^ byte_i5;
				tmp4w2 = _gmpy4(s4_w2, betaword2);
				s4_w2 = tmp4w2 ^ byte_i7; 

				tmp1w3 = _gmpy4(s1_w3, betaword3);
				s1_w3 = tmp1w3 ^ byte_i1;
				tmp2w3 = _gmpy4(s2_w3, betaword3);
				s2_w3 = tmp2w3 ^ byte_i3;
				tmp3w3 = _gmpy4(s3_w3, betaword3);
				s3_w3 = tmp3w3 ^ byte_i5;
				tmp4w3 = _gmpy4(s4_w3, betaword3);
				s4_w3 = tmp4w3 ^ byte_i7; 

				temp2w0 = _gmpy4(s2_w0, beta2word0);
				temp3w0 = _gmpy4(s3_w0, beta4word0);
				sum2w0 = temp1w0 ^ temp2w0;
				if (st) s4_w0 = _gmpy4(s4_w0,beta5word0);
				
				sum1w0 = temp3w0 ^ s4_w0;
				sumw0 = sum1w0 ^ sum2w0;
				
				temp1w1 = _gmpy4(s1_w1, beta3word1);
				temp2w1 = _gmpy4(s2_w1, beta2word1);
				temp3w1 = _gmpy4(s3_w1, beta4word1);
				sum2w1 = temp1w1 ^ temp2w1;
				if (st) s4_w1 = _gmpy4(s4_w1,beta5word1);
				
				sum1w1 = temp3w1 ^ s4_w1;
				sumw1 = sum1w1 ^ sum2w1;
				
				temp1w2 = _gmpy4(s1_w2, beta3word2);
				temp2w2 = _gmpy4(s2_w2, beta2word2);
				temp3w2 = _gmpy4(s3_w2, beta4word2);
				sum2w2 = temp1w2 ^ temp2w2;
				sum1w2 = temp3w2 ^ s4_w2;
				sumw2 = sum1w2 ^ sum2w2;
				
				temp1w3 = _gmpy4(s1_w3, beta3word3);
				temp2w3 = _gmpy4(s2_w3, beta2word3);
				temp3w3 = _gmpy4(s3_w3, beta4word3);
				sum2w3 = temp1w3 ^ temp2w3;
				sum1w3 = temp3w3 ^ s4_w3;
				sumw3 = sum1w3 ^ sum2w3;
				
				if (st) sumw0 = sumw0 ^ sumw2;
				if (st) sumw1 = sumw1 ^ sumw3;
				
				*s1ptr++ = sumw0; 			*s1ptr++ = sumw1;

				ret0 = _cmpgtu4(sumw0, zero); 	ret1 = _cmpgtu4(sumw1, zero);
				ret10 = ret0 + ret1;
				if (!st) *s1ptr++ = sumw2; 		if (!st) *s1ptr++ = sumw3;
				ret2 = _cmpgtu4(sumw2, zero); 	ret3 = _cmpgtu4(sumw3, zero);
				ret23 = ret2 + ret3;
				ret = 0;
				if (!st) ret = ret10 + ret23;
				if (st) ret = ret10;
				if (ret) ret = 1;
				return(ret);		
		}

⌨️ 快捷键说明

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