]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - sim/testsuite/sim/or1k/shift.S
Update copyright year range in all GDB files
[thirdparty/binutils-gdb.git] / sim / testsuite / sim / or1k / shift.S
1 /* Tests the shift instructions.
2
3 Copyright (C) 2017-2021 Free Software Foundation, Inc.
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 3 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>. */
17
18 # mach: or1k
19 # output: report(0xb38f0f83);\n
20 # output: report(0x00000000);\n
21 # output: report(0xb38f0f83);\n
22 # output: \n
23 # output: report(0xb38f0f83);\n
24 # output: report(0x00000001);\n
25 # output: report(0x671e1f06);\n
26 # output: \n
27 # output: report(0xb38f0f83);\n
28 # output: report(0x00000004);\n
29 # output: report(0x38f0f830);\n
30 # output: \n
31 # output: report(0xb38f0f83);\n
32 # output: report(0x00000010);\n
33 # output: report(0x0f830000);\n
34 # output: \n
35 # output: report(0xb38f0f83);\n
36 # output: report(0x0000001f);\n
37 # output: report(0x80000000);\n
38 # output: \n
39 # output: report(0xb38f0f83);\n
40 # output: report(0x00000021);\n
41 # output: report(0x671e1f06);\n
42 # output: \n
43 # output: report(0xb38f0f83);\n
44 # output: report(0x00002224);\n
45 # output: report(0x38f0f830);\n
46 # output: \n
47 # output: report(0xb38f0f83);\n
48 # output: report(0x00f789f0);\n
49 # output: report(0x0f830000);\n
50 # output: \n
51 # output: report(0xb38f0f83);\n
52 # output: report(0xffffffff);\n
53 # output: report(0x80000000);\n
54 # output: \n
55 # output: report(0xb38f0f83);\n
56 # output: report(0x00000000);\n
57 # output: report(0xb38f0f83);\n
58 # output: \n
59 # output: report(0xb38f0f83);\n
60 # output: report(0x00000001);\n
61 # output: report(0x671e1f06);\n
62 # output: \n
63 # output: report(0xb38f0f83);\n
64 # output: report(0x00000004);\n
65 # output: report(0x38f0f830);\n
66 # output: \n
67 # output: report(0xb38f0f83);\n
68 # output: report(0x00000010);\n
69 # output: report(0x0f830000);\n
70 # output: \n
71 # output: report(0xb38f0f83);\n
72 # output: report(0x0000001f);\n
73 # output: report(0x80000000);\n
74 # output: \n
75 # output: report(0xb38f0f83);\n
76 # output: report(0x00000021);\n
77 # output: report(0x671e1f06);\n
78 # output: \n
79 # output: report(0xb38f0f83);\n
80 # output: report(0x00000024);\n
81 # output: report(0x38f0f830);\n
82 # output: \n
83 # output: report(0xb38f0f83);\n
84 # output: report(0x00000030);\n
85 # output: report(0x0f830000);\n
86 # output: \n
87 # output: report(0xb38f0f83);\n
88 # output: report(0x0000003f);\n
89 # output: report(0x80000000);\n
90 # output: \n
91 # output: report(0xb38f0f83);\n
92 # output: report(0x00000000);\n
93 # output: report(0xb38f0f83);\n
94 # output: \n
95 # output: report(0xb38f0f83);\n
96 # output: report(0x00000001);\n
97 # output: report(0xd9c787c1);\n
98 # output: \n
99 # output: report(0xb38f0f83);\n
100 # output: report(0x00000004);\n
101 # output: report(0xfb38f0f8);\n
102 # output: \n
103 # output: report(0xb38f0f83);\n
104 # output: report(0x00000010);\n
105 # output: report(0xffffb38f);\n
106 # output: \n
107 # output: report(0xb38f0f83);\n
108 # output: report(0x0000001f);\n
109 # output: report(0xffffffff);\n
110 # output: \n
111 # output: report(0x4c70f07c);\n
112 # output: report(0x00000001);\n
113 # output: report(0x2638783e);\n
114 # output: \n
115 # output: report(0x4c70f07c);\n
116 # output: report(0x00000004);\n
117 # output: report(0x04c70f07);\n
118 # output: \n
119 # output: report(0x4c70f07c);\n
120 # output: report(0x00000010);\n
121 # output: report(0x00004c70);\n
122 # output: \n
123 # output: report(0x4c70f07c);\n
124 # output: report(0x0000001f);\n
125 # output: report(0x00000000);\n
126 # output: \n
127 # output: report(0xb38f0f83);\n
128 # output: report(0x00000021);\n
129 # output: report(0xd9c787c1);\n
130 # output: \n
131 # output: report(0xb38f0f83);\n
132 # output: report(0x00002224);\n
133 # output: report(0xfb38f0f8);\n
134 # output: \n
135 # output: report(0xb38f0f83);\n
136 # output: report(0x00f789f0);\n
137 # output: report(0xffffb38f);\n
138 # output: \n
139 # output: report(0xb38f0f83);\n
140 # output: report(0xffffffff);\n
141 # output: report(0xffffffff);\n
142 # output: \n
143 # output: report(0x4c70f07c);\n
144 # output: report(0x00000021);\n
145 # output: report(0x2638783e);\n
146 # output: \n
147 # output: report(0x4c70f07c);\n
148 # output: report(0x00002224);\n
149 # output: report(0x04c70f07);\n
150 # output: \n
151 # output: report(0x4c70f07c);\n
152 # output: report(0x00f789f0);\n
153 # output: report(0x00004c70);\n
154 # output: \n
155 # output: report(0x4c70f07c);\n
156 # output: report(0xffffffff);\n
157 # output: report(0x00000000);\n
158 # output: \n
159 # output: report(0xb38f0f83);\n
160 # output: report(0x00000000);\n
161 # output: report(0xb38f0f83);\n
162 # output: \n
163 # output: report(0xb38f0f83);\n
164 # output: report(0x00000001);\n
165 # output: report(0xd9c787c1);\n
166 # output: \n
167 # output: report(0xb38f0f83);\n
168 # output: report(0x00000004);\n
169 # output: report(0xfb38f0f8);\n
170 # output: \n
171 # output: report(0xb38f0f83);\n
172 # output: report(0x00000010);\n
173 # output: report(0xffffb38f);\n
174 # output: \n
175 # output: report(0xb38f0f83);\n
176 # output: report(0x0000001f);\n
177 # output: report(0xffffffff);\n
178 # output: \n
179 # output: report(0x4c70f07c);\n
180 # output: report(0x00000001);\n
181 # output: report(0x2638783e);\n
182 # output: \n
183 # output: report(0x4c70f07c);\n
184 # output: report(0x00000004);\n
185 # output: report(0x04c70f07);\n
186 # output: \n
187 # output: report(0x4c70f07c);\n
188 # output: report(0x00000010);\n
189 # output: report(0x00004c70);\n
190 # output: \n
191 # output: report(0x4c70f07c);\n
192 # output: report(0x0000001f);\n
193 # output: report(0x00000000);\n
194 # output: \n
195 # output: report(0xb38f0f83);\n
196 # output: report(0x00000021);\n
197 # output: report(0xd9c787c1);\n
198 # output: \n
199 # output: report(0xb38f0f83);\n
200 # output: report(0x00000024);\n
201 # output: report(0xfb38f0f8);\n
202 # output: \n
203 # output: report(0xb38f0f83);\n
204 # output: report(0x00000030);\n
205 # output: report(0xffffb38f);\n
206 # output: \n
207 # output: report(0xb38f0f83);\n
208 # output: report(0x0000003f);\n
209 # output: report(0xffffffff);\n
210 # output: \n
211 # output: report(0x4c70f07c);\n
212 # output: report(0x00000021);\n
213 # output: report(0x2638783e);\n
214 # output: \n
215 # output: report(0x4c70f07c);\n
216 # output: report(0x00000024);\n
217 # output: report(0x04c70f07);\n
218 # output: \n
219 # output: report(0x4c70f07c);\n
220 # output: report(0x00000030);\n
221 # output: report(0x00004c70);\n
222 # output: \n
223 # output: report(0x4c70f07c);\n
224 # output: report(0x0000003f);\n
225 # output: report(0x00000000);\n
226 # output: \n
227 # output: report(0xb38f0f83);\n
228 # output: report(0x00000000);\n
229 # output: report(0xb38f0f83);\n
230 # output: \n
231 # output: report(0xb38f0f83);\n
232 # output: report(0x00000001);\n
233 # output: report(0x59c787c1);\n
234 # output: \n
235 # output: report(0xb38f0f83);\n
236 # output: report(0x00000004);\n
237 # output: report(0x0b38f0f8);\n
238 # output: \n
239 # output: report(0xb38f0f83);\n
240 # output: report(0x00000010);\n
241 # output: report(0x0000b38f);\n
242 # output: \n
243 # output: report(0xb38f0f83);\n
244 # output: report(0x0000001f);\n
245 # output: report(0x00000001);\n
246 # output: \n
247 # output: report(0x4c70f07c);\n
248 # output: report(0x00000001);\n
249 # output: report(0x2638783e);\n
250 # output: \n
251 # output: report(0x4c70f07c);\n
252 # output: report(0x00000004);\n
253 # output: report(0x04c70f07);\n
254 # output: \n
255 # output: report(0x4c70f07c);\n
256 # output: report(0x00000010);\n
257 # output: report(0x00004c70);\n
258 # output: \n
259 # output: report(0x4c70f07c);\n
260 # output: report(0x0000001f);\n
261 # output: report(0x00000000);\n
262 # output: \n
263 # output: report(0xb38f0f83);\n
264 # output: report(0x00000021);\n
265 # output: report(0x59c787c1);\n
266 # output: \n
267 # output: report(0xb38f0f83);\n
268 # output: report(0x00002224);\n
269 # output: report(0x0b38f0f8);\n
270 # output: \n
271 # output: report(0xb38f0f83);\n
272 # output: report(0x00f789f0);\n
273 # output: report(0x0000b38f);\n
274 # output: \n
275 # output: report(0xb38f0f83);\n
276 # output: report(0xffffffff);\n
277 # output: report(0x00000001);\n
278 # output: \n
279 # output: report(0x4c70f07c);\n
280 # output: report(0x00000021);\n
281 # output: report(0x2638783e);\n
282 # output: \n
283 # output: report(0x4c70f07c);\n
284 # output: report(0x00002224);\n
285 # output: report(0x04c70f07);\n
286 # output: \n
287 # output: report(0x4c70f07c);\n
288 # output: report(0x00f789f0);\n
289 # output: report(0x00004c70);\n
290 # output: \n
291 # output: report(0x4c70f07c);\n
292 # output: report(0xffffffff);\n
293 # output: report(0x00000000);\n
294 # output: \n
295 # output: report(0xb38f0f83);\n
296 # output: report(0x00000000);\n
297 # output: report(0xb38f0f83);\n
298 # output: \n
299 # output: report(0xb38f0f83);\n
300 # output: report(0x00000001);\n
301 # output: report(0x59c787c1);\n
302 # output: \n
303 # output: report(0xb38f0f83);\n
304 # output: report(0x00000004);\n
305 # output: report(0x0b38f0f8);\n
306 # output: \n
307 # output: report(0xb38f0f83);\n
308 # output: report(0x00000010);\n
309 # output: report(0x0000b38f);\n
310 # output: \n
311 # output: report(0xb38f0f83);\n
312 # output: report(0x0000001f);\n
313 # output: report(0x00000001);\n
314 # output: \n
315 # output: report(0x4c70f07c);\n
316 # output: report(0x00000001);\n
317 # output: report(0x2638783e);\n
318 # output: \n
319 # output: report(0x4c70f07c);\n
320 # output: report(0x00000004);\n
321 # output: report(0x04c70f07);\n
322 # output: \n
323 # output: report(0x4c70f07c);\n
324 # output: report(0x00000010);\n
325 # output: report(0x00004c70);\n
326 # output: \n
327 # output: report(0x4c70f07c);\n
328 # output: report(0x0000001f);\n
329 # output: report(0x00000000);\n
330 # output: \n
331 # output: report(0xb38f0f83);\n
332 # output: report(0x00000021);\n
333 # output: report(0x59c787c1);\n
334 # output: \n
335 # output: report(0xb38f0f83);\n
336 # output: report(0x00000024);\n
337 # output: report(0x0b38f0f8);\n
338 # output: \n
339 # output: report(0xb38f0f83);\n
340 # output: report(0x00000030);\n
341 # output: report(0x0000b38f);\n
342 # output: \n
343 # output: report(0xb38f0f83);\n
344 # output: report(0x0000003f);\n
345 # output: report(0x00000001);\n
346 # output: \n
347 # output: report(0x4c70f07c);\n
348 # output: report(0x00000021);\n
349 # output: report(0x2638783e);\n
350 # output: \n
351 # output: report(0x4c70f07c);\n
352 # output: report(0x00000024);\n
353 # output: report(0x04c70f07);\n
354 # output: \n
355 # output: report(0x4c70f07c);\n
356 # output: report(0x00000030);\n
357 # output: report(0x00004c70);\n
358 # output: \n
359 # output: report(0x4c70f07c);\n
360 # output: report(0x0000003f);\n
361 # output: report(0x00000000);\n
362 # output: \n
363 # output: exit(0)\n
364
365 #include "or1k-asm-test-helpers.h"
366
367 .macro TEST_SHIFT opcode, op1, op2
368 LOAD_IMMEDIATE r5, \op1
369 LOAD_IMMEDIATE r6, \op2
370 REPORT_REG_TO_CONSOLE r5
371 REPORT_REG_TO_CONSOLE r6
372 \opcode r4, r5, r6
373 CHECK_CARRY_AND_OVERFLOW_NOT_SET r2, r3
374 REPORT_REG_TO_CONSOLE r4
375 PRINT_NEWLINE_TO_CONSOLE
376 .endm
377
378 .macro TEST_SHIFT_I opcode, op1, op2
379 LOAD_IMMEDIATE r5, \op1
380 REPORT_REG_TO_CONSOLE r5
381 REPORT_IMMEDIATE_TO_CONSOLE \op2
382 \opcode r4, r5, \op2
383 CHECK_CARRY_AND_OVERFLOW_NOT_SET r2, r3
384 REPORT_REG_TO_CONSOLE r4
385 PRINT_NEWLINE_TO_CONSOLE
386 .endm
387
388 STANDARD_TEST_ENVIRONMENT
389
390 .section .text
391 start_tests:
392 PUSH LINK_REGISTER_R9
393
394 /* Always set OVE. We should never trigger an exception, even if
395 this bit is set. */
396 SET_SPR_SR_FLAGS SPR_SR_OVE, r2, r3
397
398 /* Test l.sll */
399
400 /* Shift left by zero. */
401 TEST_SHIFT l.sll, 0xb38f0f83, 0x00000000
402
403 /* Shift left by amounts in the 1-31 range. */
404 TEST_SHIFT l.sll, 0xb38f0f83, 0x00000001
405 TEST_SHIFT l.sll, 0xb38f0f83, 0x00000004
406 TEST_SHIFT l.sll, 0xb38f0f83, 0x00000010
407 TEST_SHIFT l.sll, 0xb38f0f83, 0x0000001f
408
409 /* Shift left by larger amounts - should be masked. */
410 TEST_SHIFT l.sll, 0xb38f0f83, 0x00000021
411 TEST_SHIFT l.sll, 0xb38f0f83, 0x00002224
412 TEST_SHIFT l.sll, 0xb38f0f83, 0x00f789f0
413 TEST_SHIFT l.sll, 0xb38f0f83, 0xffffffff
414
415 /* Test l.slli */
416
417 /* Shift left by zero. */
418 TEST_SHIFT_I l.slli, 0xb38f0f83, 0x0000
419
420 /* Shift left by amounts in the 1-31 range. */
421 TEST_SHIFT_I l.slli, 0xb38f0f83, 0x0001
422 TEST_SHIFT_I l.slli, 0xb38f0f83, 0x0004
423 TEST_SHIFT_I l.slli, 0xb38f0f83, 0x0010
424 TEST_SHIFT_I l.slli, 0xb38f0f83, 0x001f
425
426 /* Shift left by larger amounts - should be masked. */
427 TEST_SHIFT_I l.slli, 0xb38f0f83, 0x0021
428 TEST_SHIFT_I l.slli, 0xb38f0f83, 0x0024
429 TEST_SHIFT_I l.slli, 0xb38f0f83, 0x0030
430 TEST_SHIFT_I l.slli, 0xb38f0f83, 0x003f
431
432 /* Test l.sra */
433
434 /* Shift right by zero. */
435 TEST_SHIFT l.sra, 0xb38f0f83, 0x00000000
436
437 /* Shift right by amounts in the 1-31 range. */
438 TEST_SHIFT l.sra, 0xb38f0f83, 0x00000001
439 TEST_SHIFT l.sra, 0xb38f0f83, 0x00000004
440 TEST_SHIFT l.sra, 0xb38f0f83, 0x00000010
441 TEST_SHIFT l.sra, 0xb38f0f83, 0x0000001f
442
443 TEST_SHIFT l.sra, 0x4c70f07c, 0x00000001
444 TEST_SHIFT l.sra, 0x4c70f07c, 0x00000004
445 TEST_SHIFT l.sra, 0x4c70f07c, 0x00000010
446 TEST_SHIFT l.sra, 0x4c70f07c, 0x0000001f
447
448 /* Shift right by larger amounts - should be masked. */
449 TEST_SHIFT l.sra, 0xb38f0f83, 0x00000021
450 TEST_SHIFT l.sra, 0xb38f0f83, 0x00002224
451 TEST_SHIFT l.sra, 0xb38f0f83, 0x00f789f0
452 TEST_SHIFT l.sra, 0xb38f0f83, 0xffffffff
453
454 TEST_SHIFT l.sra, 0x4c70f07c, 0x00000021
455 TEST_SHIFT l.sra, 0x4c70f07c, 0x00002224
456 TEST_SHIFT l.sra, 0x4c70f07c, 0x00f789f0
457 TEST_SHIFT l.sra, 0x4c70f07c, 0xffffffff
458
459 /* Test l.srai */
460
461 /* Shift right by zero. */
462 TEST_SHIFT_I l.srai, 0xb38f0f83, 0x0000
463
464 /* Shift right by amounts in the 1-31 range. */
465 TEST_SHIFT_I l.srai, 0xb38f0f83, 0x0001
466 TEST_SHIFT_I l.srai, 0xb38f0f83, 0x0004
467 TEST_SHIFT_I l.srai, 0xb38f0f83, 0x0010
468 TEST_SHIFT_I l.srai, 0xb38f0f83, 0x001f
469
470 TEST_SHIFT_I l.srai, 0x4c70f07c, 0x0001
471 TEST_SHIFT_I l.srai, 0x4c70f07c, 0x0004
472 TEST_SHIFT_I l.srai, 0x4c70f07c, 0x0010
473 TEST_SHIFT_I l.srai, 0x4c70f07c, 0x001f
474
475 /* Shift right by larger amounts - should be masked. */
476 TEST_SHIFT_I l.srai, 0xb38f0f83, 0x0021
477 TEST_SHIFT_I l.srai, 0xb38f0f83, 0x0024
478 TEST_SHIFT_I l.srai, 0xb38f0f83, 0x0030
479 TEST_SHIFT_I l.srai, 0xb38f0f83, 0x003f
480
481 TEST_SHIFT_I l.srai, 0x4c70f07c, 0x0021
482 TEST_SHIFT_I l.srai, 0x4c70f07c, 0x0024
483 TEST_SHIFT_I l.srai, 0x4c70f07c, 0x0030
484 TEST_SHIFT_I l.srai, 0x4c70f07c, 0x003f
485
486 /* Test l.srl */
487
488 /* Shift right by zero. */
489 TEST_SHIFT l.srl, 0xb38f0f83, 0x00000000
490
491 /* Shift right by amounts in the 1-31 range. */
492 TEST_SHIFT l.srl, 0xb38f0f83, 0x00000001
493 TEST_SHIFT l.srl, 0xb38f0f83, 0x00000004
494 TEST_SHIFT l.srl, 0xb38f0f83, 0x00000010
495 TEST_SHIFT l.srl, 0xb38f0f83, 0x0000001f
496
497 TEST_SHIFT l.srl, 0x4c70f07c, 0x00000001
498 TEST_SHIFT l.srl, 0x4c70f07c, 0x00000004
499 TEST_SHIFT l.srl, 0x4c70f07c, 0x00000010
500 TEST_SHIFT l.srl, 0x4c70f07c, 0x0000001f
501
502 /* Shift right by larger amounts - should be masked. */
503 TEST_SHIFT l.srl, 0xb38f0f83, 0x00000021
504 TEST_SHIFT l.srl, 0xb38f0f83, 0x00002224
505 TEST_SHIFT l.srl, 0xb38f0f83, 0x00f789f0
506 TEST_SHIFT l.srl, 0xb38f0f83, 0xffffffff
507
508 TEST_SHIFT l.srl, 0x4c70f07c, 0x00000021
509 TEST_SHIFT l.srl, 0x4c70f07c, 0x00002224
510 TEST_SHIFT l.srl, 0x4c70f07c, 0x00f789f0
511 TEST_SHIFT l.srl, 0x4c70f07c, 0xffffffff
512
513 /* Test l.srli */
514
515 /* Shift right by zero. */
516 TEST_SHIFT_I l.srli, 0xb38f0f83, 0x0000
517
518 /* Shift right by amounts in the 1-31 range. */
519 TEST_SHIFT_I l.srli, 0xb38f0f83, 0x0001
520 TEST_SHIFT_I l.srli, 0xb38f0f83, 0x0004
521 TEST_SHIFT_I l.srli, 0xb38f0f83, 0x0010
522 TEST_SHIFT_I l.srli, 0xb38f0f83, 0x001f
523
524 TEST_SHIFT_I l.srli, 0x4c70f07c, 0x0001
525 TEST_SHIFT_I l.srli, 0x4c70f07c, 0x0004
526 TEST_SHIFT_I l.srli, 0x4c70f07c, 0x0010
527 TEST_SHIFT_I l.srli, 0x4c70f07c, 0x001f
528
529 /* Shift right by larger amounts - should be masked. */
530 TEST_SHIFT_I l.srli, 0xb38f0f83, 0x0021
531 TEST_SHIFT_I l.srli, 0xb38f0f83, 0x0024
532 TEST_SHIFT_I l.srli, 0xb38f0f83, 0x0030
533 TEST_SHIFT_I l.srli, 0xb38f0f83, 0x003f
534
535 TEST_SHIFT_I l.srli, 0x4c70f07c, 0x0021
536 TEST_SHIFT_I l.srli, 0x4c70f07c, 0x0024
537 TEST_SHIFT_I l.srli, 0x4c70f07c, 0x0030
538 TEST_SHIFT_I l.srli, 0x4c70f07c, 0x003f
539
540 POP LINK_REGISTER_R9
541 RETURN_TO_LINK_REGISTER_R9