Set blackbox file handler to NULL after closing file
[inav.git] / lib / main / CMSIS / DSP / Source / TransformFunctions / arm_bitreversal2.S
blobe0a82dbc767605c1adcf73c2564a646914af4e2d
1 ;/* ----------------------------------------------------------------------
2 ; * Project:      CMSIS DSP Library
3 ; * Title:        arm_bitreversal2.S
4 ; * Description:  arm_bitreversal_32 function done in assembly for maximum speed.
5 ; *               Called after doing an fft to reorder the output.
6 ; *               The function is loop unrolled by 2. arm_bitreversal_16 as well.
7 ; *
8 ; * $Date:        27. January 2017
9 ; * $Revision:    V.1.5.1
10 ; *
11 ; * Target Processor: Cortex-M cores
12 ; * -------------------------------------------------------------------- */
13 ;/*
14 ; * Copyright (C) 2010-2017 ARM Limited or its affiliates. All rights reserved.
15 ; *
16 ; * SPDX-License-Identifier: Apache-2.0
17 ; *
18 ; * Licensed under the Apache License, Version 2.0 (the License); you may
19 ; * not use this file except in compliance with the License.
20 ; * You may obtain a copy of the License at
21 ; *
22 ; * www.apache.org/licenses/LICENSE-2.0
23 ; *
24 ; * Unless required by applicable law or agreed to in writing, software
25 ; * distributed under the License is distributed on an AS IS BASIS, WITHOUT
26 ; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
27 ; * See the License for the specific language governing permissions and
28 ; * limitations under the License.
29 ; */
31 #if   defined ( __CC_ARM )     /* Keil */
32     #define CODESECT AREA     ||.text||, CODE, READONLY, ALIGN=2
33     #define LABEL
34 #elif defined ( __IASMARM__ )  /* IAR */
35     #define CODESECT SECTION `.text`:CODE
36     #define PROC
37     #define LABEL
38     #define ENDP
39     #define EXPORT PUBLIC
40 #elif defined ( __CSMC__ )         /* Cosmic */
41         #define CODESECT        switch .text
42         #define THUMB
43         #define EXPORT  xdef
44         #define PROC    :
45         #define LABEL   :
46         #define ENDP
47         #define arm_bitreversal_32 _arm_bitreversal_32
48 #elif defined ( __TI_ARM__ )   /* TI ARM */
49     #define THUMB    .thumb
50     #define CODESECT .text
51     #define EXPORT   .global
52     #define PROC     : .asmfunc
53     #define LABEL    :
54     #define ENDP     .endasmfunc
55     #define END
56 #elif defined ( __GNUC__ )     /* GCC */
57     #define THUMB .thumb
58     #define CODESECT .section .text
59     #define EXPORT .global
60     #define PROC :
61     #define LABEL :
62     #define ENDP
63     #define END
65     .syntax unified
66 #endif
68         CODESECT
69         THUMB
71 ;/*
72 ;* @brief  In-place bit reversal function.
73 ;* @param[in, out] *pSrc        points to the in-place buffer of unknown 32-bit data type.
74 ;* @param[in]      bitRevLen    bit reversal table length
75 ;* @param[in]      *pBitRevTab  points to bit reversal table.
76 ;* @return none.
77 ;*/
78         EXPORT arm_bitreversal_32
79         EXPORT arm_bitreversal_16
81 #if   defined ( __CC_ARM )     /* Keil */
82 #elif defined ( __IASMARM__ )  /* IAR */
83 #elif defined ( __CSMC__ )         /* Cosmic */
84 #elif defined ( __TI_ARM__ )   /* TI ARM */
85 #elif defined ( __GNUC__ )     /* GCC */
86         .type   arm_bitreversal_16, %function
87         .type   arm_bitreversal_32, %function
88 #endif
90 #if defined(ARM_MATH_CM0) || defined(ARM_MATH_CM0PLUS) || defined(ARM_MATH_ARMV8MBL)
92 arm_bitreversal_32 PROC
93         ADDS     r3,r1,#1
94         PUSH     {r4-r6}
95         ADDS     r1,r2,#0
96         LSRS     r3,r3,#1
97 arm_bitreversal_32_0 LABEL
98         LDRH     r2,[r1,#2]
99         LDRH     r6,[r1,#0]
100         ADD      r2,r0,r2
101         ADD      r6,r0,r6
102         LDR      r5,[r2,#0]
103         LDR      r4,[r6,#0]
104         STR      r5,[r6,#0]
105         STR      r4,[r2,#0]
106         LDR      r5,[r2,#4]
107         LDR      r4,[r6,#4]
108         STR      r5,[r6,#4]
109         STR      r4,[r2,#4]
110         ADDS     r1,r1,#4
111         SUBS     r3,r3,#1
112         BNE      arm_bitreversal_32_0
113         POP      {r4-r6}
114         BX       lr
115         ENDP
117 arm_bitreversal_16 PROC
118         ADDS     r3,r1,#1
119         PUSH     {r4-r6}
120         ADDS     r1,r2,#0
121         LSRS     r3,r3,#1
122 arm_bitreversal_16_0 LABEL
123         LDRH     r2,[r1,#2]
124         LDRH     r6,[r1,#0]
125     LSRS     r2,r2,#1
126     LSRS     r6,r6,#1
127         ADD      r2,r0,r2
128         ADD      r6,r0,r6
129         LDR      r5,[r2,#0]
130         LDR      r4,[r6,#0]
131         STR      r5,[r6,#0]
132         STR      r4,[r2,#0]
133         ADDS     r1,r1,#4
134         SUBS     r3,r3,#1
135         BNE      arm_bitreversal_16_0
136         POP      {r4-r6}
137         BX       lr
138         ENDP
140 #else
142 arm_bitreversal_32 PROC
143         ADDS     r3,r1,#1
144         CMP      r3,#1
145         IT       LS
146         BXLS     lr
147         PUSH     {r4-r9}
148         ADDS     r1,r2,#2
149         LSRS     r3,r3,#2
150 arm_bitreversal_32_0 LABEL       ;/* loop unrolled by 2 */
151         LDRH     r8,[r1,#4]
152         LDRH     r9,[r1,#2]
153         LDRH     r2,[r1,#0]
154         LDRH     r12,[r1,#-2]
155         ADD      r8,r0,r8
156         ADD      r9,r0,r9
157         ADD      r2,r0,r2
158         ADD      r12,r0,r12
159         LDR      r7,[r9,#0]
160         LDR      r6,[r8,#0]
161         LDR      r5,[r2,#0]
162         LDR      r4,[r12,#0]
163         STR      r6,[r9,#0]
164         STR      r7,[r8,#0]
165         STR      r5,[r12,#0]
166         STR      r4,[r2,#0]
167         LDR      r7,[r9,#4]
168         LDR      r6,[r8,#4]
169         LDR      r5,[r2,#4]
170         LDR      r4,[r12,#4]
171         STR      r6,[r9,#4]
172         STR      r7,[r8,#4]
173         STR      r5,[r12,#4]
174         STR      r4,[r2,#4]
175         ADDS     r1,r1,#8
176         SUBS     r3,r3,#1
177         BNE      arm_bitreversal_32_0
178         POP      {r4-r9}
179         BX       lr
180         ENDP
182 arm_bitreversal_16 PROC
183         ADDS     r3,r1,#1
184         CMP      r3,#1
185         IT       LS
186         BXLS     lr
187         PUSH     {r4-r9}
188         ADDS     r1,r2,#2
189         LSRS     r3,r3,#2
190 arm_bitreversal_16_0 LABEL       ;/* loop unrolled by 2 */
191         LDRH     r8,[r1,#4]
192         LDRH     r9,[r1,#2]
193         LDRH     r2,[r1,#0]
194         LDRH     r12,[r1,#-2]
195         ADD      r8,r0,r8,LSR #1
196         ADD      r9,r0,r9,LSR #1
197         ADD      r2,r0,r2,LSR #1
198         ADD      r12,r0,r12,LSR #1
199         LDR      r7,[r9,#0]
200         LDR      r6,[r8,#0]
201         LDR      r5,[r2,#0]
202         LDR      r4,[r12,#0]
203         STR      r6,[r9,#0]
204         STR      r7,[r8,#0]
205         STR      r5,[r12,#0]
206         STR      r4,[r2,#0]
207         ADDS     r1,r1,#8
208         SUBS     r3,r3,#1
209         BNE      arm_bitreversal_16_0
210         POP      {r4-r9}
211         BX       lr
212         ENDP
214 #endif
216         END