1 /* Tests the set flag (l.sf*) instructions.
3 Copyright (C) 2017-2018 Free Software Foundation, Inc.
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.
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.
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/>. */
21 #include "or1k-asm-test-helpers.h"
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 */
29 #define SHRT_MIN (-32768)
30 #define SHRT_MAX 32767
32 #define UINT_MAX 4294967295 /* 0xffffffff */
33 #define UINT_MAX_MIN1 4294967294 /* 0xfffffffe */
35 #define USHRT_MAX 65535
37 .macro MOVE_TO_R4_R5_AND_REPORT a, b
41 /* During development, add REPORT_xxx statements here to see the
45 .macro MOVE_TO_R4_AND_REPORT_I a, b
48 /* During development, add REPORT_xxx statements here to see the
53 OR1K_DELAYED_NOP (l.bnf failed)
56 .macro SHOULDNT_BE_SET
57 OR1K_DELAYED_NOP (l.bf failed)
60 .macro SHOULD_BE_LESS_THAN_SIGNED a, b
61 MOVE_TO_R4_R5_AND_REPORT \a , \b
77 .macro SHOULD_BE_GREATER_THAN_SIGNED a, b
78 MOVE_TO_R4_R5_AND_REPORT \a , \b
94 .macro SHOULD_BE_LESS_THAN_UNSIGNED a, b
95 MOVE_TO_R4_R5_AND_REPORT \a , \b
111 .macro SHOULD_BE_GREATER_THAN_UNSIGNED a, b
112 MOVE_TO_R4_R5_AND_REPORT \a , \b
128 .macro SHOULD_BE_EQUAL a, b
129 MOVE_TO_R4_R5_AND_REPORT \a , \b
146 /* Unsigned tests. */
157 .macro SHOULDNT_BE_EQUAL a, b
158 MOVE_TO_R4_R5_AND_REPORT \a , \b
166 .macro SHOULD_BE_EQUAL_I a, b
167 MOVE_TO_R4_AND_REPORT_I \a, \b
184 /* Unsigned tests. */
195 .macro SHOULDNT_BE_EQUAL_I a, b
196 MOVE_TO_R4_AND_REPORT_I \a, \b
204 .macro SHOULD_BE_LESS_THAN_SIGNED_I a, b
205 MOVE_TO_R4_AND_REPORT_I \a, \b
221 .macro SHOULD_BE_GREATER_THAN_SIGNED_I a, b
222 MOVE_TO_R4_AND_REPORT_I \a, \b
238 .macro SHOULD_BE_LESS_THAN_UNSIGNED_I a, b
239 MOVE_TO_R4_AND_REPORT_I \a, \b
255 .macro SHOULD_BE_GREATER_THAN_UNSIGNED_I a, b
256 MOVE_TO_R4_AND_REPORT_I \a, \b
272 STANDARD_TEST_ENVIRONMENT
276 PUSH LINK_REGISTER_R9
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
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
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
309 /* Signed tests, immediate */
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
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
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
339 /* Unsigned tests, immediate */
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
346 /* The sign extension produces unexpected results here. */
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
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
361 /* Equal tests, immediate. Test the 16-to-32-bit sign extension. */
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
368 /* Non-equal tests. */
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
377 /* Non-equal tests, immediate. Test the 16-to-32-bit sign
380 SHOULDNT_BE_EQUAL_I 0x00008000, 0x8000
383 RETURN_TO_LINK_REGISTER_R9
386 EXIT_SIMULATION_WITH_IMMEDIATE_EXIT_CODE SEC_GENERIC_ERROR