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