]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702/RTOSDemo/src/Full_Demo/reg_test.S
Update version numbers in preparation for new release.
[freertos] / FreeRTOS / Demo / CORTEX_A9_Zynq_ZC702 / RTOSDemo / src / Full_Demo / reg_test.S
1 /*\r
2     FreeRTOS V8.2.2 - Copyright (C) 2015 Real Time Engineers Ltd.\r
3 \r
4     FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME.  PLEASE VISIT\r
5     http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
6 \r
7     ***************************************************************************\r
8      *                                                                       *\r
9      *    FreeRTOS tutorial books are available in pdf and paperback.        *\r
10      *    Complete, revised, and edited pdf reference manuals are also       *\r
11      *    available.                                                         *\r
12      *                                                                       *\r
13      *    Purchasing FreeRTOS documentation will not only help you, by       *\r
14      *    ensuring you get running as quickly as possible and with an        *\r
15      *    in-depth knowledge of how to use FreeRTOS, it will also help       *\r
16      *    the FreeRTOS project to continue with its mission of providing     *\r
17      *    professional grade, cross platform, de facto standard solutions    *\r
18      *    for microcontrollers - completely free of charge!                  *\r
19      *                                                                       *\r
20      *    >>> See http://www.FreeRTOS.org/Documentation for details. <<<     *\r
21      *                                                                       *\r
22      *    Thank you for using FreeRTOS, and thank you for your support!      *\r
23      *                                                                       *\r
24     ***************************************************************************\r
25 \r
26 \r
27     This file is part of the FreeRTOS distribution.\r
28 \r
29     FreeRTOS is free software; you can redistribute it and/or modify it under\r
30     the terms of the GNU General Public License (version 2) as published by the\r
31     Free Software Foundation AND MODIFIED BY the FreeRTOS exception.\r
32 \r
33     >>>>>>NOTE<<<<<< The modification to the GPL is included to allow you to\r
34     distribute a combined work that includes FreeRTOS without being obliged to\r
35     provide the source code for proprietary components outside of the FreeRTOS\r
36     kernel.\r
37 \r
38     FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
39     WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
40     FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more\r
41     details. You should have received a copy of the GNU General Public License\r
42     and the FreeRTOS license exception along with FreeRTOS; if not itcan be\r
43     viewed here: http://www.freertos.org/a00114.html and also obtained by\r
44     writing to Real Time Engineers Ltd., contact details for whom are available\r
45     on the FreeRTOS WEB site.\r
46 \r
47     1 tab == 4 spaces!\r
48 \r
49     ***************************************************************************\r
50      *                                                                       *\r
51      *    Having a problem?  Start by reading the FAQ "My application does   *\r
52      *    not run, what could be wrong?"                                     *\r
53      *                                                                       *\r
54      *    http://www.FreeRTOS.org/FAQHelp.html                               *\r
55      *                                                                       *\r
56     ***************************************************************************\r
57 \r
58 \r
59     http://www.FreeRTOS.org - Documentation, books, training, latest versions,\r
60     license and Real Time Engineers Ltd. contact details.\r
61 \r
62     http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
63     including FreeRTOS+Trace - an indispensable productivity tool, and our new\r
64     fully thread aware and reentrant UDP/IP stack.\r
65 \r
66     http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High\r
67     Integrity Systems, who sell the code with commercial support,\r
68     indemnification and middleware, under the OpenRTOS brand.\r
69 \r
70     http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
71     engineered and independently SIL3 certified version for use in safety and\r
72     mission critical applications that require provable dependability.\r
73 */\r
74 \r
75         .global vRegTest1Implementation\r
76         .global vRegTest2Implementation\r
77         .extern ulRegTest1LoopCounter\r
78         .extern ulRegTest2LoopCounter\r
79 \r
80         .text\r
81         .arm\r
82 \r
83         /* This function is explained in the comments at the top of main-full.c. */\r
84 .type vRegTest1Implementation, %function\r
85 vRegTest1Implementation:\r
86 \r
87         /* Fill each general purpose register with a known value. */\r
88         mov             r0,  #0xFF\r
89         mov             r1,  #0x11\r
90         mov             r2,  #0x22\r
91         mov             r3,  #0x33\r
92         mov     r4,  #0x44\r
93         mov     r5,  #0x55\r
94         mov     r6,  #0x66\r
95         mov     r7,  #0x77\r
96         mov     r8,  #0x88\r
97         mov     r9,  #0x99\r
98         mov     r10, #0xAA\r
99         mov     r11, #0xBB\r
100         mov     r12, #0xCC\r
101         mov             r14, #0xEE\r
102 \r
103         /* Fill each FPU register with a known value. */\r
104         vmov    d0, r0, r1\r
105         vmov    d1, r2, r3\r
106         vmov    d2, r4, r5\r
107         vmov    d3, r6, r7\r
108         vmov    d4, r8, r9\r
109         vmov    d5, r10, r11\r
110         vmov    d6, r0, r1\r
111         vmov    d7, r2, r3\r
112         vmov    d8, r4, r5\r
113         vmov    d9, r6, r7\r
114         vmov    d10, r8, r9\r
115         vmov    d11, r10, r11\r
116         vmov    d12, r0, r1\r
117         vmov    d13, r2, r3\r
118         vmov    d14, r4, r5\r
119         vmov    d15, r6, r7\r
120 \r
121         vmov    d16, r0, r1\r
122         vmov    d17, r2, r3\r
123         vmov    d18, r4, r5\r
124         vmov    d19, r6, r7\r
125         vmov    d20, r8, r9\r
126         vmov    d21, r10, r11\r
127         vmov    d22, r0, r1\r
128         vmov    d23, r2, r3\r
129         vmov    d24, r4, r5\r
130         vmov    d25, r6, r7\r
131         vmov    d26, r8, r9\r
132         vmov    d27, r10, r11\r
133         vmov    d28, r0, r1\r
134         vmov    d29, r2, r3\r
135         vmov    d30, r4, r5\r
136         vmov    d31, r6, r7\r
137 \r
138         /* Loop, checking each itteration that each register still contains the\r
139         expected value. */\r
140 reg1_loop:\r
141         /* Yield to increase test coverage */\r
142         svc 0\r
143 \r
144         /* Check all the VFP registers still contain the values set above.\r
145         First save registers that are clobbered by the test. */\r
146         push { r0-r1 }\r
147 \r
148         vmov    r0, r1, d0\r
149         cmp     r0, #0xFF\r
150         bne     reg1_error_loopf\r
151         cmp     r1, #0x11\r
152         bne     reg1_error_loopf\r
153         vmov    r0, r1, d1\r
154         cmp     r0, #0x22\r
155         bne     reg1_error_loopf\r
156         cmp     r1, #0x33\r
157         bne     reg1_error_loopf\r
158         vmov    r0, r1, d2\r
159         cmp     r0, #0x44\r
160         bne     reg1_error_loopf\r
161         cmp     r1, #0x55\r
162         bne     reg1_error_loopf\r
163         vmov    r0, r1, d3\r
164         cmp     r0, #0x66\r
165         bne     reg1_error_loopf\r
166         cmp     r1, #0x77\r
167         bne     reg1_error_loopf\r
168         vmov    r0, r1, d4\r
169         cmp     r0, #0x88\r
170         bne     reg1_error_loopf\r
171         cmp     r1, #0x99\r
172         bne     reg1_error_loopf\r
173         vmov    r0, r1, d5\r
174         cmp     r0, #0xAA\r
175         bne     reg1_error_loopf\r
176         cmp     r1, #0xBB\r
177         bne     reg1_error_loopf\r
178         vmov    r0, r1, d6\r
179         cmp     r0, #0xFF\r
180         bne     reg1_error_loopf\r
181         cmp     r1, #0x11\r
182         bne     reg1_error_loopf\r
183         vmov    r0, r1, d7\r
184         cmp     r0, #0x22\r
185         bne     reg1_error_loopf\r
186         cmp     r1, #0x33\r
187         bne     reg1_error_loopf\r
188         vmov    r0, r1, d8\r
189         cmp     r0, #0x44\r
190         bne     reg1_error_loopf\r
191         cmp     r1, #0x55\r
192         bne     reg1_error_loopf\r
193         vmov    r0, r1, d9\r
194         cmp     r0, #0x66\r
195         bne     reg1_error_loopf\r
196         cmp     r1, #0x77\r
197         bne     reg1_error_loopf\r
198         vmov    r0, r1, d10\r
199         cmp     r0, #0x88\r
200         bne     reg1_error_loopf\r
201         cmp     r1, #0x99\r
202         bne     reg1_error_loopf\r
203         vmov    r0, r1, d11\r
204         cmp     r0, #0xAA\r
205         bne     reg1_error_loopf\r
206         cmp     r1, #0xBB\r
207         bne     reg1_error_loopf\r
208         vmov    r0, r1, d12\r
209         cmp     r0, #0xFF\r
210         bne     reg1_error_loopf\r
211         cmp     r1, #0x11\r
212         bne     reg1_error_loopf\r
213         vmov    r0, r1, d13\r
214         cmp     r0, #0x22\r
215         bne     reg1_error_loopf\r
216         cmp     r1, #0x33\r
217         bne     reg1_error_loopf\r
218         vmov    r0, r1, d14\r
219         cmp     r0, #0x44\r
220         bne     reg1_error_loopf\r
221         cmp     r1, #0x55\r
222         bne     reg1_error_loopf\r
223         vmov    r0, r1, d15\r
224         cmp     r0, #0x66\r
225         bne     reg1_error_loopf\r
226         cmp     r1, #0x77\r
227         bne     reg1_error_loopf\r
228 \r
229         vmov    r0, r1, d16\r
230         cmp     r0, #0xFF\r
231         bne     reg1_error_loopf\r
232         cmp     r1, #0x11\r
233         bne     reg1_error_loopf\r
234         vmov    r0, r1, d17\r
235         cmp     r0, #0x22\r
236         bne     reg1_error_loopf\r
237         cmp     r1, #0x33\r
238         bne     reg1_error_loopf\r
239         vmov    r0, r1, d18\r
240         cmp     r0, #0x44\r
241         bne     reg1_error_loopf\r
242         cmp     r1, #0x55\r
243         bne     reg1_error_loopf\r
244         vmov    r0, r1, d19\r
245         cmp     r0, #0x66\r
246         bne     reg1_error_loopf\r
247         cmp     r1, #0x77\r
248         bne     reg1_error_loopf\r
249         vmov    r0, r1, d20\r
250         cmp     r0, #0x88\r
251         bne     reg1_error_loopf\r
252         cmp     r1, #0x99\r
253         bne     reg1_error_loopf\r
254         vmov    r0, r1, d21\r
255         cmp     r0, #0xAA\r
256         bne     reg1_error_loopf\r
257         cmp     r1, #0xBB\r
258         bne     reg1_error_loopf\r
259         vmov    r0, r1, d22\r
260         cmp     r0, #0xFF\r
261         bne     reg1_error_loopf\r
262         cmp     r1, #0x11\r
263         bne     reg1_error_loopf\r
264         vmov    r0, r1, d23\r
265         cmp     r0, #0x22\r
266         bne     reg1_error_loopf\r
267         cmp     r1, #0x33\r
268         bne     reg1_error_loopf\r
269         vmov    r0, r1, d24\r
270         cmp     r0, #0x44\r
271         bne     reg1_error_loopf\r
272         cmp     r1, #0x55\r
273         bne     reg1_error_loopf\r
274         vmov    r0, r1, d25\r
275         cmp     r0, #0x66\r
276         bne     reg1_error_loopf\r
277         cmp     r1, #0x77\r
278         bne     reg1_error_loopf\r
279         vmov    r0, r1, d26\r
280         cmp     r0, #0x88\r
281         bne     reg1_error_loopf\r
282         cmp     r1, #0x99\r
283         bne     reg1_error_loopf\r
284         vmov    r0, r1, d27\r
285         cmp     r0, #0xAA\r
286         bne     reg1_error_loopf\r
287         cmp     r1, #0xBB\r
288         bne     reg1_error_loopf\r
289         vmov    r0, r1, d28\r
290         cmp     r0, #0xFF\r
291         bne     reg1_error_loopf\r
292         cmp     r1, #0x11\r
293         bne     reg1_error_loopf\r
294         vmov    r0, r1, d29\r
295         cmp     r0, #0x22\r
296         bne     reg1_error_loopf\r
297         cmp     r1, #0x33\r
298         bne     reg1_error_loopf\r
299         vmov    r0, r1, d30\r
300         cmp     r0, #0x44\r
301         bne     reg1_error_loopf\r
302         cmp     r1, #0x55\r
303         bne     reg1_error_loopf\r
304         vmov    r0, r1, d31\r
305         cmp     r0, #0x66\r
306         bne     reg1_error_loopf\r
307         cmp     r1, #0x77\r
308         bne     reg1_error_loopf\r
309 \r
310         /* Restore the registers that were clobbered by the test. */\r
311         pop     {r0-r1}\r
312 \r
313         /* VFP register test passed.  Jump to the core register test. */\r
314         b               reg1_loopf_pass\r
315 \r
316 reg1_error_loopf:\r
317         /* If this line is hit then a VFP register value was found to be\r
318         incorrect. */\r
319         b reg1_error_loopf\r
320 \r
321 reg1_loopf_pass:\r
322 \r
323         /* Test each general purpose register to check that it still contains the\r
324         expected known value, jumping to reg1_error_loop if any register contains\r
325         an unexpected value. */\r
326         cmp             r0, #0xFF\r
327         bne             reg1_error_loop\r
328         cmp             r1, #0x11\r
329         bne             reg1_error_loop\r
330         cmp             r2, #0x22\r
331         bne             reg1_error_loop\r
332         cmp             r3, #0x33\r
333         bne             reg1_error_loop\r
334         cmp             r4, #0x44\r
335         bne             reg1_error_loop\r
336         cmp             r5, #0x55\r
337         bne             reg1_error_loop\r
338         cmp             r6, #0x66\r
339         bne             reg1_error_loop\r
340         cmp             r7, #0x77\r
341         bne             reg1_error_loop\r
342         cmp             r8, #0x88\r
343         bne             reg1_error_loop\r
344         cmp             r9, #0x99\r
345         bne             reg1_error_loop\r
346         cmp             r10, #0xAA\r
347         bne             reg1_error_loop\r
348         cmp             r11, #0xBB\r
349         bne             reg1_error_loop\r
350         cmp             r12, #0xCC\r
351         bne             reg1_error_loop\r
352         cmp             r14, #0xEE\r
353         bne             reg1_error_loop\r
354 \r
355         /* Everything passed, increment the loop counter. */\r
356         push { r0-r1 }\r
357         ldr     r0, =ulRegTest1LoopCounter\r
358         ldr r1, [r0]\r
359         adds r1, r1, #1\r
360         str r1, [r0]\r
361         pop { r0-r1 }\r
362 \r
363         /* Start again. */\r
364         b reg1_loop\r
365 \r
366 reg1_error_loop:\r
367         /* If this line is hit then there was an error in a core register value.\r
368         The loop ensures the loop counter stops incrementing. */\r
369         b reg1_error_loop\r
370         nop\r
371 \r
372 /*-----------------------------------------------------------*/\r
373 \r
374 .type vRegTest2Implementation, %function\r
375 vRegTest2Implementation:\r
376 \r
377         /* Put a known value in each register. */\r
378         mov             r0,  #0xFF000000\r
379         mov             r1,  #0x11000000\r
380         mov             r2,  #0x22000000\r
381         mov             r3,  #0x33000000\r
382         mov     r4,  #0x44000000\r
383         mov     r5,  #0x55000000\r
384         mov     r6,  #0x66000000\r
385         mov     r7,  #0x77000000\r
386         mov     r8,  #0x88000000\r
387         mov     r9,  #0x99000000\r
388         mov     r10, #0xAA000000\r
389         mov     r11, #0xBB000000\r
390         mov     r12, #0xCC000000\r
391         mov     r14, #0xEE000000\r
392 \r
393         /* Likewise the floating point registers */\r
394         vmov    d0, r0, r1\r
395         vmov    d1, r2, r3\r
396         vmov    d2, r4, r5\r
397         vmov    d3, r6, r7\r
398         vmov    d4, r8, r9\r
399         vmov    d5, r10, r11\r
400         vmov    d6, r0, r1\r
401         vmov    d7, r2, r3\r
402         vmov    d8, r4, r5\r
403         vmov    d9, r6, r7\r
404         vmov    d10, r8, r9\r
405         vmov    d11, r10, r11\r
406         vmov    d12, r0, r1\r
407         vmov    d13, r2, r3\r
408         vmov    d14, r4, r5\r
409         vmov    d15, r6, r7\r
410 \r
411         vmov    d16, r0, r1\r
412         vmov    d17, r2, r3\r
413         vmov    d18, r4, r5\r
414         vmov    d19, r6, r7\r
415         vmov    d20, r8, r9\r
416         vmov    d21, r10, r11\r
417         vmov    d22, r0, r1\r
418         vmov    d23, r2, r3\r
419         vmov    d24, r4, r5\r
420         vmov    d25, r6, r7\r
421         vmov    d26, r8, r9\r
422         vmov    d27, r10, r11\r
423         vmov    d28, r0, r1\r
424         vmov    d29, r2, r3\r
425         vmov    d30, r4, r5\r
426         vmov    d31, r6, r7\r
427 \r
428         /* Loop, checking each itteration that each register still contains the\r
429         expected value. */\r
430 reg2_loop:\r
431         /* Check all the VFP registers still contain the values set above.\r
432         First save registers that are clobbered by the test. */\r
433         push    { r0-r1 }\r
434 \r
435         vmov    r0, r1, d0\r
436         cmp     r0, #0xFF000000\r
437         bne     reg2_error_loopf\r
438         cmp     r1, #0x11000000\r
439         bne     reg2_error_loopf\r
440         vmov    r0, r1, d1\r
441         cmp     r0, #0x22000000\r
442         bne     reg2_error_loopf\r
443         cmp     r1, #0x33000000\r
444         bne     reg2_error_loopf\r
445         vmov    r0, r1, d2\r
446         cmp     r0, #0x44000000\r
447         bne     reg2_error_loopf\r
448         cmp     r1, #0x55000000\r
449         bne     reg2_error_loopf\r
450         vmov    r0, r1, d3\r
451         cmp     r0, #0x66000000\r
452         bne     reg2_error_loopf\r
453         cmp     r1, #0x77000000\r
454         bne     reg2_error_loopf\r
455         vmov    r0, r1, d4\r
456         cmp     r0, #0x88000000\r
457         bne     reg2_error_loopf\r
458         cmp     r1, #0x99000000\r
459         bne     reg2_error_loopf\r
460         vmov    r0, r1, d5\r
461         cmp     r0, #0xAA000000\r
462         bne     reg2_error_loopf\r
463         cmp     r1, #0xBB000000\r
464         bne     reg2_error_loopf\r
465         vmov    r0, r1, d6\r
466         cmp     r0, #0xFF000000\r
467         bne     reg2_error_loopf\r
468         cmp     r1, #0x11000000\r
469         bne     reg2_error_loopf\r
470         vmov    r0, r1, d7\r
471         cmp     r0, #0x22000000\r
472         bne     reg2_error_loopf\r
473         cmp     r1, #0x33000000\r
474         bne     reg2_error_loopf\r
475         vmov    r0, r1, d8\r
476         cmp     r0, #0x44000000\r
477         bne     reg2_error_loopf\r
478         cmp     r1, #0x55000000\r
479         bne     reg2_error_loopf\r
480         vmov    r0, r1, d9\r
481         cmp     r0, #0x66000000\r
482         bne     reg2_error_loopf\r
483         cmp     r1, #0x77000000\r
484         bne     reg2_error_loopf\r
485         vmov    r0, r1, d10\r
486         cmp     r0, #0x88000000\r
487         bne     reg2_error_loopf\r
488         cmp     r1, #0x99000000\r
489         bne     reg2_error_loopf\r
490         vmov    r0, r1, d11\r
491         cmp     r0, #0xAA000000\r
492         bne     reg2_error_loopf\r
493         cmp     r1, #0xBB000000\r
494         bne     reg2_error_loopf\r
495         vmov    r0, r1, d12\r
496         cmp     r0, #0xFF000000\r
497         bne     reg2_error_loopf\r
498         cmp     r1, #0x11000000\r
499         bne     reg2_error_loopf\r
500         vmov    r0, r1, d13\r
501         cmp     r0, #0x22000000\r
502         bne     reg2_error_loopf\r
503         cmp     r1, #0x33000000\r
504         bne     reg2_error_loopf\r
505         vmov    r0, r1, d14\r
506         cmp     r0, #0x44000000\r
507         bne     reg2_error_loopf\r
508         cmp     r1, #0x55000000\r
509         bne     reg2_error_loopf\r
510         vmov    r0, r1, d15\r
511         cmp     r0, #0x66000000\r
512         bne     reg2_error_loopf\r
513         cmp     r1, #0x77000000\r
514         bne     reg2_error_loopf\r
515 \r
516         vmov    r0, r1, d16\r
517         cmp     r0, #0xFF000000\r
518         bne     reg2_error_loopf\r
519         cmp     r1, #0x11000000\r
520         bne     reg2_error_loopf\r
521         vmov    r0, r1, d17\r
522         cmp     r0, #0x22000000\r
523         bne     reg2_error_loopf\r
524         cmp     r1, #0x33000000\r
525         bne     reg2_error_loopf\r
526         vmov    r0, r1, d18\r
527         cmp     r0, #0x44000000\r
528         bne     reg2_error_loopf\r
529         cmp     r1, #0x55000000\r
530         bne     reg2_error_loopf\r
531         vmov    r0, r1, d19\r
532         cmp     r0, #0x66000000\r
533         bne     reg2_error_loopf\r
534         cmp     r1, #0x77000000\r
535         bne     reg2_error_loopf\r
536         vmov    r0, r1, d20\r
537         cmp     r0, #0x88000000\r
538         bne     reg2_error_loopf\r
539         cmp     r1, #0x99000000\r
540         bne     reg2_error_loopf\r
541         vmov    r0, r1, d21\r
542         cmp     r0, #0xAA000000\r
543         bne     reg2_error_loopf\r
544         cmp     r1, #0xBB000000\r
545         bne     reg2_error_loopf\r
546         vmov    r0, r1, d22\r
547         cmp     r0, #0xFF000000\r
548         bne     reg2_error_loopf\r
549         cmp     r1, #0x11000000\r
550         bne     reg2_error_loopf\r
551         vmov    r0, r1, d23\r
552         cmp     r0, #0x22000000\r
553         bne     reg2_error_loopf\r
554         cmp     r1, #0x33000000\r
555         bne     reg2_error_loopf\r
556         vmov    r0, r1, d24\r
557         cmp     r0, #0x44000000\r
558         bne     reg2_error_loopf\r
559         cmp     r1, #0x55000000\r
560         bne     reg2_error_loopf\r
561         vmov    r0, r1, d25\r
562         cmp     r0, #0x66000000\r
563         bne     reg2_error_loopf\r
564         cmp     r1, #0x77000000\r
565         bne     reg2_error_loopf\r
566         vmov    r0, r1, d26\r
567         cmp     r0, #0x88000000\r
568         bne     reg2_error_loopf\r
569         cmp     r1, #0x99000000\r
570         bne     reg2_error_loopf\r
571         vmov    r0, r1, d27\r
572         cmp     r0, #0xAA000000\r
573         bne     reg2_error_loopf\r
574         cmp     r1, #0xBB000000\r
575         bne     reg2_error_loopf\r
576         vmov    r0, r1, d28\r
577         cmp     r0, #0xFF000000\r
578         bne     reg2_error_loopf\r
579         cmp     r1, #0x11000000\r
580         bne     reg2_error_loopf\r
581         vmov    r0, r1, d29\r
582         cmp     r0, #0x22000000\r
583         bne     reg2_error_loopf\r
584         cmp     r1, #0x33000000\r
585         bne     reg2_error_loopf\r
586         vmov    r0, r1, d30\r
587         cmp     r0, #0x44000000\r
588         bne     reg2_error_loopf\r
589         cmp     r1, #0x55000000\r
590         bne     reg2_error_loopf\r
591         vmov    r0, r1, d31\r
592         cmp     r0, #0x66000000\r
593         bne     reg2_error_loopf\r
594         cmp     r1, #0x77000000\r
595         bne     reg2_error_loopf\r
596 \r
597         /* Restore the registers that were clobbered by the test. */\r
598         pop     {r0-r1}\r
599 \r
600         /* VFP register test passed.  Jump to the core register test. */\r
601         b               reg2_loopf_pass\r
602 \r
603 reg2_error_loopf:\r
604         /* If this line is hit then a VFP register value was found to be\r
605         incorrect. */\r
606         b               reg2_error_loopf\r
607 \r
608 reg2_loopf_pass:\r
609 \r
610         cmp             r0, #0xFF000000\r
611         bne             reg2_error_loop\r
612         cmp             r1, #0x11000000\r
613         bne             reg2_error_loop\r
614         cmp             r2, #0x22000000\r
615         bne             reg2_error_loop\r
616         cmp             r3, #0x33000000\r
617         bne             reg2_error_loop\r
618         cmp             r4, #0x44000000\r
619         bne             reg2_error_loop\r
620         cmp             r5, #0x55000000\r
621         bne             reg2_error_loop\r
622         cmp             r6, #0x66000000\r
623         bne             reg2_error_loop\r
624         cmp             r7, #0x77000000\r
625         bne             reg2_error_loop\r
626         cmp             r8, #0x88000000\r
627         bne             reg2_error_loop\r
628         cmp             r9, #0x99000000\r
629         bne             reg2_error_loop\r
630         cmp             r10, #0xAA000000\r
631         bne             reg2_error_loop\r
632         cmp             r11, #0xBB000000\r
633         bne             reg2_error_loop\r
634         cmp             r12, #0xCC000000\r
635         bne             reg2_error_loop\r
636         cmp     r14, #0xEE000000\r
637         bne             reg2_error_loop\r
638 \r
639         /* Everything passed, increment the loop counter. */\r
640         push    { r0-r1 }\r
641         ldr             r0, =ulRegTest2LoopCounter\r
642         ldr     r1, [r0]\r
643         adds    r1, r1, #1\r
644         str     r1, [r0]\r
645         pop     { r0-r1 }\r
646 \r
647         /* Start again. */\r
648         b               reg2_loop\r
649 \r
650 reg2_error_loop:\r
651         /* If this line is hit then there was an error in a core register value.\r
652         The loop ensures the loop counter stops incrementing. */\r
653         b               reg2_error_loop\r
654         nop\r
655 \r
656 \r
657         .end\r
658 \r