mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-27 04:52:05 +08:00
4a94e36819
This commit brings all the changes made by running gdb/copyright.py as per GDB's Start of New Year Procedure. For the avoidance of doubt, all changes in this commits were performed by the script.
387 lines
8.8 KiB
ArmAsm
387 lines
8.8 KiB
ArmAsm
/* Tests the set flag (l.sf*) instructions.
|
|
|
|
Copyright (C) 2017-2022 Free Software Foundation, Inc.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
|
|
# mach: or1k
|
|
# output: exit(0)\n
|
|
|
|
#include "or1k-asm-test-helpers.h"
|
|
|
|
#define INT_MAX 2147483647 /* 0x7fffffff */
|
|
#define INT_MAX_MIN1 2147483646 /* 0x7ffffffe */
|
|
#define NEG_INT_MAX -2147483648 /* 0x80000000 */
|
|
#define NEG_INT_MAX_PL1 -2147483647 /* 0x80000001 */
|
|
#define MIN1 -1 /* 0xffffffff */
|
|
|
|
#define SHRT_MIN (-32768)
|
|
#define SHRT_MAX 32767
|
|
|
|
#define UINT_MAX 4294967295 /* 0xffffffff */
|
|
#define UINT_MAX_MIN1 4294967294 /* 0xfffffffe */
|
|
|
|
#define USHRT_MAX 65535
|
|
|
|
.macro MOVE_TO_R4_R5_AND_REPORT a, b
|
|
LOAD_IMMEDIATE r4, \a
|
|
LOAD_IMMEDIATE r5, \b
|
|
|
|
/* During development, add REPORT_xxx statements here to see the
|
|
operands. */
|
|
.endm
|
|
|
|
.macro MOVE_TO_R4_AND_REPORT_I a, b
|
|
LOAD_IMMEDIATE r4, \a
|
|
|
|
/* During development, add REPORT_xxx statements here to see the
|
|
operands. */
|
|
.endm
|
|
|
|
.macro SHOULD_BE_SET
|
|
OR1K_DELAYED_NOP (l.bnf failed)
|
|
.endm
|
|
|
|
.macro SHOULDNT_BE_SET
|
|
OR1K_DELAYED_NOP (l.bf failed)
|
|
.endm
|
|
|
|
.macro SHOULD_BE_LESS_THAN_SIGNED a, b
|
|
MOVE_TO_R4_R5_AND_REPORT \a , \b
|
|
|
|
l.sfeq r4, r5
|
|
SHOULDNT_BE_SET
|
|
l.sfne r4, r5
|
|
SHOULD_BE_SET
|
|
l.sfgts r4, r5
|
|
SHOULDNT_BE_SET
|
|
l.sfges r4, r5
|
|
SHOULDNT_BE_SET
|
|
l.sfles r4, r5
|
|
SHOULD_BE_SET
|
|
l.sflts r4, r5
|
|
SHOULD_BE_SET
|
|
.endm
|
|
|
|
.macro SHOULD_BE_GREATER_THAN_SIGNED a, b
|
|
MOVE_TO_R4_R5_AND_REPORT \a , \b
|
|
|
|
l.sfeq r4, r5
|
|
SHOULDNT_BE_SET
|
|
l.sfne r4, r5
|
|
SHOULD_BE_SET
|
|
l.sfgts r4, r5
|
|
SHOULD_BE_SET
|
|
l.sfges r4, r5
|
|
SHOULD_BE_SET
|
|
l.sfles r4, r5
|
|
SHOULDNT_BE_SET
|
|
l.sflts r4, r5
|
|
SHOULDNT_BE_SET
|
|
.endm
|
|
|
|
.macro SHOULD_BE_LESS_THAN_UNSIGNED a, b
|
|
MOVE_TO_R4_R5_AND_REPORT \a , \b
|
|
|
|
l.sfeq r4, r5
|
|
SHOULDNT_BE_SET
|
|
l.sfne r4, r5
|
|
SHOULD_BE_SET
|
|
l.sfgtu r4, r5
|
|
SHOULDNT_BE_SET
|
|
l.sfgeu r4, r5
|
|
SHOULDNT_BE_SET
|
|
l.sfleu r4, r5
|
|
SHOULD_BE_SET
|
|
l.sfltu r4, r5
|
|
SHOULD_BE_SET
|
|
.endm
|
|
|
|
.macro SHOULD_BE_GREATER_THAN_UNSIGNED a, b
|
|
MOVE_TO_R4_R5_AND_REPORT \a , \b
|
|
|
|
l.sfeq r4, r5
|
|
SHOULDNT_BE_SET
|
|
l.sfne r4, r5
|
|
SHOULD_BE_SET
|
|
l.sfgtu r4, r5
|
|
SHOULD_BE_SET
|
|
l.sfgeu r4, r5
|
|
SHOULD_BE_SET
|
|
l.sfleu r4, r5
|
|
SHOULDNT_BE_SET
|
|
l.sfltu r4, r5
|
|
SHOULDNT_BE_SET
|
|
.endm
|
|
|
|
.macro SHOULD_BE_EQUAL a, b
|
|
MOVE_TO_R4_R5_AND_REPORT \a , \b
|
|
|
|
l.sfeq r4, r5
|
|
SHOULD_BE_SET
|
|
l.sfne r4, r5
|
|
SHOULDNT_BE_SET
|
|
|
|
/* Signed tests. */
|
|
l.sfgts r4, r5
|
|
SHOULDNT_BE_SET
|
|
l.sfges r4, r5
|
|
SHOULD_BE_SET
|
|
l.sfles r4, r5
|
|
SHOULD_BE_SET
|
|
l.sflts r4, r5
|
|
SHOULDNT_BE_SET
|
|
|
|
/* Unsigned tests. */
|
|
l.sfgtu r4, r5
|
|
SHOULDNT_BE_SET
|
|
l.sfgeu r4, r5
|
|
SHOULD_BE_SET
|
|
l.sfleu r4, r5
|
|
SHOULD_BE_SET
|
|
l.sfltu r4, r5
|
|
SHOULDNT_BE_SET
|
|
.endm
|
|
|
|
.macro SHOULDNT_BE_EQUAL a, b
|
|
MOVE_TO_R4_R5_AND_REPORT \a , \b
|
|
|
|
l.sfeq r4, r5
|
|
SHOULDNT_BE_SET
|
|
l.sfne r4, r5
|
|
SHOULD_BE_SET
|
|
.endm
|
|
|
|
.macro SHOULD_BE_EQUAL_I a, b
|
|
MOVE_TO_R4_AND_REPORT_I \a, \b
|
|
|
|
l.sfeqi r4, \b
|
|
SHOULD_BE_SET
|
|
l.sfnei r4, \b
|
|
SHOULDNT_BE_SET
|
|
|
|
/* Signed tests. */
|
|
l.sfgtsi r4, \b
|
|
SHOULDNT_BE_SET
|
|
l.sfgesi r4, \b
|
|
SHOULD_BE_SET
|
|
l.sflesi r4, \b
|
|
SHOULD_BE_SET
|
|
l.sfltsi r4, \b
|
|
SHOULDNT_BE_SET
|
|
|
|
/* Unsigned tests. */
|
|
l.sfgtui r4, \b
|
|
SHOULDNT_BE_SET
|
|
l.sfgeui r4, \b
|
|
SHOULD_BE_SET
|
|
l.sfleui r4, \b
|
|
SHOULD_BE_SET
|
|
l.sfltui r4, \b
|
|
SHOULDNT_BE_SET
|
|
.endm
|
|
|
|
.macro SHOULDNT_BE_EQUAL_I a, b
|
|
MOVE_TO_R4_AND_REPORT_I \a, \b
|
|
|
|
l.sfeqi r4, \b
|
|
SHOULDNT_BE_SET
|
|
l.sfnei r4, \b
|
|
SHOULD_BE_SET
|
|
.endm
|
|
|
|
.macro SHOULD_BE_LESS_THAN_SIGNED_I a, b
|
|
MOVE_TO_R4_AND_REPORT_I \a, \b
|
|
|
|
l.sfeqi r4, \b
|
|
SHOULDNT_BE_SET
|
|
l.sfnei r4, \b
|
|
SHOULD_BE_SET
|
|
l.sfgtsi r4, \b
|
|
SHOULDNT_BE_SET
|
|
l.sfgesi r4, \b
|
|
SHOULDNT_BE_SET
|
|
l.sflesi r4, \b
|
|
SHOULD_BE_SET
|
|
l.sfltsi r4, \b
|
|
SHOULD_BE_SET
|
|
.endm
|
|
|
|
.macro SHOULD_BE_GREATER_THAN_SIGNED_I a, b
|
|
MOVE_TO_R4_AND_REPORT_I \a, \b
|
|
|
|
l.sfeqi r4, \b
|
|
SHOULDNT_BE_SET
|
|
l.sfnei r4, \b
|
|
SHOULD_BE_SET
|
|
l.sfgtsi r4, \b
|
|
SHOULD_BE_SET
|
|
l.sfgesi r4, \b
|
|
SHOULD_BE_SET
|
|
l.sflesi r4, \b
|
|
SHOULDNT_BE_SET
|
|
l.sfltsi r4, \b
|
|
SHOULDNT_BE_SET
|
|
.endm
|
|
|
|
.macro SHOULD_BE_LESS_THAN_UNSIGNED_I a, b
|
|
MOVE_TO_R4_AND_REPORT_I \a, \b
|
|
|
|
l.sfeqi r4, \b
|
|
SHOULDNT_BE_SET
|
|
l.sfnei r4, \b
|
|
SHOULD_BE_SET
|
|
l.sfgtui r4, \b
|
|
SHOULDNT_BE_SET
|
|
l.sfgeui r4, \b
|
|
SHOULDNT_BE_SET
|
|
l.sfleui r4, \b
|
|
SHOULD_BE_SET
|
|
l.sfltui r4, \b
|
|
SHOULD_BE_SET
|
|
.endm
|
|
|
|
.macro SHOULD_BE_GREATER_THAN_UNSIGNED_I a, b
|
|
MOVE_TO_R4_AND_REPORT_I \a, \b
|
|
|
|
l.sfeqi r4, \b
|
|
SHOULDNT_BE_SET
|
|
l.sfnei r4, \b
|
|
SHOULD_BE_SET
|
|
l.sfgtui r4, \b
|
|
SHOULD_BE_SET
|
|
l.sfgeui r4, \b
|
|
SHOULD_BE_SET
|
|
l.sfleui r4, \b
|
|
SHOULDNT_BE_SET
|
|
l.sfltui r4, \b
|
|
SHOULDNT_BE_SET
|
|
.endm
|
|
|
|
STANDARD_TEST_ENVIRONMENT
|
|
|
|
.section .text
|
|
start_tests:
|
|
PUSH LINK_REGISTER_R9
|
|
|
|
/* Signed tests */
|
|
|
|
SHOULD_BE_LESS_THAN_SIGNED 0, 1
|
|
SHOULD_BE_LESS_THAN_SIGNED MIN1, 0
|
|
SHOULD_BE_LESS_THAN_SIGNED INT_MAX_MIN1, INT_MAX
|
|
SHOULD_BE_LESS_THAN_SIGNED NEG_INT_MAX, INT_MAX
|
|
SHOULD_BE_LESS_THAN_SIGNED NEG_INT_MAX, INT_MAX_MIN1
|
|
SHOULD_BE_LESS_THAN_SIGNED NEG_INT_MAX_PL1, INT_MAX
|
|
SHOULD_BE_LESS_THAN_SIGNED NEG_INT_MAX_PL1, INT_MAX_MIN1
|
|
SHOULD_BE_LESS_THAN_SIGNED -7, -6
|
|
SHOULD_BE_LESS_THAN_SIGNED NEG_INT_MAX, NEG_INT_MAX_PL1
|
|
SHOULD_BE_LESS_THAN_SIGNED NEG_INT_MAX, MIN1
|
|
SHOULD_BE_LESS_THAN_SIGNED NEG_INT_MAX, 0
|
|
|
|
SHOULD_BE_GREATER_THAN_SIGNED 1, 0
|
|
SHOULD_BE_GREATER_THAN_SIGNED 0, MIN1
|
|
SHOULD_BE_GREATER_THAN_SIGNED INT_MAX, INT_MAX_MIN1
|
|
SHOULD_BE_GREATER_THAN_SIGNED INT_MAX, NEG_INT_MAX
|
|
SHOULD_BE_GREATER_THAN_SIGNED INT_MAX_MIN1, NEG_INT_MAX
|
|
SHOULD_BE_GREATER_THAN_SIGNED INT_MAX, NEG_INT_MAX_PL1
|
|
SHOULD_BE_GREATER_THAN_SIGNED INT_MAX_MIN1, NEG_INT_MAX_PL1
|
|
SHOULD_BE_GREATER_THAN_SIGNED -6, -7
|
|
SHOULD_BE_GREATER_THAN_SIGNED NEG_INT_MAX_PL1, NEG_INT_MAX
|
|
SHOULD_BE_GREATER_THAN_SIGNED MIN1, NEG_INT_MAX
|
|
SHOULD_BE_GREATER_THAN_SIGNED 0, NEG_INT_MAX
|
|
|
|
/* See the immediate tests below. */
|
|
SHOULD_BE_LESS_THAN_SIGNED 0xFFFF7FFF, 0xFFFF8000
|
|
/* See the immediate tests below. */
|
|
SHOULD_BE_GREATER_THAN_SIGNED 0xFFFF8001, 0xFFFF8000
|
|
|
|
/* Signed tests, immediate */
|
|
|
|
SHOULD_BE_LESS_THAN_SIGNED_I 0, 1
|
|
SHOULD_BE_LESS_THAN_SIGNED_I -1, 0
|
|
SHOULD_BE_LESS_THAN_SIGNED_I -7, -6
|
|
|
|
SHOULD_BE_GREATER_THAN_SIGNED_I 0x00008000, 0x7FFF
|
|
SHOULD_BE_LESS_THAN_SIGNED_I 0xFFFFFFFF, 0x7FFF
|
|
/* 0x8000 gets sign-extended to 0xFFFF8000. */
|
|
SHOULD_BE_LESS_THAN_SIGNED_I 0xFFFF7FFF, 0x8000
|
|
/* 0x8000 gets sign-extended to 0xFFFF8000. */
|
|
SHOULD_BE_GREATER_THAN_SIGNED_I 0xFFFF8001, 0x8000
|
|
/* 0x8000 gets sign-extended to 0xFFFF8000. */
|
|
SHOULD_BE_GREATER_THAN_SIGNED_I 0x00008000, 0x8000
|
|
|
|
/* Unsigned tests */
|
|
|
|
SHOULD_BE_LESS_THAN_UNSIGNED 0, 1
|
|
SHOULD_BE_LESS_THAN_UNSIGNED UINT_MAX_MIN1, UINT_MAX
|
|
SHOULD_BE_GREATER_THAN_UNSIGNED 1, 0
|
|
SHOULD_BE_GREATER_THAN_UNSIGNED UINT_MAX, UINT_MAX_MIN1
|
|
SHOULD_BE_GREATER_THAN_UNSIGNED UINT_MAX, 0
|
|
SHOULD_BE_GREATER_THAN_UNSIGNED 0x80000001, 0x80000000
|
|
SHOULD_BE_LESS_THAN_UNSIGNED 0x80000000, 0x80000001
|
|
SHOULD_BE_GREATER_THAN_UNSIGNED 0x80000000, 0x7fffffff
|
|
SHOULD_BE_LESS_THAN_UNSIGNED 0x7fffffff, 0x80000000
|
|
SHOULD_BE_GREATER_THAN_UNSIGNED 0x7fffffff, 0x7ffffffe
|
|
SHOULD_BE_LESS_THAN_UNSIGNED 0x7ffffffe, 0x7fffffff
|
|
SHOULD_BE_LESS_THAN_UNSIGNED 0x2024fae0, 0xfef03220
|
|
|
|
/* Unsigned tests, immediate */
|
|
|
|
SHOULD_BE_LESS_THAN_UNSIGNED_I 0, 1
|
|
SHOULD_BE_GREATER_THAN_UNSIGNED_I 1, 0
|
|
SHOULD_BE_LESS_THAN_UNSIGNED_I SHRT_MAX - 1, SHRT_MAX
|
|
SHOULD_BE_GREATER_THAN_UNSIGNED_I SHRT_MAX , SHRT_MAX - 1
|
|
|
|
/* The sign extension produces unexpected results here. */
|
|
|
|
/* 0xFFFF gets sign-extended to 0xFFFFFFFF. */
|
|
SHOULD_BE_LESS_THAN_UNSIGNED_I 0xFFFFFFFF - 1, 0xFFFF
|
|
/* 0x8000 gets sign-extended to 0xFFFF8000. */
|
|
SHOULD_BE_LESS_THAN_UNSIGNED_I 0xFFFF7FFF, 0x8000
|
|
|
|
/* Equal tests. */
|
|
|
|
SHOULD_BE_EQUAL 0, 0
|
|
SHOULD_BE_EQUAL UINT_MAX, UINT_MAX
|
|
SHOULD_BE_EQUAL MIN1, UINT_MAX
|
|
SHOULD_BE_EQUAL INT_MAX, INT_MAX
|
|
SHOULD_BE_EQUAL NEG_INT_MAX, NEG_INT_MAX
|
|
|
|
/* Equal tests, immediate. Test the 16-to-32-bit sign extension. */
|
|
|
|
SHOULD_BE_EQUAL_I 0, 0
|
|
SHOULD_BE_EQUAL_I 0x00007FFF, 0x7FFF
|
|
SHOULD_BE_EQUAL_I 0xFFFF8000, 0x8000
|
|
SHOULD_BE_EQUAL_I 0xFFFFFFFF, 0xFFFF
|
|
|
|
/* Non-equal tests. */
|
|
|
|
SHOULDNT_BE_EQUAL 0, 1
|
|
SHOULDNT_BE_EQUAL UINT_MAX, INT_MAX
|
|
SHOULDNT_BE_EQUAL UINT_MAX, NEG_INT_MAX
|
|
SHOULDNT_BE_EQUAL MIN1, NEG_INT_MAX_PL1
|
|
SHOULDNT_BE_EQUAL INT_MAX, NEG_INT_MAX
|
|
SHOULDNT_BE_EQUAL NEG_INT_MAX_PL1, UINT_MAX_MIN1
|
|
|
|
/* Non-equal tests, immediate. Test the 16-to-32-bit sign
|
|
extension. */
|
|
|
|
SHOULDNT_BE_EQUAL_I 0x00008000, 0x8000
|
|
|
|
POP LINK_REGISTER_R9
|
|
RETURN_TO_LINK_REGISTER_R9
|
|
|
|
failed:
|
|
EXIT_SIMULATION_WITH_IMMEDIATE_EXIT_CODE SEC_GENERIC_ERROR
|