]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M4F_MSP432_LaunchPad_IAR_CCS_Keil/Full_Demo/RegTest.asm
Update version number in readiness for V10.2.0 release.
[freertos] / FreeRTOS / Demo / CORTEX_M4F_MSP432_LaunchPad_IAR_CCS_Keil / Full_Demo / RegTest.asm
1 ;/*\r
2 ; * FreeRTOS Kernel V10.2.0\r
3 ; * Copyright (C) 2019 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 \r
29         .thumb\r
30 \r
31         .ref ulRegTest1LoopCounter\r
32         .ref ulRegTest2LoopCounter\r
33 \r
34         .def vRegTest1Implementation\r
35         .def vRegTest2Implementation\r
36 \r
37 ulRegTest1LoopCounterConst:     .word   ulRegTest1LoopCounter\r
38 ulRegTest2LoopCounterConst:     .word   ulRegTest2LoopCounter\r
39 ulNVIC_INT_CTRL:                        .word   0xe000ed04\r
40 ;/*-----------------------------------------------------------*/\r
41         .align 4\r
42 vRegTest1Implementation: .asmfunc\r
43 \r
44         ;/* Fill the core registers with known values. */\r
45         mov r0, #100\r
46         mov r1, #101\r
47         mov r2, #102\r
48         mov r3, #103\r
49         mov     r4, #104\r
50         mov     r5, #105\r
51         mov     r6, #106\r
52         mov r7, #107\r
53         mov     r8, #108\r
54         mov     r9, #109\r
55         mov     r10, #110\r
56         mov     r11, #111\r
57         mov r12, #112\r
58 \r
59         ;/* Fill the VFP registers with known values. */\r
60         vmov d0, r0, r1\r
61         vmov d1, r2, r3\r
62         vmov d2, r4, r5\r
63         vmov d3, r6, r7\r
64         vmov d4, r8, r9\r
65         vmov d5, r10, r11\r
66         vmov d6, r0, r1\r
67         vmov d7, r2, r3\r
68         vmov d8, r4, r5\r
69         vmov d9, r6, r7\r
70         vmov d10, r8, r9\r
71         vmov d11, r10, r11\r
72         vmov d12, r0, r1\r
73         vmov d13, r2, r3\r
74         vmov d14, r4, r5\r
75         vmov d15, r6, r7\r
76 \r
77 reg1_loop:\r
78         ;/* Check all the VFP registers still contain the values set above.\r
79         ;First save registers that are clobbered by the test. */\r
80         push { r0-r1 }\r
81 \r
82         vmov r0, r1, d0\r
83         cmp r0, #100\r
84         bne reg1_error_loopf\r
85         cmp r1, #101\r
86         bne reg1_error_loopf\r
87         vmov r0, r1, d1\r
88         cmp r0, #102\r
89         bne reg1_error_loopf\r
90         cmp r1, #103\r
91         bne reg1_error_loopf\r
92         vmov r0, r1, d2\r
93         cmp r0, #104\r
94         bne reg1_error_loopf\r
95         cmp r1, #105\r
96         bne reg1_error_loopf\r
97         vmov r0, r1, d3\r
98         cmp r0, #106\r
99         bne reg1_error_loopf\r
100         cmp r1, #107\r
101         bne reg1_error_loopf\r
102         vmov r0, r1, d4\r
103         cmp r0, #108\r
104         bne reg1_error_loopf\r
105         cmp r1, #109\r
106         bne reg1_error_loopf\r
107         vmov r0, r1, d5\r
108         cmp r0, #110\r
109         bne reg1_error_loopf\r
110         cmp r1, #111\r
111         bne reg1_error_loopf\r
112         vmov r0, r1, d6\r
113         cmp r0, #100\r
114         bne reg1_error_loopf\r
115         cmp r1, #101\r
116         bne reg1_error_loopf\r
117         vmov r0, r1, d7\r
118         cmp r0, #102\r
119         bne reg1_error_loopf\r
120         cmp r1, #103\r
121         bne reg1_error_loopf\r
122         vmov r0, r1, d8\r
123         cmp r0, #104\r
124         bne reg1_error_loopf\r
125         cmp r1, #105\r
126         bne reg1_error_loopf\r
127         vmov r0, r1, d9\r
128         cmp r0, #106\r
129         bne reg1_error_loopf\r
130         cmp r1, #107\r
131         bne reg1_error_loopf\r
132         vmov r0, r1, d10\r
133         cmp r0, #108\r
134         bne reg1_error_loopf\r
135         cmp r1, #109\r
136         bne reg1_error_loopf\r
137         vmov r0, r1, d11\r
138         cmp r0, #110\r
139         bne reg1_error_loopf\r
140         cmp r1, #111\r
141         bne reg1_error_loopf\r
142         vmov r0, r1, d12\r
143         cmp r0, #100\r
144         bne reg1_error_loopf\r
145         cmp r1, #101\r
146         bne reg1_error_loopf\r
147         vmov r0, r1, d13\r
148         cmp r0, #102\r
149         bne reg1_error_loopf\r
150         cmp r1, #103\r
151         bne reg1_error_loopf\r
152         vmov r0, r1, d14\r
153         cmp r0, #104\r
154         bne reg1_error_loopf\r
155         cmp r1, #105\r
156         bne reg1_error_loopf\r
157         vmov r0, r1, d15\r
158         cmp r0, #106\r
159         bne reg1_error_loopf\r
160         cmp r1, #107\r
161         bne reg1_error_loopf\r
162 \r
163         ;/* Restore the registers that were clobbered by the test. */\r
164         pop {r0-r1}\r
165 \r
166         ;/* VFP register test passed.  Jump to the core register test. */\r
167         b reg1_loopf_pass\r
168 \r
169 reg1_error_loopf:\r
170         ;/* If this line is hit then a VFP register value was found to be\r
171         ;incorrect. */\r
172         b reg1_error_loopf\r
173 \r
174 reg1_loopf_pass:\r
175 \r
176         cmp     r0, #100\r
177         bne     reg1_error_loop\r
178         cmp     r1, #101\r
179         bne     reg1_error_loop\r
180         cmp     r2, #102\r
181         bne     reg1_error_loop\r
182         cmp r3, #103\r
183         bne     reg1_error_loop\r
184         cmp     r4, #104\r
185         bne     reg1_error_loop\r
186         cmp     r5, #105\r
187         bne     reg1_error_loop\r
188         cmp     r6, #106\r
189         bne     reg1_error_loop\r
190         cmp     r7, #107\r
191         bne     reg1_error_loop\r
192         cmp     r8, #108\r
193         bne     reg1_error_loop\r
194         cmp     r9, #109\r
195         bne     reg1_error_loop\r
196         cmp     r10, #110\r
197         bne     reg1_error_loop\r
198         cmp     r11, #111\r
199         bne     reg1_error_loop\r
200         cmp     r12, #112\r
201         bne     reg1_error_loop\r
202 \r
203         ;/* Everything passed, increment the loop counter. */\r
204         push { r0-r1 }\r
205         ldr     r0, ulRegTest1LoopCounterConst\r
206         ldr r1, [r0]\r
207         adds r1, r1, #1\r
208         str r1, [r0]\r
209         pop { r0-r1 }\r
210 \r
211         ;/* Start again. */\r
212         b reg1_loop\r
213 \r
214 reg1_error_loop:\r
215         ;/* If this line is hit then there was an error in a core register value.\r
216         ;The loop ensures the loop counter stops incrementing. */\r
217         b reg1_error_loop\r
218         .endasmfunc\r
219 \r
220 ;/*-----------------------------------------------------------*/\r
221 \r
222         .align 4\r
223 vRegTest2Implementation: .asmfunc\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, ulRegTest2LoopCounterConst\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, ulNVIC_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         .end\r