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
00054 void arm_shift_q7(
00055 q7_t * pSrc,
00056 int8_t shiftBits,
00057 q7_t * pDst,
00058 uint32_t blockSize)
00059 {
00060 uint32_t blkCnt;
00061 uint8_t sign;
00062 q7_t in1;
00063 q7_t in2;
00064 q7_t in3;
00065 q7_t in4;
00066
00067
00068
00069 blkCnt = blockSize >> 3u;
00070
00071
00072 sign = (shiftBits & 0x80);
00073
00074
00075 if(sign == 0u)
00076 {
00077
00078
00079 while(blkCnt > 0u)
00080 {
00081
00082
00083 in1 = *pSrc;
00084 in2 = *(pSrc + 1);
00085 in3 = *(pSrc + 2);
00086 in4 = *(pSrc + 3);
00087
00088
00089 #ifdef CCS
00090 *__SIMD32(pDst)++ = __PACKq7(__SSATA((in1 << shiftBits), 0, 8),
00091 __SSATA((in2 << shiftBits), 0, 8),
00092 __SSATA((in3 << shiftBits), 0, 8),
00093 __SSATA((in4 << shiftBits), 0, 8));
00094 #else
00095 *__SIMD32(pDst)++ = __PACKq7(__SSAT16((in1 << shiftBits), 8),
00096 __SSAT16((in2 << shiftBits), 8),
00097 __SSAT16((in3 << shiftBits), 8),
00098 __SSAT16((in4 << shiftBits), 8));
00099 #endif // #ifdef CCS
00100
00101 in1 = *(pSrc + 4);
00102 in2 = *(pSrc + 5);
00103 in3 = *(pSrc + 6);
00104 in4 = *(pSrc + 7);
00105
00106
00107 #ifdef CCS
00108 *__SIMD32(pDst)++ = __PACKq7(__SSATA((in1 << shiftBits), 0, 8),
00109 __SSATA((in2 << shiftBits), 0, 8),
00110 __SSATA((in3 << shiftBits), 0, 8),
00111 __SSATA((in4 << shiftBits), 0, 8));
00112 #else
00113 *__SIMD32(pDst)++ = __PACKq7(__SSAT16((in1 << shiftBits), 8),
00114 __SSAT16((in2 << shiftBits), 8),
00115 __SSAT16((in3 << shiftBits), 8),
00116 __SSAT16((in4 << shiftBits), 8));
00117 #endif // #ifdef CCS
00118
00119
00120 pSrc += 8u;
00121
00122
00123 blkCnt--;
00124 }
00125
00126
00127
00128 blkCnt = blockSize % 0x8u;
00129
00130 while(blkCnt > 0u)
00131 {
00132
00133
00134 #ifdef CCS
00135 *pDst++ = (q7_t) __SSATA((*pSrc++ << shiftBits), 0, 8);
00136 #else
00137 *pDst++ = (q7_t) __SSAT((*pSrc++ << shiftBits), 8);
00138 #endif // #ifdef CCS
00139
00140
00141 blkCnt--;
00142 }
00143 }
00144 else
00145 {
00146 shiftBits = -shiftBits;
00147
00148
00149 while(blkCnt > 0u)
00150 {
00151
00152
00153 in1 = *pSrc;
00154 in2 = *(pSrc + 1);
00155 in3 = *(pSrc + 2);
00156 in4 = *(pSrc + 3);
00157
00158
00159 *__SIMD32(pDst)++ = __PACKq7((in1 >> shiftBits), (in2 >> shiftBits),
00160 (in3 >> shiftBits), (in4 >> shiftBits));
00161
00162 in1 = *(pSrc + 4);
00163 in2 = *(pSrc + 5);
00164 in3 = *(pSrc + 6);
00165 in4 = *(pSrc + 7);
00166
00167
00168 *__SIMD32(pDst)++ = __PACKq7((in1 >> shiftBits), (in2 >> shiftBits),
00169 (in3 >> shiftBits), (in4 >> shiftBits));
00170
00171 pSrc += 8u;
00172
00173
00174 blkCnt--;
00175 }
00176
00177
00178
00179 blkCnt = blockSize % 0x8u;
00180
00181 while(blkCnt > 0u)
00182 {
00183
00184
00185 in1 = *pSrc++;
00186 *pDst++ = (in1 >> shiftBits);
00187
00188
00189 blkCnt--;
00190 }
00191 }
00192 }
00193