]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/csky/constraints.md
Update copyright years.
[thirdparty/gcc.git] / gcc / config / csky / constraints.md
CommitLineData
0363e32c 1;; Constraints for C-SKY.
fbd26352 2;; Copyright (C) 2018-2019 Free Software Foundation, Inc.
0363e32c 3;; Contributed by C-SKY Microsystems and Mentor Graphics.
4;;
5;; This file is part of GCC.
6;;
7;; GCC is free software; you can redistribute it and/or modify it
8;; under the terms of the GNU General Public License as published by
9;; the Free Software Foundation; either version 3, or (at your option)
10;; any later version.
11;;
12;; GCC is distributed in the hope that it will be useful, but
13;; WITHOUT ANY WARRANTY; without even the implied warranty of
14;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15;; General Public License for more details.
16;;
17;; You should have received a copy of the GNU General Public License
18;; along with GCC; see the file COPYING3. If not see
19;; <http://www.gnu.org/licenses/>. */
20
21;; Register constraints.
22
23(define_register_constraint "a" "MINI_REGS" "r0 - r7")
24(define_register_constraint "b" "LOW_REGS" "r0 - r15")
25(define_register_constraint "c" "C_REGS" "C register")
26(define_register_constraint "y" "HILO_REGS" "HI and LO registers")
27(define_register_constraint "l" "LO_REGS" "LO register")
28(define_register_constraint "h" "HI_REGS" "HI register")
29(define_register_constraint "v" "V_REGS" "vector registers")
30(define_register_constraint "z" "SP_REGS" "SP register")
31
32
33;; Memory and misc constraints.
34
35(define_memory_constraint "Q"
36 "Memory operands with base register, index register and short displacement for FPUV2"
37 (match_test "csky_valid_fpuv2_mem_operand (op)"))
38
39(define_constraint "R"
40 "Memory operands whose address is a label_ref"
41 (and (match_code "mem")
42 (match_test "GET_CODE (XEXP (op, 0)) == LABEL_REF")))
43
44(define_constraint "S"
45 "Symbol reference with optional offset"
46 (match_test "csky_symbolic_address_p (op)"))
47
48
49;; Constant integer constraints.
50
51(define_constraint "I"
52 "Constant in range [0, 65535]"
53 (and (match_code "const_int")
54 (match_test "CSKY_CONST_OK_FOR_I (ival)")))
55
56(define_constraint "J"
57 "Constant in range [1, 32]"
58 (and (match_code "const_int")
59 (match_test "CSKY_CONST_OK_FOR_J (ival)")))
60
61(define_constraint "K"
62 "Constant in range [0, 31]"
63 (and (match_code "const_int")
64 (match_test "CSKY_CONST_OK_FOR_K (ival)")))
65
66(define_constraint "L"
67 "Constant in range [1, 8]"
68 (and (match_code "const_int")
69 (match_test "CSKY_CONST_OK_FOR_L (ival)")))
70
71(define_constraint "M"
72 "Constant in range [1, 4096]"
73 (and (match_code "const_int")
74 (match_test "CSKY_CONST_OK_FOR_M (ival)")))
75
76(define_constraint "N"
77 "Constant in range [1, 256]"
78 (and (match_code "const_int")
79 (match_test "CSKY_CONST_OK_FOR_N (ival)")))
80
81(define_constraint "O"
82 "Constant in range [0, 4095]"
83 (and (match_code "const_int")
84 (match_test "CSKY_CONST_OK_FOR_O (ival)")))
85
86(define_constraint "P"
87 "Constant in range [4, 508] that is divisible by 4"
88 (and (match_code "const_int")
89 (match_test "CSKY_CONST_OK_FOR_P (ival)")))
90
91(define_constraint "T"
92 "Constant in range [-256, -1]"
93 (and (match_code "const_int")
94 (match_test "CSKY_CONST_OK_FOR_T (ival)")))
95
96(define_constraint "Ua"
97 "Constant 0"
98 (and (match_code "const_int")
99 (match_test "ival == 0")))
100
101(define_constraint "Ub"
102 "Unsigned int that is an exact power of 2"
103 (and (match_code "const_int")
104 (match_test "CSKY_CONST_OK_FOR_Ub (ival)")))
105
106(define_constraint "Uc"
107 "Unsigned int X such that X+1 is an exact power of 2"
108 (and (match_code "const_int")
109 (match_test "CSKY_CONST_OK_FOR_Uc (ival)")))
110
111(define_constraint "Ud"
112 "64-bit int whose high/low words separately satisfy I, Ub, or Uc"
113 (and (match_code "const_int")
114 (match_test "CSKY_CONST_OK_FOR_Ud (ival)")))
115
116(define_constraint "Ug"
117 "Constant in range [-508, -4] that is divisible by 4"
118 (and (match_code "const_int")
119 (match_test "CSKY_CONST_OK_FOR_Ug (ival)")))
120
121(define_constraint "Uh"
122 "Constant in range [-31, 0]"
123 (and (match_code "const_int")
124 (match_test "CSKY_CONST_OK_FOR_Uh (ival)")))
125
126(define_constraint "Uj"
127 "Constant in range [4, 1024] that is divisible by 4"
128 (and (match_code "const_int")
129 (match_test "CSKY_CONST_OK_FOR_Uj (ival)")))
130
131(define_constraint "Uk"
132 "Constant in range [1, 65536]"
133 (and (match_code "const_int")
134 (match_test "CSKY_CONST_OK_FOR_Uk (ival)")))
135
136(define_constraint "Ul"
137 "Constant in range [-1024, -4] that is divisible by 4"
138 (and (match_code "const_int")
139 (match_test "CSKY_CONST_OK_FOR_Ul (ival)")))
140
141(define_constraint "Um"
142 "Constant in range [-4096, -1]"
143 (and (match_code "const_int")
144 (match_test "CSKY_CONST_OK_FOR_Um (ival)")))
145
146(define_constraint "Un"
147 "Constant whose low 16 bits are all zeros"
148 (and (match_code "const_int")
149 (match_test "CSKY_CONST_OK_FOR_MOVIH (ival)")))
150
151(define_constraint "Uo"
152 "Constant that can be synthesized with an extra instruction"
153 (and (match_code "const_int")
154 (match_test "csky_inlinable_constant (ival)")))
155
156(define_constraint "Up"
157 "Constant in range [0, 255]"
158 (and (match_code "const_int")
159 (match_test "CSKY_CONST_OK_FOR_N (ival + 1)")))
160
161(define_constraint "Uq"
162 "Constant in range [0, 1020] that is divisible by 4"
163 (and (match_code "const_int")
164 (match_test "CSKY_CONST_OK_FOR_Uj (ival + 4)")))
165
166(define_constraint "Ur"
167 "Constant in range [-1020, -4] that is divisible by 4"
168 (and (match_code "const_int")
169 (match_test "CSKY_CONST_OK_FOR_Uj (-ival + 4)")))
170
171(define_constraint "Us"
172 "Constant in range [-8, -1]"
173 (and (match_code "const_int")
174 (match_test "CSKY_CONST_OK_FOR_US (ival)")))