📄 memcopy.lst
字号:
ARM Macro Assembler Page 1
1 00000000 ;/******************** (C) COPYRIGHT 2007 STMicroelectro
nics ********************
2 00000000 ; File Name : memcopy.s
3 00000000 ; Author : MCD Application Team
4 00000000 ; Version : V2.0
5 00000000 ; Date : 12/07/2007
6 00000000 ; Description : This file contains optimized memc
opy functions
7 00000000 ;*******************************************************
*************************
8 00000000 ; THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS A
T PROVIDING CUSTOMERS
9 00000000 ; WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN OR
DER FOR THEM TO SAVE TIME.
10 00000000 ; AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIAB
LE FOR ANY DIRECT,
11 00000000 ; INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY
CLAIMS ARISING FROM THE
12 00000000 ; CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOM
ERS OF THE CODING
13 00000000 ; INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR
PRODUCTS.
14 00000000 ;*******************************************************
***********************/
15 00000000
16 00000000
17 00000000 AREA CODE, CODE, READONLY
18 00000000 CODE32
19 00000000
20 00000000 EXPORT MEMCOPY_L2S_BY4
21 00000000 EXPORT MEMCOPY_S2L_BY4
22 00000000 EXPORT MEMCOPY_L2L_BY4
23 00000000
24 00000000
25 00000000
26 00000000 ; void MEMCOPY_L2S_BY4 (void *pBUFOUT, void *pBUFIN, lo
ng nBytes)
27 00000000 ; Copy N bytes from a 32-bit aligned buffer to a 16-bit
aligned buffer.
28 00000000 ; Resources:
29 00000000 ; R0,R1,R2: parameters
30 00000000 ; R3-R10: locals
31 00000000 ; Notes:
32 00000000 ; - N Minimum is 16 bytes
33 00000000 ; - pointer source and dest cannot be exactly the same;
but an offset of -4 between dst and source will work
34 00000000 ;///////////////////////////////////////////////////////
//////////////////// */
35 00000000
36 00000000 MEMCOPY_L2S_BY4
37 00000000 E92D07F0 STMFD SP!, {R4-R10}
38 00000004 EA00000D B d_begin
39 00000008 d_main
40 00000008 E8B102A8 LDMIA R1!,{R3,R5,R7,R9}
41 0000000C E1A04823 MOV R4, R3, LSR #16
42 00000010 E1A06825 MOV R6, R5, LSR #16
43 00000014 E1A08827 MOV R8, R7, LSR #16
44 00000018 E1A0A829 MOV R10, R9, LSR #16
45 0000001C E0C030B2 STRH R3, [R0], #2
ARM Macro Assembler Page 2
46 00000020 E0C040B2 STRH R4, [R0], #2
47 00000024 E0C050B2 STRH R5, [R0], #2
48 00000028 E0C060B2 STRH R6, [R0], #2
49 0000002C E0C070B2 STRH R7, [R0], #2
50 00000030 E0C080B2 STRH R8, [R0], #2
51 00000034 E0C090B2 STRH R9, [R0], #2
52 00000038 E0C0A0B2 STRH R10, [R0], #2
53 0000003C E2422010 SUB R2, R2, #16
54 00000040 d_begin
55 00000040 E3520010 CMP R2,#16 ;if ( remaining_byt
es >= 16)
56 00000044 2AFFFFEF BHS d_main ;keep on looping
57 00000048 ;else switch(remaining_bytes) d_swit d_0123
58 00000048 E3520003 CMP R2,#3 ;remaining <= 3 byt
es?
59 0000004C 9A000012 BLS d_switch
60 00000050
61 00000050 d_4567
62 00000050
63 00000050 E4913004 LDR R3, [R1], #4
64 00000054 E1A04823 MOV R4, R3, LSR #16
65 00000058 E0C030B2 STRH R3, [R0], #2
66 0000005C E0C040B2 STRH R4, [R0], #2
67 00000060 E2422004 SUB R2, R2, #4
68 00000064 E3520003 CMP R2,#3 ; remaining <= 3 by
tes?
69 00000068 9A00000B BLS d_switch ; switch(remaini
ng_bytes 0,1,2,3)
70 0000006C
71 0000006C d_891011
72 0000006C
73 0000006C E4913004 LDR R3, [R1], #4
74 00000070 E1A04823 MOV R4, R3, LSR #16
75 00000074 E0C030B2 STRH R3, [R0], #2
76 00000078 E0C040B2 STRH R4, [R0], #2
77 0000007C E2422004 SUB R2, R2, #4
78 00000080 E3520003 CMP R2,#3 ; remaining <= 3 by
tes?
79 00000084 9A000004 BLS d_switch ; switch(remaini
ng_bytes 0,1,2,3)
80 00000088
81 00000088 d_12131415
82 00000088
83 00000088 E4913004 LDR R3, [R1], #4
84 0000008C E1A04823 MOV R4, R3, LSR #16
85 00000090 E0C030B2 STRH R3, [R0], #2
86 00000094 E0C040B2 STRH R4, [R0], #2
87 00000098 E2422004 SUB R2, R2, #4
88 0000009C
89 0000009C d_switch
90 0000009C
91 0000009C E79FF102 LDR PC,[PC, R2, LSL#2]
92 000000A0 EA00000D B d_END
93 000000A4 00000000 DCD d_END
94 000000A8 00000000 DCD d_1B
95 000000AC 00000000 DCD d_2B
96 000000B0 00000000 DCD d_3B
97 000000B4
98 000000B4 d_1B
ARM Macro Assembler Page 3
99 000000B4
100 000000B4 E5D13000 LDRB R3, [R1]
101 000000B8 E5C03000 STRB R3, [R0]
102 000000BC EA000006 B d_END
103 000000C0
104 000000C0 d_2B
105 000000C0
106 000000C0 E1D130B0 LDRH R3, [R1]
107 000000C4 E1C030B0 STRH R3, [R0]
108 000000C8 EA000003 B d_END
109 000000CC
110 000000CC d_3B
111 000000CC E0D130B2 LDRH R3, [R1], #2
112 000000D0 E5D14000 LDRB R4, [R1]
113 000000D4 E0C030B2 STRH R3, [R0], #2
114 000000D8 E5C04000 STRB R4, [R0]
115 000000DC
116 000000DC d_END
117 000000DC
118 000000DC E8BD07F0 LDMFD SP!, {R4-R10}
119 000000E0 E12FFF1E BX LR
120 000000E4
121 000000E4
122 000000E4 ; void MEMCOPY_L2L_BY4 (void *pBUFOUT, void *pBUFIN, lo
ng nBytes)
123 000000E4 ; Copy N bytes from a 32-bit aligned buffer to a 32-bit
aligned buffer.
124 000000E4 ; Resources:
125 000000E4 ; R0,R1,R2: parameters
126 000000E4 ; R3-R10: locals
127 000000E4 ; Notes:
128 000000E4 ; - N Minimum is 16 bytes
129 000000E4 ; - pointer source and dest cannot be exactly the same;
but an offset of -4 between dst and source will work
130 000000E4
131 000000E4 MEMCOPY_L2L_BY4
132 000000E4 E92D07F0 STMFD SP!, {R4-R10}
133 000000E8
134 000000E8 e_main
135 000000E8 E8B102A8 LDMIA R1!,{R3,R5,R7,R9}
136 000000EC E8A002A8 STMIA R0!,{R3,R5,R7,R9}
137 000000F0 E2422010 SUB R2, R2, #16
138 000000F4 E3520010 CMP R2,#16 ; if ( remaining_by
tes >= 16)
139 000000F8 2AFFFFFA BHS e_main ; keep on looping
140 000000FC ; else switch(remaining_bytes)
141 000000FC e_swit
142 000000FC e_0123
143 000000FC E3520003 CMP R2,#3 ; remaining <= 3 by
tes?
144 00000100 9A00000C BLS e_switch
145 00000104 e_4567
146 00000104
147 00000104 E4913004 LDR R3, [R1], #4
148 00000108 E4803004 STR R3, [R0], #4
149 0000010C E2422004 SUB R2, R2, #4
150 00000110 E3520003 CMP R2,#3 ; remaining <= 3 by
tes?
151 00000114 9A000007 BLS e_switch ; switch(remaining_
ARM Macro Assembler Page 4
bytes 0,1,2,3)
152 00000118 e_891011
153 00000118 E4913004 LDR R3, [R1], #4
154 0000011C E4803004 STR R3, [R0], #4
155 00000120 E2422004 SUB R2, R2, #4
156 00000124 E3520003 CMP R2,#3 ; remaining <= 3 by
tes?
157 00000128 9A000002 BLS e_switch ; switch(remaini
ng_bytes 0,1,2,3)
158 0000012C e_12131415
159 0000012C E4913004 LDR R3, [R1], #4
160 00000130 E4803004 STR R3, [R0], #4
161 00000134 E2422004 SUB R2, R2, #4
162 00000138
163 00000138 e_switch
164 00000138 E79FF102 LDR PC,[PC, R2, LSL#2]
165 0000013C EA00000C B e_END
166 00000140 00 00 DCW e_END
167 00000142 00 00 DCW e_1B
168 00000144 00 00 DCW e_2B
169 00000146 00 00 DCW e_3B
170 00000148
171 00000148 e_1B
172 00000148 E5D13000 LDRB R3, [R1]
173 0000014C E5C03000 STRB R3, [R0]
174 00000150 EA000007 B e_END
175 00000154 e_2B
176 00000154 E1D130B0 LDRH R3, [R1]
177 00000158 E1C030B0 STRH R3, [R0]
178 0000015C EA000004 B e_END
179 00000160 e_3B
180 00000160 E0D130B2 LDRH R3, [R1], #2
181 00000164 E5D14000 LDRB R4, [R1]
182 00000168 E0C030B2 STRH R3, [R0], #2
183 0000016C E5C04000 STRB R4, [R0]
184 00000170 EAFFFFFF B e_END
185 00000174 e_END
186 00000174 E8BD07F0 LDMFD SP!, {R4-R10}
187 00000178 E12FFF1E BX LR
188 0000017C
189 0000017C ; void MEMCOPY_S2L_BY4 (void *pBUFOUT, void *pBUFIN, lo
ng nBytes)
190 0000017C ; Copy N bytes from a 32-bit aligned buffer to a 16-bit
aligned buffer.
191 0000017C ; Resources:
192 0000017C ; R0,R1,R2: parameters
193 0000017C ; R3-R10: locals
194 0000017C ; Notes:
195 0000017C ; - N Minimum is 16 bytes
196 0000017C ; - pointer source and dest cannot be exactly the same;
but an offset of -4 between dst and source will work
197 0000017C
198 0000017C MEMCOPY_S2L_BY4
199 0000017C E92D07F0 STMFD SP!, {R4-R10}
200 00000180
201 00000180 f_main
202 00000180 E0D130B2 LDRH R3, [R1], #2
203 00000184 E0D140B2 LDRH R4, [R1], #2
204 00000188 E0D150B2 LDRH R5, [R1], #2
ARM Macro Assembler Page 5
205 0000018C E0D160B2 LDRH R6, [R1], #2
206 00000190 E0D170B2 LDRH R7, [R1], #2
207 00000194 E0D180B2 LDRH R8, [R1], #2
208 00000198 E0D190B2 LDRH R9, [R1], #2
209 0000019C E0D1A0B2 LDRH R10, [R1], #2
210 000001A0 E1833804 ORR R3,R3,R4, LSL#16
211 000001A4 E1855806 ORR R5,R5,R6, LSL#16
212 000001A8 E1877808 ORR R7,R7,R8, LSL#16
213 000001AC E189980A ORR R9,R9,R10, LSL#16
214 000001B0 E8A002A8 STMIA R0!,{R3,R5,R7,R9}
215 000001B4 E2422010 SUB R2, R2, #16
216 000001B8 E3520010 CMP R2,#16 ; if ( remaining_by
tes >= 16)
217 000001BC 2AFFFFEF BHS f_main ; keep on looping
218 000001C0 ; else switch(remaining_bytes)
219 000001C0 f_swit
220 000001C0 f_0123
221 000001C0 E3520003 CMP R2,#3 ; remaining <= 3 by
tes?
222 000001C4 9A000012 BLS f_switch
223 000001C8 f_4567
224 000001C8 E0D130B2 LDRH R3, [R1], #2
225 000001CC E0D140B2 LDRH R4, [R1], #2
226 000001D0 E1833804 ORR R3,R3,R4, LSL#16
227 000001D4 E4803004 STR R3, [R0], #4
228 000001D8 E2422004 SUB R2, R2, #4
229 000001DC E3520003 CMP R2,#3 ; remaining <= 3 by
tes?
230 000001E0 9A00000B BLS f_switch ; switch(remaini
ng_bytes 0,1,2,3)
231 000001E4 f_891011
232 000001E4 E0D130B2 LDRH R3, [R1], #2
233 000001E8 E0D140B2 LDRH R4, [R1], #2
234 000001EC E1833804 ORR R3,R3,R4, LSL#16
235 000001F0 E4803004 STR R3, [R0], #4
236 000001F4 E2422004 SUB R2, R2, #4
237 000001F8 E3520003 CMP R2,#3 ; remaining <= 3 by
tes?
238 000001FC 9A000004 BLS f_switch ; switch(remaini
ng_bytes 0,1,2,3)
239 00000200 f_12131415
240 00000200 E0D130B2 LDRH R3, [R1], #2
241 00000204 E0D140B2 LDRH R4, [R1], #2
242 00000208 E1833804 ORR R3,R3,R4, LSL#16
243 0000020C E4803004 STR R3, [R0], #4
244 00000210 E2422004 SUB R2, R2, #4
245 00000214
246 00000214 f_switch
247 00000214 E79FF102 LDR PC,[PC, R2, LSL#2]
248 00000218 EA00000C B f_END
249 0000021C 00 00 DCW f_END
250 0000021E 00 00 DCW f_1B
251 00000220 00 00 DCW f_2B
252 00000222 00 00 DCW f_3B
253 00000224
254 00000224 f_1B
255 00000224 E5D13000 LDRB R3, [R1]
256 00000228 E5C03000 STRB R3, [R0]
257 0000022C EA000007 B f_END
ARM Macro Assembler Page 6
258 00000230 f_2B
259 00000230 E1D130B0 LDRH R3, [R1]
260 00000234 E1C030B0 STRH R3, [R0]
261 00000238 EA000004 B f_END
262 0000023C f_3B
263 0000023C E0D130B2 LDRH R3, [R1], #2
264 00000240 E5D14000 LDRB R4, [R1]
265 00000244 E0C030B2 STRH R3, [R0], #2
266 00000248 E5C04000 STRB R4, [R0]
267 0000024C EAFFFFFF B f_END
268 00000250 f_END
269 00000250 E8BD07F0 LDMFD SP!, {R4-R10}
270 00000254 E12FFF1E BX LR
271 00000258
272 00000258 END
Command Line: --debug --xref --device=DARMST9 --apcs=interwork -omemcopy.o -IC:
\Keil\ARM\INC\ST\91x --list=.\memcopy.lst Startup\memcopy.s
ARM Macro Assembler Page 1 Alphabetic symbol ordering
Relocatable symbols
CODE 00000000
Symbol: CODE
Definitions
At line 17 in file Startup\memcopy.s
Uses
None
Comment: CODE unused
MEMCOPY_L2L_BY4 000000E4
Symbol: MEMCOPY_L2L_BY4
Definitions
At line 131 in file Startup\memcopy.s
Uses
At line 22 in file Startup\memcopy.s
Comment: MEMCOPY_L2L_BY4 used once
MEMCOPY_L2S_BY4 00000000
Symbol: MEMCOPY_L2S_BY4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -