]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_A9_RZ_R7S72100_IAR_DS-5/Source/Full-Demo/reg_test.s
5dcd97740bad17a86b6f85df8b4301f2224b5a55
[freertos] / FreeRTOS / Demo / CORTEX_A9_RZ_R7S72100_IAR_DS-5 / Source / Full-Demo / reg_test.s
1 ;/*\r
2 ;    FreeRTOS V9.0.0rc1 - Copyright (C) 2016 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         EXPORT vRegTest1Implementation\r
76         EXPORT vRegTest2Implementation\r
77 \r
78         ; This file is built with IAR and ARM compilers.  When the ARM compiler\r
79         ; is used the compiler options must define __IASMARM__ as 0 using the\r
80         ; --predefine "__IASMARM__ SETA 0" command line option.  When compiling\r
81         ; with IAR __IASMARM__ is automatically set to 1 so no additional assembler\r
82         ; options are required.\r
83         if __IASMARM__ == 1\r
84                 ; Syntax for IAR compiler.\r
85                 SECTION .text:CODE:ROOT(2)\r
86         else\r
87                 ; Syntax for ARM compiler.\r
88                 AREA RegTest, CODE, READONLY\r
89         endif\r
90         ARM\r
91 \r
92         ; This function is explained in the comments at the top of main-full.c.\r
93 vRegTest1Implementation\r
94 \r
95         PRESERVE8\r
96         IMPORT ulRegTest1LoopCounter\r
97 \r
98         ; Fill each general purpose register with a known value.\r
99         mov             r0,  #0xFF\r
100         mov             r1,  #0x11\r
101         mov             r2,  #0x22\r
102         mov             r3,  #0x33\r
103         mov     r4,  #0x44\r
104         mov     r5,  #0x55\r
105         mov     r6,  #0x66\r
106         mov     r7,  #0x77\r
107         mov     r8,  #0x88\r
108         mov     r9,  #0x99\r
109         mov     r10, #0xAA\r
110         mov     r11, #0xBB\r
111         mov     r12, #0xCC\r
112         mov             r14, #0xEE\r
113 \r
114         ; Fill each FPU register with a known value.\r
115         vmov    d0, r0, r1\r
116         vmov    d1, r2, r3\r
117         vmov    d2, r4, r5\r
118         vmov    d3, r6, r7\r
119         vmov    d4, r8, r9\r
120         vmov    d5, r10, r11\r
121         vmov    d6, r0, r1\r
122         vmov    d7, r2, r3\r
123         vmov    d8, r4, r5\r
124         vmov    d9, r6, r7\r
125         vmov    d10, r8, r9\r
126         vmov    d11, r10, r11\r
127         vmov    d12, r0, r1\r
128         vmov    d13, r2, r3\r
129         vmov    d14, r4, r5\r
130         vmov    d15, r6, r7\r
131 \r
132         vmov    d16, r0, r1\r
133         vmov    d17, r2, r3\r
134         vmov    d18, r4, r5\r
135         vmov    d19, r6, r7\r
136         vmov    d20, r8, r9\r
137         vmov    d21, r10, r11\r
138         vmov    d22, r0, r1\r
139         vmov    d23, r2, r3\r
140         vmov    d24, r4, r5\r
141         vmov    d25, r6, r7\r
142         vmov    d26, r8, r9\r
143         vmov    d27, r10, r11\r
144         vmov    d28, r0, r1\r
145         vmov    d29, r2, r3\r
146         vmov    d30, r4, r5\r
147         vmov    d31, r6, r7\r
148 \r
149         ; Loop, checking each iteration that each register still contains the\r
150         ; expected value.\r
151 reg1_loop\r
152         ; Yield to increase test coverage\r
153         svc 0\r
154 \r
155         ; Check all the VFP registers still contain the values set above.\r
156         ; First save registers that are clobbered by the test.\r
157         push { r0-r1 }\r
158 \r
159         vmov    r0, r1, d0\r
160         cmp     r0, #0xFF\r
161         bne     reg1_error_loopf\r
162         cmp     r1, #0x11\r
163         bne     reg1_error_loopf\r
164         vmov    r0, r1, d1\r
165         cmp     r0, #0x22\r
166         bne     reg1_error_loopf\r
167         cmp     r1, #0x33\r
168         bne     reg1_error_loopf\r
169         vmov    r0, r1, d2\r
170         cmp     r0, #0x44\r
171         bne     reg1_error_loopf\r
172         cmp     r1, #0x55\r
173         bne     reg1_error_loopf\r
174         vmov    r0, r1, d3\r
175         cmp     r0, #0x66\r
176         bne     reg1_error_loopf\r
177         cmp     r1, #0x77\r
178         bne     reg1_error_loopf\r
179         vmov    r0, r1, d4\r
180         cmp     r0, #0x88\r
181         bne     reg1_error_loopf\r
182         cmp     r1, #0x99\r
183         bne     reg1_error_loopf\r
184         vmov    r0, r1, d5\r
185         cmp     r0, #0xAA\r
186         bne     reg1_error_loopf\r
187         cmp     r1, #0xBB\r
188         bne     reg1_error_loopf\r
189         vmov    r0, r1, d6\r
190         cmp     r0, #0xFF\r
191         bne     reg1_error_loopf\r
192         cmp     r1, #0x11\r
193         bne     reg1_error_loopf\r
194         vmov    r0, r1, d7\r
195         cmp     r0, #0x22\r
196         bne     reg1_error_loopf\r
197         cmp     r1, #0x33\r
198         bne     reg1_error_loopf\r
199         vmov    r0, r1, d8\r
200         cmp     r0, #0x44\r
201         bne     reg1_error_loopf\r
202         cmp     r1, #0x55\r
203         bne     reg1_error_loopf\r
204         vmov    r0, r1, d9\r
205         cmp     r0, #0x66\r
206         bne     reg1_error_loopf\r
207         cmp     r1, #0x77\r
208         bne     reg1_error_loopf\r
209         vmov    r0, r1, d10\r
210         cmp     r0, #0x88\r
211         bne     reg1_error_loopf\r
212         cmp     r1, #0x99\r
213         bne     reg1_error_loopf\r
214         vmov    r0, r1, d11\r
215         cmp     r0, #0xAA\r
216         bne     reg1_error_loopf\r
217         cmp     r1, #0xBB\r
218         bne     reg1_error_loopf\r
219         vmov    r0, r1, d12\r
220         cmp     r0, #0xFF\r
221         bne     reg1_error_loopf\r
222         cmp     r1, #0x11\r
223         bne     reg1_error_loopf\r
224         vmov    r0, r1, d13\r
225         cmp     r0, #0x22\r
226         bne     reg1_error_loopf\r
227         cmp     r1, #0x33\r
228         bne     reg1_error_loopf\r
229         vmov    r0, r1, d14\r
230         cmp     r0, #0x44\r
231         bne     reg1_error_loopf\r
232         cmp     r1, #0x55\r
233         bne     reg1_error_loopf\r
234         vmov    r0, r1, d15\r
235         cmp     r0, #0x66\r
236         bne     reg1_error_loopf\r
237         cmp     r1, #0x77\r
238         bne     reg1_error_loopf\r
239 \r
240         vmov    r0, r1, d16\r
241         cmp     r0, #0xFF\r
242         bne     reg1_error_loopf\r
243         cmp     r1, #0x11\r
244         bne     reg1_error_loopf\r
245         vmov    r0, r1, d17\r
246         cmp     r0, #0x22\r
247         bne     reg1_error_loopf\r
248         cmp     r1, #0x33\r
249         bne     reg1_error_loopf\r
250         vmov    r0, r1, d18\r
251         cmp     r0, #0x44\r
252         bne     reg1_error_loopf\r
253         cmp     r1, #0x55\r
254         bne     reg1_error_loopf\r
255         vmov    r0, r1, d19\r
256         cmp     r0, #0x66\r
257         bne     reg1_error_loopf\r
258         cmp     r1, #0x77\r
259         bne     reg1_error_loopf\r
260         vmov    r0, r1, d20\r
261         cmp     r0, #0x88\r
262         bne     reg1_error_loopf\r
263         cmp     r1, #0x99\r
264         bne     reg1_error_loopf\r
265         vmov    r0, r1, d21\r
266         cmp     r0, #0xAA\r
267         bne     reg1_error_loopf\r
268         cmp     r1, #0xBB\r
269         bne     reg1_error_loopf\r
270         vmov    r0, r1, d22\r
271         cmp     r0, #0xFF\r
272         bne     reg1_error_loopf\r
273         cmp     r1, #0x11\r
274         bne     reg1_error_loopf\r
275         vmov    r0, r1, d23\r
276         cmp     r0, #0x22\r
277         bne     reg1_error_loopf\r
278         cmp     r1, #0x33\r
279         bne     reg1_error_loopf\r
280         vmov    r0, r1, d24\r
281         cmp     r0, #0x44\r
282         bne     reg1_error_loopf\r
283         cmp     r1, #0x55\r
284         bne     reg1_error_loopf\r
285         vmov    r0, r1, d25\r
286         cmp     r0, #0x66\r
287         bne     reg1_error_loopf\r
288         cmp     r1, #0x77\r
289         bne     reg1_error_loopf\r
290         vmov    r0, r1, d26\r
291         cmp     r0, #0x88\r
292         bne     reg1_error_loopf\r
293         cmp     r1, #0x99\r
294         bne     reg1_error_loopf\r
295         vmov    r0, r1, d27\r
296         cmp     r0, #0xAA\r
297         bne     reg1_error_loopf\r
298         cmp     r1, #0xBB\r
299         bne     reg1_error_loopf\r
300         vmov    r0, r1, d28\r
301         cmp     r0, #0xFF\r
302         bne     reg1_error_loopf\r
303         cmp     r1, #0x11\r
304         bne     reg1_error_loopf\r
305         vmov    r0, r1, d29\r
306         cmp     r0, #0x22\r
307         bne     reg1_error_loopf\r
308         cmp     r1, #0x33\r
309         bne     reg1_error_loopf\r
310         vmov    r0, r1, d30\r
311         cmp     r0, #0x44\r
312         bne     reg1_error_loopf\r
313         cmp     r1, #0x55\r
314         bne     reg1_error_loopf\r
315         vmov    r0, r1, d31\r
316         cmp     r0, #0x66\r
317         bne     reg1_error_loopf\r
318         cmp     r1, #0x77\r
319         bne     reg1_error_loopf\r
320 \r
321         ; Restore the registers that were clobbered by the test.\r
322         pop     {r0-r1}\r
323 \r
324         ; VFP register test passed.  Jump to the core register test.\r
325         b               reg1_loopf_pass\r
326 \r
327 reg1_error_loopf\r
328         ; If this line is hit then a VFP register value was found to be\r
329         ; incorrect.\r
330         b reg1_error_loopf\r
331 \r
332 reg1_loopf_pass\r
333 \r
334         ; Test each general purpose register to check that it still contains the\r
335         ; expected known value, jumping to reg1_error_loop if any register contains\r
336         ; an unexpected value.\r
337         cmp             r0, #0xFF\r
338         bne             reg1_error_loop\r
339         cmp             r1, #0x11\r
340         bne             reg1_error_loop\r
341         cmp             r2, #0x22\r
342         bne             reg1_error_loop\r
343         cmp             r3, #0x33\r
344         bne             reg1_error_loop\r
345         cmp             r4, #0x44\r
346         bne             reg1_error_loop\r
347         cmp             r5, #0x55\r
348         bne             reg1_error_loop\r
349         cmp             r6, #0x66\r
350         bne             reg1_error_loop\r
351         cmp             r7, #0x77\r
352         bne             reg1_error_loop\r
353         cmp             r8, #0x88\r
354         bne             reg1_error_loop\r
355         cmp             r9, #0x99\r
356         bne             reg1_error_loop\r
357         cmp             r10, #0xAA\r
358         bne             reg1_error_loop\r
359         cmp             r11, #0xBB\r
360         bne             reg1_error_loop\r
361         cmp             r12, #0xCC\r
362         bne             reg1_error_loop\r
363         cmp             r14, #0xEE\r
364         bne             reg1_error_loop\r
365 \r
366         ; Everything passed, increment the loop counter.\r
367         push { r0-r1 }\r
368         ldr     r0, =ulRegTest1LoopCounter\r
369         ldr r1, [r0]\r
370         adds r1, r1, #1\r
371         str r1, [r0]\r
372         pop { r0-r1 }\r
373 \r
374         ; Start again.\r
375         b reg1_loop\r
376 \r
377 reg1_error_loop\r
378         ; If this line is hit then there was an error in a core register value.\r
379         ; The loop ensures the loop counter stops incrementing.\r
380         b reg1_error_loop\r
381         nop\r
382 \r
383 ;/*-----------------------------------------------------------*/\r
384 \r
385 vRegTest2Implementation\r
386 \r
387         PRESERVE8\r
388         IMPORT ulRegTest2LoopCounter\r
389 \r
390         ; Put a known value in each register.\r
391         mov             r0,  #0xFF000000\r
392         mov             r1,  #0x11000000\r
393         mov             r2,  #0x22000000\r
394         mov             r3,  #0x33000000\r
395         mov     r4,  #0x44000000\r
396         mov     r5,  #0x55000000\r
397         mov     r6,  #0x66000000\r
398         mov     r7,  #0x77000000\r
399         mov     r8,  #0x88000000\r
400         mov     r9,  #0x99000000\r
401         mov     r10, #0xAA000000\r
402         mov     r11, #0xBB000000\r
403         mov     r12, #0xCC000000\r
404         mov     r14, #0xEE000000\r
405 \r
406         ; Likewise the floating point registers\r
407         vmov    d0, r0, r1\r
408         vmov    d1, r2, r3\r
409         vmov    d2, r4, r5\r
410         vmov    d3, r6, r7\r
411         vmov    d4, r8, r9\r
412         vmov    d5, r10, r11\r
413         vmov    d6, r0, r1\r
414         vmov    d7, r2, r3\r
415         vmov    d8, r4, r5\r
416         vmov    d9, r6, r7\r
417         vmov    d10, r8, r9\r
418         vmov    d11, r10, r11\r
419         vmov    d12, r0, r1\r
420         vmov    d13, r2, r3\r
421         vmov    d14, r4, r5\r
422         vmov    d15, r6, r7\r
423 \r
424         vmov    d16, r0, r1\r
425         vmov    d17, r2, r3\r
426         vmov    d18, r4, r5\r
427         vmov    d19, r6, r7\r
428         vmov    d20, r8, r9\r
429         vmov    d21, r10, r11\r
430         vmov    d22, r0, r1\r
431         vmov    d23, r2, r3\r
432         vmov    d24, r4, r5\r
433         vmov    d25, r6, r7\r
434         vmov    d26, r8, r9\r
435         vmov    d27, r10, r11\r
436         vmov    d28, r0, r1\r
437         vmov    d29, r2, r3\r
438         vmov    d30, r4, r5\r
439         vmov    d31, r6, r7\r
440 \r
441         ; Loop, checking each iteration that each register still contains the\r
442         ; expected value.\r
443 reg2_loop\r
444         ; Check all the VFP registers still contain the values set above.\r
445         ; First save registers that are clobbered by the test.\r
446         push    { r0-r1 }\r
447 \r
448         vmov    r0, r1, d0\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, d1\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, d2\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, d3\r
464         cmp     r0, #0x66000000\r
465         bne     reg2_error_loopf\r
466         cmp     r1, #0x77000000\r
467         bne     reg2_error_loopf\r
468         vmov    r0, r1, d4\r
469         cmp     r0, #0x88000000\r
470         bne     reg2_error_loopf\r
471         cmp     r1, #0x99000000\r
472         bne     reg2_error_loopf\r
473         vmov    r0, r1, d5\r
474         cmp     r0, #0xAA000000\r
475         bne     reg2_error_loopf\r
476         cmp     r1, #0xBB000000\r
477         bne     reg2_error_loopf\r
478         vmov    r0, r1, d6\r
479         cmp     r0, #0xFF000000\r
480         bne     reg2_error_loopf\r
481         cmp     r1, #0x11000000\r
482         bne     reg2_error_loopf\r
483         vmov    r0, r1, d7\r
484         cmp     r0, #0x22000000\r
485         bne     reg2_error_loopf\r
486         cmp     r1, #0x33000000\r
487         bne     reg2_error_loopf\r
488         vmov    r0, r1, d8\r
489         cmp     r0, #0x44000000\r
490         bne     reg2_error_loopf\r
491         cmp     r1, #0x55000000\r
492         bne     reg2_error_loopf\r
493         vmov    r0, r1, d9\r
494         cmp     r0, #0x66000000\r
495         bne     reg2_error_loopf\r
496         cmp     r1, #0x77000000\r
497         bne     reg2_error_loopf\r
498         vmov    r0, r1, d10\r
499         cmp     r0, #0x88000000\r
500         bne     reg2_error_loopf\r
501         cmp     r1, #0x99000000\r
502         bne     reg2_error_loopf\r
503         vmov    r0, r1, d11\r
504         cmp     r0, #0xAA000000\r
505         bne     reg2_error_loopf\r
506         cmp     r1, #0xBB000000\r
507         bne     reg2_error_loopf\r
508         vmov    r0, r1, d12\r
509         cmp     r0, #0xFF000000\r
510         bne     reg2_error_loopf\r
511         cmp     r1, #0x11000000\r
512         bne     reg2_error_loopf\r
513         vmov    r0, r1, d13\r
514         cmp     r0, #0x22000000\r
515         bne     reg2_error_loopf\r
516         cmp     r1, #0x33000000\r
517         bne     reg2_error_loopf\r
518         vmov    r0, r1, d14\r
519         cmp     r0, #0x44000000\r
520         bne     reg2_error_loopf\r
521         cmp     r1, #0x55000000\r
522         bne     reg2_error_loopf\r
523         vmov    r0, r1, d15\r
524         cmp     r0, #0x66000000\r
525         bne     reg2_error_loopf\r
526         cmp     r1, #0x77000000\r
527         bne     reg2_error_loopf\r
528 \r
529         vmov    r0, r1, d16\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, d17\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, d18\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, d19\r
545         cmp     r0, #0x66000000\r
546         bne     reg2_error_loopf\r
547         cmp     r1, #0x77000000\r
548         bne     reg2_error_loopf\r
549         vmov    r0, r1, d20\r
550         cmp     r0, #0x88000000\r
551         bne     reg2_error_loopf\r
552         cmp     r1, #0x99000000\r
553         bne     reg2_error_loopf\r
554         vmov    r0, r1, d21\r
555         cmp     r0, #0xAA000000\r
556         bne     reg2_error_loopf\r
557         cmp     r1, #0xBB000000\r
558         bne     reg2_error_loopf\r
559         vmov    r0, r1, d22\r
560         cmp     r0, #0xFF000000\r
561         bne     reg2_error_loopf\r
562         cmp     r1, #0x11000000\r
563         bne     reg2_error_loopf\r
564         vmov    r0, r1, d23\r
565         cmp     r0, #0x22000000\r
566         bne     reg2_error_loopf\r
567         cmp     r1, #0x33000000\r
568         bne     reg2_error_loopf\r
569         vmov    r0, r1, d24\r
570         cmp     r0, #0x44000000\r
571         bne     reg2_error_loopf\r
572         cmp     r1, #0x55000000\r
573         bne     reg2_error_loopf\r
574         vmov    r0, r1, d25\r
575         cmp     r0, #0x66000000\r
576         bne     reg2_error_loopf\r
577         cmp     r1, #0x77000000\r
578         bne     reg2_error_loopf\r
579         vmov    r0, r1, d26\r
580         cmp     r0, #0x88000000\r
581         bne     reg2_error_loopf\r
582         cmp     r1, #0x99000000\r
583         bne     reg2_error_loopf\r
584         vmov    r0, r1, d27\r
585         cmp     r0, #0xAA000000\r
586         bne     reg2_error_loopf\r
587         cmp     r1, #0xBB000000\r
588         bne     reg2_error_loopf\r
589         vmov    r0, r1, d28\r
590         cmp     r0, #0xFF000000\r
591         bne     reg2_error_loopf\r
592         cmp     r1, #0x11000000\r
593         bne     reg2_error_loopf\r
594         vmov    r0, r1, d29\r
595         cmp     r0, #0x22000000\r
596         bne     reg2_error_loopf\r
597         cmp     r1, #0x33000000\r
598         bne     reg2_error_loopf\r
599         vmov    r0, r1, d30\r
600         cmp     r0, #0x44000000\r
601         bne     reg2_error_loopf\r
602         cmp     r1, #0x55000000\r
603         bne     reg2_error_loopf\r
604         vmov    r0, r1, d31\r
605         cmp     r0, #0x66000000\r
606         bne     reg2_error_loopf\r
607         cmp     r1, #0x77000000\r
608         bne     reg2_error_loopf\r
609 \r
610         ; Restore the registers that were clobbered by the test.\r
611         pop     {r0-r1}\r
612 \r
613         ; VFP register test passed.  Jump to the core register test.\r
614         b               reg2_loopf_pass\r
615 \r
616 reg2_error_loopf\r
617         ; If this line is hit then a VFP register value was found to be\r
618         ; incorrect.\r
619         b               reg2_error_loopf\r
620 \r
621 reg2_loopf_pass\r
622 \r
623         cmp             r0, #0xFF000000\r
624         bne             reg2_error_loop\r
625         cmp             r1, #0x11000000\r
626         bne             reg2_error_loop\r
627         cmp             r2, #0x22000000\r
628         bne             reg2_error_loop\r
629         cmp             r3, #0x33000000\r
630         bne             reg2_error_loop\r
631         cmp             r4, #0x44000000\r
632         bne             reg2_error_loop\r
633         cmp             r5, #0x55000000\r
634         bne             reg2_error_loop\r
635         cmp             r6, #0x66000000\r
636         bne             reg2_error_loop\r
637         cmp             r7, #0x77000000\r
638         bne             reg2_error_loop\r
639         cmp             r8, #0x88000000\r
640         bne             reg2_error_loop\r
641         cmp             r9, #0x99000000\r
642         bne             reg2_error_loop\r
643         cmp             r10, #0xAA000000\r
644         bne             reg2_error_loop\r
645         cmp             r11, #0xBB000000\r
646         bne             reg2_error_loop\r
647         cmp             r12, #0xCC000000\r
648         bne             reg2_error_loop\r
649         cmp     r14, #0xEE000000\r
650         bne             reg2_error_loop\r
651 \r
652         ; Everything passed, increment the loop counter.\r
653         push    { r0-r1 }\r
654         ldr             r0, =ulRegTest2LoopCounter\r
655         ldr     r1, [r0]\r
656         adds    r1, r1, #1\r
657         str     r1, [r0]\r
658         pop     { r0-r1 }\r
659 \r
660         ; Start again.\r
661         b               reg2_loop\r
662 \r
663 reg2_error_loop\r
664         ; If this line is hit then there was an error in a core register value.\r
665         ; The loop ensures the loop counter stops incrementing.\r
666         b               reg2_error_loop\r
667         nop\r
668 \r
669 \r
670         END\r