]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M7_STM32F7_STM32756G-EVAL_IAR_Keil/Full_Demo/RegTest_IAR.s
fc35798b2c2377559a214a363ed6904bf6798622
[freertos] / FreeRTOS / Demo / CORTEX_M7_STM32F7_STM32756G-EVAL_IAR_Keil / Full_Demo / RegTest_IAR.s
1 /*\r
2  * FreeRTOS Kernel V10.3.0\r
3  * Copyright (C) 2020 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
4  *\r
5  * Permission is hereby granted, free of charge, to any person obtaining a copy of\r
6  * this software and associated documentation files (the "Software"), to deal in\r
7  * the Software without restriction, including without limitation the rights to\r
8  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r
9  * the Software, and to permit persons to whom the Software is furnished to do so,\r
10  * subject to the following conditions:\r
11  *\r
12  * The above copyright notice and this permission notice shall be included in all\r
13  * copies or substantial portions of the Software.\r
14  *\r
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r
17  * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r
18  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
19  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
20  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
21  *\r
22  * http://www.FreeRTOS.org\r
23  * http://aws.amazon.com/freertos\r
24  *\r
25  * 1 tab == 4 spaces!\r
26  */\r
27 \r
28 #include <FreeRTOSConfig.h>\r
29 \r
30 \r
31         RSEG    CODE:CODE(2)\r
32         thumb\r
33 \r
34         EXTERN ulRegTest1LoopCounter\r
35         EXTERN ulRegTest2LoopCounter\r
36 \r
37         PUBLIC vRegTest1Implementation\r
38         PUBLIC vRegTest2Implementation\r
39         PUBLIC vRegTestClearFlopRegistersToParameterValue\r
40         PUBLIC ulRegTestCheckFlopRegistersContainParameterValue\r
41 \r
42 /*-----------------------------------------------------------*/\r
43 \r
44 vRegTest1Implementation\r
45 \r
46         /* Fill the core registers with known values. */\r
47         mov r0, #100\r
48         mov r1, #101\r
49         mov r2, #102\r
50         mov r3, #103\r
51         mov     r4, #104\r
52         mov     r5, #105\r
53         mov     r6, #106\r
54         mov r7, #107\r
55         mov     r8, #108\r
56         mov     r9, #109\r
57         mov     r10, #110\r
58         mov     r11, #111\r
59         mov r12, #112\r
60 \r
61         /* Fill the VFP registers with known values. */\r
62         vmov d0, r0, r1\r
63         vmov d1, r2, r3\r
64         vmov d2, r4, r5\r
65         vmov d3, r6, r7\r
66         vmov d4, r8, r9\r
67         vmov d5, r10, r11\r
68         vmov d6, r0, r1\r
69         vmov d7, r2, r3\r
70         vmov d8, r4, r5\r
71         vmov d9, r6, r7\r
72         vmov d10, r8, r9\r
73         vmov d11, r10, r11\r
74         vmov d12, r0, r1\r
75         vmov d13, r2, r3\r
76         vmov d14, r4, r5\r
77         vmov d15, r6, r7\r
78 \r
79 reg1_loop:\r
80         /* Check all the VFP registers still contain the values set above.\r
81         First save registers that are clobbered by the test. */\r
82         push { r0-r1 }\r
83 \r
84         vmov r0, r1, d0\r
85         cmp r0, #100\r
86         bne reg1_error_loopf\r
87         cmp r1, #101\r
88         bne reg1_error_loopf\r
89         vmov r0, r1, d1\r
90         cmp r0, #102\r
91         bne reg1_error_loopf\r
92         cmp r1, #103\r
93         bne reg1_error_loopf\r
94         vmov r0, r1, d2\r
95         cmp r0, #104\r
96         bne reg1_error_loopf\r
97         cmp r1, #105\r
98         bne reg1_error_loopf\r
99         vmov r0, r1, d3\r
100         cmp r0, #106\r
101         bne reg1_error_loopf\r
102         cmp r1, #107\r
103         bne reg1_error_loopf\r
104         vmov r0, r1, d4\r
105         cmp r0, #108\r
106         bne reg1_error_loopf\r
107         cmp r1, #109\r
108         bne reg1_error_loopf\r
109         vmov r0, r1, d5\r
110         cmp r0, #110\r
111         bne reg1_error_loopf\r
112         cmp r1, #111\r
113         bne reg1_error_loopf\r
114         vmov r0, r1, d6\r
115         cmp r0, #100\r
116         bne reg1_error_loopf\r
117         cmp r1, #101\r
118         bne reg1_error_loopf\r
119         vmov r0, r1, d7\r
120         cmp r0, #102\r
121         bne reg1_error_loopf\r
122         cmp r1, #103\r
123         bne reg1_error_loopf\r
124         vmov r0, r1, d8\r
125         cmp r0, #104\r
126         bne reg1_error_loopf\r
127         cmp r1, #105\r
128         bne reg1_error_loopf\r
129         vmov r0, r1, d9\r
130         cmp r0, #106\r
131         bne reg1_error_loopf\r
132         cmp r1, #107\r
133         bne reg1_error_loopf\r
134         vmov r0, r1, d10\r
135         cmp r0, #108\r
136         bne reg1_error_loopf\r
137         cmp r1, #109\r
138         bne reg1_error_loopf\r
139         vmov r0, r1, d11\r
140         cmp r0, #110\r
141         bne reg1_error_loopf\r
142         cmp r1, #111\r
143         bne reg1_error_loopf\r
144         vmov r0, r1, d12\r
145         cmp r0, #100\r
146         bne reg1_error_loopf\r
147         cmp r1, #101\r
148         bne reg1_error_loopf\r
149         vmov r0, r1, d13\r
150         cmp r0, #102\r
151         bne reg1_error_loopf\r
152         cmp r1, #103\r
153         bne reg1_error_loopf\r
154         vmov r0, r1, d14\r
155         cmp r0, #104\r
156         bne reg1_error_loopf\r
157         cmp r1, #105\r
158         bne reg1_error_loopf\r
159         vmov r0, r1, d15\r
160         cmp r0, #106\r
161         bne reg1_error_loopf\r
162         cmp r1, #107\r
163         bne reg1_error_loopf\r
164 \r
165         /* Restore the registers that were clobbered by the test. */\r
166         pop {r0-r1}\r
167 \r
168         /* VFP register test passed.  Jump to the core register test. */\r
169         b reg1_loopf_pass\r
170 \r
171 reg1_error_loopf\r
172         /* If this line is hit then a VFP register value was found to be\r
173         incorrect. */\r
174         b reg1_error_loopf\r
175 \r
176 reg1_loopf_pass\r
177 \r
178         cmp     r0, #100\r
179         bne     reg1_error_loop\r
180         cmp     r1, #101\r
181         bne     reg1_error_loop\r
182         cmp     r2, #102\r
183         bne     reg1_error_loop\r
184         cmp r3, #103\r
185         bne     reg1_error_loop\r
186         cmp     r4, #104\r
187         bne     reg1_error_loop\r
188         cmp     r5, #105\r
189         bne     reg1_error_loop\r
190         cmp     r6, #106\r
191         bne     reg1_error_loop\r
192         cmp     r7, #107\r
193         bne     reg1_error_loop\r
194         cmp     r8, #108\r
195         bne     reg1_error_loop\r
196         cmp     r9, #109\r
197         bne     reg1_error_loop\r
198         cmp     r10, #110\r
199         bne     reg1_error_loop\r
200         cmp     r11, #111\r
201         bne     reg1_error_loop\r
202         cmp     r12, #112\r
203         bne     reg1_error_loop\r
204 \r
205         /* Everything passed, increment the loop counter. */\r
206         push { r0-r1 }\r
207         ldr     r0, =ulRegTest1LoopCounter\r
208         ldr r1, [r0]\r
209         adds r1, r1, #1\r
210         str r1, [r0]\r
211         pop { r0-r1 }\r
212 \r
213         /* Start again. */\r
214         b reg1_loop\r
215 \r
216 reg1_error_loop:\r
217         /* If this line is hit then there was an error in a core register value.\r
218         The loop ensures the loop counter stops incrementing. */\r
219         b reg1_error_loop\r
220 \r
221 /*-----------------------------------------------------------*/\r
222 \r
223 \r
224 vRegTest2Implementation\r
225 \r
226         /* Set all the core registers to known values. */\r
227         mov r0, #-1\r
228         mov r1, #1\r
229         mov r2, #2\r
230         mov r3, #3\r
231         mov     r4, #4\r
232         mov     r5, #5\r
233         mov     r6, #6\r
234         mov r7, #7\r
235         mov     r8, #8\r
236         mov     r9, #9\r
237         mov     r10, #10\r
238         mov     r11, #11\r
239         mov r12, #12\r
240 \r
241         /* Set all the VFP to known values. */\r
242         vmov d0, r0, r1\r
243         vmov d1, r2, r3\r
244         vmov d2, r4, r5\r
245         vmov d3, r6, r7\r
246         vmov d4, r8, r9\r
247         vmov d5, r10, r11\r
248         vmov d6, r0, r1\r
249         vmov d7, r2, r3\r
250         vmov d8, r4, r5\r
251         vmov d9, r6, r7\r
252         vmov d10, r8, r9\r
253         vmov d11, r10, r11\r
254         vmov d12, r0, r1\r
255         vmov d13, r2, r3\r
256         vmov d14, r4, r5\r
257         vmov d15, r6, r7\r
258 \r
259 reg2_loop:\r
260 \r
261         /* Check all the VFP registers still contain the values set above.\r
262         First save registers that are clobbered by the test. */\r
263         push { r0-r1 }\r
264 \r
265         vmov r0, r1, d0\r
266         cmp r0, #-1\r
267         bne reg2_error_loopf\r
268         cmp r1, #1\r
269         bne reg2_error_loopf\r
270         vmov r0, r1, d1\r
271         cmp r0, #2\r
272         bne reg2_error_loopf\r
273         cmp r1, #3\r
274         bne reg2_error_loopf\r
275         vmov r0, r1, d2\r
276         cmp r0, #4\r
277         bne reg2_error_loopf\r
278         cmp r1, #5\r
279         bne reg2_error_loopf\r
280         vmov r0, r1, d3\r
281         cmp r0, #6\r
282         bne reg2_error_loopf\r
283         cmp r1, #7\r
284         bne reg2_error_loopf\r
285         vmov r0, r1, d4\r
286         cmp r0, #8\r
287         bne reg2_error_loopf\r
288         cmp r1, #9\r
289         bne reg2_error_loopf\r
290         vmov r0, r1, d5\r
291         cmp r0, #10\r
292         bne reg2_error_loopf\r
293         cmp r1, #11\r
294         bne reg2_error_loopf\r
295         vmov r0, r1, d6\r
296         cmp r0, #-1\r
297         bne reg2_error_loopf\r
298         cmp r1, #1\r
299         bne reg2_error_loopf\r
300         vmov r0, r1, d7\r
301         cmp r0, #2\r
302         bne reg2_error_loopf\r
303         cmp r1, #3\r
304         bne reg2_error_loopf\r
305         vmov r0, r1, d8\r
306         cmp r0, #4\r
307         bne reg2_error_loopf\r
308         cmp r1, #5\r
309         bne reg2_error_loopf\r
310         vmov r0, r1, d9\r
311         cmp r0, #6\r
312         bne reg2_error_loopf\r
313         cmp r1, #7\r
314         bne reg2_error_loopf\r
315         vmov r0, r1, d10\r
316         cmp r0, #8\r
317         bne reg2_error_loopf\r
318         cmp r1, #9\r
319         bne reg2_error_loopf\r
320         vmov r0, r1, d11\r
321         cmp r0, #10\r
322         bne reg2_error_loopf\r
323         cmp r1, #11\r
324         bne reg2_error_loopf\r
325         vmov r0, r1, d12\r
326         cmp r0, #-1\r
327         bne reg2_error_loopf\r
328         cmp r1, #1\r
329         bne reg2_error_loopf\r
330         vmov r0, r1, d13\r
331         cmp r0, #2\r
332         bne reg2_error_loopf\r
333         cmp r1, #3\r
334         bne reg2_error_loopf\r
335         vmov r0, r1, d14\r
336         cmp r0, #4\r
337         bne reg2_error_loopf\r
338         cmp r1, #5\r
339         bne reg2_error_loopf\r
340         vmov r0, r1, d15\r
341         cmp r0, #6\r
342         bne reg2_error_loopf\r
343         cmp r1, #7\r
344         bne reg2_error_loopf\r
345 \r
346         /* Restore the registers that were clobbered by the test. */\r
347         pop {r0-r1}\r
348 \r
349         /* VFP register test passed.  Jump to the core register test. */\r
350         b reg2_loopf_pass\r
351 \r
352 reg2_error_loopf\r
353         /* If this line is hit then a VFP register value was found to be\r
354         incorrect. */\r
355         b reg2_error_loopf\r
356 \r
357 reg2_loopf_pass\r
358 \r
359         cmp     r0, #-1\r
360         bne     reg2_error_loop\r
361         cmp     r1, #1\r
362         bne     reg2_error_loop\r
363         cmp     r2, #2\r
364         bne     reg2_error_loop\r
365         cmp r3, #3\r
366         bne     reg2_error_loop\r
367         cmp     r4, #4\r
368         bne     reg2_error_loop\r
369         cmp     r5, #5\r
370         bne     reg2_error_loop\r
371         cmp     r6, #6\r
372         bne     reg2_error_loop\r
373         cmp     r7, #7\r
374         bne     reg2_error_loop\r
375         cmp     r8, #8\r
376         bne     reg2_error_loop\r
377         cmp     r9, #9\r
378         bne     reg2_error_loop\r
379         cmp     r10, #10\r
380         bne     reg2_error_loop\r
381         cmp     r11, #11\r
382         bne     reg2_error_loop\r
383         cmp     r12, #12\r
384         bne     reg2_error_loop\r
385 \r
386         /* Increment the loop counter to indicate this test is still functioning\r
387         correctly. */\r
388         push { r0-r1 }\r
389         ldr     r0, =ulRegTest2LoopCounter\r
390         ldr r1, [r0]\r
391         adds r1, r1, #1\r
392         str r1, [r0]\r
393 \r
394         /* Yield to increase test coverage. */\r
395         movs r0, #0x01\r
396         ldr r1, =0xe000ed04 /*NVIC_INT_CTRL */\r
397         lsl r0, r0, #28 /* Shift to PendSV bit */\r
398         str r0, [r1]\r
399         dsb\r
400 \r
401         pop { r0-r1 }\r
402 \r
403         /* Start again. */\r
404         b reg2_loop\r
405 \r
406 reg2_error_loop:\r
407         /* If this line is hit then there was an error in a core register value.\r
408         This loop ensures the loop counter variable stops incrementing. */\r
409         b reg2_error_loop\r
410 \r
411 /*-----------------------------------------------------------*/\r
412 \r
413 vRegTestClearFlopRegistersToParameterValue\r
414 \r
415         /* Clobber the auto saved registers. */\r
416         vmov d0, r0, r0\r
417         vmov d1, r0, r0\r
418         vmov d2, r0, r0\r
419         vmov d3, r0, r0\r
420         vmov d4, r0, r0\r
421         vmov d5, r0, r0\r
422         vmov d6, r0, r0\r
423         vmov d7, r0, r0\r
424         bx lr\r
425 \r
426 /*-----------------------------------------------------------*/\r
427 \r
428 ulRegTestCheckFlopRegistersContainParameterValue\r
429 \r
430         vmov r1, s0\r
431         cmp r0, r1\r
432         bne return_error\r
433         vmov r1, s1\r
434         cmp r0, r1\r
435         bne return_error\r
436         vmov r1, s2\r
437         cmp r0, r1\r
438         bne return_error\r
439         vmov r1, s3\r
440         cmp r0, r1\r
441         bne return_error\r
442         vmov r1, s4\r
443         cmp r0, r1\r
444         bne return_error\r
445         vmov r1, s5\r
446         cmp r0, r1\r
447         bne return_error\r
448         vmov r1, s6\r
449         cmp r0, r1\r
450         bne return_error\r
451         vmov r1, s7\r
452         cmp r0, r1\r
453         bne return_error\r
454         vmov r1, s8\r
455         cmp r0, r1\r
456         bne return_error\r
457         vmov r1, s9\r
458         cmp r0, r1\r
459         bne return_error\r
460         vmov r1, s10\r
461         cmp r0, r1\r
462         bne return_error\r
463         vmov r1, s11\r
464         cmp r0, r1\r
465         bne return_error\r
466         vmov r1, s12\r
467         cmp r0, r1\r
468         bne return_error\r
469         vmov r1, s13\r
470         cmp r0, r1\r
471         bne return_error\r
472         vmov r1, s14\r
473         cmp r0, r1\r
474         bne return_error\r
475         vmov r1, s15\r
476         cmp r0, r1\r
477         bne return_error\r
478 \r
479 return_pass\r
480         mov r0, #1\r
481         bx lr\r
482 \r
483 return_error\r
484         mov r0, #0\r
485         bx lr\r
486 \r
487         END\r
488 \r