FFTLIB User Guide
FFTLIB_UTIL_SA0Cstore.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_SA0CSTORE_H_
38 #define COMMON_FFTLIB_UTIL_SA0CSTORE_H_ 1
39 
40 /*******************************************************************************
41  *
42  * INCLUDES
43  *
44  ******************************************************************************/
45 
46 
47 
48 
49 /******************************************************************************/
50 
51 /* ---------------------------------------------------------------- */
52 /* MISRAC Rule 8.13(NEEDS.CONST) Deviation: CbackDestination cannot*/
53 /* be declared with const qualifier because data is copied into */
54 /* buffer pointed by the pointer. */
55 /* ---------------------------------------------------------------- */
56 /******************************************************************************/
66 /******************************************************************************/
67 #ifdef __cplusplus
68 #pragma FUNC_ALWAYS_INLINE
69 #else
70 #pragma FUNC_ALWAYS_INLINE(FFTLIB_UTIL_SA0Cstore)
71 #endif
72 static inline void FFTLIB_UTIL_SA0Cstore(int32_t numRows, uint8_t *CbackDestination)
73 {
74  int32_t r;
75  __mma_vec VB0;
76 
77  for(r = 0; r < numRows; r++){
78  // move row of CBack to transfer buffer
79  __HWAXFER(__MMA_XFER_SRC_C);
80  // move row from transfer buffer to VB (data enters C7x core)
81  VB0 = __HWARCV(0);
82  __HWAADV();
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  return;
90 }
91 
92 /* ---------------------------------------------------------------- */
93 /* MISRAC Rule 8.13(NEEDS.CONST) Deviation: CbackDestination cannot*/
94 /* be declared with const qualifier because data is copied into */
95 /* buffer pointed by the pointer. */
96 /* ---------------------------------------------------------------- */
97 #ifdef __cplusplus
98 #pragma FUNC_ALWAYS_INLINE
99 #else
100 #pragma FUNC_ALWAYS_INLINE(FFTLIB_UTIL_SA0Cstore_unroll)
101 #endif
102 #ifdef __cplusplus
103 template <int32_t UNROLL_TIMES>
104 static inline void FFTLIB_UTIL_SA0Cstore_unroll(int32_t numRows, uint8_t *CbackDestination)
105 {
106  int32_t r;
107  __mma_vec VB0;
108  __vpred tmp;
109  //_nassert(numRows == 32);
110  FFTLIB_UNROLL(UNROLL_TIMES)
111  for(r = 0; r < numRows; r++){
112  // move row of CBack to transfer buffer
113  __HWAXFER(__MMA_XFER_SRC_C);
114  // move row from transfer buffer to VB (data enters C7x core)
115  VB0 = __HWARCV(0);
116  __HWAADV();
117  // move row from VB to memory
118  tmp = c7x::strm_agen<0, __mma_vec>::get_vpred();
119  __mma_vec * VB1 = c7x::strm_agen<0, __mma_vec>::get_adv(CbackDestination);
120  //FFTLIB_DEBUGPRINTFN(2, "store address: %p\n", __SA0(uchar64, CbackDestination));
121  __vstore_pred(tmp, VB1, VB0);
122  }
123  return;
124 }
125 #endif
126 #endif /* COMMON_FFTLIB_UTIL_SA0CSTORE_H_ */
static void FFTLIB_UTIL_SA0Cstore(int32_t numRows, uint8_t *CbackDestination)