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_q31_to_q7(
00058 q31_t * pSrc,
00059 q7_t * pDst,
00060 uint32_t blockSize)
00061 {
00062 q31_t *pIn = pSrc;
00063 uint32_t blkCnt;
00064 q31_t in1, in2, in3, in4;
00065 q31_t in5, in6, in7, in8;
00066 q7_t out1, out2, out3, out4;
00067
00068
00069 blkCnt = blockSize >> 3u;
00070
00071
00072
00073 while(blkCnt > 0u)
00074 {
00075
00076
00077
00078 in1 = pIn[0];
00079 in2 = pIn[1];
00080 out1 = (q7_t)(in1 >> 24);
00081 in3 = pIn[2];
00082 out2 = (q7_t)(in2 >> 24);
00083 in4 = pIn[3];
00084
00085 out3 = (q7_t)(in3 >> 24);
00086 out4 = (q7_t)(in4 >> 24);
00087
00088 *__SIMD32(pDst)++ = __PACKq7(out1, out2, out3, out4);
00089
00090 in5 = pIn[4];
00091 in6 = pIn[5];
00092 out1 = (q7_t)(in5 >> 24);
00093 in7 = pIn[6];
00094 out2 = (q7_t)(in6 >> 24);
00095 in8 = pIn[7];
00096
00097 out3 = (q7_t)(in7 >> 24);
00098 out4 = (q7_t)(in8 >> 24);
00099
00100 *__SIMD32(pDst)++ = __PACKq7(out1, out2, out3, out4);
00101
00102
00103 pIn += 8u;
00104
00105
00106 blkCnt--;
00107 }
00108
00109
00110
00111 blkCnt = blockSize % 0x8u;
00112
00113 while(blkCnt > 0u)
00114 {
00115
00116
00117 *pDst++ = (q7_t) (*pIn++ >> 24);
00118
00119
00120 blkCnt--;
00121 }
00122
00123 }
00124