diff options
Diffstat (limited to 'Drivers/CMSIS/DSP/Source/SupportFunctions/arm_q15_to_q31.c')
-rw-r--r-- | Drivers/CMSIS/DSP/Source/SupportFunctions/arm_q15_to_q31.c | 92 |
1 files changed, 43 insertions, 49 deletions
diff --git a/Drivers/CMSIS/DSP/Source/SupportFunctions/arm_q15_to_q31.c b/Drivers/CMSIS/DSP/Source/SupportFunctions/arm_q15_to_q31.c index bf139a817..1afd48940 100644 --- a/Drivers/CMSIS/DSP/Source/SupportFunctions/arm_q15_to_q31.c +++ b/Drivers/CMSIS/DSP/Source/SupportFunctions/arm_q15_to_q31.c @@ -3,13 +3,13 @@ * Title: arm_q15_to_q31.c * Description: Converts the elements of the Q15 vector to Q31 vector * - * $Date: 27. January 2017 - * $Revision: V.1.5.1 + * $Date: 18. March 2019 + * $Revision: V1.6.0 * * Target Processor: Cortex-M cores * -------------------------------------------------------------------- */ /* - * Copyright (C) 2010-2017 ARM Limited or its affiliates. All rights reserved. + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * @@ -29,57 +29,53 @@ #include "arm_math.h" /** - * @ingroup groupSupport + @ingroup groupSupport */ /** - * @addtogroup q15_to_x - * @{ + @addtogroup q15_to_x + @{ */ /** - * @brief Converts the elements of the Q15 vector to Q31 vector. - * @param[in] *pSrc points to the Q15 input vector - * @param[out] *pDst points to the Q31 output vector - * @param[in] blockSize length of the input vector - * @return none. - * - * \par Description: - * - * The equation used for the conversion process is: - * - * <pre> - * pDst[n] = (q31_t) pSrc[n] << 16; 0 <= n < blockSize. - * </pre> - * + @brief Converts the elements of the Q15 vector to Q31 vector. + @param[in] pSrc points to the Q15 input vector + @param[out] pDst points to the Q31 output vector + @param[in] blockSize number of samples in each vector + @return none + + @par Details + The equation used for the conversion process is: + <pre> + pDst[n] = (q31_t) pSrc[n] << 16; 0 <= n < blockSize. + </pre> */ - void arm_q15_to_q31( - q15_t * pSrc, - q31_t * pDst, - uint32_t blockSize) + const q15_t * pSrc, + q31_t * pDst, + uint32_t blockSize) { - q15_t *pIn = pSrc; /* Src pointer */ - uint32_t blkCnt; /* loop counter */ + uint32_t blkCnt; /* Loop counter */ + const q15_t *pIn = pSrc; /* Source pointer */ -#if defined (ARM_MATH_DSP) +#if defined (ARM_MATH_LOOPUNROLL) + q31_t in1, in2; + q31_t out1, out2, out3, out4; +#endif - /* Run the below code for Cortex-M4 and Cortex-M3 */ - q31_t in1, in2; - q31_t out1, out2, out3, out4; +#if defined (ARM_MATH_LOOPUNROLL) - /*loop Unrolling */ + /* Loop unrolling: Compute 4 outputs at a time */ blkCnt = blockSize >> 2U; - /* First part of the processing with loop unrolling. Compute 4 outputs at a time. - ** a second loop below computes the remaining 1 to 3 samples. */ while (blkCnt > 0U) { /* C = (q31_t)A << 16 */ - /* convert from q15 to q31 and then store the results in the destination buffer */ - in1 = *__SIMD32(pIn)++; - in2 = *__SIMD32(pIn)++; + + /* Convert from q15 to q31 and store result in destination buffer */ + in1 = read_q15x2_ia ((q15_t **) &pIn); + in2 = read_q15x2_ia ((q15_t **) &pIn); #ifndef ARM_MATH_BIG_ENDIAN @@ -103,42 +99,40 @@ void arm_q15_to_q31( /* extract lower 16 bits to 32 bit result */ out4 = in2 << 16U; -#endif // #ifndef ARM_MATH_BIG_ENDIAN +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ *pDst++ = out1; *pDst++ = out2; *pDst++ = out3; *pDst++ = out4; - /* Decrement the loop counter */ + /* Decrement loop counter */ blkCnt--; } - /* If the blockSize is not a multiple of 4, compute any remaining output samples here. - ** No loop unrolling is used. */ + /* Loop unrolling: Compute remaining outputs */ blkCnt = blockSize % 0x4U; #else - /* Run the below code for Cortex-M0 */ - - /* Loop over blockSize number of values */ + /* Initialize blkCnt with number of samples */ blkCnt = blockSize; -#endif /* #if defined (ARM_MATH_DSP) */ +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ while (blkCnt > 0U) { - /* C = (q31_t)A << 16 */ - /* convert from q15 to q31 and then store the results in the destination buffer */ - *pDst++ = (q31_t) * pIn++ << 16; + /* C = (q31_t) A << 16 */ + + /* Convert from q15 to q31 and store result in destination buffer */ + *pDst++ = (q31_t) *pIn++ << 16; - /* Decrement the loop counter */ + /* Decrement loop counter */ blkCnt--; } } /** - * @} end of q15_to_x group + @} end of q15_to_x group */ |