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