]>
Commit | Line | Data |
---|---|---|
b6616c9c | 1 | ;; Constraint definitions for FT32 |
f1717362 | 2 | ;; Copyright (C) 2015-2016 Free Software Foundation, Inc. |
b6616c9c | 3 | ;; Contributed by FTDI <support@ftdi.com> |
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 | |
9 | ;; by the Free Software Foundation; either version 3, or (at your | |
10 | ;; option) any later version. | |
11 | ||
12 | ;; GCC is distributed in the hope that it will be useful, but WITHOUT | |
13 | ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY | |
14 | ;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public | |
15 | ;; 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 | ;; ------------------------------------------------------------------------- | |
22 | ;; Constraints | |
23 | ;; ------------------------------------------------------------------------- | |
24 | ||
25 | (define_memory_constraint "A" | |
26 | "An absolute address." | |
27 | (and (match_code "mem") | |
28 | (match_test "(!ft32_is_mem_pm(op))") | |
29 | (ior (match_test "GET_CODE (XEXP (op, 0)) == SYMBOL_REF") | |
30 | (match_test "GET_CODE (XEXP (op, 0)) == LABEL_REF") | |
31 | (match_test "GET_CODE (XEXP (op, 0)) == CONST_INT") | |
32 | (and (match_test "(GET_CODE (XEXP (op, 0)) == PLUS)") | |
33 | (ior (match_test "GET_CODE (XEXP (XEXP (op, 0), 0)) == SYMBOL_REF") | |
34 | (match_test "GET_CODE (XEXP (XEXP (op, 0), 0)) == LABEL_REF") | |
35 | (match_test "GET_CODE (XEXP (XEXP (op, 0), 0)) == CONST_INT")) | |
36 | (ior (match_test "GET_CODE (XEXP (XEXP (op, 0), 1)) == SYMBOL_REF") | |
37 | (match_test "GET_CODE (XEXP (XEXP (op, 0), 1)) == LABEL_REF") | |
38 | (match_test "GET_CODE (XEXP (XEXP (op, 0), 1)) == CONST_INT")))))) | |
39 | ||
40 | (define_memory_constraint "B" | |
41 | "An offset address." | |
42 | (and (match_code "mem") | |
43 | (match_test "(!ft32_is_mem_pm(op))") | |
44 | (match_test "(GET_CODE (XEXP (op, 0)) == PLUS)"))) | |
45 | ||
46 | (define_memory_constraint "W" | |
47 | "A register indirect memory operand." | |
48 | (and (match_code "mem") | |
49 | (match_test "!ft32_is_mem_pm(op) | |
50 | && REG_P (XEXP (op, 0)) | |
51 | && REGNO_OK_FOR_BASE_P (REGNO (XEXP (op, 0)))"))) | |
52 | ||
53 | (define_memory_constraint "e" | |
54 | "An offset address." | |
55 | (and (match_code "mem") | |
56 | (match_test "ft32_is_mem_pm(op) && ( | |
57 | (GET_CODE (XEXP (op, 0)) == SYMBOL_REF) || | |
58 | (GET_CODE (XEXP (op, 0)) == LABEL_REF) || | |
59 | (GET_CODE (XEXP (op, 0)) == CONST_INT) || | |
60 | (GET_CODE (XEXP (op, 0)) == CONST))" | |
61 | ))) | |
62 | ||
63 | (define_memory_constraint "f" | |
64 | "An offset address." | |
65 | (and (match_code "mem") | |
66 | (match_test "ft32_is_mem_pm(op) && ( | |
67 | ((GET_CODE (XEXP (op, 0)) == PLUS)) || | |
68 | (GET_CODE (XEXP (op, 0)) == REG))" | |
69 | ))) | |
70 | ||
71 | (define_constraint "O" | |
72 | "The constant zero or one" | |
73 | (and (match_code "const_int") | |
74 | (match_test "((ival == 0) || (ival == 1))"))) | |
75 | ||
76 | (define_constraint "I" | |
77 | "A 16-bit signed constant (-32768..32767)" | |
78 | (and (match_code "const_int") | |
79 | (match_test "ival >= -32768 && ival <= 32767"))) | |
80 | ||
81 | (define_constraint "w" | |
82 | "A bitfield mask suitable for bext or bins" | |
83 | (and (match_code "const_int") | |
84 | (match_test "ft32_as_bitfield(ival) != -1"))) | |
85 | ||
86 | (define_constraint "x" | |
87 | "An inverted bitfield mask suitable for bext or bins" | |
88 | (and (match_code "const_int") | |
89 | (match_test "ft32_as_bitfield(0xffffffff ^ ival) != -1"))) | |
90 | ||
91 | (define_constraint "L" | |
92 | "A 16-bit unsigned constant, multiple of 4 (-65532..0)" | |
93 | (and (match_code "const_int") | |
94 | (match_test "-65532 <= ival && ival <= 0 && (ival & 3) == 0"))) | |
95 | ||
96 | (define_constraint "S" | |
97 | "A 20-bit signed constant (-524288..524287)" | |
98 | (ior | |
99 | (and (match_code "const_int") | |
100 | (match_test "ival >= -524288 && ival <= 524287")) | |
101 | (match_test "GET_CODE (op) == LABEL_REF") | |
102 | (match_test "GET_CODE (op) == SYMBOL_REF") | |
103 | (match_test "GET_CODE (op) == CONST"))) | |
104 | ||
105 | (define_constraint "b" | |
106 | "A constant for a bitfield width (1..16)" | |
107 | (and (match_code "const_int") | |
108 | (match_test "1 <= ival && ival <= 16"))) | |
109 | ||
110 | (define_constraint "KA" | |
111 | "A 10-bit signed constant (-512..511)" | |
112 | (and (match_code "const_int") | |
113 | (match_test "-512 <= ival && ival <= 511"))) |