]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - sim/testsuite/sim/or1k/flag.S
Update copyright year range in all GDB files
[thirdparty/binutils-gdb.git] / sim / testsuite / sim / or1k / flag.S
1 /* Tests the set flag (l.sf*) instructions.
2
3 Copyright (C) 2017-2018 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: exit(0)\n
20
21 #include "or1k-asm-test-helpers.h"
22
23 #define INT_MAX 2147483647 /* 0x7fffffff */
24 #define INT_MAX_MIN1 2147483646 /* 0x7ffffffe */
25 #define NEG_INT_MAX -2147483648 /* 0x80000000 */
26 #define NEG_INT_MAX_PL1 -2147483647 /* 0x80000001 */
27 #define MIN1 -1 /* 0xffffffff */
28
29 #define SHRT_MIN (-32768)
30 #define SHRT_MAX 32767
31
32 #define UINT_MAX 4294967295 /* 0xffffffff */
33 #define UINT_MAX_MIN1 4294967294 /* 0xfffffffe */
34
35 #define USHRT_MAX 65535
36
37 .macro MOVE_TO_R4_R5_AND_REPORT a, b
38 LOAD_IMMEDIATE r4, \a
39 LOAD_IMMEDIATE r5, \b
40
41 /* During development, add REPORT_xxx statements here to see the
42 operands. */
43 .endm
44
45 .macro MOVE_TO_R4_AND_REPORT_I a, b
46 LOAD_IMMEDIATE r4, \a
47
48 /* During development, add REPORT_xxx statements here to see the
49 operands. */
50 .endm
51
52 .macro SHOULD_BE_SET
53 OR1K_DELAYED_NOP (l.bnf failed)
54 .endm
55
56 .macro SHOULDNT_BE_SET
57 OR1K_DELAYED_NOP (l.bf failed)
58 .endm
59
60 .macro SHOULD_BE_LESS_THAN_SIGNED a, b
61 MOVE_TO_R4_R5_AND_REPORT \a , \b
62
63 l.sfeq r4, r5
64 SHOULDNT_BE_SET
65 l.sfne r4, r5
66 SHOULD_BE_SET
67 l.sfgts r4, r5
68 SHOULDNT_BE_SET
69 l.sfges r4, r5
70 SHOULDNT_BE_SET
71 l.sfles r4, r5
72 SHOULD_BE_SET
73 l.sflts r4, r5
74 SHOULD_BE_SET
75 .endm
76
77 .macro SHOULD_BE_GREATER_THAN_SIGNED a, b
78 MOVE_TO_R4_R5_AND_REPORT \a , \b
79
80 l.sfeq r4, r5
81 SHOULDNT_BE_SET
82 l.sfne r4, r5
83 SHOULD_BE_SET
84 l.sfgts r4, r5
85 SHOULD_BE_SET
86 l.sfges r4, r5
87 SHOULD_BE_SET
88 l.sfles r4, r5
89 SHOULDNT_BE_SET
90 l.sflts r4, r5
91 SHOULDNT_BE_SET
92 .endm
93
94 .macro SHOULD_BE_LESS_THAN_UNSIGNED a, b
95 MOVE_TO_R4_R5_AND_REPORT \a , \b
96
97 l.sfeq r4, r5
98 SHOULDNT_BE_SET
99 l.sfne r4, r5
100 SHOULD_BE_SET
101 l.sfgtu r4, r5
102 SHOULDNT_BE_SET
103 l.sfgeu r4, r5
104 SHOULDNT_BE_SET
105 l.sfleu r4, r5
106 SHOULD_BE_SET
107 l.sfltu r4, r5
108 SHOULD_BE_SET
109 .endm
110
111 .macro SHOULD_BE_GREATER_THAN_UNSIGNED a, b
112 MOVE_TO_R4_R5_AND_REPORT \a , \b
113
114 l.sfeq r4, r5
115 SHOULDNT_BE_SET
116 l.sfne r4, r5
117 SHOULD_BE_SET
118 l.sfgtu r4, r5
119 SHOULD_BE_SET
120 l.sfgeu r4, r5
121 SHOULD_BE_SET
122 l.sfleu r4, r5
123 SHOULDNT_BE_SET
124 l.sfltu r4, r5
125 SHOULDNT_BE_SET
126 .endm
127
128 .macro SHOULD_BE_EQUAL a, b
129 MOVE_TO_R4_R5_AND_REPORT \a , \b
130
131 l.sfeq r4, r5
132 SHOULD_BE_SET
133 l.sfne r4, r5
134 SHOULDNT_BE_SET
135
136 /* Signed tests. */
137 l.sfgts r4, r5
138 SHOULDNT_BE_SET
139 l.sfges r4, r5
140 SHOULD_BE_SET
141 l.sfles r4, r5
142 SHOULD_BE_SET
143 l.sflts r4, r5
144 SHOULDNT_BE_SET
145
146 /* Unsigned tests. */
147 l.sfgtu r4, r5
148 SHOULDNT_BE_SET
149 l.sfgeu r4, r5
150 SHOULD_BE_SET
151 l.sfleu r4, r5
152 SHOULD_BE_SET
153 l.sfltu r4, r5
154 SHOULDNT_BE_SET
155 .endm
156
157 .macro SHOULDNT_BE_EQUAL a, b
158 MOVE_TO_R4_R5_AND_REPORT \a , \b
159
160 l.sfeq r4, r5
161 SHOULDNT_BE_SET
162 l.sfne r4, r5
163 SHOULD_BE_SET
164 .endm
165
166 .macro SHOULD_BE_EQUAL_I a, b
167 MOVE_TO_R4_AND_REPORT_I \a, \b
168
169 l.sfeqi r4, \b
170 SHOULD_BE_SET
171 l.sfnei r4, \b
172 SHOULDNT_BE_SET
173
174 /* Signed tests. */
175 l.sfgtsi r4, \b
176 SHOULDNT_BE_SET
177 l.sfgesi r4, \b
178 SHOULD_BE_SET
179 l.sflesi r4, \b
180 SHOULD_BE_SET
181 l.sfltsi r4, \b
182 SHOULDNT_BE_SET
183
184 /* Unsigned tests. */
185 l.sfgtui r4, \b
186 SHOULDNT_BE_SET
187 l.sfgeui r4, \b
188 SHOULD_BE_SET
189 l.sfleui r4, \b
190 SHOULD_BE_SET
191 l.sfltui r4, \b
192 SHOULDNT_BE_SET
193 .endm
194
195 .macro SHOULDNT_BE_EQUAL_I a, b
196 MOVE_TO_R4_AND_REPORT_I \a, \b
197
198 l.sfeqi r4, \b
199 SHOULDNT_BE_SET
200 l.sfnei r4, \b
201 SHOULD_BE_SET
202 .endm
203
204 .macro SHOULD_BE_LESS_THAN_SIGNED_I a, b
205 MOVE_TO_R4_AND_REPORT_I \a, \b
206
207 l.sfeqi r4, \b
208 SHOULDNT_BE_SET
209 l.sfnei r4, \b
210 SHOULD_BE_SET
211 l.sfgtsi r4, \b
212 SHOULDNT_BE_SET
213 l.sfgesi r4, \b
214 SHOULDNT_BE_SET
215 l.sflesi r4, \b
216 SHOULD_BE_SET
217 l.sfltsi r4, \b
218 SHOULD_BE_SET
219 .endm
220
221 .macro SHOULD_BE_GREATER_THAN_SIGNED_I a, b
222 MOVE_TO_R4_AND_REPORT_I \a, \b
223
224 l.sfeqi r4, \b
225 SHOULDNT_BE_SET
226 l.sfnei r4, \b
227 SHOULD_BE_SET
228 l.sfgtsi r4, \b
229 SHOULD_BE_SET
230 l.sfgesi r4, \b
231 SHOULD_BE_SET
232 l.sflesi r4, \b
233 SHOULDNT_BE_SET
234 l.sfltsi r4, \b
235 SHOULDNT_BE_SET
236 .endm
237
238 .macro SHOULD_BE_LESS_THAN_UNSIGNED_I a, b
239 MOVE_TO_R4_AND_REPORT_I \a, \b
240
241 l.sfeqi r4, \b
242 SHOULDNT_BE_SET
243 l.sfnei r4, \b
244 SHOULD_BE_SET
245 l.sfgtui r4, \b
246 SHOULDNT_BE_SET
247 l.sfgeui r4, \b
248 SHOULDNT_BE_SET
249 l.sfleui r4, \b
250 SHOULD_BE_SET
251 l.sfltui r4, \b
252 SHOULD_BE_SET
253 .endm
254
255 .macro SHOULD_BE_GREATER_THAN_UNSIGNED_I a, b
256 MOVE_TO_R4_AND_REPORT_I \a, \b
257
258 l.sfeqi r4, \b
259 SHOULDNT_BE_SET
260 l.sfnei r4, \b
261 SHOULD_BE_SET
262 l.sfgtui r4, \b
263 SHOULD_BE_SET
264 l.sfgeui r4, \b
265 SHOULD_BE_SET
266 l.sfleui r4, \b
267 SHOULDNT_BE_SET
268 l.sfltui r4, \b
269 SHOULDNT_BE_SET
270 .endm
271
272 STANDARD_TEST_ENVIRONMENT
273
274 .section .text
275 start_tests:
276 PUSH LINK_REGISTER_R9
277
278 /* Signed tests */
279
280 SHOULD_BE_LESS_THAN_SIGNED 0, 1
281 SHOULD_BE_LESS_THAN_SIGNED MIN1, 0
282 SHOULD_BE_LESS_THAN_SIGNED INT_MAX_MIN1, INT_MAX
283 SHOULD_BE_LESS_THAN_SIGNED NEG_INT_MAX, INT_MAX
284 SHOULD_BE_LESS_THAN_SIGNED NEG_INT_MAX, INT_MAX_MIN1
285 SHOULD_BE_LESS_THAN_SIGNED NEG_INT_MAX_PL1, INT_MAX
286 SHOULD_BE_LESS_THAN_SIGNED NEG_INT_MAX_PL1, INT_MAX_MIN1
287 SHOULD_BE_LESS_THAN_SIGNED -7, -6
288 SHOULD_BE_LESS_THAN_SIGNED NEG_INT_MAX, NEG_INT_MAX_PL1
289 SHOULD_BE_LESS_THAN_SIGNED NEG_INT_MAX, MIN1
290 SHOULD_BE_LESS_THAN_SIGNED NEG_INT_MAX, 0
291
292 SHOULD_BE_GREATER_THAN_SIGNED 1, 0
293 SHOULD_BE_GREATER_THAN_SIGNED 0, MIN1
294 SHOULD_BE_GREATER_THAN_SIGNED INT_MAX, INT_MAX_MIN1
295 SHOULD_BE_GREATER_THAN_SIGNED INT_MAX, NEG_INT_MAX
296 SHOULD_BE_GREATER_THAN_SIGNED INT_MAX_MIN1, NEG_INT_MAX
297 SHOULD_BE_GREATER_THAN_SIGNED INT_MAX, NEG_INT_MAX_PL1
298 SHOULD_BE_GREATER_THAN_SIGNED INT_MAX_MIN1, NEG_INT_MAX_PL1
299 SHOULD_BE_GREATER_THAN_SIGNED -6, -7
300 SHOULD_BE_GREATER_THAN_SIGNED NEG_INT_MAX_PL1, NEG_INT_MAX
301 SHOULD_BE_GREATER_THAN_SIGNED MIN1, NEG_INT_MAX
302 SHOULD_BE_GREATER_THAN_SIGNED 0, NEG_INT_MAX
303
304 /* See the immediate tests below. */
305 SHOULD_BE_LESS_THAN_SIGNED 0xFFFF7FFF, 0xFFFF8000
306 /* See the immediate tests below. */
307 SHOULD_BE_GREATER_THAN_SIGNED 0xFFFF8001, 0xFFFF8000
308
309 /* Signed tests, immediate */
310
311 SHOULD_BE_LESS_THAN_SIGNED_I 0, 1
312 SHOULD_BE_LESS_THAN_SIGNED_I -1, 0
313 SHOULD_BE_LESS_THAN_SIGNED_I -7, -6
314
315 SHOULD_BE_GREATER_THAN_SIGNED_I 0x00008000, 0x7FFF
316 SHOULD_BE_LESS_THAN_SIGNED_I 0xFFFFFFFF, 0x7FFF
317 /* 0x8000 gets sign-extended to 0xFFFF8000. */
318 SHOULD_BE_LESS_THAN_SIGNED_I 0xFFFF7FFF, 0x8000
319 /* 0x8000 gets sign-extended to 0xFFFF8000. */
320 SHOULD_BE_GREATER_THAN_SIGNED_I 0xFFFF8001, 0x8000
321 /* 0x8000 gets sign-extended to 0xFFFF8000. */
322 SHOULD_BE_GREATER_THAN_SIGNED_I 0x00008000, 0x8000
323
324 /* Unsigned tests */
325
326 SHOULD_BE_LESS_THAN_UNSIGNED 0, 1
327 SHOULD_BE_LESS_THAN_UNSIGNED UINT_MAX_MIN1, UINT_MAX
328 SHOULD_BE_GREATER_THAN_UNSIGNED 1, 0
329 SHOULD_BE_GREATER_THAN_UNSIGNED UINT_MAX, UINT_MAX_MIN1
330 SHOULD_BE_GREATER_THAN_UNSIGNED UINT_MAX, 0
331 SHOULD_BE_GREATER_THAN_UNSIGNED 0x80000001, 0x80000000
332 SHOULD_BE_LESS_THAN_UNSIGNED 0x80000000, 0x80000001
333 SHOULD_BE_GREATER_THAN_UNSIGNED 0x80000000, 0x7fffffff
334 SHOULD_BE_LESS_THAN_UNSIGNED 0x7fffffff, 0x80000000
335 SHOULD_BE_GREATER_THAN_UNSIGNED 0x7fffffff, 0x7ffffffe
336 SHOULD_BE_LESS_THAN_UNSIGNED 0x7ffffffe, 0x7fffffff
337 SHOULD_BE_LESS_THAN_UNSIGNED 0x2024fae0, 0xfef03220
338
339 /* Unsigned tests, immediate */
340
341 SHOULD_BE_LESS_THAN_UNSIGNED_I 0, 1
342 SHOULD_BE_GREATER_THAN_UNSIGNED_I 1, 0
343 SHOULD_BE_LESS_THAN_UNSIGNED_I SHRT_MAX - 1, SHRT_MAX
344 SHOULD_BE_GREATER_THAN_UNSIGNED_I SHRT_MAX , SHRT_MAX - 1
345
346 /* The sign extension produces unexpected results here. */
347
348 /* 0xFFFF gets sign-extended to 0xFFFFFFFF. */
349 SHOULD_BE_LESS_THAN_UNSIGNED_I 0xFFFFFFFF - 1, 0xFFFF
350 /* 0x8000 gets sign-extended to 0xFFFF8000. */
351 SHOULD_BE_LESS_THAN_UNSIGNED_I 0xFFFF7FFF, 0x8000
352
353 /* Equal tests. */
354
355 SHOULD_BE_EQUAL 0, 0
356 SHOULD_BE_EQUAL UINT_MAX, UINT_MAX
357 SHOULD_BE_EQUAL MIN1, UINT_MAX
358 SHOULD_BE_EQUAL INT_MAX, INT_MAX
359 SHOULD_BE_EQUAL NEG_INT_MAX, NEG_INT_MAX
360
361 /* Equal tests, immediate. Test the 16-to-32-bit sign extension. */
362
363 SHOULD_BE_EQUAL_I 0, 0
364 SHOULD_BE_EQUAL_I 0x00007FFF, 0x7FFF
365 SHOULD_BE_EQUAL_I 0xFFFF8000, 0x8000
366 SHOULD_BE_EQUAL_I 0xFFFFFFFF, 0xFFFF
367
368 /* Non-equal tests. */
369
370 SHOULDNT_BE_EQUAL 0, 1
371 SHOULDNT_BE_EQUAL UINT_MAX, INT_MAX
372 SHOULDNT_BE_EQUAL UINT_MAX, NEG_INT_MAX
373 SHOULDNT_BE_EQUAL MIN1, NEG_INT_MAX_PL1
374 SHOULDNT_BE_EQUAL INT_MAX, NEG_INT_MAX
375 SHOULDNT_BE_EQUAL NEG_INT_MAX_PL1, UINT_MAX_MIN1
376
377 /* Non-equal tests, immediate. Test the 16-to-32-bit sign
378 extension. */
379
380 SHOULDNT_BE_EQUAL_I 0x00008000, 0x8000
381
382 POP LINK_REGISTER_R9
383 RETURN_TO_LINK_REGISTER_R9
384
385 failed:
386 EXIT_SIMULATION_WITH_IMMEDIATE_EXIT_CODE SEC_GENERIC_ERROR