Mercurial > hg > CbC > CbC_gcc
comparison gcc/config/mmix/constraints.md @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | |
children | 84e7813d76e9 |
comparison
equal
deleted
inserted
replaced
68:561a7518be6b | 111:04ced10e8804 |
---|---|
1 ;; MMIX constraints | |
2 ;; Copyright (C) 2012-2017 Free Software Foundation, Inc. | |
3 ;; | |
4 ;; This file is part of GCC. | |
5 ;; | |
6 ;; GCC is free software; you can redistribute it and/or modify it | |
7 ;; 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. | |
10 ;; | |
11 ;; GCC is distributed in the hope that it will be useful, but WITHOUT | |
12 ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY | |
13 ;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public | |
14 ;; License for more details. | |
15 ;; | |
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/>. */ | |
19 | |
20 (define_register_constraint "x" "SYSTEM_REGS" | |
21 "@internal") | |
22 | |
23 (define_register_constraint "y" "REMAINDER_REG" | |
24 "@internal") | |
25 | |
26 (define_register_constraint "z" "HIMULT_REG" | |
27 "@internal") | |
28 | |
29 (define_constraint "I" | |
30 "A 8-bit unsigned integer" | |
31 (and (match_code "const_int") | |
32 (match_test "IN_RANGE (ival, 0, 255)"))) | |
33 | |
34 (define_constraint "J" | |
35 "A 16-bit unsigned integer." | |
36 (and (match_code "const_int") | |
37 (match_test "IN_RANGE (ival, 0, 65535)"))) | |
38 | |
39 (define_constraint "K" | |
40 "An integer between -255 and 0." | |
41 (and (match_code "const_int") | |
42 (match_test "IN_RANGE (ival, -255, 0)"))) | |
43 | |
44 (define_constraint "L" | |
45 "@internal" | |
46 (and (match_code "const_int") | |
47 (match_test "mmix_shiftable_wyde_value (ival)"))) | |
48 | |
49 (define_constraint "M" | |
50 "The value 0." | |
51 (and (match_code "const_int") | |
52 (match_test "ival == 0"))) | |
53 | |
54 (define_constraint "N" | |
55 "@internal" | |
56 (and (match_code "const_int") | |
57 (match_test "mmix_shiftable_wyde_value (~ival)"))) | |
58 | |
59 (define_constraint "O" | |
60 "The value 3, 5, 9, or 17." | |
61 (and (match_code "const_int") | |
62 (ior (match_test "ival == 3") | |
63 (match_test "ival == 5") | |
64 (match_test "ival == 9") | |
65 (match_test "ival == 17")))) | |
66 | |
67 ;; FIXME: M (or G) is redundant. | |
68 | |
69 (define_constraint "G" | |
70 "Floating-point zero." | |
71 (and (match_code "const_double") | |
72 (match_test "op == CONST0_RTX (mode)"))) | |
73 | |
74 ;; R asks whether x is to be loaded with GETA or something else. Right | |
75 ;; now, only a SYMBOL_REF and LABEL_REF can fit for | |
76 ;; TARGET_BASE_ADDRESSES. | |
77 ;; | |
78 ;; Only constant symbolic addresses apply. With TARGET_BASE_ADDRESSES, | |
79 ;; we just allow straight LABEL_REF or SYMBOL_REFs with SYMBOL_REF_FLAG | |
80 ;; set right now; only function addresses and code labels. If we change | |
81 ;; to let SYMBOL_REF_FLAG be set on other symbols, we have to check | |
82 ;; inside CONST expressions. When TARGET_BASE_ADDRESSES is not in | |
83 ;; effect, a "raw" constant check together with mmix_constant_address_p | |
84 ;; is all that's needed; we want all constant addresses to be loaded | |
85 ;; with GETA then. | |
86 | |
87 (define_constraint "R" | |
88 "@internal" | |
89 (and (not (match_code "const_int,const_double")) | |
90 (match_test "mmix_constant_address_p (op)") | |
91 (ior (match_test "!TARGET_BASE_ADDRESSES") | |
92 (match_code "label_ref") | |
93 (and (match_code "symbol_ref") | |
94 (match_test "SYMBOL_REF_FLAG (op)"))))) | |
95 | |
96 ;; FIXME: L (or S) is redundant. | |
97 | |
98 (define_constraint "S" | |
99 "@internal" | |
100 (and (match_code "const_int,const_double") | |
101 (match_test "mmix_shiftable_wyde_value (mmix_intval (op))"))) | |
102 | |
103 ;; FIXME: N (or T) is redundant. | |
104 | |
105 (define_constraint "T" | |
106 "@internal" | |
107 (and (match_code "const_int,const_double") | |
108 (match_test "mmix_shiftable_wyde_value (~mmix_intval (op))"))) | |
109 | |
110 (define_address_constraint "U" | |
111 "@internal" | |
112 (match_operand 0 "mmix_address_operand")) | |
113 | |
114 (define_constraint "Yf" | |
115 "@internal" | |
116 (match_operand 0 "frame_pointer_operand")) |