Skip analyzer strndup test on hppa*-*-hpux*
[official-gcc.git] / gcc / config / mcore / constraints.md
blob49e0d76e6571bf15262146727807daed10ed3738
1 ;; Constraint definitions for the Motorola MCore
2 ;; Copyright (C) 2011-2023 Free Software Foundation, Inc.
4 ;; This file is part of GCC.
6 ;; GCC is free software; you can redistribute it and/or modify
7 ;; it under the terms of the GNU General Public License as published by
8 ;; the Free Software Foundation; either version 3, or (at your option)
9 ;; any later version.
11 ;; GCC is distributed in the hope that it will be useful,
12 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
13 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 ;; GNU General Public License for more details.
16 ;; You should have received a copy of the GNU General Public License
17 ;; along with GCC; see the file COPYING3.  If not see
18 ;; <http://www.gnu.org/licenses/>.
20 ;; Register constraints.
21 (define_register_constraint "a" "LRW_REGS"
22   "@internal")
24 (define_register_constraint "b" "ONLYR1_REGS"
25   "@internal")
27 (define_register_constraint "c" "C_REGS"
28   "@internal")
30 (define_register_constraint "x" "ALL_REGS"
31   "@internal")
33 ;; Integer constraints.
34 (define_constraint "I"
35   "An integer in the range 0 to 127."
36   (and (match_code "const_int")
37        (match_test "IN_RANGE (ival, 0, 127)")))
39 (define_constraint "J"
40   "An integer in the range 1 to 32."
41   (and (match_code "const_int")
42        (match_test "IN_RANGE (ival, 1, 32)")))
44 (define_constraint "K"
45   "A shift operand, an integer in the range 0 to 31."
46   (and (match_code "const_int")
47        (match_test "IN_RANGE (ival, 0, 31)")))
49 (define_constraint "L"
50   "A negative arithmetic operand in the range -32 to -1."
51   (and (match_code "const_int")
52        (match_test "IN_RANGE (ival, -32, -1)")))
54 (define_constraint "M"
55   "A constant loadable by bgeni."
56   (and (match_code "const_int")
57        (match_test "exact_log2 (ival) >= 0 && exact_log2 (ival) <= 30")))
59 (define_constraint "N"
60   "A constant loadable by bmaskii, including -1."
61   (and (match_code "const_int")
62        (ior (match_test "ival == -1")
63             (and (match_test "exact_log2 (ival + 1) >= 0")
64                  (match_test "exact_log2 (ival + 1) <= 30")))))
66 (define_constraint "O"
67   "A constant allowed by cmov with two constants +/- 1 of each other."
68   (and (match_code "const_int")
69        (ior (match_test "insn_const_int_ok_for_constraint (ival, CONSTRAINT_I)")
70             (match_test "insn_const_int_ok_for_constraint (ival, CONSTRAINT_M)")
71             (match_test "insn_const_int_ok_for_constraint (ival, CONSTRAINT_N)")
72             (match_test "insn_const_int_ok_for_constraint (ival - 1, CONSTRAINT_M)")
73             (match_test "insn_const_int_ok_for_constraint (ival + 1, CONSTRAINT_N)"))))
75 (define_constraint "P"
76   "A value that can be generated without an lrw instruction."
77   (and (match_code "const_int")
78        (match_test "mcore_const_ok_for_inline (ival)")))
80 ;; Floating-point constraints.
81 (define_constraint "G"
82   "@internal"
83   (and (match_code "const_double")
84        (match_test "insn_const_int_ok_for_constraint (hval, CONSTRAINT_I)")
85        (match_test "insn_const_int_ok_for_constraint (ival, CONSTRAINT_I)")))
87 ;; Other constraints.
88 (define_constraint "Q"
89   "The integer constant one."
90   (and (match_code "const_int")
91        (match_test "ival == 1")))
93 (define_constraint "R"
94   "@internal"
95   (and (match_code "mem")
96        (match_test "GET_CODE (XEXP (op, 0)) == LABEL_REF")))
98 (define_constraint "S"
99   "An integer constant with 0, 1, or 2 bits clear."
100   (and (match_code "const_int")
101        (match_test "mcore_num_zeros (ival) <= 2")))
103 (define_constraint "T"
104   "An integer constant with 2 set bits."
105   (and (match_code "const_int")
106        (match_test "mcore_num_ones (ival) == 2")))
108 (define_constraint "U"
109   "The integer constant zero."
110   (and (match_code "const_int")
111        (match_test "ival == 0")))