Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "arm_math.h"
00025
00061 void arm_q31_to_q15(
00062 q31_t * pSrc,
00063 q15_t * pDst,
00064 uint32_t blockSize)
00065 {
00066 q31_t *pIn = pSrc;
00067 uint32_t blkCnt;
00068 q31_t in1, in2, in3, in4;
00069
00070 q31_t out1, out2, out3, out4;
00071
00072
00073 blkCnt = blockSize >> 3u;
00074
00075
00076
00077 while(blkCnt > 0u)
00078 {
00079
00080
00081
00082 in1 = pIn[0];
00083 in2 = pIn[1];
00084 in3 = pIn[2];
00085 in4 = pIn[3];
00086
00087
00088 #ifndef ARM_MATH_BIG_ENDIAN
00089
00090 out1 = __PKHTB(in2, in1, 16);
00091 out2 = __PKHTB(in4, in3, 16);
00092
00093 #else
00094
00095 out1 = __PKHTB(in1, in2, 16);
00096 out2 = __PKHTB(in3, in4, 16);
00097
00098 #endif // #ifdef ARM_MATH_BIG_ENDIAN
00099
00100
00101 in1 = pIn[4];
00102 in2 = pIn[5];
00103 in3 = pIn[6];
00104 in4 = pIn[7];
00105
00106
00107 #ifndef ARM_MATH_BIG_ENDIAN
00108
00109 out3 = __PKHTB(in2, in1, 16);
00110 out4 = __PKHTB(in4, in3, 16);
00111
00112 #else
00113
00114 out3 = __PKHTB(in1, in2, 16);
00115 out4 = __PKHTB(in3, in4, 16);
00116
00117 #endif // #ifdef ARM_MATH_BIG_ENDIAN
00118
00119
00120 _SIMD32_OFFSET(pDst) = out1;
00121 _SIMD32_OFFSET(pDst + 2) = out2;
00122 _SIMD32_OFFSET(pDst + 4) = out3;
00123 _SIMD32_OFFSET(pDst + 6) = out4;
00124
00125
00126 pIn += 8u;
00127
00128 pDst += 8u;
00129
00130
00131 blkCnt--;
00132 }
00133
00134
00135
00136 blkCnt = blockSize % 0x8u;
00137
00138 while(blkCnt > 0u)
00139 {
00140
00141
00142 *pDst++ = (q15_t) (*pIn++ >> 16);
00143
00144 blkCnt--;
00145 }
00146
00147 }
00148
00149