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
00057 void arm_q15_to_q31(
00058 q15_t * pSrc,
00059 q31_t * pDst,
00060 uint32_t blockSize)
00061 {
00062 q15_t *pIn = pSrc;
00063 uint32_t blkCnt;
00064 q31_t out1, out2, out3, out4;
00065 q31_t in1, in2, in3, in4;
00066
00067
00068 blkCnt = blockSize >> 3u;
00069
00070
00071
00072 while(blkCnt > 0u)
00073 {
00074
00075
00076
00077 in1 = _SIMD32_OFFSET(pIn);
00078 in2 = _SIMD32_OFFSET(pIn + 2);
00079 in3 = _SIMD32_OFFSET(pIn + 4);
00080 in4 = _SIMD32_OFFSET(pIn + 6);
00081
00082 #ifndef ARM_MATH_BIG_ENDIAN
00083
00084
00085 out1 = in1 << 16u;
00086
00087 out2 = in1 & 0xFFFF0000;
00088
00089 #else
00090
00091
00092 out1 = in1 & 0xFFFF0000;
00093
00094 out2 = in1 << 16u;
00095
00096 #endif // #ifndef ARM_MATH_BIG_ENDIAN
00097
00098
00099 pDst[0] = out1;
00100
00101 #ifndef ARM_MATH_BIG_ENDIAN
00102
00103
00104 out3 = in2 << 16u;
00105
00106
00107 pDst[1] = out2;
00108
00109
00110 out4 = in2 & 0xFFFF0000;
00111
00112 #else
00113
00114
00115 out3 = in2 & 0xFFFF0000;
00116
00117
00118 pDst[1] = out2;
00119
00120
00121 out4 = in2 << 16u;
00122
00123 #endif // #ifndef ARM_MATH_BIG_ENDIAN
00124
00125 pDst[2] = out3;
00126
00127 #ifndef ARM_MATH_BIG_ENDIAN
00128
00129
00130 out1 = in3 << 16u;
00131
00132
00133 pDst[3] = out4;
00134
00135
00136 out2 = in3 & 0xFFFF0000;
00137
00138 #else
00139
00140
00141 out1 = in3 & 0xFFFF0000;
00142
00143
00144 pDst[3] = out4;
00145
00146
00147 out2 = in3 << 16u;
00148
00149 #endif // #ifndef ARM_MATH_BIG_ENDIAN
00150
00151
00152 pDst[4] = out1;
00153
00154
00155 out3 = in4 & 0xFFFF0000;
00156
00157 pDst[5] = out2;
00158
00159
00160 out4 = in4 << 16u;
00161
00162 #ifndef ARM_MATH_BIG_ENDIAN
00163
00164
00165 pDst[7] = out3;
00166
00167
00168 pIn += 8u;
00169
00170
00171 pDst[6] = out4;
00172
00173 #else
00174
00175
00176 pDst[6] = out3;
00177
00178
00179 pIn += 8u;
00180
00181
00182 pDst[7] = out4;
00183
00184 #endif // #ifndef ARM_MATH_BIG_ENDIAN
00185
00186
00187 pDst += 8u;
00188
00189
00190 blkCnt--;
00191 }
00192
00193
00194
00195 blkCnt = blockSize % 0x8u;
00196
00197 while(blkCnt > 0u)
00198 {
00199
00200
00201 *pDst++ = (q31_t) * pIn++ << 16;
00202
00203
00204 blkCnt--;
00205 }
00206
00207 }
00208