FFTLIB User Guide
FFTLIB_UTIL_SE0AloadComputeCSA0Cstore.h
Go to the documentation of this file.
1 /******************************************************************************/
5 /* Copyright (C) 2015 Texas Instruments Incorporated - https://www.ti.com/
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  *
14  * Redistributions in binary form must reproduce the above copyright
15  * notice, this list of conditions and the following disclaimer in the
16  * documentation and/or other materials provided with the
17  * distribution.
18  *
19  * Neither the name of Texas Instruments Incorporated nor the names of
20  * its contributors may be used to endorse or promote products derived
21  * from this software without specific prior written permission.
22  *
23  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34  *
35  ******************************************************************************/
36 
37 #ifndef COMMON_FFTLIB_UTIL_SE0ALOADCOMPUTECSA0CSTORE_H_
38 #define COMMON_FFTLIB_UTIL_SE0ALOADCOMPUTECSA0CSTORE_H_ 1
39 
40 /*******************************************************************************
41  *
42  * INCLUDES
43  *
44  ******************************************************************************/
45 
46 
47 
48 /******************************************************************************/
49 
50 /* ---------------------------------------------------------------- */
51 /* MISRAC Rule 8.13(NEEDS.CONST) Deviation: CbackDestination cannot*/
52 /* be declared with const qualifier because data is copied into */
53 /* buffer pointed by the pointer. */
54 /* ---------------------------------------------------------------- */
55 /******************************************************************************/
64 /******************************************************************************/
65 
68  int32_t numRows,
69  uint8_t * CbackDestination)
70 {
71  int32_t r;
72  __mma_vec VB0;
73 
74 //#pragma MUST_ITERATE(1)
75  for(r = 0; r < numRows; r++){
76  __mma_vec valA = c7x::strm_eng<0, __mma_vec>::get_adv();
77  __HWALDA(valA);
78  __HWAOPXFER(__MMA_A_LDA);
79  // move row from transfer buffer to VB
80  VB0 = __HWARCV(0);
81  __HWAADV();
82 
83  // move row from VB to memory
84  __vpred tmp = c7x::strm_agen<0, __mma_vec>::get_vpred();
85  __mma_vec * VB1 = c7x::strm_agen<0, __mma_vec>::get_adv(CbackDestination);
86  //FFTLIB_DEBUGPRINTFN(2, "store address: %p\n", __SA0(uchar64, CbackDestination));
87  __vstore_pred(tmp, VB1, VB0);
88  }
89 
90  return;
91 }
92 
93 /* ---------------------------------------------------------------- */
94 /* MISRAC Rule 8.13(NEEDS.CONST) Deviation: CbackDestination cannot*/
95 /* be declared with const qualifier because data is copied into */
96 /* buffer pointed by the pointer. */
97 /* ---------------------------------------------------------------- */
98 
100 static inline void FFTLIB_UTIL_SE0AloadComputeCSA0Cstore_unroll16(int32_t numRows,
101  uint8_t *restrict CbackDestination)
102 {
103  int32_t r;
104  __mma_vec VB0;
105 
106  FFTLIB_UNROLL(16)
107  for(r = 0; r < numRows; r++){
108  __mma_vec valA = c7x::strm_eng<0, __mma_vec>::get_adv();
109  __HWALDA(valA);
110  __HWAOPXFER(__MMA_A_LDA);
111  // move row from transfer buffer to VB
112  VB0 = __HWARCV(0);
113  __HWAADV();
114 
115  // move row from VB to memory
116  __vpred tmp = c7x::strm_agen<0, __mma_vec>::get_vpred();
117  __mma_vec * VB1 = c7x::strm_agen<0, __mma_vec>::get_adv(CbackDestination);
118  //FFTLIB_DEBUGPRINTFN(2, "store address: %p\n", __SA0(uchar64, CbackDestination));
119  __vstore_pred(tmp, VB1, VB0);
120  }
121  return;
122 }
123 
124 /* ---------------------------------------------------------------- */
125 /* MISRAC Rule 8.13(NEEDS.CONST) Deviation: CbackDestination cannot*/
126 /* be declared with const qualifier because data is copied into */
127 /* buffer pointed by the pointer. */
128 /* ---------------------------------------------------------------- */
129 
131 static inline void FFTLIB_UTIL_SE0AloadComputeCSA0Cstore_unroll32(int32_t numRows,
132  uint8_t *restrict CbackDestination)
133 {
134  int32_t r;
135  __mma_vec VB0;
136 
137  FFTLIB_UNROLL(32)
138  for(r = 0; r < numRows; r++){
139  __mma_vec valA = c7x::strm_eng<0, __mma_vec>::get_adv();
140  __HWALDA(valA);
141  __HWAOPXFER(__MMA_A_LDA);
142  // move row from transfer buffer to VB
143  VB0 = __HWARCV(0);
144  __HWAADV();
145 
146  // move row from VB to memory
147  __vpred tmp = c7x::strm_agen<0, __mma_vec>::get_vpred();
148  __mma_vec * VB1 = c7x::strm_agen<0, __mma_vec>::get_adv(CbackDestination);
149  //FFTLIB_DEBUGPRINTFN(2, "store address: %p\n", __SA0(uchar64, CbackDestination));
150  __vstore_pred(tmp, VB1, VB0);
151  }
152  return;
153 }
154 
155 /* ---------------------------------------------------------------- */
156 /* MISRAC Rule 8.13(NEEDS.CONST) Deviation: CbackDestination cannot*/
157 /* be declared with const qualifier because data is copied into */
158 /* buffer pointed by the pointer. */
159 /* ---------------------------------------------------------------- */
160 
162 static inline void FFTLIB_UTIL_SE0AloadComputeCSA0Cstore_unroll64(int32_t numRows,
163  uint8_t *restrict CbackDestination)
164 {
165  int32_t r;
166  __mma_vec VB0;
167 
168  FFTLIB_UNROLL(64)
169  for(r = 0; r < numRows; r++){
170  __mma_vec valA = c7x::strm_eng<0, __mma_vec>::get_adv();
171  __HWALDA(valA);
172  __HWAOPXFER(__MMA_A_LDA);
173  // move row from transfer buffer to VB
174  VB0 = __HWARCV(0);
175  __HWAADV();
176 
177  // move row from VB to memory
178  __vpred tmp = c7x::strm_agen<0, __mma_vec>::get_vpred();
179  __mma_vec * VB1 = c7x::strm_agen<0, __mma_vec>::get_adv(CbackDestination);
180  //FFTLIB_DEBUGPRINTFN(2, "store address: %p\n", __SA0(uchar64, CbackDestination));
181  __vstore_pred(tmp, VB1, VB0);
182  }
183  return;
184 }
185 
186 /* ---------------------------------------------------------------- */
187 /* MISRAC Rule 8.13(NEEDS.CONST) Deviation: CbackDestination cannot*/
188 /* be declared with const qualifier because data is copied into */
189 /* buffer pointed by the pointer. */
190 /* ---------------------------------------------------------------- */
192 template <int32_t UNROLL_TIMES>
193 static inline void FFTLIB_UTIL_SE0AloadComputeCSA0Cstore_unroll(int32_t numRows,
194  uint8_t *restrict CbackDestination)
195 {
196  int32_t r;
197  __mma_vec VB0;
198 
199  FFTLIB_UNROLL(UNROLL_TIMES)
200  for(r = 0; r < numRows; r++){
201  __mma_vec valA = c7x::strm_eng<0, __mma_vec>::get_adv();
202  __HWALDA(valA);
203  __HWAOPXFER(__MMA_A_LDA);
204  // move row from transfer buffer to VB
205  VB0 = __HWARCV(0);
206  __HWAADV();
207 
208  // move row from VB to memory
209  __vpred tmp = c7x::strm_agen<0, __mma_vec>::get_vpred();
210  __mma_vec * VB1 = c7x::strm_agen<0, __mma_vec>::get_adv(CbackDestination);
211  //FFTLIB_DEBUGPRINTFN(2, "store address: %p\n", __SA0(uchar64, CbackDestination));
212  __vstore_pred(tmp, VB1, VB0);
213  }
214  return;
215 }
216 
217 
218 /* ---------------------------------------------------------------- */
219 /* MISRAC Rule 8.13(NEEDS.CONST) Deviation: CbackDestination cannot*/
220 /* be declared with const qualifier because data is copied into */
221 /* buffer pointed by the pointer. */
222 /* ---------------------------------------------------------------- */
224 static inline void FFTLIB_UTIL_SE0AloadComputeCSA0Cstore_OE(int32_t numRows, int32_t numBlockRows,
225  uint8_t *restrict CbackDestination)
226 {
227  int64_t r;
228  int64_t ARows = (int64_t) numRows;
229  int64_t CRows = (int64_t) numRows;
230  int64_t blockRows = (int64_t) numBlockRows;
231  __mma_vec zeroVect = (__mma_vec)(0);
232  __mma_vec AVal;
233  __mma_vec VB0;
234 
235 #pragma MUST_ITERATE(1)
236 #pragma LOOP_NO_ALIAS
237  for (r = 0; r < blockRows; r++)
238  {
239  AVal = (ARows-- > 0) ? c7x::strm_eng<0, __mma_vec>::get_adv() : zeroVect;
240 
241  __HWALDA(AVal);
242  __HWAOPXFER(__MMA_A_LDA);
243  // move row from transfer buffer to VB
244  VB0 = __HWARCV(0);
245  // store row of CBack from transfer buffer to memory
246  if(CRows != 0){
247  // move row from VB to memory
248  __vpred tmp = c7x::strm_agen<0, __mma_vec>::get_vpred();
249  __mma_vec * VB1 = c7x::strm_agen<0, __mma_vec>::get_adv(CbackDestination);
250  //FFTLIB_DEBUGPRINTFN(2, "store address: %p\n", __SA0(uchar64, CbackDestination));
251  __vstore_pred(tmp, VB1, VB0);
252 
253  CRows--;
254  }
255  }
256  return;
257 }
258 
259 #endif /* COMMON_FFTLIB_UTIL_SE0ALOADCOMPUTECSA0CSTORE_H_ */
static void FFTLIB_UTIL_SE0AloadComputeCSA0Cstore_unroll(int32_t numRows, uint8_t *restrict CbackDestination)
static void FFTLIB_UTIL_SE0AloadComputeCSA0Cstore_unroll16(int32_t numRows, uint8_t *restrict CbackDestination)
static void FFTLIB_UTIL_SE0AloadComputeCSA0Cstore(int32_t numRows, uint8_t *CbackDestination)
static void FFTLIB_UTIL_SE0AloadComputeCSA0Cstore_OE(int32_t numRows, int32_t numBlockRows, uint8_t *restrict CbackDestination)
static void FFTLIB_UTIL_SE0AloadComputeCSA0Cstore_unroll64(int32_t numRows, uint8_t *restrict CbackDestination)
static void FFTLIB_UTIL_SE0AloadComputeCSA0Cstore_unroll32(int32_t numRows, uint8_t *restrict CbackDestination)
#define __INLINE_FUNC(x)
Definition: FFTLIB_types.h:67