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