]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/RISC-V_RV32_SiFive_HiFive1-RevB_IAR/full_demo/RegTest.s
Renamed RISC-V_RV32_SiFive_HiFive1_IAR directory to RISC-V_RV32_SiFive_HiFive1-RevB_I...
[freertos] / FreeRTOS / Demo / RISC-V_RV32_SiFive_HiFive1-RevB_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 pulRegTest1LoopCounter\r
29         EXTERN pulRegTest2LoopCounter\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         ALIGN 8\r
45 vRegTest1Implementation:\r
46 \r
47         /* Fill the core registers with known values. */\r
48         li x5, 0x5\r
49         li x6, 0x6\r
50         li x7, 0x7\r
51         li x8, 0x8\r
52         li x9, 0x9\r
53         li x10, 0xa\r
54         li x11, 0xb\r
55         li x12, 0xc\r
56         li x13, 0xd\r
57         li x14, 0xe\r
58         li x15, 0xf\r
59         li x16, 0x10\r
60         li x17, 0x11\r
61         li x18, 0x12\r
62         li x19, 0x13\r
63         li x20, 0x14\r
64         li x21, 0x15\r
65         li x22, 0x16\r
66         li x23, 0x17\r
67         li x24, 0x18\r
68         li x25, 0x19\r
69         li x26, 0x1a\r
70         li x27, 0x1b\r
71         li x28, 0x1c\r
72         li x29, 0x1d\r
73         li x30, 0x1e\r
74 \r
75 reg1_loop:\r
76 \r
77         /* Check each register still contains the expected known value.\r
78         vRegTest1Implementation uses x31 as the temporary, vRegTest2Implementation\r
79         uses x5 as the temporary. */\r
80         li x31, 0x5\r
81         bne x31, x5, reg1_error_loop\r
82         li x31, 0x6\r
83         bne x31, x6, reg1_error_loop\r
84         li x31, 0x7\r
85         bne x31, x7, reg1_error_loop\r
86         li x31, 0x8\r
87         bne x31, x8, reg1_error_loop\r
88         li x31, 0x9\r
89         bne x31, x9, reg1_error_loop\r
90         li x31, 0xa\r
91         bne x31, x10, reg1_error_loop\r
92         li x31, 0xb\r
93         bne x31, x11, reg1_error_loop\r
94         li x31, 0xc\r
95         bne x31, x12, reg1_error_loop\r
96         li x31, 0xd\r
97         bne x31, x13, reg1_error_loop\r
98         li x31, 0xe\r
99         bne x31, x14, reg1_error_loop\r
100         li x31, 0xf\r
101         bne x31, x15, reg1_error_loop\r
102         li x31, 0x10\r
103         bne x31, x16, reg1_error_loop\r
104         li x31, 0x11\r
105         bne x31, x17, reg1_error_loop\r
106         li x31, 0x12\r
107         bne x31, x18, reg1_error_loop\r
108         li x31, 0x13\r
109         bne x31, x19, reg1_error_loop\r
110         li x31, 0x14\r
111         bne x31, x20, reg1_error_loop\r
112         li x31, 0x15\r
113         bne x31, x21, reg1_error_loop\r
114         li x31, 0x16\r
115         bne x31, x22, reg1_error_loop\r
116         li x31, 0x17\r
117         bne x31, x23, reg1_error_loop\r
118         li x31, 0x18\r
119         bne x31, x24, reg1_error_loop\r
120         li x31, 0x19\r
121         bne x31, x25, reg1_error_loop\r
122         li x31, 0x1a\r
123         bne x31, x26, reg1_error_loop\r
124         li x31, 0x1b\r
125         bne x31, x27, reg1_error_loop\r
126         li x31, 0x1c\r
127         bne x31, x28, reg1_error_loop\r
128         li x31, 0x1d\r
129         bne x31, x29, reg1_error_loop\r
130         li x31, 0x1e\r
131         bne x31, x30, reg1_error_loop\r
132 \r
133         /* Everything passed, increment the loop counter. */\r
134         lw x31, pulRegTest1LoopCounter\r
135         lw x30, 0(x31)\r
136         addi x30, x30, 1\r
137         sw x30, 0(x31)\r
138 \r
139         /* Restore clobbered register reading for next loop. */\r
140         li x30, 0x1e\r
141 \r
142         /* Yield to increase code coverage. */\r
143         ecall\r
144 \r
145         /* Start again. */\r
146         jal reg1_loop\r
147 \r
148 reg1_error_loop:\r
149         /* Jump here if a register contains an uxpected value.  This stops the loop\r
150         counter being incremented so the check task knows an error was found. */\r
151         ebreak\r
152         jal reg1_error_loop\r
153 \r
154 /*-----------------------------------------------------------*/\r
155 \r
156         ALIGN 8\r
157 vRegTest2Implementation:\r
158 \r
159         /* Fill the core registers with known values. */\r
160         li x6, 0x61\r
161         li x7, 0x71\r
162         li x8, 0x81\r
163         li x9, 0x91\r
164         li x10, 0xa1\r
165         li x11, 0xb1\r
166         li x12, 0xc1\r
167         li x13, 0xd1\r
168         li x14, 0xe1\r
169         li x15, 0xf1\r
170         li x16, 0x20\r
171         li x17, 0x21\r
172         li x18, 0x22\r
173         li x19, 0x23\r
174         li x20, 0x24\r
175         li x21, 0x25\r
176         li x22, 0x26\r
177         li x23, 0x27\r
178         li x24, 0x28\r
179         li x25, 0x29\r
180         li x26, 0x2a\r
181         li x27, 0x2b\r
182         li x28, 0x2c\r
183         li x29, 0x2d\r
184         li x30, 0x2e\r
185         li x31, 0x2f\r
186 \r
187 Reg2_loop:\r
188 \r
189         /* Check each register still contains the expected known value.\r
190         vRegTest2Implementation uses x5 as the temporary, vRegTest1Implementation\r
191         uses x31 as the temporary. */\r
192         li x5, 0x61\r
193         bne x5, x6, reg2_error_loop\r
194         li x5, 0x71\r
195         bne x5, x7, reg2_error_loop\r
196         li x5, 0x81\r
197         bne x5, x8, reg2_error_loop\r
198         li x5, 0x91\r
199         bne x5, x9, reg2_error_loop\r
200         li x5, 0xa1\r
201         bne x5, x10, reg2_error_loop\r
202         li x5, 0xb1\r
203         bne x5, x11, reg2_error_loop\r
204         li x5, 0xc1\r
205         bne x5, x12, reg2_error_loop\r
206         li x5, 0xd1\r
207         bne x5, x13, reg2_error_loop\r
208         li x5, 0xe1\r
209         bne x5, x14, reg2_error_loop\r
210         li x5, 0xf1\r
211         bne x5, x15, reg2_error_loop\r
212         li x5, 0x20\r
213         bne x5, x16, reg2_error_loop\r
214         li x5, 0x21\r
215         bne x5, x17, reg2_error_loop\r
216         li x5, 0x22\r
217         bne x5, x18, reg2_error_loop\r
218         li x5, 0x23\r
219         bne x5, x19, reg2_error_loop\r
220         li x5, 0x24\r
221         bne x5, x20, reg2_error_loop\r
222         li x5, 0x25\r
223         bne x5, x21, reg2_error_loop\r
224         li x5, 0x26\r
225         bne x5, x22, reg2_error_loop\r
226         li x5, 0x27\r
227         bne x5, x23, reg2_error_loop\r
228         li x5, 0x28\r
229         bne x5, x24, reg2_error_loop\r
230         li x5, 0x29\r
231         bne x5, x25, reg2_error_loop\r
232         li x5, 0x2a\r
233         bne x5, x26, reg2_error_loop\r
234         li x5, 0x2b\r
235         bne x5, x27, reg2_error_loop\r
236         li x5, 0x2c\r
237         bne x5, x28, reg2_error_loop\r
238         li x5, 0x2d\r
239         bne x5, x29, reg2_error_loop\r
240         li x5, 0x2e\r
241         bne x5, x30, reg2_error_loop\r
242         li x5, 0x2f\r
243         bne x5, x31, reg2_error_loop\r
244 \r
245         /* Everything passed, increment the loop counter. */\r
246         lw x5, pulRegTest2LoopCounter\r
247         lw x6, 0(x5)\r
248         addi x6, x6, 1\r
249         sw x6, 0(x5)\r
250 \r
251         /* Restore clobbered register reading for next loop. */\r
252         li x6, 0x61\r
253 \r
254         /* Start again. */\r
255         jal Reg2_loop\r
256 \r
257 reg2_error_loop:\r
258         /* Jump here if a register contains an uxpected value.  This stops the loop\r
259         counter being incremented so the check task knows an error was found. */\r
260         ebreak\r
261         jal reg2_error_loop\r
262 \r
263 /*-----------------------------------------------------------*/\r
264 \r
265 \r
266 \r