]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/RISC-V_RV32_SiFive_IAR/full_demo/RegTest.s
Minor updates to comment block for xTaskCheckForTimeOut().
[freertos] / FreeRTOS / Demo / RISC-V_RV32_SiFive_IAR / full_demo / RegTest.s
1 /*\r
2  * FreeRTOS Kernel V10.2.1\r
3  * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
4  *\r
5  * Permission is hereby granted, free of charge, to any person obtaining a copy of\r
6  * this software and associated documentation files (the "Software"), to deal in\r
7  * the Software without restriction, including without limitation the rights to\r
8  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r
9  * the Software, and to permit persons to whom the Software is furnished to do so,\r
10  * subject to the following conditions:\r
11  *\r
12  * The above copyright notice and this permission notice shall be included in all\r
13  * copies or substantial portions of the Software.\r
14  *\r
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r
17  * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r
18  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
19  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
20  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
21  *\r
22  * http://www.FreeRTOS.org\r
23  * http://aws.amazon.com/freertos\r
24  *\r
25  * 1 tab == 4 spaces!\r
26  */\r
27 \r
28         EXTERN ulRegTest1LoopCounter\r
29         EXTERN ulRegTest2LoopCounter\r
30 \r
31         PUBLIC vRegTest1Implementation\r
32         PUBLIC vRegTest2Implementation\r
33 \r
34 /*-----------------------------------------------------------*/\r
35 \r
36         SECTION `.text`:CODE:NOROOT(2)\r
37     CODE\r
38 \r
39 /*\r
40  * The register check tasks are described in the comments at the top of\r
41  * main_full.c.\r
42  */\r
43 \r
44 vRegTest1Implementation:\r
45 \r
46         /* Fill the core registers with known values. */\r
47         li x5, 0x5\r
48         li x6, 0x6\r
49         li x7, 0x7\r
50         li x8, 0x8\r
51         li x9, 0x9\r
52         li x10, 0xa\r
53         li x11, 0xb\r
54         li x12, 0xc\r
55         li x13, 0xd\r
56         li x14, 0xe\r
57         li x15, 0xf\r
58         li x16, 0x10\r
59         li x17, 0x11\r
60         li x18, 0x12\r
61         li x19, 0x13\r
62         li x20, 0x14\r
63         li x21, 0x15\r
64         li x22, 0x16\r
65         li x23, 0x17\r
66         li x24, 0x18\r
67         li x25, 0x19\r
68         li x26, 0x1a\r
69         li x27, 0x1b\r
70         li x28, 0x1c\r
71         li x29, 0x1d\r
72         li x30, 0x1e\r
73 \r
74 reg1_loop:\r
75 \r
76         /* Check each register still contains the expected known value.\r
77         vRegTest1Implementation uses x31 as the temporary, vRegTest2Implementation\r
78         uses x5 as the temporary. */\r
79         li x31, 0x5\r
80         bne x31, x5, reg1_error_loop\r
81         li x31, 0x6\r
82         bne x31, x6, reg1_error_loop\r
83         li x31, 0x7\r
84         bne x31, x7, reg1_error_loop\r
85         li x31, 0x8\r
86         bne x31, x8, reg1_error_loop\r
87         li x31, 0x9\r
88         bne x31, x9, reg1_error_loop\r
89         li x31, 0xa\r
90         bne x31, x10, reg1_error_loop\r
91         li x31, 0xb\r
92         bne x31, x11, reg1_error_loop\r
93         li x31, 0xc\r
94         bne x31, x12, reg1_error_loop\r
95         li x31, 0xd\r
96         bne x31, x13, reg1_error_loop\r
97         li x31, 0xe\r
98         bne x31, x14, reg1_error_loop\r
99         li x31, 0xf\r
100         bne x31, x15, reg1_error_loop\r
101         li x31, 0x10\r
102         bne x31, x16, reg1_error_loop\r
103         li x31, 0x11\r
104         bne x31, x17, reg1_error_loop\r
105         li x31, 0x12\r
106         bne x31, x18, reg1_error_loop\r
107         li x31, 0x13\r
108         bne x31, x19, reg1_error_loop\r
109         li x31, 0x14\r
110         bne x31, x20, reg1_error_loop\r
111         li x31, 0x15\r
112         bne x31, x21, reg1_error_loop\r
113         li x31, 0x16\r
114         bne x31, x22, reg1_error_loop\r
115         li x31, 0x17\r
116         bne x31, x23, reg1_error_loop\r
117         li x31, 0x18\r
118         bne x31, x24, reg1_error_loop\r
119         li x31, 0x19\r
120         bne x31, x25, reg1_error_loop\r
121         li x31, 0x1a\r
122         bne x31, x26, reg1_error_loop\r
123         li x31, 0x1b\r
124         bne x31, x27, reg1_error_loop\r
125         li x31, 0x1c\r
126         bne x31, x28, reg1_error_loop\r
127         li x31, 0x1d\r
128         bne x31, x29, reg1_error_loop\r
129         li x31, 0x1e\r
130         bne x31, x30, reg1_error_loop\r
131 \r
132         /* Everything passed, increment the loop counter. */\r
133         lw x31, ulRegTest1LoopCounter\r
134 //_RB_  lw x30, 0(x31)\r
135         addi x30, x30, 1\r
136         sw x30, 0(x31)\r
137 \r
138         /* Restore clobbered register reading for next loop. */\r
139         li x30, 0x1e\r
140 \r
141         /* Yield to increase code coverage. */\r
142         ecall\r
143 \r
144         /* Start again. */\r
145         jal reg1_loop\r
146 \r
147 reg1_error_loop:\r
148         /* Jump here if a register contains an uxpected value.  This stops the loop\r
149         counter being incremented so the check task knows an error was found. */\r
150         jal reg1_error_loop\r
151 \r
152 /*-----------------------------------------------------------*/\r
153 \r
154 vRegTest2Implementation:\r
155 \r
156         /* Fill the core registers with known values. */\r
157         li x6, 0x61\r
158         li x7, 0x71\r
159         li x8, 0x81\r
160         li x9, 0x91\r
161         li x10, 0xa1\r
162         li x11, 0xb1\r
163         li x12, 0xc1\r
164         li x13, 0xd1\r
165         li x14, 0xe1\r
166         li x15, 0xf1\r
167         li x16, 0x20\r
168         li x17, 0x21\r
169         li x18, 0x22\r
170         li x19, 0x23\r
171         li x20, 0x24\r
172         li x21, 0x25\r
173         li x22, 0x26\r
174         li x23, 0x27\r
175         li x24, 0x28\r
176         li x25, 0x29\r
177         li x26, 0x2a\r
178         li x27, 0x2b\r
179         li x28, 0x2c\r
180         li x29, 0x2d\r
181         li x30, 0x2e\r
182         li x31, 0x2f\r
183 \r
184 Reg2_loop:\r
185 \r
186         /* Check each register still contains the expected known value.\r
187         vRegTest2Implementation uses x5 as the temporary, vRegTest1Implementation\r
188         uses x31 as the temporary. */\r
189         li x5, 0x61\r
190         bne x5, x6, reg2_error_loop\r
191         li x5, 0x71\r
192         bne x5, x7, reg2_error_loop\r
193         li x5, 0x81\r
194         bne x5, x8, reg2_error_loop\r
195         li x5, 0x91\r
196         bne x5, x9, reg2_error_loop\r
197         li x5, 0xa1\r
198         bne x5, x10, reg2_error_loop\r
199         li x5, 0xb1\r
200         bne x5, x11, reg2_error_loop\r
201         li x5, 0xc1\r
202         bne x5, x12, reg2_error_loop\r
203         li x5, 0xd1\r
204         bne x5, x13, reg2_error_loop\r
205         li x5, 0xe1\r
206         bne x5, x14, reg2_error_loop\r
207         li x5, 0xf1\r
208         bne x5, x15, reg2_error_loop\r
209         li x5, 0x20\r
210         bne x5, x16, reg2_error_loop\r
211         li x5, 0x21\r
212         bne x5, x17, reg2_error_loop\r
213         li x5, 0x22\r
214         bne x5, x18, reg2_error_loop\r
215         li x5, 0x23\r
216         bne x5, x19, reg2_error_loop\r
217         li x5, 0x24\r
218         bne x5, x20, reg2_error_loop\r
219         li x5, 0x25\r
220         bne x5, x21, reg2_error_loop\r
221         li x5, 0x26\r
222         bne x5, x22, reg2_error_loop\r
223         li x5, 0x27\r
224         bne x5, x23, reg2_error_loop\r
225         li x5, 0x28\r
226         bne x5, x24, reg2_error_loop\r
227         li x5, 0x29\r
228         bne x5, x25, reg2_error_loop\r
229         li x5, 0x2a\r
230         bne x5, x26, reg2_error_loop\r
231         li x5, 0x2b\r
232         bne x5, x27, reg2_error_loop\r
233         li x5, 0x2c\r
234         bne x5, x28, reg2_error_loop\r
235         li x5, 0x2d\r
236         bne x5, x29, reg2_error_loop\r
237         li x5, 0x2e\r
238         bne x5, x30, reg2_error_loop\r
239         li x5, 0x2f\r
240         bne x5, x31, reg2_error_loop\r
241 \r
242         /* Everything passed, increment the loop counter. */\r
243         lw x5, ulRegTest2LoopCounter\r
244 //_RB_  lw x6, 0(x5)\r
245         addi x6, x6, 1\r
246         sw x6, 0(x5)\r
247 \r
248         /* Restore clobbered register reading for next loop. */\r
249         li x6, 0x61\r
250 \r
251         /* Start again. */\r
252         jal Reg2_loop\r
253 \r
254 reg2_error_loop:\r
255         /* Jump here if a register contains an uxpected value.  This stops the loop\r
256         counter being incremented so the check task knows an error was found. */\r
257         jal reg2_error_loop\r
258 \r
259 /*-----------------------------------------------------------*/\r
260 \r
261 \r
262 \r