Subversion Repositories CharLCD

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 mjames 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
; */
30
 
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
64
 
65
    .syntax unified
66
#endif
67
 
68
	CODESECT
69
	THUMB
70
 
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
80
 
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
89
 
90
#if defined(ARM_MATH_CM0) || defined(ARM_MATH_CM0PLUS) || defined(ARM_MATH_ARMV8MBL)
91
 
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
116
 
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
139
 
140
#else
141
 
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
181
 
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
213
 
214
#endif
215
 
216
	END