]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_A9_Cyclone_V_SoC_DK/reg_test.S
Update version number in readiness for V10.3.0 release. Sync SVN with reviewed releas...
[freertos] / FreeRTOS / Demo / CORTEX_A9_Cyclone_V_SoC_DK / reg_test.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         .global vRegTest1Implementation\r
29         .global vRegTest2Implementation\r
30         .extern ulRegTest1LoopCounter\r
31         .extern ulRegTest2LoopCounter\r
32 \r
33         .text\r
34         .arm\r
35 \r
36         /* This function is explained in the comments at the top of main-full.c. */\r
37 .type vRegTest1Implementation, %function\r
38 vRegTest1Implementation:\r
39 \r
40         /* Fill each general purpose register with a known value. */\r
41         mov             r0,  #0xFF\r
42         mov             r1,  #0x11\r
43         mov             r2,  #0x22\r
44         mov             r3,  #0x33\r
45         mov     r4,  #0x44\r
46         mov     r5,  #0x55\r
47         mov     r6,  #0x66\r
48         mov     r7,  #0x77\r
49         mov     r8,  #0x88\r
50         mov     r9,  #0x99\r
51         mov     r10, #0xAA\r
52         mov     r11, #0xBB\r
53         mov     r12, #0xCC\r
54         mov             r14, #0xEE\r
55 \r
56         /* Fill each FPU register with a known value. */\r
57         vmov    d0, r0, r1\r
58         vmov    d1, r2, r3\r
59         vmov    d2, r4, r5\r
60         vmov    d3, r6, r7\r
61         vmov    d4, r8, r9\r
62         vmov    d5, r10, r11\r
63         vmov    d6, r0, r1\r
64         vmov    d7, r2, r3\r
65         vmov    d8, r4, r5\r
66         vmov    d9, r6, r7\r
67         vmov    d10, r8, r9\r
68         vmov    d11, r10, r11\r
69         vmov    d12, r0, r1\r
70         vmov    d13, r2, r3\r
71         vmov    d14, r4, r5\r
72         vmov    d15, r6, r7\r
73 \r
74         vmov    d16, r0, r1\r
75         vmov    d17, r2, r3\r
76         vmov    d18, r4, r5\r
77         vmov    d19, r6, r7\r
78         vmov    d20, r8, r9\r
79         vmov    d21, r10, r11\r
80         vmov    d22, r0, r1\r
81         vmov    d23, r2, r3\r
82         vmov    d24, r4, r5\r
83         vmov    d25, r6, r7\r
84         vmov    d26, r8, r9\r
85         vmov    d27, r10, r11\r
86         vmov    d28, r0, r1\r
87         vmov    d29, r2, r3\r
88         vmov    d30, r4, r5\r
89         vmov    d31, r6, r7\r
90 \r
91         /* Loop, checking each iteration that each register still contains the\r
92         expected value. */\r
93 reg1_loop:\r
94         /* Yield to increase test coverage */\r
95         svc 0\r
96 \r
97         /* Check all the VFP registers still contain the values set above.\r
98         First save registers that are clobbered by the test. */\r
99         push { r0-r1 }\r
100 \r
101         vmov    r0, r1, d0\r
102         cmp     r0, #0xFF\r
103         bne     reg1_error_loopf\r
104         cmp     r1, #0x11\r
105         bne     reg1_error_loopf\r
106         vmov    r0, r1, d1\r
107         cmp     r0, #0x22\r
108         bne     reg1_error_loopf\r
109         cmp     r1, #0x33\r
110         bne     reg1_error_loopf\r
111         vmov    r0, r1, d2\r
112         cmp     r0, #0x44\r
113         bne     reg1_error_loopf\r
114         cmp     r1, #0x55\r
115         bne     reg1_error_loopf\r
116         vmov    r0, r1, d3\r
117         cmp     r0, #0x66\r
118         bne     reg1_error_loopf\r
119         cmp     r1, #0x77\r
120         bne     reg1_error_loopf\r
121         vmov    r0, r1, d4\r
122         cmp     r0, #0x88\r
123         bne     reg1_error_loopf\r
124         cmp     r1, #0x99\r
125         bne     reg1_error_loopf\r
126         vmov    r0, r1, d5\r
127         cmp     r0, #0xAA\r
128         bne     reg1_error_loopf\r
129         cmp     r1, #0xBB\r
130         bne     reg1_error_loopf\r
131         vmov    r0, r1, d6\r
132         cmp     r0, #0xFF\r
133         bne     reg1_error_loopf\r
134         cmp     r1, #0x11\r
135         bne     reg1_error_loopf\r
136         vmov    r0, r1, d7\r
137         cmp     r0, #0x22\r
138         bne     reg1_error_loopf\r
139         cmp     r1, #0x33\r
140         bne     reg1_error_loopf\r
141         vmov    r0, r1, d8\r
142         cmp     r0, #0x44\r
143         bne     reg1_error_loopf\r
144         cmp     r1, #0x55\r
145         bne     reg1_error_loopf\r
146         vmov    r0, r1, d9\r
147         cmp     r0, #0x66\r
148         bne     reg1_error_loopf\r
149         cmp     r1, #0x77\r
150         bne     reg1_error_loopf\r
151         vmov    r0, r1, d10\r
152         cmp     r0, #0x88\r
153         bne     reg1_error_loopf\r
154         cmp     r1, #0x99\r
155         bne     reg1_error_loopf\r
156         vmov    r0, r1, d11\r
157         cmp     r0, #0xAA\r
158         bne     reg1_error_loopf\r
159         cmp     r1, #0xBB\r
160         bne     reg1_error_loopf\r
161         vmov    r0, r1, d12\r
162         cmp     r0, #0xFF\r
163         bne     reg1_error_loopf\r
164         cmp     r1, #0x11\r
165         bne     reg1_error_loopf\r
166         vmov    r0, r1, d13\r
167         cmp     r0, #0x22\r
168         bne     reg1_error_loopf\r
169         cmp     r1, #0x33\r
170         bne     reg1_error_loopf\r
171         vmov    r0, r1, d14\r
172         cmp     r0, #0x44\r
173         bne     reg1_error_loopf\r
174         cmp     r1, #0x55\r
175         bne     reg1_error_loopf\r
176         vmov    r0, r1, d15\r
177         cmp     r0, #0x66\r
178         bne     reg1_error_loopf\r
179         cmp     r1, #0x77\r
180         bne     reg1_error_loopf\r
181 \r
182         vmov    r0, r1, d16\r
183         cmp     r0, #0xFF\r
184         bne     reg1_error_loopf\r
185         cmp     r1, #0x11\r
186         bne     reg1_error_loopf\r
187         vmov    r0, r1, d17\r
188         cmp     r0, #0x22\r
189         bne     reg1_error_loopf\r
190         cmp     r1, #0x33\r
191         bne     reg1_error_loopf\r
192         vmov    r0, r1, d18\r
193         cmp     r0, #0x44\r
194         bne     reg1_error_loopf\r
195         cmp     r1, #0x55\r
196         bne     reg1_error_loopf\r
197         vmov    r0, r1, d19\r
198         cmp     r0, #0x66\r
199         bne     reg1_error_loopf\r
200         cmp     r1, #0x77\r
201         bne     reg1_error_loopf\r
202         vmov    r0, r1, d20\r
203         cmp     r0, #0x88\r
204         bne     reg1_error_loopf\r
205         cmp     r1, #0x99\r
206         bne     reg1_error_loopf\r
207         vmov    r0, r1, d21\r
208         cmp     r0, #0xAA\r
209         bne     reg1_error_loopf\r
210         cmp     r1, #0xBB\r
211         bne     reg1_error_loopf\r
212         vmov    r0, r1, d22\r
213         cmp     r0, #0xFF\r
214         bne     reg1_error_loopf\r
215         cmp     r1, #0x11\r
216         bne     reg1_error_loopf\r
217         vmov    r0, r1, d23\r
218         cmp     r0, #0x22\r
219         bne     reg1_error_loopf\r
220         cmp     r1, #0x33\r
221         bne     reg1_error_loopf\r
222         vmov    r0, r1, d24\r
223         cmp     r0, #0x44\r
224         bne     reg1_error_loopf\r
225         cmp     r1, #0x55\r
226         bne     reg1_error_loopf\r
227         vmov    r0, r1, d25\r
228         cmp     r0, #0x66\r
229         bne     reg1_error_loopf\r
230         cmp     r1, #0x77\r
231         bne     reg1_error_loopf\r
232         vmov    r0, r1, d26\r
233         cmp     r0, #0x88\r
234         bne     reg1_error_loopf\r
235         cmp     r1, #0x99\r
236         bne     reg1_error_loopf\r
237         vmov    r0, r1, d27\r
238         cmp     r0, #0xAA\r
239         bne     reg1_error_loopf\r
240         cmp     r1, #0xBB\r
241         bne     reg1_error_loopf\r
242         vmov    r0, r1, d28\r
243         cmp     r0, #0xFF\r
244         bne     reg1_error_loopf\r
245         cmp     r1, #0x11\r
246         bne     reg1_error_loopf\r
247         vmov    r0, r1, d29\r
248         cmp     r0, #0x22\r
249         bne     reg1_error_loopf\r
250         cmp     r1, #0x33\r
251         bne     reg1_error_loopf\r
252         vmov    r0, r1, d30\r
253         cmp     r0, #0x44\r
254         bne     reg1_error_loopf\r
255         cmp     r1, #0x55\r
256         bne     reg1_error_loopf\r
257         vmov    r0, r1, d31\r
258         cmp     r0, #0x66\r
259         bne     reg1_error_loopf\r
260         cmp     r1, #0x77\r
261         bne     reg1_error_loopf\r
262 \r
263         /* Restore the registers that were clobbered by the test. */\r
264         pop     {r0-r1}\r
265 \r
266         /* VFP register test passed.  Jump to the core register test. */\r
267         b               reg1_loopf_pass\r
268 \r
269 reg1_error_loopf:\r
270         /* If this line is hit then a VFP register value was found to be\r
271         incorrect. */\r
272         b reg1_error_loopf\r
273 \r
274 reg1_loopf_pass:\r
275 \r
276         /* Test each general purpose register to check that it still contains the\r
277         expected known value, jumping to reg1_error_loop if any register contains\r
278         an unexpected value. */\r
279         cmp             r0, #0xFF\r
280         bne             reg1_error_loop\r
281         cmp             r1, #0x11\r
282         bne             reg1_error_loop\r
283         cmp             r2, #0x22\r
284         bne             reg1_error_loop\r
285         cmp             r3, #0x33\r
286         bne             reg1_error_loop\r
287         cmp             r4, #0x44\r
288         bne             reg1_error_loop\r
289         cmp             r5, #0x55\r
290         bne             reg1_error_loop\r
291         cmp             r6, #0x66\r
292         bne             reg1_error_loop\r
293         cmp             r7, #0x77\r
294         bne             reg1_error_loop\r
295         cmp             r8, #0x88\r
296         bne             reg1_error_loop\r
297         cmp             r9, #0x99\r
298         bne             reg1_error_loop\r
299         cmp             r10, #0xAA\r
300         bne             reg1_error_loop\r
301         cmp             r11, #0xBB\r
302         bne             reg1_error_loop\r
303         cmp             r12, #0xCC\r
304         bne             reg1_error_loop\r
305         cmp             r14, #0xEE\r
306         bne             reg1_error_loop\r
307 \r
308         /* Everything passed, increment the loop counter. */\r
309         push { r0-r1 }\r
310         ldr     r0, =ulRegTest1LoopCounter\r
311         ldr r1, [r0]\r
312         adds r1, r1, #1\r
313         str r1, [r0]\r
314         pop { r0-r1 }\r
315 \r
316         /* Start again. */\r
317         b reg1_loop\r
318 \r
319 reg1_error_loop:\r
320         /* If this line is hit then there was an error in a core register value.\r
321         The loop ensures the loop counter stops incrementing. */\r
322         b reg1_error_loop\r
323         nop\r
324 \r
325 /*-----------------------------------------------------------*/\r
326 \r
327 .type vRegTest2Implementation, %function\r
328 vRegTest2Implementation:\r
329 \r
330         /* Put a known value in each register. */\r
331         mov             r0,  #0xFF000000\r
332         mov             r1,  #0x11000000\r
333         mov             r2,  #0x22000000\r
334         mov             r3,  #0x33000000\r
335         mov     r4,  #0x44000000\r
336         mov     r5,  #0x55000000\r
337         mov     r6,  #0x66000000\r
338         mov     r7,  #0x77000000\r
339         mov     r8,  #0x88000000\r
340         mov     r9,  #0x99000000\r
341         mov     r10, #0xAA000000\r
342         mov     r11, #0xBB000000\r
343         mov     r12, #0xCC000000\r
344         mov     r14, #0xEE000000\r
345 \r
346         /* Likewise the floating point registers */\r
347         vmov    d0, r0, r1\r
348         vmov    d1, r2, r3\r
349         vmov    d2, r4, r5\r
350         vmov    d3, r6, r7\r
351         vmov    d4, r8, r9\r
352         vmov    d5, r10, r11\r
353         vmov    d6, r0, r1\r
354         vmov    d7, r2, r3\r
355         vmov    d8, r4, r5\r
356         vmov    d9, r6, r7\r
357         vmov    d10, r8, r9\r
358         vmov    d11, r10, r11\r
359         vmov    d12, r0, r1\r
360         vmov    d13, r2, r3\r
361         vmov    d14, r4, r5\r
362         vmov    d15, r6, r7\r
363 \r
364         vmov    d16, r0, r1\r
365         vmov    d17, r2, r3\r
366         vmov    d18, r4, r5\r
367         vmov    d19, r6, r7\r
368         vmov    d20, r8, r9\r
369         vmov    d21, r10, r11\r
370         vmov    d22, r0, r1\r
371         vmov    d23, r2, r3\r
372         vmov    d24, r4, r5\r
373         vmov    d25, r6, r7\r
374         vmov    d26, r8, r9\r
375         vmov    d27, r10, r11\r
376         vmov    d28, r0, r1\r
377         vmov    d29, r2, r3\r
378         vmov    d30, r4, r5\r
379         vmov    d31, r6, r7\r
380 \r
381         /* Loop, checking each iteration that each register still contains the\r
382         expected value. */\r
383 reg2_loop:\r
384         /* Check all the VFP registers still contain the values set above.\r
385         First save registers that are clobbered by the test. */\r
386         push    { r0-r1 }\r
387 \r
388         vmov    r0, r1, d0\r
389         cmp     r0, #0xFF000000\r
390         bne     reg2_error_loopf\r
391         cmp     r1, #0x11000000\r
392         bne     reg2_error_loopf\r
393         vmov    r0, r1, d1\r
394         cmp     r0, #0x22000000\r
395         bne     reg2_error_loopf\r
396         cmp     r1, #0x33000000\r
397         bne     reg2_error_loopf\r
398         vmov    r0, r1, d2\r
399         cmp     r0, #0x44000000\r
400         bne     reg2_error_loopf\r
401         cmp     r1, #0x55000000\r
402         bne     reg2_error_loopf\r
403         vmov    r0, r1, d3\r
404         cmp     r0, #0x66000000\r
405         bne     reg2_error_loopf\r
406         cmp     r1, #0x77000000\r
407         bne     reg2_error_loopf\r
408         vmov    r0, r1, d4\r
409         cmp     r0, #0x88000000\r
410         bne     reg2_error_loopf\r
411         cmp     r1, #0x99000000\r
412         bne     reg2_error_loopf\r
413         vmov    r0, r1, d5\r
414         cmp     r0, #0xAA000000\r
415         bne     reg2_error_loopf\r
416         cmp     r1, #0xBB000000\r
417         bne     reg2_error_loopf\r
418         vmov    r0, r1, d6\r
419         cmp     r0, #0xFF000000\r
420         bne     reg2_error_loopf\r
421         cmp     r1, #0x11000000\r
422         bne     reg2_error_loopf\r
423         vmov    r0, r1, d7\r
424         cmp     r0, #0x22000000\r
425         bne     reg2_error_loopf\r
426         cmp     r1, #0x33000000\r
427         bne     reg2_error_loopf\r
428         vmov    r0, r1, d8\r
429         cmp     r0, #0x44000000\r
430         bne     reg2_error_loopf\r
431         cmp     r1, #0x55000000\r
432         bne     reg2_error_loopf\r
433         vmov    r0, r1, d9\r
434         cmp     r0, #0x66000000\r
435         bne     reg2_error_loopf\r
436         cmp     r1, #0x77000000\r
437         bne     reg2_error_loopf\r
438         vmov    r0, r1, d10\r
439         cmp     r0, #0x88000000\r
440         bne     reg2_error_loopf\r
441         cmp     r1, #0x99000000\r
442         bne     reg2_error_loopf\r
443         vmov    r0, r1, d11\r
444         cmp     r0, #0xAA000000\r
445         bne     reg2_error_loopf\r
446         cmp     r1, #0xBB000000\r
447         bne     reg2_error_loopf\r
448         vmov    r0, r1, d12\r
449         cmp     r0, #0xFF000000\r
450         bne     reg2_error_loopf\r
451         cmp     r1, #0x11000000\r
452         bne     reg2_error_loopf\r
453         vmov    r0, r1, d13\r
454         cmp     r0, #0x22000000\r
455         bne     reg2_error_loopf\r
456         cmp     r1, #0x33000000\r
457         bne     reg2_error_loopf\r
458         vmov    r0, r1, d14\r
459         cmp     r0, #0x44000000\r
460         bne     reg2_error_loopf\r
461         cmp     r1, #0x55000000\r
462         bne     reg2_error_loopf\r
463         vmov    r0, r1, d15\r
464         cmp     r0, #0x66000000\r
465         bne     reg2_error_loopf\r
466         cmp     r1, #0x77000000\r
467         bne     reg2_error_loopf\r
468 \r
469         vmov    r0, r1, d16\r
470         cmp     r0, #0xFF000000\r
471         bne     reg2_error_loopf\r
472         cmp     r1, #0x11000000\r
473         bne     reg2_error_loopf\r
474         vmov    r0, r1, d17\r
475         cmp     r0, #0x22000000\r
476         bne     reg2_error_loopf\r
477         cmp     r1, #0x33000000\r
478         bne     reg2_error_loopf\r
479         vmov    r0, r1, d18\r
480         cmp     r0, #0x44000000\r
481         bne     reg2_error_loopf\r
482         cmp     r1, #0x55000000\r
483         bne     reg2_error_loopf\r
484         vmov    r0, r1, d19\r
485         cmp     r0, #0x66000000\r
486         bne     reg2_error_loopf\r
487         cmp     r1, #0x77000000\r
488         bne     reg2_error_loopf\r
489         vmov    r0, r1, d20\r
490         cmp     r0, #0x88000000\r
491         bne     reg2_error_loopf\r
492         cmp     r1, #0x99000000\r
493         bne     reg2_error_loopf\r
494         vmov    r0, r1, d21\r
495         cmp     r0, #0xAA000000\r
496         bne     reg2_error_loopf\r
497         cmp     r1, #0xBB000000\r
498         bne     reg2_error_loopf\r
499         vmov    r0, r1, d22\r
500         cmp     r0, #0xFF000000\r
501         bne     reg2_error_loopf\r
502         cmp     r1, #0x11000000\r
503         bne     reg2_error_loopf\r
504         vmov    r0, r1, d23\r
505         cmp     r0, #0x22000000\r
506         bne     reg2_error_loopf\r
507         cmp     r1, #0x33000000\r
508         bne     reg2_error_loopf\r
509         vmov    r0, r1, d24\r
510         cmp     r0, #0x44000000\r
511         bne     reg2_error_loopf\r
512         cmp     r1, #0x55000000\r
513         bne     reg2_error_loopf\r
514         vmov    r0, r1, d25\r
515         cmp     r0, #0x66000000\r
516         bne     reg2_error_loopf\r
517         cmp     r1, #0x77000000\r
518         bne     reg2_error_loopf\r
519         vmov    r0, r1, d26\r
520         cmp     r0, #0x88000000\r
521         bne     reg2_error_loopf\r
522         cmp     r1, #0x99000000\r
523         bne     reg2_error_loopf\r
524         vmov    r0, r1, d27\r
525         cmp     r0, #0xAA000000\r
526         bne     reg2_error_loopf\r
527         cmp     r1, #0xBB000000\r
528         bne     reg2_error_loopf\r
529         vmov    r0, r1, d28\r
530         cmp     r0, #0xFF000000\r
531         bne     reg2_error_loopf\r
532         cmp     r1, #0x11000000\r
533         bne     reg2_error_loopf\r
534         vmov    r0, r1, d29\r
535         cmp     r0, #0x22000000\r
536         bne     reg2_error_loopf\r
537         cmp     r1, #0x33000000\r
538         bne     reg2_error_loopf\r
539         vmov    r0, r1, d30\r
540         cmp     r0, #0x44000000\r
541         bne     reg2_error_loopf\r
542         cmp     r1, #0x55000000\r
543         bne     reg2_error_loopf\r
544         vmov    r0, r1, d31\r
545         cmp     r0, #0x66000000\r
546         bne     reg2_error_loopf\r
547         cmp     r1, #0x77000000\r
548         bne     reg2_error_loopf\r
549 \r
550         /* Restore the registers that were clobbered by the test. */\r
551         pop     {r0-r1}\r
552 \r
553         /* VFP register test passed.  Jump to the core register test. */\r
554         b               reg2_loopf_pass\r
555 \r
556 reg2_error_loopf:\r
557         /* If this line is hit then a VFP register value was found to be\r
558         incorrect. */\r
559         b               reg2_error_loopf\r
560 \r
561 reg2_loopf_pass:\r
562 \r
563         cmp             r0, #0xFF000000\r
564         bne             reg2_error_loop\r
565         cmp             r1, #0x11000000\r
566         bne             reg2_error_loop\r
567         cmp             r2, #0x22000000\r
568         bne             reg2_error_loop\r
569         cmp             r3, #0x33000000\r
570         bne             reg2_error_loop\r
571         cmp             r4, #0x44000000\r
572         bne             reg2_error_loop\r
573         cmp             r5, #0x55000000\r
574         bne             reg2_error_loop\r
575         cmp             r6, #0x66000000\r
576         bne             reg2_error_loop\r
577         cmp             r7, #0x77000000\r
578         bne             reg2_error_loop\r
579         cmp             r8, #0x88000000\r
580         bne             reg2_error_loop\r
581         cmp             r9, #0x99000000\r
582         bne             reg2_error_loop\r
583         cmp             r10, #0xAA000000\r
584         bne             reg2_error_loop\r
585         cmp             r11, #0xBB000000\r
586         bne             reg2_error_loop\r
587         cmp             r12, #0xCC000000\r
588         bne             reg2_error_loop\r
589         cmp     r14, #0xEE000000\r
590         bne             reg2_error_loop\r
591 \r
592         /* Everything passed, increment the loop counter. */\r
593         push    { r0-r1 }\r
594         ldr             r0, =ulRegTest2LoopCounter\r
595         ldr     r1, [r0]\r
596         adds    r1, r1, #1\r
597         str     r1, [r0]\r
598         pop     { r0-r1 }\r
599 \r
600         /* Start again. */\r
601         b               reg2_loop\r
602 \r
603 reg2_error_loop:\r
604         /* If this line is hit then there was an error in a core register value.\r
605         The loop ensures the loop counter stops incrementing. */\r
606         b               reg2_error_loop\r
607         nop\r
608 \r
609 \r
610         .end\r
611 \r