1 /* ----------------------------------------------------------------------
2  * Project:      CMSIS DSP Library
3  * Title:        arm_fill_q31.c
4  * Description:  Fills a constant value into a Q31 vector
5  *
6  * $Date:        27. January 2017
7  * $Revision:    V.1.5.1
8  *
9  * Target Processor: Cortex-M cores
10  * -------------------------------------------------------------------- */
11 /*
12  * Copyright (C) 2010-2017 ARM Limited or its affiliates. All rights reserved.
13  *
14  * SPDX-License-Identifier: Apache-2.0
15  *
16  * Licensed under the Apache License, Version 2.0 (the License); you may
17  * not use this file except in compliance with the License.
18  * You may obtain a copy of the License at
19  *
20  * www.apache.org/licenses/LICENSE-2.0
21  *
22  * Unless required by applicable law or agreed to in writing, software
23  * distributed under the License is distributed on an AS IS BASIS, WITHOUT
24  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
25  * See the License for the specific language governing permissions and
26  * limitations under the License.
27  */
28 
29 #include "arm_math.h"
30 
31 /**
32  * @ingroup groupSupport
33  */
34 
35 /**
36  * @addtogroup Fill
37  * @{
38  */
39 
40 /**
41  * @brief Fills a constant value into a Q31 vector.
42  * @param[in]       value input value to be filled
43  * @param[out]      *pDst points to output vector
44  * @param[in]       blockSize length of the output vector
45  * @return none.
46  *
47  */
48 
arm_fill_q31(q31_t value,q31_t * pDst,uint32_t blockSize)49 void arm_fill_q31(
50   q31_t value,
51   q31_t * pDst,
52   uint32_t blockSize)
53 {
54   uint32_t blkCnt;                               /* loop counter */
55 
56 
57 #if defined (ARM_MATH_DSP)
58 
59   /* Run the below code for Cortex-M4 and Cortex-M3 */
60   q31_t in1 = value;
61   q31_t in2 = value;
62   q31_t in3 = value;
63   q31_t in4 = value;
64 
65   /*loop Unrolling */
66   blkCnt = blockSize >> 2u;
67 
68   /* First part of the processing with loop unrolling.  Compute 4 outputs at a time.
69    ** a second loop below computes the remaining 1 to 3 samples. */
70   while (blkCnt > 0u)
71   {
72     /* C = value */
73     /* Fill the value in the destination buffer */
74     *pDst++ = in1;
75     *pDst++ = in2;
76     *pDst++ = in3;
77     *pDst++ = in4;
78 
79     /* Decrement the loop counter */
80     blkCnt--;
81   }
82 
83   /* If the blockSize is not a multiple of 4, compute any remaining output samples here.
84    ** No loop unrolling is used. */
85   blkCnt = blockSize % 0x4u;
86 
87 #else
88 
89   /* Run the below code for Cortex-M0 */
90 
91   /* Loop over blockSize number of values */
92   blkCnt = blockSize;
93 
94 #endif /* #if defined (ARM_MATH_DSP) */
95 
96   while (blkCnt > 0u)
97   {
98     /* C = value */
99     /* Fill the value in the destination buffer */
100     *pDst++ = value;
101 
102     /* Decrement the loop counter */
103     blkCnt--;
104   }
105 }
106 
107 /**
108  * @} end of Fill group
109  */
110