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