annotate gcc/targhooks.c @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 /* Default target hook functions.
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2 Copyright (C) 2003-2020 Free Software Foundation, Inc.
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 This file is part of GCC.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 GCC is free software; you can redistribute it and/or modify it under
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 the terms of the GNU General Public License as published by the Free
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 Software Foundation; either version 3, or (at your option) any later
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 version.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 for more details.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 along with GCC; see the file COPYING3. If not see
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 <http://www.gnu.org/licenses/>. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 /* The migration of target macros to target hooks works as follows:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 1. Create a target hook that uses the existing target macros to
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 implement the same functionality.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 2. Convert all the MI files to use the hook instead of the macro.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 3. Repeat for a majority of the remaining target macros. This will
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 take some time.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 4. Tell target maintainers to start migrating.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 5. Eventually convert the backends to override the hook instead of
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 defining the macros. This will take some time too.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 6. TBD when, poison the macros. Unmigrated targets will break at
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 this point.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 Note that we expect steps 1-3 to be done by the people that
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 understand what the MI does with each macro, and step 5 to be done
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 by the target maintainers for their respective targets.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 Note that steps 1 and 2 don't have to be done together, but no
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 target can override the new hook until step 2 is complete for it.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 Once the macros are poisoned, we will revert to the old migration
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 rules - migrate the macro, callers, and targets all at once. This
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 comment can thus be removed at that point. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
48
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 #include "config.h"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 #include "system.h"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 #include "coretypes.h"
111
kono
parents: 67
diff changeset
52 #include "target.h"
kono
parents: 67
diff changeset
53 #include "function.h"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 #include "rtl.h"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 #include "tree.h"
111
kono
parents: 67
diff changeset
56 #include "tree-ssa-alias.h"
kono
parents: 67
diff changeset
57 #include "gimple-expr.h"
kono
parents: 67
diff changeset
58 #include "memmodel.h"
kono
parents: 67
diff changeset
59 #include "tm_p.h"
kono
parents: 67
diff changeset
60 #include "stringpool.h"
kono
parents: 67
diff changeset
61 #include "tree-vrp.h"
kono
parents: 67
diff changeset
62 #include "tree-ssanames.h"
kono
parents: 67
diff changeset
63 #include "profile-count.h"
kono
parents: 67
diff changeset
64 #include "optabs.h"
kono
parents: 67
diff changeset
65 #include "regs.h"
kono
parents: 67
diff changeset
66 #include "recog.h"
kono
parents: 67
diff changeset
67 #include "diagnostic-core.h"
kono
parents: 67
diff changeset
68 #include "fold-const.h"
kono
parents: 67
diff changeset
69 #include "stor-layout.h"
kono
parents: 67
diff changeset
70 #include "varasm.h"
kono
parents: 67
diff changeset
71 #include "flags.h"
kono
parents: 67
diff changeset
72 #include "explow.h"
kono
parents: 67
diff changeset
73 #include "calls.h"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 #include "expr.h"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 #include "output.h"
111
kono
parents: 67
diff changeset
76 #include "common/common-target.h"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 #include "reload.h"
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
78 #include "intl.h"
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
79 #include "opts.h"
111
kono
parents: 67
diff changeset
80 #include "gimplify.h"
kono
parents: 67
diff changeset
81 #include "predict.h"
kono
parents: 67
diff changeset
82 #include "real.h"
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
83 #include "langhooks.h"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
84 #include "sbitmap.h"
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
85 #include "function-abi.h"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
86
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
87 bool
111
kono
parents: 67
diff changeset
88 default_legitimate_address_p (machine_mode mode ATTRIBUTE_UNUSED,
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
89 rtx addr ATTRIBUTE_UNUSED,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
90 bool strict ATTRIBUTE_UNUSED)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
91 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
92 #ifdef GO_IF_LEGITIMATE_ADDRESS
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
93 /* Defer to the old implementation using a goto. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
94 if (strict)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
95 return strict_memory_address_p (mode, addr);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
96 else
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
97 return memory_address_p (mode, addr);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
98 #else
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
99 gcc_unreachable ();
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
100 #endif
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
101 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
102
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 void
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 default_external_libcall (rtx fun ATTRIBUTE_UNUSED)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 #ifdef ASM_OUTPUT_EXTERNAL_LIBCALL
111
kono
parents: 67
diff changeset
107 ASM_OUTPUT_EXTERNAL_LIBCALL (asm_out_file, fun);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 #endif
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
110
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 int
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 default_unspec_may_trap_p (const_rtx x, unsigned flags)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 int i;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
115
111
kono
parents: 67
diff changeset
116 /* Any floating arithmetic may trap. */
kono
parents: 67
diff changeset
117 if ((SCALAR_FLOAT_MODE_P (GET_MODE (x)) && flag_trapping_math))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 return 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
119
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 for (i = 0; i < XVECLEN (x, 0); ++i)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
121 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 if (may_trap_p_1 (XVECEXP (x, 0, i), flags))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 return 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
125
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 return 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
128
111
kono
parents: 67
diff changeset
129 machine_mode
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
130 default_promote_function_mode (const_tree type ATTRIBUTE_UNUSED,
111
kono
parents: 67
diff changeset
131 machine_mode mode,
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
132 int *punsignedp ATTRIBUTE_UNUSED,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
133 const_tree funtype ATTRIBUTE_UNUSED,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
134 int for_return ATTRIBUTE_UNUSED)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
135 {
111
kono
parents: 67
diff changeset
136 if (type != NULL_TREE && for_return == 2)
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
137 return promote_mode (type, mode, punsignedp);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
138 return mode;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
139 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
140
111
kono
parents: 67
diff changeset
141 machine_mode
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
142 default_promote_function_mode_always_promote (const_tree type,
111
kono
parents: 67
diff changeset
143 machine_mode mode,
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
144 int *punsignedp,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
145 const_tree funtype ATTRIBUTE_UNUSED,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
146 int for_return ATTRIBUTE_UNUSED)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
147 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
148 return promote_mode (type, mode, punsignedp);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
149 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
150
111
kono
parents: 67
diff changeset
151 machine_mode
kono
parents: 67
diff changeset
152 default_cc_modes_compatible (machine_mode m1, machine_mode m2)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
153 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
154 if (m1 == m2)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
155 return m1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
156 return VOIDmode;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
157 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
158
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
159 bool
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
160 default_return_in_memory (const_tree type,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
161 const_tree fntype ATTRIBUTE_UNUSED)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
162 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
163 return (TYPE_MODE (type) == BLKmode);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
164 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
165
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
166 rtx
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
167 default_legitimize_address (rtx x, rtx orig_x ATTRIBUTE_UNUSED,
111
kono
parents: 67
diff changeset
168 machine_mode mode ATTRIBUTE_UNUSED)
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
169 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
170 return x;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
171 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
172
111
kono
parents: 67
diff changeset
173 bool
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
174 default_legitimize_address_displacement (rtx *, rtx *, poly_int64,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
175 machine_mode)
111
kono
parents: 67
diff changeset
176 {
kono
parents: 67
diff changeset
177 return false;
kono
parents: 67
diff changeset
178 }
kono
parents: 67
diff changeset
179
kono
parents: 67
diff changeset
180 bool
kono
parents: 67
diff changeset
181 default_const_not_ok_for_debug_p (rtx x)
kono
parents: 67
diff changeset
182 {
kono
parents: 67
diff changeset
183 if (GET_CODE (x) == UNSPEC)
kono
parents: 67
diff changeset
184 return true;
kono
parents: 67
diff changeset
185 return false;
kono
parents: 67
diff changeset
186 }
kono
parents: 67
diff changeset
187
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
188 rtx
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
189 default_expand_builtin_saveregs (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
190 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
191 error ("%<__builtin_saveregs%> not supported by this target");
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
192 return const0_rtx;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
193 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
194
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
195 void
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
196 default_setup_incoming_varargs (cumulative_args_t,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
197 const function_arg_info &, int *, int)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
198 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
199 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
200
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
201 /* The default implementation of TARGET_BUILTIN_SETJMP_FRAME_VALUE. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
202
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
203 rtx
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
204 default_builtin_setjmp_frame_value (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
205 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
206 return virtual_stack_vars_rtx;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
207 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
208
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
209 /* Generic hook that takes a CUMULATIVE_ARGS pointer and returns false. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
210
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
211 bool
111
kono
parents: 67
diff changeset
212 hook_bool_CUMULATIVE_ARGS_false (cumulative_args_t ca ATTRIBUTE_UNUSED)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
213 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
214 return false;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
215 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
216
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
217 bool
111
kono
parents: 67
diff changeset
218 default_pretend_outgoing_varargs_named (cumulative_args_t ca ATTRIBUTE_UNUSED)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
219 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
220 return (targetm.calls.setup_incoming_varargs
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
221 != default_setup_incoming_varargs);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
222 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
223
111
kono
parents: 67
diff changeset
224 scalar_int_mode
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
225 default_eh_return_filter_mode (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
226 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
227 return targetm.unwind_word_mode ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
228 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
229
111
kono
parents: 67
diff changeset
230 scalar_int_mode
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
231 default_libgcc_cmp_return_mode (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
232 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
233 return word_mode;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
234 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
235
111
kono
parents: 67
diff changeset
236 scalar_int_mode
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
237 default_libgcc_shift_count_mode (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
238 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
239 return word_mode;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
240 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
241
111
kono
parents: 67
diff changeset
242 scalar_int_mode
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
243 default_unwind_word_mode (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
244 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
245 return word_mode;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
246 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
247
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
248 /* The default implementation of TARGET_SHIFT_TRUNCATION_MASK. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
249
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
250 unsigned HOST_WIDE_INT
111
kono
parents: 67
diff changeset
251 default_shift_truncation_mask (machine_mode mode)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
252 {
111
kono
parents: 67
diff changeset
253 return SHIFT_COUNT_TRUNCATED ? GET_MODE_UNIT_BITSIZE (mode) - 1 : 0;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
254 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
255
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
256 /* The default implementation of TARGET_MIN_DIVISIONS_FOR_RECIP_MUL. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
257
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
258 unsigned int
111
kono
parents: 67
diff changeset
259 default_min_divisions_for_recip_mul (machine_mode mode ATTRIBUTE_UNUSED)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
260 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
261 return have_insn_for (DIV, mode) ? 3 : 2;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
262 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
263
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
264 /* The default implementation of TARGET_MODE_REP_EXTENDED. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
265
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
266 int
111
kono
parents: 67
diff changeset
267 default_mode_rep_extended (scalar_int_mode, scalar_int_mode)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
268 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
269 return UNKNOWN;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
270 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
271
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
272 /* Generic hook that takes a CUMULATIVE_ARGS pointer and returns true. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
273
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
274 bool
111
kono
parents: 67
diff changeset
275 hook_bool_CUMULATIVE_ARGS_true (cumulative_args_t a ATTRIBUTE_UNUSED)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
276 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
277 return true;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
278 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
279
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
280 /* Return machine mode for non-standard suffix
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
281 or VOIDmode if non-standard suffixes are unsupported. */
111
kono
parents: 67
diff changeset
282 machine_mode
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
283 default_mode_for_suffix (char suffix ATTRIBUTE_UNUSED)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
284 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
285 return VOIDmode;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
286 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
287
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
288 /* The generic C++ ABI specifies this is a 64-bit value. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
289 tree
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
290 default_cxx_guard_type (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
291 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
292 return long_long_integer_type_node;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
293 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
294
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
295 /* Returns the size of the cookie to use when allocating an array
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
296 whose elements have the indicated TYPE. Assumes that it is already
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
297 known that a cookie is needed. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
298
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
299 tree
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
300 default_cxx_get_cookie_size (tree type)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
301 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
302 tree cookie_size;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
303
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
304 /* We need to allocate an additional max (sizeof (size_t), alignof
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
305 (true_type)) bytes. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
306 tree sizetype_size;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
307 tree type_align;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
308
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
309 sizetype_size = size_in_bytes (sizetype);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
310 type_align = size_int (TYPE_ALIGN_UNIT (type));
111
kono
parents: 67
diff changeset
311 if (tree_int_cst_lt (type_align, sizetype_size))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
312 cookie_size = sizetype_size;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
313 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
314 cookie_size = type_align;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
315
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
316 return cookie_size;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
317 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
318
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
319 /* Return true if a parameter must be passed by reference. This version
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
320 of the TARGET_PASS_BY_REFERENCE hook uses just MUST_PASS_IN_STACK. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
321
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
322 bool
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
323 hook_pass_by_reference_must_pass_in_stack (cumulative_args_t,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
324 const function_arg_info &arg)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
325 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
326 return targetm.calls.must_pass_in_stack (arg);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
327 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
328
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
329 /* Return true if a parameter follows callee copies conventions. This
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
330 version of the hook is true for all named arguments. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
331
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
332 bool
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
333 hook_callee_copies_named (cumulative_args_t, const function_arg_info &arg)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
334 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
335 return arg.named;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
336 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
337
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
338 /* Emit to STREAM the assembler syntax for insn operand X. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
339
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
340 void
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
341 default_print_operand (FILE *stream ATTRIBUTE_UNUSED, rtx x ATTRIBUTE_UNUSED,
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
342 int code ATTRIBUTE_UNUSED)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
343 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
344 #ifdef PRINT_OPERAND
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
345 PRINT_OPERAND (stream, x, code);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
346 #else
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
347 gcc_unreachable ();
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
348 #endif
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
349 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
350
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
351 /* Emit to STREAM the assembler syntax for an insn operand whose memory
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
352 address is X. */
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
353
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
354 void
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
355 default_print_operand_address (FILE *stream ATTRIBUTE_UNUSED,
111
kono
parents: 67
diff changeset
356 machine_mode /*mode*/,
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
357 rtx x ATTRIBUTE_UNUSED)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
358 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
359 #ifdef PRINT_OPERAND_ADDRESS
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
360 PRINT_OPERAND_ADDRESS (stream, x);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
361 #else
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
362 gcc_unreachable ();
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
363 #endif
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
364 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
365
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
366 /* Return true if CODE is a valid punctuation character for the
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
367 `print_operand' hook. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
368
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
369 bool
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
370 default_print_operand_punct_valid_p (unsigned char code ATTRIBUTE_UNUSED)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
371 {
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
372 #ifdef PRINT_OPERAND_PUNCT_VALID_P
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
373 return PRINT_OPERAND_PUNCT_VALID_P (code);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
374 #else
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
375 return false;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
376 #endif
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
377 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
378
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
379 /* The default implementation of TARGET_MANGLE_ASSEMBLER_NAME. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
380 tree
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
381 default_mangle_assembler_name (const char *name ATTRIBUTE_UNUSED)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
382 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
383 const char *skipped = name + (*name == '*' ? 1 : 0);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
384 const char *stripped = targetm.strip_name_encoding (skipped);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
385 if (*name != '*' && user_label_prefix[0])
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
386 stripped = ACONCAT ((user_label_prefix, stripped, NULL));
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
387 return get_identifier (stripped);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
388 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
389
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
390 /* The default implementation of TARGET_TRANSLATE_MODE_ATTRIBUTE. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
391
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
392 machine_mode
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
393 default_translate_mode_attribute (machine_mode mode)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
394 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
395 return mode;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
396 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
397
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
398 /* True if MODE is valid for the target. By "valid", we mean able to
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
399 be manipulated in non-trivial ways. In particular, this means all
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
400 the arithmetic is supported.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
401
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
402 By default we guess this means that any C type is supported. If
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
403 we can't map the mode back to a type that would be available in C,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
404 then reject it. Special case, here, is the double-word arithmetic
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
405 supported by optabs.c. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
406
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
407 bool
111
kono
parents: 67
diff changeset
408 default_scalar_mode_supported_p (scalar_mode mode)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
409 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
410 int precision = GET_MODE_PRECISION (mode);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
411
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
412 switch (GET_MODE_CLASS (mode))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
413 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
414 case MODE_PARTIAL_INT:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
415 case MODE_INT:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
416 if (precision == CHAR_TYPE_SIZE)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
417 return true;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
418 if (precision == SHORT_TYPE_SIZE)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
419 return true;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
420 if (precision == INT_TYPE_SIZE)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
421 return true;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
422 if (precision == LONG_TYPE_SIZE)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
423 return true;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
424 if (precision == LONG_LONG_TYPE_SIZE)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
425 return true;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
426 if (precision == 2 * BITS_PER_WORD)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
427 return true;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
428 return false;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
429
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
430 case MODE_FLOAT:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
431 if (precision == FLOAT_TYPE_SIZE)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
432 return true;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
433 if (precision == DOUBLE_TYPE_SIZE)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
434 return true;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
435 if (precision == LONG_DOUBLE_TYPE_SIZE)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
436 return true;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
437 return false;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
438
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
439 case MODE_DECIMAL_FLOAT:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
440 case MODE_FRACT:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
441 case MODE_UFRACT:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
442 case MODE_ACCUM:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
443 case MODE_UACCUM:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
444 return false;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
445
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
446 default:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
447 gcc_unreachable ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
448 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
449 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
450
111
kono
parents: 67
diff changeset
451 /* Return true if libgcc supports floating-point mode MODE (known to
kono
parents: 67
diff changeset
452 be supported as a scalar mode). */
kono
parents: 67
diff changeset
453
kono
parents: 67
diff changeset
454 bool
kono
parents: 67
diff changeset
455 default_libgcc_floating_mode_supported_p (scalar_float_mode mode)
kono
parents: 67
diff changeset
456 {
kono
parents: 67
diff changeset
457 switch (mode)
kono
parents: 67
diff changeset
458 {
kono
parents: 67
diff changeset
459 #ifdef HAVE_SFmode
kono
parents: 67
diff changeset
460 case E_SFmode:
kono
parents: 67
diff changeset
461 #endif
kono
parents: 67
diff changeset
462 #ifdef HAVE_DFmode
kono
parents: 67
diff changeset
463 case E_DFmode:
kono
parents: 67
diff changeset
464 #endif
kono
parents: 67
diff changeset
465 #ifdef HAVE_XFmode
kono
parents: 67
diff changeset
466 case E_XFmode:
kono
parents: 67
diff changeset
467 #endif
kono
parents: 67
diff changeset
468 #ifdef HAVE_TFmode
kono
parents: 67
diff changeset
469 case E_TFmode:
kono
parents: 67
diff changeset
470 #endif
kono
parents: 67
diff changeset
471 return true;
kono
parents: 67
diff changeset
472
kono
parents: 67
diff changeset
473 default:
kono
parents: 67
diff changeset
474 return false;
kono
parents: 67
diff changeset
475 }
kono
parents: 67
diff changeset
476 }
kono
parents: 67
diff changeset
477
kono
parents: 67
diff changeset
478 /* Return the machine mode to use for the type _FloatN, if EXTENDED is
kono
parents: 67
diff changeset
479 false, or _FloatNx, if EXTENDED is true, or VOIDmode if not
kono
parents: 67
diff changeset
480 supported. */
kono
parents: 67
diff changeset
481 opt_scalar_float_mode
kono
parents: 67
diff changeset
482 default_floatn_mode (int n, bool extended)
kono
parents: 67
diff changeset
483 {
kono
parents: 67
diff changeset
484 if (extended)
kono
parents: 67
diff changeset
485 {
kono
parents: 67
diff changeset
486 opt_scalar_float_mode cand1, cand2;
kono
parents: 67
diff changeset
487 scalar_float_mode mode;
kono
parents: 67
diff changeset
488 switch (n)
kono
parents: 67
diff changeset
489 {
kono
parents: 67
diff changeset
490 case 32:
kono
parents: 67
diff changeset
491 #ifdef HAVE_DFmode
kono
parents: 67
diff changeset
492 cand1 = DFmode;
kono
parents: 67
diff changeset
493 #endif
kono
parents: 67
diff changeset
494 break;
kono
parents: 67
diff changeset
495
kono
parents: 67
diff changeset
496 case 64:
kono
parents: 67
diff changeset
497 #ifdef HAVE_XFmode
kono
parents: 67
diff changeset
498 cand1 = XFmode;
kono
parents: 67
diff changeset
499 #endif
kono
parents: 67
diff changeset
500 #ifdef HAVE_TFmode
kono
parents: 67
diff changeset
501 cand2 = TFmode;
kono
parents: 67
diff changeset
502 #endif
kono
parents: 67
diff changeset
503 break;
kono
parents: 67
diff changeset
504
kono
parents: 67
diff changeset
505 case 128:
kono
parents: 67
diff changeset
506 break;
kono
parents: 67
diff changeset
507
kono
parents: 67
diff changeset
508 default:
kono
parents: 67
diff changeset
509 /* Those are the only valid _FloatNx types. */
kono
parents: 67
diff changeset
510 gcc_unreachable ();
kono
parents: 67
diff changeset
511 }
kono
parents: 67
diff changeset
512 if (cand1.exists (&mode)
kono
parents: 67
diff changeset
513 && REAL_MODE_FORMAT (mode)->ieee_bits > n
kono
parents: 67
diff changeset
514 && targetm.scalar_mode_supported_p (mode)
kono
parents: 67
diff changeset
515 && targetm.libgcc_floating_mode_supported_p (mode))
kono
parents: 67
diff changeset
516 return cand1;
kono
parents: 67
diff changeset
517 if (cand2.exists (&mode)
kono
parents: 67
diff changeset
518 && REAL_MODE_FORMAT (mode)->ieee_bits > n
kono
parents: 67
diff changeset
519 && targetm.scalar_mode_supported_p (mode)
kono
parents: 67
diff changeset
520 && targetm.libgcc_floating_mode_supported_p (mode))
kono
parents: 67
diff changeset
521 return cand2;
kono
parents: 67
diff changeset
522 }
kono
parents: 67
diff changeset
523 else
kono
parents: 67
diff changeset
524 {
kono
parents: 67
diff changeset
525 opt_scalar_float_mode cand;
kono
parents: 67
diff changeset
526 scalar_float_mode mode;
kono
parents: 67
diff changeset
527 switch (n)
kono
parents: 67
diff changeset
528 {
kono
parents: 67
diff changeset
529 case 16:
kono
parents: 67
diff changeset
530 /* Always enable _Float16 if we have basic support for the mode.
kono
parents: 67
diff changeset
531 Targets can control the range and precision of operations on
kono
parents: 67
diff changeset
532 the _Float16 type using TARGET_C_EXCESS_PRECISION. */
kono
parents: 67
diff changeset
533 #ifdef HAVE_HFmode
kono
parents: 67
diff changeset
534 cand = HFmode;
kono
parents: 67
diff changeset
535 #endif
kono
parents: 67
diff changeset
536 break;
kono
parents: 67
diff changeset
537
kono
parents: 67
diff changeset
538 case 32:
kono
parents: 67
diff changeset
539 #ifdef HAVE_SFmode
kono
parents: 67
diff changeset
540 cand = SFmode;
kono
parents: 67
diff changeset
541 #endif
kono
parents: 67
diff changeset
542 break;
kono
parents: 67
diff changeset
543
kono
parents: 67
diff changeset
544 case 64:
kono
parents: 67
diff changeset
545 #ifdef HAVE_DFmode
kono
parents: 67
diff changeset
546 cand = DFmode;
kono
parents: 67
diff changeset
547 #endif
kono
parents: 67
diff changeset
548 break;
kono
parents: 67
diff changeset
549
kono
parents: 67
diff changeset
550 case 128:
kono
parents: 67
diff changeset
551 #ifdef HAVE_TFmode
kono
parents: 67
diff changeset
552 cand = TFmode;
kono
parents: 67
diff changeset
553 #endif
kono
parents: 67
diff changeset
554 break;
kono
parents: 67
diff changeset
555
kono
parents: 67
diff changeset
556 default:
kono
parents: 67
diff changeset
557 break;
kono
parents: 67
diff changeset
558 }
kono
parents: 67
diff changeset
559 if (cand.exists (&mode)
kono
parents: 67
diff changeset
560 && REAL_MODE_FORMAT (mode)->ieee_bits == n
kono
parents: 67
diff changeset
561 && targetm.scalar_mode_supported_p (mode)
kono
parents: 67
diff changeset
562 && targetm.libgcc_floating_mode_supported_p (mode))
kono
parents: 67
diff changeset
563 return cand;
kono
parents: 67
diff changeset
564 }
kono
parents: 67
diff changeset
565 return opt_scalar_float_mode ();
kono
parents: 67
diff changeset
566 }
kono
parents: 67
diff changeset
567
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
568 /* Define this to return true if the _Floatn and _Floatnx built-in functions
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
569 should implicitly enable the built-in function without the __builtin_ prefix
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
570 in addition to the normal built-in function with the __builtin_ prefix. The
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
571 default is to only enable built-in functions without the __builtin_ prefix
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
572 for the GNU C langauge. The argument FUNC is the enum builtin_in_function
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
573 id of the function to be enabled. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
574
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
575 bool
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
576 default_floatn_builtin_p (int func ATTRIBUTE_UNUSED)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
577 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
578 static bool first_time_p = true;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
579 static bool c_or_objective_c;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
580
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
581 if (first_time_p)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
582 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
583 first_time_p = false;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
584 c_or_objective_c = lang_GNU_C () || lang_GNU_OBJC ();
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
585 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
586
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
587 return c_or_objective_c;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
588 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
589
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
590 /* Make some target macros useable by target-independent code. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
591 bool
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
592 targhook_words_big_endian (void)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
593 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
594 return !!WORDS_BIG_ENDIAN;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
595 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
596
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
597 bool
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
598 targhook_float_words_big_endian (void)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
599 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
600 return !!FLOAT_WORDS_BIG_ENDIAN;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
601 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
602
111
kono
parents: 67
diff changeset
603 /* True if the target supports floating-point exceptions and rounding
kono
parents: 67
diff changeset
604 modes. */
kono
parents: 67
diff changeset
605
kono
parents: 67
diff changeset
606 bool
kono
parents: 67
diff changeset
607 default_float_exceptions_rounding_supported_p (void)
kono
parents: 67
diff changeset
608 {
kono
parents: 67
diff changeset
609 #ifdef HAVE_adddf3
kono
parents: 67
diff changeset
610 return HAVE_adddf3;
kono
parents: 67
diff changeset
611 #else
kono
parents: 67
diff changeset
612 return false;
kono
parents: 67
diff changeset
613 #endif
kono
parents: 67
diff changeset
614 }
kono
parents: 67
diff changeset
615
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
616 /* True if the target supports decimal floating point. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
617
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
618 bool
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
619 default_decimal_float_supported_p (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
620 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
621 return ENABLE_DECIMAL_FLOAT;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
622 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
623
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
624 /* True if the target supports fixed-point arithmetic. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
625
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
626 bool
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
627 default_fixed_point_supported_p (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
628 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
629 return ENABLE_FIXED_POINT;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
630 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
631
111
kono
parents: 67
diff changeset
632 /* True if the target supports GNU indirect functions. */
kono
parents: 67
diff changeset
633
kono
parents: 67
diff changeset
634 bool
kono
parents: 67
diff changeset
635 default_has_ifunc_p (void)
kono
parents: 67
diff changeset
636 {
kono
parents: 67
diff changeset
637 return HAVE_GNU_INDIRECT_FUNCTION;
kono
parents: 67
diff changeset
638 }
kono
parents: 67
diff changeset
639
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
640 /* Return true if we predict the loop LOOP will be transformed to a
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
641 low-overhead loop, otherwise return false.
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
642
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
643 By default, false is returned, as this hook's applicability should be
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
644 verified for each target. Target maintainers should re-define the hook
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
645 if the target can take advantage of it. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
646
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
647 bool
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
648 default_predict_doloop_p (class loop *loop ATTRIBUTE_UNUSED)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
649 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
650 return false;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
651 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
652
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
653 /* NULL if INSN insn is valid within a low-overhead loop, otherwise returns
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
654 an error message.
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
655
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
656 This function checks whether a given INSN is valid within a low-overhead
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
657 loop. If INSN is invalid it returns the reason for that, otherwise it
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
658 returns NULL. A called function may clobber any special registers required
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
659 for low-overhead looping. Additionally, some targets (eg, PPC) use the count
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
660 register for branch on table instructions. We reject the doloop pattern in
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
661 these cases. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
662
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
663 const char *
111
kono
parents: 67
diff changeset
664 default_invalid_within_doloop (const rtx_insn *insn)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
665 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
666 if (CALL_P (insn))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
667 return "Function call in loop.";
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
668
111
kono
parents: 67
diff changeset
669 if (tablejump_p (insn, NULL, NULL) || computed_jump_p (insn))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
670 return "Computed branch in the loop.";
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
671
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
672 return NULL;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
673 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
674
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
675 /* Mapping of builtin functions to vectorized variants. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
676
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
677 tree
111
kono
parents: 67
diff changeset
678 default_builtin_vectorized_function (unsigned int, tree, tree)
kono
parents: 67
diff changeset
679 {
kono
parents: 67
diff changeset
680 return NULL_TREE;
kono
parents: 67
diff changeset
681 }
kono
parents: 67
diff changeset
682
kono
parents: 67
diff changeset
683 /* Mapping of target builtin functions to vectorized variants. */
kono
parents: 67
diff changeset
684
kono
parents: 67
diff changeset
685 tree
kono
parents: 67
diff changeset
686 default_builtin_md_vectorized_function (tree, tree, tree)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
687 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
688 return NULL_TREE;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
689 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
690
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
691 /* Default vectorizer cost model values. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
692
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
693 int
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
694 default_builtin_vectorization_cost (enum vect_cost_for_stmt type_of_cost,
111
kono
parents: 67
diff changeset
695 tree vectype,
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
696 int misalign ATTRIBUTE_UNUSED)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
697 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
698 switch (type_of_cost)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
699 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
700 case scalar_stmt:
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
701 case scalar_load:
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
702 case scalar_store:
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
703 case vector_stmt:
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
704 case vector_load:
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
705 case vector_store:
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
706 case vec_to_scalar:
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
707 case scalar_to_vec:
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
708 case cond_branch_not_taken:
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
709 case vec_perm:
111
kono
parents: 67
diff changeset
710 case vec_promote_demote:
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
711 return 1;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
712
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
713 case unaligned_load:
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
714 case unaligned_store:
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
715 return 2;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
716
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
717 case cond_branch_taken:
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
718 return 3;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
719
111
kono
parents: 67
diff changeset
720 case vec_construct:
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
721 return estimated_poly_value (TYPE_VECTOR_SUBPARTS (vectype)) - 1;
111
kono
parents: 67
diff changeset
722
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
723 default:
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
724 gcc_unreachable ();
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
725 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
726 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
727
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
728 /* Reciprocal. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
729
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
730 tree
111
kono
parents: 67
diff changeset
731 default_builtin_reciprocal (tree)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
732 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
733 return NULL_TREE;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
734 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
735
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
736 bool
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
737 hook_bool_CUMULATIVE_ARGS_arg_info_false (cumulative_args_t,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
738 const function_arg_info &)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
739 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
740 return false;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
741 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
742
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
743 bool
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
744 hook_bool_CUMULATIVE_ARGS_arg_info_true (cumulative_args_t,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
745 const function_arg_info &)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
746 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
747 return true;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
748 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
749
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
750 int
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
751 hook_int_CUMULATIVE_ARGS_arg_info_0 (cumulative_args_t,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
752 const function_arg_info &)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
753 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
754 return 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
755 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
756
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
757 void
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
758 hook_void_CUMULATIVE_ARGS_tree (cumulative_args_t ca ATTRIBUTE_UNUSED,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
759 tree ATTRIBUTE_UNUSED)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
760 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
761 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
762
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
763 void
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
764 default_function_arg_advance (cumulative_args_t, const function_arg_info &)
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
765 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
766 gcc_unreachable ();
111
kono
parents: 67
diff changeset
767 }
kono
parents: 67
diff changeset
768
kono
parents: 67
diff changeset
769 /* Default implementation of TARGET_FUNCTION_ARG_OFFSET. */
kono
parents: 67
diff changeset
770
kono
parents: 67
diff changeset
771 HOST_WIDE_INT
kono
parents: 67
diff changeset
772 default_function_arg_offset (machine_mode, const_tree)
kono
parents: 67
diff changeset
773 {
kono
parents: 67
diff changeset
774 return 0;
kono
parents: 67
diff changeset
775 }
kono
parents: 67
diff changeset
776
kono
parents: 67
diff changeset
777 /* Default implementation of TARGET_FUNCTION_ARG_PADDING: usually pad
kono
parents: 67
diff changeset
778 upward, but pad short args downward on big-endian machines. */
kono
parents: 67
diff changeset
779
kono
parents: 67
diff changeset
780 pad_direction
kono
parents: 67
diff changeset
781 default_function_arg_padding (machine_mode mode, const_tree type)
kono
parents: 67
diff changeset
782 {
kono
parents: 67
diff changeset
783 if (!BYTES_BIG_ENDIAN)
kono
parents: 67
diff changeset
784 return PAD_UPWARD;
kono
parents: 67
diff changeset
785
kono
parents: 67
diff changeset
786 unsigned HOST_WIDE_INT size;
kono
parents: 67
diff changeset
787 if (mode == BLKmode)
kono
parents: 67
diff changeset
788 {
kono
parents: 67
diff changeset
789 if (!type || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
kono
parents: 67
diff changeset
790 return PAD_UPWARD;
kono
parents: 67
diff changeset
791 size = int_size_in_bytes (type);
kono
parents: 67
diff changeset
792 }
kono
parents: 67
diff changeset
793 else
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
794 /* Targets with variable-sized modes must override this hook
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
795 and handle variable-sized modes explicitly. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
796 size = GET_MODE_SIZE (mode).to_constant ();
111
kono
parents: 67
diff changeset
797
kono
parents: 67
diff changeset
798 if (size < (PARM_BOUNDARY / BITS_PER_UNIT))
kono
parents: 67
diff changeset
799 return PAD_DOWNWARD;
kono
parents: 67
diff changeset
800
kono
parents: 67
diff changeset
801 return PAD_UPWARD;
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
802 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
803
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
804 rtx
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
805 default_function_arg (cumulative_args_t, const function_arg_info &)
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
806 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
807 gcc_unreachable ();
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
808 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
809
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
810 rtx
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
811 default_function_incoming_arg (cumulative_args_t, const function_arg_info &)
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
812 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
813 gcc_unreachable ();
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
814 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
815
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
816 unsigned int
111
kono
parents: 67
diff changeset
817 default_function_arg_boundary (machine_mode mode ATTRIBUTE_UNUSED,
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
818 const_tree type ATTRIBUTE_UNUSED)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
819 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
820 return PARM_BOUNDARY;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
821 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
822
111
kono
parents: 67
diff changeset
823 unsigned int
kono
parents: 67
diff changeset
824 default_function_arg_round_boundary (machine_mode mode ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
825 const_tree type ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
826 {
kono
parents: 67
diff changeset
827 return PARM_BOUNDARY;
kono
parents: 67
diff changeset
828 }
kono
parents: 67
diff changeset
829
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
830 void
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
831 hook_void_bitmap (bitmap regs ATTRIBUTE_UNUSED)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
832 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
833 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
834
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
835 const char *
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
836 hook_invalid_arg_for_unprototyped_fn (
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
837 const_tree typelist ATTRIBUTE_UNUSED,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
838 const_tree funcdecl ATTRIBUTE_UNUSED,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
839 const_tree val ATTRIBUTE_UNUSED)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
840 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
841 return NULL;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
842 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
843
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
844 /* Initialize the stack protection decls. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
845
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
846 /* Stack protection related decls living in libgcc. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
847 static GTY(()) tree stack_chk_guard_decl;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
848
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
849 tree
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
850 default_stack_protect_guard (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
851 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
852 tree t = stack_chk_guard_decl;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
853
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
854 if (t == NULL)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
855 {
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
856 rtx x;
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
857
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
858 t = build_decl (UNKNOWN_LOCATION,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
859 VAR_DECL, get_identifier ("__stack_chk_guard"),
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
860 ptr_type_node);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
861 TREE_STATIC (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
862 TREE_PUBLIC (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
863 DECL_EXTERNAL (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
864 TREE_USED (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
865 TREE_THIS_VOLATILE (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
866 DECL_ARTIFICIAL (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
867 DECL_IGNORED_P (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
868
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
869 /* Do not share RTL as the declaration is visible outside of
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
870 current function. */
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
871 x = DECL_RTL (t);
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
872 RTX_FLAG (x, used) = 1;
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
873
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
874 stack_chk_guard_decl = t;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
875 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
876
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
877 return t;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
878 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
879
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
880 static GTY(()) tree stack_chk_fail_decl;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
881
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
882 tree
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
883 default_external_stack_protect_fail (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
884 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
885 tree t = stack_chk_fail_decl;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
886
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
887 if (t == NULL_TREE)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
888 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
889 t = build_function_type_list (void_type_node, NULL_TREE);
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
890 t = build_decl (UNKNOWN_LOCATION,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
891 FUNCTION_DECL, get_identifier ("__stack_chk_fail"), t);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
892 TREE_STATIC (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
893 TREE_PUBLIC (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
894 DECL_EXTERNAL (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
895 TREE_USED (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
896 TREE_THIS_VOLATILE (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
897 TREE_NOTHROW (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
898 DECL_ARTIFICIAL (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
899 DECL_IGNORED_P (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
900 DECL_VISIBILITY (t) = VISIBILITY_DEFAULT;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
901 DECL_VISIBILITY_SPECIFIED (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
902
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
903 stack_chk_fail_decl = t;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
904 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
905
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
906 return build_call_expr (t, 0);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
907 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
908
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
909 tree
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
910 default_hidden_stack_protect_fail (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
911 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
912 #ifndef HAVE_GAS_HIDDEN
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
913 return default_external_stack_protect_fail ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
914 #else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
915 tree t = stack_chk_fail_decl;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
916
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
917 if (!flag_pic)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
918 return default_external_stack_protect_fail ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
919
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
920 if (t == NULL_TREE)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
921 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
922 t = build_function_type_list (void_type_node, NULL_TREE);
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
923 t = build_decl (UNKNOWN_LOCATION, FUNCTION_DECL,
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
924 get_identifier ("__stack_chk_fail_local"), t);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
925 TREE_STATIC (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
926 TREE_PUBLIC (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
927 DECL_EXTERNAL (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
928 TREE_USED (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
929 TREE_THIS_VOLATILE (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
930 TREE_NOTHROW (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
931 DECL_ARTIFICIAL (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
932 DECL_IGNORED_P (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
933 DECL_VISIBILITY_SPECIFIED (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
934 DECL_VISIBILITY (t) = VISIBILITY_HIDDEN;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
935
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
936 stack_chk_fail_decl = t;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
937 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
938
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
939 return build_call_expr (t, 0);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
940 #endif
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
941 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
942
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
943 bool
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
944 hook_bool_const_rtx_commutative_p (const_rtx x,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
945 int outer_code ATTRIBUTE_UNUSED)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
946 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
947 return COMMUTATIVE_P (x);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
948 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
949
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
950 rtx
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
951 default_function_value (const_tree ret_type ATTRIBUTE_UNUSED,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
952 const_tree fn_decl_or_type,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
953 bool outgoing ATTRIBUTE_UNUSED)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
954 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
955 /* The old interface doesn't handle receiving the function type. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
956 if (fn_decl_or_type
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
957 && !DECL_P (fn_decl_or_type))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
958 fn_decl_or_type = NULL;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
959
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
960 #ifdef FUNCTION_VALUE
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
961 return FUNCTION_VALUE (ret_type, fn_decl_or_type);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
962 #else
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
963 gcc_unreachable ();
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
964 #endif
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
965 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
966
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
967 rtx
111
kono
parents: 67
diff changeset
968 default_libcall_value (machine_mode mode ATTRIBUTE_UNUSED,
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
969 const_rtx fun ATTRIBUTE_UNUSED)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
970 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
971 #ifdef LIBCALL_VALUE
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
972 return LIBCALL_VALUE (MACRO_MODE (mode));
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
973 #else
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
974 gcc_unreachable ();
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
975 #endif
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
976 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
977
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
978 /* The default hook for TARGET_FUNCTION_VALUE_REGNO_P. */
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
979
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
980 bool
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
981 default_function_value_regno_p (const unsigned int regno ATTRIBUTE_UNUSED)
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
982 {
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
983 #ifdef FUNCTION_VALUE_REGNO_P
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
984 return FUNCTION_VALUE_REGNO_P (regno);
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
985 #else
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
986 gcc_unreachable ();
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
987 #endif
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
988 }
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
989
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
990 rtx
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
991 default_internal_arg_pointer (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
992 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
993 /* If the reg that the virtual arg pointer will be translated into is
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
994 not a fixed reg or is the stack pointer, make a copy of the virtual
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
995 arg pointer, and address parms via the copy. The frame pointer is
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
996 considered fixed even though it is not marked as such. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
997 if ((ARG_POINTER_REGNUM == STACK_POINTER_REGNUM
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
998 || ! (fixed_regs[ARG_POINTER_REGNUM]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
999 || ARG_POINTER_REGNUM == FRAME_POINTER_REGNUM)))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1000 return copy_to_reg (virtual_incoming_args_rtx);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1001 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1002 return virtual_incoming_args_rtx;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1003 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1004
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1005 rtx
111
kono
parents: 67
diff changeset
1006 default_static_chain (const_tree ARG_UNUSED (fndecl_or_type), bool incoming_p)
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1007 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1008 if (incoming_p)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1009 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1010 #ifdef STATIC_CHAIN_INCOMING_REGNUM
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1011 return gen_rtx_REG (Pmode, STATIC_CHAIN_INCOMING_REGNUM);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1012 #endif
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1013 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1014
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1015 #ifdef STATIC_CHAIN_REGNUM
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1016 return gen_rtx_REG (Pmode, STATIC_CHAIN_REGNUM);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1017 #endif
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1018
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1019 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1020 static bool issued_error;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1021 if (!issued_error)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1022 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1023 issued_error = true;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1024 sorry ("nested functions not supported on this target");
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1025 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1026
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1027 /* It really doesn't matter what we return here, so long at it
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1028 doesn't cause the rest of the compiler to crash. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1029 return gen_rtx_MEM (Pmode, stack_pointer_rtx);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1030 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1031 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1032
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1033 void
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1034 default_trampoline_init (rtx ARG_UNUSED (m_tramp), tree ARG_UNUSED (t_func),
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1035 rtx ARG_UNUSED (r_chain))
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1036 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1037 sorry ("nested function trampolines not supported on this target");
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1038 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1039
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1040 poly_int64
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1041 default_return_pops_args (tree, tree, poly_int64)
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1042 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1043 return 0;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1044 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1045
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1046 reg_class_t
111
kono
parents: 67
diff changeset
1047 default_ira_change_pseudo_allocno_class (int regno ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
1048 reg_class_t cl,
kono
parents: 67
diff changeset
1049 reg_class_t best_cl ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
1050 {
kono
parents: 67
diff changeset
1051 return cl;
kono
parents: 67
diff changeset
1052 }
kono
parents: 67
diff changeset
1053
kono
parents: 67
diff changeset
1054 extern bool
kono
parents: 67
diff changeset
1055 default_lra_p (void)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1056 {
111
kono
parents: 67
diff changeset
1057 return true;
kono
parents: 67
diff changeset
1058 }
kono
parents: 67
diff changeset
1059
kono
parents: 67
diff changeset
1060 int
kono
parents: 67
diff changeset
1061 default_register_priority (int hard_regno ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
1062 {
kono
parents: 67
diff changeset
1063 return 0;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1064 }
111
kono
parents: 67
diff changeset
1065
kono
parents: 67
diff changeset
1066 extern bool
kono
parents: 67
diff changeset
1067 default_register_usage_leveling_p (void)
kono
parents: 67
diff changeset
1068 {
kono
parents: 67
diff changeset
1069 return false;
kono
parents: 67
diff changeset
1070 }
kono
parents: 67
diff changeset
1071
kono
parents: 67
diff changeset
1072 extern bool
kono
parents: 67
diff changeset
1073 default_different_addr_displacement_p (void)
kono
parents: 67
diff changeset
1074 {
kono
parents: 67
diff changeset
1075 return false;
kono
parents: 67
diff changeset
1076 }
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1077
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1078 reg_class_t
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1079 default_secondary_reload (bool in_p ATTRIBUTE_UNUSED, rtx x ATTRIBUTE_UNUSED,
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1080 reg_class_t reload_class_i ATTRIBUTE_UNUSED,
111
kono
parents: 67
diff changeset
1081 machine_mode reload_mode ATTRIBUTE_UNUSED,
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1082 secondary_reload_info *sri)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1083 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1084 enum reg_class rclass = NO_REGS;
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1085 enum reg_class reload_class = (enum reg_class) reload_class_i;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1086
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1087 if (sri->prev_sri && sri->prev_sri->t_icode != CODE_FOR_nothing)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1088 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1089 sri->icode = sri->prev_sri->t_icode;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1090 return NO_REGS;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1091 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1092 #ifdef SECONDARY_INPUT_RELOAD_CLASS
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1093 if (in_p)
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1094 rclass = SECONDARY_INPUT_RELOAD_CLASS (reload_class,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1095 MACRO_MODE (reload_mode), x);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1096 #endif
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1097 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1098 if (! in_p)
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1099 rclass = SECONDARY_OUTPUT_RELOAD_CLASS (reload_class,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1100 MACRO_MODE (reload_mode), x);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1101 #endif
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1102 if (rclass != NO_REGS)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1103 {
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1104 enum insn_code icode
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1105 = direct_optab_handler (in_p ? reload_in_optab : reload_out_optab,
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1106 reload_mode);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1107
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1108 if (icode != CODE_FOR_nothing
111
kono
parents: 67
diff changeset
1109 && !insn_operand_matches (icode, in_p, x))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1110 icode = CODE_FOR_nothing;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1111 else if (icode != CODE_FOR_nothing)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1112 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1113 const char *insn_constraint, *scratch_constraint;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1114 enum reg_class insn_class, scratch_class;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1115
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1116 gcc_assert (insn_data[(int) icode].n_operands == 3);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1117 insn_constraint = insn_data[(int) icode].operand[!in_p].constraint;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1118 if (!*insn_constraint)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1119 insn_class = ALL_REGS;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1120 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1121 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1122 if (in_p)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1123 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1124 gcc_assert (*insn_constraint == '=');
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1125 insn_constraint++;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1126 }
111
kono
parents: 67
diff changeset
1127 insn_class = (reg_class_for_constraint
kono
parents: 67
diff changeset
1128 (lookup_constraint (insn_constraint)));
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1129 gcc_assert (insn_class != NO_REGS);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1130 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1131
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1132 scratch_constraint = insn_data[(int) icode].operand[2].constraint;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1133 /* The scratch register's constraint must start with "=&",
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1134 except for an input reload, where only "=" is necessary,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1135 and where it might be beneficial to re-use registers from
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1136 the input. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1137 gcc_assert (scratch_constraint[0] == '='
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1138 && (in_p || scratch_constraint[1] == '&'));
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1139 scratch_constraint++;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1140 if (*scratch_constraint == '&')
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1141 scratch_constraint++;
111
kono
parents: 67
diff changeset
1142 scratch_class = (reg_class_for_constraint
kono
parents: 67
diff changeset
1143 (lookup_constraint (scratch_constraint)));
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1144
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1145 if (reg_class_subset_p (reload_class, insn_class))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1146 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1147 gcc_assert (scratch_class == rclass);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1148 rclass = NO_REGS;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1149 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1150 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1151 rclass = insn_class;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1152
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1153 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1154 if (rclass == NO_REGS)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1155 sri->icode = icode;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1156 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1157 sri->t_icode = icode;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1158 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1159 return rclass;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1160 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1161
111
kono
parents: 67
diff changeset
1162 /* The default implementation of TARGET_SECONDARY_MEMORY_NEEDED_MODE. */
kono
parents: 67
diff changeset
1163
kono
parents: 67
diff changeset
1164 machine_mode
kono
parents: 67
diff changeset
1165 default_secondary_memory_needed_mode (machine_mode mode)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1166 {
111
kono
parents: 67
diff changeset
1167 if (!targetm.lra_p ()
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1168 && known_lt (GET_MODE_BITSIZE (mode), BITS_PER_WORD)
111
kono
parents: 67
diff changeset
1169 && INTEGRAL_MODE_P (mode))
kono
parents: 67
diff changeset
1170 return mode_for_size (BITS_PER_WORD, GET_MODE_CLASS (mode), 0).require ();
kono
parents: 67
diff changeset
1171 return mode;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1172 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1173
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1174 /* By default, if flag_pic is true, then neither local nor global relocs
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1175 should be placed in readonly memory. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1176
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1177 int
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1178 default_reloc_rw_mask (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1179 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1180 return flag_pic ? 3 : 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1181 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1182
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1183 /* By default, address diff vectors are generated
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1184 for jump tables when flag_pic is true. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1185
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1186 bool
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1187 default_generate_pic_addr_diff_vec (void)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1188 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1189 return flag_pic;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1190 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1191
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1192 /* By default, do no modification. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1193 tree default_mangle_decl_assembler_name (tree decl ATTRIBUTE_UNUSED,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1194 tree id)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1195 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1196 return id;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1197 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1198
111
kono
parents: 67
diff changeset
1199 /* The default implementation of TARGET_STATIC_RTX_ALIGNMENT. */
kono
parents: 67
diff changeset
1200
kono
parents: 67
diff changeset
1201 HOST_WIDE_INT
kono
parents: 67
diff changeset
1202 default_static_rtx_alignment (machine_mode mode)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1203 {
111
kono
parents: 67
diff changeset
1204 return GET_MODE_ALIGNMENT (mode);
kono
parents: 67
diff changeset
1205 }
kono
parents: 67
diff changeset
1206
kono
parents: 67
diff changeset
1207 /* The default implementation of TARGET_CONSTANT_ALIGNMENT. */
kono
parents: 67
diff changeset
1208
kono
parents: 67
diff changeset
1209 HOST_WIDE_INT
kono
parents: 67
diff changeset
1210 default_constant_alignment (const_tree, HOST_WIDE_INT align)
kono
parents: 67
diff changeset
1211 {
kono
parents: 67
diff changeset
1212 return align;
kono
parents: 67
diff changeset
1213 }
kono
parents: 67
diff changeset
1214
kono
parents: 67
diff changeset
1215 /* An implementation of TARGET_CONSTANT_ALIGNMENT that aligns strings
kono
parents: 67
diff changeset
1216 to at least BITS_PER_WORD but otherwise makes no changes. */
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1217
111
kono
parents: 67
diff changeset
1218 HOST_WIDE_INT
kono
parents: 67
diff changeset
1219 constant_alignment_word_strings (const_tree exp, HOST_WIDE_INT align)
kono
parents: 67
diff changeset
1220 {
kono
parents: 67
diff changeset
1221 if (TREE_CODE (exp) == STRING_CST)
kono
parents: 67
diff changeset
1222 return MAX (align, BITS_PER_WORD);
kono
parents: 67
diff changeset
1223 return align;
kono
parents: 67
diff changeset
1224 }
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1225
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1226 /* Default to natural alignment for vector types, bounded by
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1227 MAX_OFILE_ALIGNMENT. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1228
111
kono
parents: 67
diff changeset
1229 HOST_WIDE_INT
kono
parents: 67
diff changeset
1230 default_vector_alignment (const_tree type)
kono
parents: 67
diff changeset
1231 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1232 unsigned HOST_WIDE_INT align = MAX_OFILE_ALIGNMENT;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1233 tree size = TYPE_SIZE (type);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1234 if (tree_fits_uhwi_p (size))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1235 align = tree_to_uhwi (size);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1236
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1237 return align < MAX_OFILE_ALIGNMENT ? align : MAX_OFILE_ALIGNMENT;
111
kono
parents: 67
diff changeset
1238 }
kono
parents: 67
diff changeset
1239
kono
parents: 67
diff changeset
1240 /* The default implementation of
kono
parents: 67
diff changeset
1241 TARGET_VECTORIZE_PREFERRED_VECTOR_ALIGNMENT. */
kono
parents: 67
diff changeset
1242
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1243 poly_uint64
111
kono
parents: 67
diff changeset
1244 default_preferred_vector_alignment (const_tree type)
kono
parents: 67
diff changeset
1245 {
kono
parents: 67
diff changeset
1246 return TYPE_ALIGN (type);
kono
parents: 67
diff changeset
1247 }
kono
parents: 67
diff changeset
1248
kono
parents: 67
diff changeset
1249 /* By default assume vectors of element TYPE require a multiple of the natural
kono
parents: 67
diff changeset
1250 alignment of TYPE. TYPE is naturally aligned if IS_PACKED is false. */
kono
parents: 67
diff changeset
1251 bool
kono
parents: 67
diff changeset
1252 default_builtin_vector_alignment_reachable (const_tree /*type*/, bool is_packed)
kono
parents: 67
diff changeset
1253 {
kono
parents: 67
diff changeset
1254 return ! is_packed;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1255 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1256
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1257 /* By default, assume that a target supports any factor of misalignment
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1258 memory access if it supports movmisalign patten.
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1259 is_packed is true if the memory access is defined in a packed struct. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1260 bool
111
kono
parents: 67
diff changeset
1261 default_builtin_support_vector_misalignment (machine_mode mode,
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1262 const_tree type
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1263 ATTRIBUTE_UNUSED,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1264 int misalignment
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1265 ATTRIBUTE_UNUSED,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1266 bool is_packed
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1267 ATTRIBUTE_UNUSED)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1268 {
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1269 if (optab_handler (movmisalign_optab, mode) != CODE_FOR_nothing)
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1270 return true;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1271 return false;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1272 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1273
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1274 /* By default, only attempt to parallelize bitwise operations, and
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1275 possibly adds/subtracts using bit-twiddling. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1276
111
kono
parents: 67
diff changeset
1277 machine_mode
kono
parents: 67
diff changeset
1278 default_preferred_simd_mode (scalar_mode)
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1279 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1280 return word_mode;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1281 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1282
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1283 /* By default do not split reductions further. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1284
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1285 machine_mode
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1286 default_split_reduction (machine_mode mode)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1287 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1288 return mode;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1289 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1290
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1291 /* By default only the preferred vector mode is tried. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1292
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1293 unsigned int
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1294 default_autovectorize_vector_modes (vector_modes *, bool)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1295 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1296 return 0;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1297 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1298
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1299 /* The default implementation of TARGET_VECTORIZE_RELATED_MODE. */
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1300
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1301 opt_machine_mode
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1302 default_vectorize_related_mode (machine_mode vector_mode,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1303 scalar_mode element_mode,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1304 poly_uint64 nunits)
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1305 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1306 machine_mode result_mode;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1307 if ((maybe_ne (nunits, 0U)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1308 || multiple_p (GET_MODE_SIZE (vector_mode),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1309 GET_MODE_SIZE (element_mode), &nunits))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1310 && mode_for_vector (element_mode, nunits).exists (&result_mode)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1311 && VECTOR_MODE_P (result_mode)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1312 && targetm.vector_mode_supported_p (result_mode))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1313 return result_mode;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1314
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1315 return opt_machine_mode ();
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1316 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1317
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1318 /* By default a vector of integers is used as a mask. */
111
kono
parents: 67
diff changeset
1319
kono
parents: 67
diff changeset
1320 opt_machine_mode
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1321 default_get_mask_mode (machine_mode mode)
111
kono
parents: 67
diff changeset
1322 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1323 return related_int_vector_mode (mode);
111
kono
parents: 67
diff changeset
1324 }
kono
parents: 67
diff changeset
1325
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1326 /* By default consider masked stores to be expensive. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1327
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1328 bool
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1329 default_empty_mask_is_expensive (unsigned ifn)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1330 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1331 return ifn == IFN_MASK_STORE;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1332 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1333
111
kono
parents: 67
diff changeset
1334 /* By default, the cost model accumulates three separate costs (prologue,
kono
parents: 67
diff changeset
1335 loop body, and epilogue) for a vectorized loop or block. So allocate an
kono
parents: 67
diff changeset
1336 array of three unsigned ints, set it to zero, and return its address. */
kono
parents: 67
diff changeset
1337
kono
parents: 67
diff changeset
1338 void *
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1339 default_init_cost (class loop *loop_info ATTRIBUTE_UNUSED)
111
kono
parents: 67
diff changeset
1340 {
kono
parents: 67
diff changeset
1341 unsigned *cost = XNEWVEC (unsigned, 3);
kono
parents: 67
diff changeset
1342 cost[vect_prologue] = cost[vect_body] = cost[vect_epilogue] = 0;
kono
parents: 67
diff changeset
1343 return cost;
kono
parents: 67
diff changeset
1344 }
kono
parents: 67
diff changeset
1345
kono
parents: 67
diff changeset
1346 /* By default, the cost model looks up the cost of the given statement
kono
parents: 67
diff changeset
1347 kind and mode, multiplies it by the occurrence count, accumulates
kono
parents: 67
diff changeset
1348 it into the cost specified by WHERE, and returns the cost added. */
kono
parents: 67
diff changeset
1349
kono
parents: 67
diff changeset
1350 unsigned
kono
parents: 67
diff changeset
1351 default_add_stmt_cost (void *data, int count, enum vect_cost_for_stmt kind,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1352 class _stmt_vec_info *stmt_info, int misalign,
111
kono
parents: 67
diff changeset
1353 enum vect_cost_model_location where)
kono
parents: 67
diff changeset
1354 {
kono
parents: 67
diff changeset
1355 unsigned *cost = (unsigned *) data;
kono
parents: 67
diff changeset
1356 unsigned retval = 0;
kono
parents: 67
diff changeset
1357
kono
parents: 67
diff changeset
1358 tree vectype = stmt_info ? stmt_vectype (stmt_info) : NULL_TREE;
kono
parents: 67
diff changeset
1359 int stmt_cost = targetm.vectorize.builtin_vectorization_cost (kind, vectype,
kono
parents: 67
diff changeset
1360 misalign);
kono
parents: 67
diff changeset
1361 /* Statements in an inner loop relative to the loop being
kono
parents: 67
diff changeset
1362 vectorized are weighted more heavily. The value here is
kono
parents: 67
diff changeset
1363 arbitrary and could potentially be improved with analysis. */
kono
parents: 67
diff changeset
1364 if (where == vect_body && stmt_info && stmt_in_inner_loop_p (stmt_info))
kono
parents: 67
diff changeset
1365 count *= 50; /* FIXME. */
kono
parents: 67
diff changeset
1366
kono
parents: 67
diff changeset
1367 retval = (unsigned) (count * stmt_cost);
kono
parents: 67
diff changeset
1368 cost[where] += retval;
kono
parents: 67
diff changeset
1369
kono
parents: 67
diff changeset
1370 return retval;
kono
parents: 67
diff changeset
1371 }
kono
parents: 67
diff changeset
1372
kono
parents: 67
diff changeset
1373 /* By default, the cost model just returns the accumulated costs. */
kono
parents: 67
diff changeset
1374
kono
parents: 67
diff changeset
1375 void
kono
parents: 67
diff changeset
1376 default_finish_cost (void *data, unsigned *prologue_cost,
kono
parents: 67
diff changeset
1377 unsigned *body_cost, unsigned *epilogue_cost)
kono
parents: 67
diff changeset
1378 {
kono
parents: 67
diff changeset
1379 unsigned *cost = (unsigned *) data;
kono
parents: 67
diff changeset
1380 *prologue_cost = cost[vect_prologue];
kono
parents: 67
diff changeset
1381 *body_cost = cost[vect_body];
kono
parents: 67
diff changeset
1382 *epilogue_cost = cost[vect_epilogue];
kono
parents: 67
diff changeset
1383 }
kono
parents: 67
diff changeset
1384
kono
parents: 67
diff changeset
1385 /* Free the cost data. */
kono
parents: 67
diff changeset
1386
kono
parents: 67
diff changeset
1387 void
kono
parents: 67
diff changeset
1388 default_destroy_cost_data (void *data)
kono
parents: 67
diff changeset
1389 {
kono
parents: 67
diff changeset
1390 free (data);
kono
parents: 67
diff changeset
1391 }
kono
parents: 67
diff changeset
1392
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1393 /* Determine whether or not a pointer mode is valid. Assume defaults
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1394 of ptr_mode or Pmode - can be overridden. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1395 bool
111
kono
parents: 67
diff changeset
1396 default_valid_pointer_mode (scalar_int_mode mode)
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1397 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1398 return (mode == ptr_mode || mode == Pmode);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1399 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1400
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1401 /* Determine whether the memory reference specified by REF may alias
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1402 the C libraries errno location. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1403 bool
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1404 default_ref_may_alias_errno (ao_ref *ref)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1405 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1406 tree base = ao_ref_base (ref);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1407 /* The default implementation assumes the errno location is
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1408 a declaration of type int or is always accessed via a
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1409 pointer to int. We assume that accesses to errno are
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1410 not deliberately obfuscated (even in conforming ways). */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1411 if (TYPE_UNSIGNED (TREE_TYPE (base))
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1412 || TYPE_MODE (TREE_TYPE (base)) != TYPE_MODE (integer_type_node))
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1413 return false;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1414 /* The default implementation assumes an errno location declaration
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1415 is never defined in the current compilation unit and may not be
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1416 aliased by a local variable. */
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1417 if (DECL_P (base)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1418 && DECL_EXTERNAL (base)
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1419 && !TREE_STATIC (base))
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1420 return true;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1421 else if (TREE_CODE (base) == MEM_REF
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1422 && TREE_CODE (TREE_OPERAND (base, 0)) == SSA_NAME)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1423 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1424 struct ptr_info_def *pi = SSA_NAME_PTR_INFO (TREE_OPERAND (base, 0));
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1425 return !pi || pi->pt.anything || pi->pt.nonlocal;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1426 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1427 return false;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1428 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1429
111
kono
parents: 67
diff changeset
1430 /* Return the mode for a pointer to a given ADDRSPACE,
kono
parents: 67
diff changeset
1431 defaulting to ptr_mode for all address spaces. */
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1432
111
kono
parents: 67
diff changeset
1433 scalar_int_mode
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1434 default_addr_space_pointer_mode (addr_space_t addrspace ATTRIBUTE_UNUSED)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1435 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1436 return ptr_mode;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1437 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1438
111
kono
parents: 67
diff changeset
1439 /* Return the mode for an address in a given ADDRSPACE,
kono
parents: 67
diff changeset
1440 defaulting to Pmode for all address spaces. */
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1441
111
kono
parents: 67
diff changeset
1442 scalar_int_mode
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1443 default_addr_space_address_mode (addr_space_t addrspace ATTRIBUTE_UNUSED)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1444 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1445 return Pmode;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1446 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1447
111
kono
parents: 67
diff changeset
1448 /* Named address space version of valid_pointer_mode.
kono
parents: 67
diff changeset
1449 To match the above, the same modes apply to all address spaces. */
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1450
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1451 bool
111
kono
parents: 67
diff changeset
1452 default_addr_space_valid_pointer_mode (scalar_int_mode mode,
kono
parents: 67
diff changeset
1453 addr_space_t as ATTRIBUTE_UNUSED)
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1454 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1455 return targetm.valid_pointer_mode (mode);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1456 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1457
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1458 /* Some places still assume that all pointer or address modes are the
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1459 standard Pmode and ptr_mode. These optimizations become invalid if
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1460 the target actually supports multiple different modes. For now,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1461 we disable such optimizations on such targets, using this function. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1462
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1463 bool
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1464 target_default_pointer_address_modes_p (void)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1465 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1466 if (targetm.addr_space.address_mode != default_addr_space_address_mode)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1467 return false;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1468 if (targetm.addr_space.pointer_mode != default_addr_space_pointer_mode)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1469 return false;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1470
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1471 return true;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1472 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1473
111
kono
parents: 67
diff changeset
1474 /* Named address space version of legitimate_address_p.
kono
parents: 67
diff changeset
1475 By default, all address spaces have the same form. */
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1476
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1477 bool
111
kono
parents: 67
diff changeset
1478 default_addr_space_legitimate_address_p (machine_mode mode, rtx mem,
kono
parents: 67
diff changeset
1479 bool strict,
kono
parents: 67
diff changeset
1480 addr_space_t as ATTRIBUTE_UNUSED)
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1481 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1482 return targetm.legitimate_address_p (mode, mem, strict);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1483 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1484
111
kono
parents: 67
diff changeset
1485 /* Named address space version of LEGITIMIZE_ADDRESS.
kono
parents: 67
diff changeset
1486 By default, all address spaces have the same form. */
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1487
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1488 rtx
111
kono
parents: 67
diff changeset
1489 default_addr_space_legitimize_address (rtx x, rtx oldx, machine_mode mode,
kono
parents: 67
diff changeset
1490 addr_space_t as ATTRIBUTE_UNUSED)
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1491 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1492 return targetm.legitimize_address (x, oldx, mode);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1493 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1494
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1495 /* The default hook for determining if one named address space is a subset of
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1496 another and to return which address space to use as the common address
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1497 space. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1498
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1499 bool
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1500 default_addr_space_subset_p (addr_space_t subset, addr_space_t superset)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1501 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1502 return (subset == superset);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1503 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1504
111
kono
parents: 67
diff changeset
1505 /* The default hook for determining if 0 within a named address
kono
parents: 67
diff changeset
1506 space is a valid address. */
kono
parents: 67
diff changeset
1507
kono
parents: 67
diff changeset
1508 bool
kono
parents: 67
diff changeset
1509 default_addr_space_zero_address_valid (addr_space_t as ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
1510 {
kono
parents: 67
diff changeset
1511 return false;
kono
parents: 67
diff changeset
1512 }
kono
parents: 67
diff changeset
1513
kono
parents: 67
diff changeset
1514 /* The default hook for debugging the address space is to return the
kono
parents: 67
diff changeset
1515 address space number to indicate DW_AT_address_class. */
kono
parents: 67
diff changeset
1516 int
kono
parents: 67
diff changeset
1517 default_addr_space_debug (addr_space_t as)
kono
parents: 67
diff changeset
1518 {
kono
parents: 67
diff changeset
1519 return as;
kono
parents: 67
diff changeset
1520 }
kono
parents: 67
diff changeset
1521
kono
parents: 67
diff changeset
1522 /* The default hook implementation for TARGET_ADDR_SPACE_DIAGNOSE_USAGE.
kono
parents: 67
diff changeset
1523 Don't complain about any address space. */
kono
parents: 67
diff changeset
1524
kono
parents: 67
diff changeset
1525 void
kono
parents: 67
diff changeset
1526 default_addr_space_diagnose_usage (addr_space_t, location_t)
kono
parents: 67
diff changeset
1527 {
kono
parents: 67
diff changeset
1528 }
kono
parents: 67
diff changeset
1529
kono
parents: 67
diff changeset
1530
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1531 /* The default hook for TARGET_ADDR_SPACE_CONVERT. This hook should never be
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1532 called for targets with only a generic address space. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1533
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1534 rtx
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1535 default_addr_space_convert (rtx op ATTRIBUTE_UNUSED,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1536 tree from_type ATTRIBUTE_UNUSED,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1537 tree to_type ATTRIBUTE_UNUSED)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1538 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1539 gcc_unreachable ();
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1540 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1541
111
kono
parents: 67
diff changeset
1542 /* The defualt implementation of TARGET_HARD_REGNO_NREGS. */
kono
parents: 67
diff changeset
1543
kono
parents: 67
diff changeset
1544 unsigned int
kono
parents: 67
diff changeset
1545 default_hard_regno_nregs (unsigned int, machine_mode mode)
kono
parents: 67
diff changeset
1546 {
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1547 /* Targets with variable-sized modes must provide their own definition
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1548 of this hook. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1549 return CEIL (GET_MODE_SIZE (mode).to_constant (), UNITS_PER_WORD);
111
kono
parents: 67
diff changeset
1550 }
kono
parents: 67
diff changeset
1551
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1552 bool
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1553 default_hard_regno_scratch_ok (unsigned int regno ATTRIBUTE_UNUSED)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1554 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1555 return true;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1556 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1557
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1558 /* The default implementation of TARGET_MODE_DEPENDENT_ADDRESS_P. */
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1559
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1560 bool
111
kono
parents: 67
diff changeset
1561 default_mode_dependent_address_p (const_rtx addr ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
1562 addr_space_t addrspace ATTRIBUTE_UNUSED)
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1563 {
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1564 return false;
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1565 }
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1566
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1567 bool
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1568 default_target_option_valid_attribute_p (tree ARG_UNUSED (fndecl),
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1569 tree ARG_UNUSED (name),
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1570 tree ARG_UNUSED (args),
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1571 int ARG_UNUSED (flags))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1572 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1573 warning (OPT_Wattributes,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1574 "target attribute is not supported on this machine");
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1575
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1576 return false;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1577 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1578
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1579 bool
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1580 default_target_option_pragma_parse (tree ARG_UNUSED (args),
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1581 tree ARG_UNUSED (pop_target))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1582 {
111
kono
parents: 67
diff changeset
1583 /* If args is NULL the caller is handle_pragma_pop_options (). In that case,
kono
parents: 67
diff changeset
1584 emit no warning because "#pragma GCC pop_target" is valid on targets that
kono
parents: 67
diff changeset
1585 do not have the "target" pragma. */
kono
parents: 67
diff changeset
1586 if (args)
kono
parents: 67
diff changeset
1587 warning (OPT_Wpragmas,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1588 "%<#pragma GCC target%> is not supported for this machine");
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1589
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1590 return false;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1591 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1592
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1593 bool
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1594 default_target_can_inline_p (tree caller, tree callee)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1595 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1596 tree callee_opts = DECL_FUNCTION_SPECIFIC_TARGET (callee);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1597 tree caller_opts = DECL_FUNCTION_SPECIFIC_TARGET (caller);
111
kono
parents: 67
diff changeset
1598 if (! callee_opts)
kono
parents: 67
diff changeset
1599 callee_opts = target_option_default_node;
kono
parents: 67
diff changeset
1600 if (! caller_opts)
kono
parents: 67
diff changeset
1601 caller_opts = target_option_default_node;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1602
111
kono
parents: 67
diff changeset
1603 /* If both caller and callee have attributes, assume that if the
kono
parents: 67
diff changeset
1604 pointer is different, the two functions have different target
kono
parents: 67
diff changeset
1605 options since build_target_option_node uses a hash table for the
kono
parents: 67
diff changeset
1606 options. */
kono
parents: 67
diff changeset
1607 return callee_opts == caller_opts;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1608 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1609
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1610 /* If the machine does not have a case insn that compares the bounds,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1611 this means extra overhead for dispatch tables, which raises the
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1612 threshold for using them. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1613
111
kono
parents: 67
diff changeset
1614 unsigned int
kono
parents: 67
diff changeset
1615 default_case_values_threshold (void)
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1616 {
111
kono
parents: 67
diff changeset
1617 return (targetm.have_casesi () ? 4 : 5);
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1618 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1619
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1620 bool
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1621 default_have_conditional_execution (void)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1622 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1623 return HAVE_conditional_execution;
111
kono
parents: 67
diff changeset
1624 }
kono
parents: 67
diff changeset
1625
kono
parents: 67
diff changeset
1626 /* By default we assume that c99 functions are present at the runtime,
kono
parents: 67
diff changeset
1627 but sincos is not. */
kono
parents: 67
diff changeset
1628 bool
kono
parents: 67
diff changeset
1629 default_libc_has_function (enum function_class fn_class)
kono
parents: 67
diff changeset
1630 {
kono
parents: 67
diff changeset
1631 if (fn_class == function_c94
kono
parents: 67
diff changeset
1632 || fn_class == function_c99_misc
kono
parents: 67
diff changeset
1633 || fn_class == function_c99_math_complex)
kono
parents: 67
diff changeset
1634 return true;
kono
parents: 67
diff changeset
1635
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1636 return false;
111
kono
parents: 67
diff changeset
1637 }
kono
parents: 67
diff changeset
1638
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1639 /* By default assume that libc has not a fast implementation. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1640
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1641 bool
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1642 default_libc_has_fast_function (int fcode ATTRIBUTE_UNUSED)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1643 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1644 return false;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1645 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1646
111
kono
parents: 67
diff changeset
1647 bool
kono
parents: 67
diff changeset
1648 gnu_libc_has_function (enum function_class fn_class ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
1649 {
kono
parents: 67
diff changeset
1650 return true;
kono
parents: 67
diff changeset
1651 }
kono
parents: 67
diff changeset
1652
kono
parents: 67
diff changeset
1653 bool
kono
parents: 67
diff changeset
1654 no_c99_libc_has_function (enum function_class fn_class ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
1655 {
kono
parents: 67
diff changeset
1656 return false;
kono
parents: 67
diff changeset
1657 }
kono
parents: 67
diff changeset
1658
kono
parents: 67
diff changeset
1659 tree
kono
parents: 67
diff changeset
1660 default_builtin_tm_load_store (tree ARG_UNUSED (type))
kono
parents: 67
diff changeset
1661 {
kono
parents: 67
diff changeset
1662 return NULL_TREE;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1663 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1664
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1665 /* Compute cost of moving registers to/from memory. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1666
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1667 int
111
kono
parents: 67
diff changeset
1668 default_memory_move_cost (machine_mode mode ATTRIBUTE_UNUSED,
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1669 reg_class_t rclass ATTRIBUTE_UNUSED,
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1670 bool in ATTRIBUTE_UNUSED)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1671 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1672 #ifndef MEMORY_MOVE_COST
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1673 return (4 + memory_move_secondary_cost (mode, (enum reg_class) rclass, in));
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1674 #else
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1675 return MEMORY_MOVE_COST (MACRO_MODE (mode), (enum reg_class) rclass, in);
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1676 #endif
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1677 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1678
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1679 /* Compute cost of moving data from a register of class FROM to one of
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1680 TO, using MODE. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1681
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1682 int
111
kono
parents: 67
diff changeset
1683 default_register_move_cost (machine_mode mode ATTRIBUTE_UNUSED,
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1684 reg_class_t from ATTRIBUTE_UNUSED,
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1685 reg_class_t to ATTRIBUTE_UNUSED)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1686 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1687 #ifndef REGISTER_MOVE_COST
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1688 return 2;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1689 #else
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1690 return REGISTER_MOVE_COST (MACRO_MODE (mode),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1691 (enum reg_class) from, (enum reg_class) to);
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1692 #endif
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1693 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1694
111
kono
parents: 67
diff changeset
1695 /* The default implementation of TARGET_SLOW_UNALIGNED_ACCESS. */
kono
parents: 67
diff changeset
1696
kono
parents: 67
diff changeset
1697 bool
kono
parents: 67
diff changeset
1698 default_slow_unaligned_access (machine_mode, unsigned int)
kono
parents: 67
diff changeset
1699 {
kono
parents: 67
diff changeset
1700 return STRICT_ALIGNMENT;
kono
parents: 67
diff changeset
1701 }
kono
parents: 67
diff changeset
1702
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1703 /* The default implementation of TARGET_ESTIMATED_POLY_VALUE. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1704
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1705 HOST_WIDE_INT
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1706 default_estimated_poly_value (poly_int64 x)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1707 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1708 return x.coeffs[0];
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1709 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1710
111
kono
parents: 67
diff changeset
1711 /* For hooks which use the MOVE_RATIO macro, this gives the legacy default
kono
parents: 67
diff changeset
1712 behavior. SPEED_P is true if we are compiling for speed. */
kono
parents: 67
diff changeset
1713
kono
parents: 67
diff changeset
1714 unsigned int
kono
parents: 67
diff changeset
1715 get_move_ratio (bool speed_p ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
1716 {
kono
parents: 67
diff changeset
1717 unsigned int move_ratio;
kono
parents: 67
diff changeset
1718 #ifdef MOVE_RATIO
kono
parents: 67
diff changeset
1719 move_ratio = (unsigned int) MOVE_RATIO (speed_p);
kono
parents: 67
diff changeset
1720 #else
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1721 #if defined (HAVE_cpymemqi) || defined (HAVE_cpymemhi) || defined (HAVE_cpymemsi) || defined (HAVE_cpymemdi) || defined (HAVE_cpymemti)
111
kono
parents: 67
diff changeset
1722 move_ratio = 2;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1723 #else /* No cpymem patterns, pick a default. */
111
kono
parents: 67
diff changeset
1724 move_ratio = ((speed_p) ? 15 : 3);
kono
parents: 67
diff changeset
1725 #endif
kono
parents: 67
diff changeset
1726 #endif
kono
parents: 67
diff changeset
1727 return move_ratio;
kono
parents: 67
diff changeset
1728 }
kono
parents: 67
diff changeset
1729
kono
parents: 67
diff changeset
1730 /* Return TRUE if the move_by_pieces/set_by_pieces infrastructure should be
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1731 used; return FALSE if the cpymem/setmem optab should be expanded, or
111
kono
parents: 67
diff changeset
1732 a call to memcpy emitted. */
kono
parents: 67
diff changeset
1733
kono
parents: 67
diff changeset
1734 bool
kono
parents: 67
diff changeset
1735 default_use_by_pieces_infrastructure_p (unsigned HOST_WIDE_INT size,
kono
parents: 67
diff changeset
1736 unsigned int alignment,
kono
parents: 67
diff changeset
1737 enum by_pieces_operation op,
kono
parents: 67
diff changeset
1738 bool speed_p)
kono
parents: 67
diff changeset
1739 {
kono
parents: 67
diff changeset
1740 unsigned int max_size = 0;
kono
parents: 67
diff changeset
1741 unsigned int ratio = 0;
kono
parents: 67
diff changeset
1742
kono
parents: 67
diff changeset
1743 switch (op)
kono
parents: 67
diff changeset
1744 {
kono
parents: 67
diff changeset
1745 case CLEAR_BY_PIECES:
kono
parents: 67
diff changeset
1746 max_size = STORE_MAX_PIECES;
kono
parents: 67
diff changeset
1747 ratio = CLEAR_RATIO (speed_p);
kono
parents: 67
diff changeset
1748 break;
kono
parents: 67
diff changeset
1749 case MOVE_BY_PIECES:
kono
parents: 67
diff changeset
1750 max_size = MOVE_MAX_PIECES;
kono
parents: 67
diff changeset
1751 ratio = get_move_ratio (speed_p);
kono
parents: 67
diff changeset
1752 break;
kono
parents: 67
diff changeset
1753 case SET_BY_PIECES:
kono
parents: 67
diff changeset
1754 max_size = STORE_MAX_PIECES;
kono
parents: 67
diff changeset
1755 ratio = SET_RATIO (speed_p);
kono
parents: 67
diff changeset
1756 break;
kono
parents: 67
diff changeset
1757 case STORE_BY_PIECES:
kono
parents: 67
diff changeset
1758 max_size = STORE_MAX_PIECES;
kono
parents: 67
diff changeset
1759 ratio = get_move_ratio (speed_p);
kono
parents: 67
diff changeset
1760 break;
kono
parents: 67
diff changeset
1761 case COMPARE_BY_PIECES:
kono
parents: 67
diff changeset
1762 max_size = COMPARE_MAX_PIECES;
kono
parents: 67
diff changeset
1763 /* Pick a likely default, just as in get_move_ratio. */
kono
parents: 67
diff changeset
1764 ratio = speed_p ? 15 : 3;
kono
parents: 67
diff changeset
1765 break;
kono
parents: 67
diff changeset
1766 }
kono
parents: 67
diff changeset
1767
kono
parents: 67
diff changeset
1768 return by_pieces_ninsns (size, alignment, max_size + 1, op) < ratio;
kono
parents: 67
diff changeset
1769 }
kono
parents: 67
diff changeset
1770
kono
parents: 67
diff changeset
1771 /* This hook controls code generation for expanding a memcmp operation by
kono
parents: 67
diff changeset
1772 pieces. Return 1 for the normal pattern of compare/jump after each pair
kono
parents: 67
diff changeset
1773 of loads, or a higher number to reduce the number of branches. */
kono
parents: 67
diff changeset
1774
kono
parents: 67
diff changeset
1775 int
kono
parents: 67
diff changeset
1776 default_compare_by_pieces_branch_ratio (machine_mode)
kono
parents: 67
diff changeset
1777 {
kono
parents: 67
diff changeset
1778 return 1;
kono
parents: 67
diff changeset
1779 }
kono
parents: 67
diff changeset
1780
kono
parents: 67
diff changeset
1781 /* Write PATCH_AREA_SIZE NOPs into the asm outfile FILE around a function
kono
parents: 67
diff changeset
1782 entry. If RECORD_P is true and the target supports named sections,
kono
parents: 67
diff changeset
1783 the location of the NOPs will be recorded in a special object section
kono
parents: 67
diff changeset
1784 called "__patchable_function_entries". This routine may be called
kono
parents: 67
diff changeset
1785 twice per function to put NOPs before and after the function
kono
parents: 67
diff changeset
1786 entry. */
kono
parents: 67
diff changeset
1787
kono
parents: 67
diff changeset
1788 void
kono
parents: 67
diff changeset
1789 default_print_patchable_function_entry (FILE *file,
kono
parents: 67
diff changeset
1790 unsigned HOST_WIDE_INT patch_area_size,
kono
parents: 67
diff changeset
1791 bool record_p)
kono
parents: 67
diff changeset
1792 {
kono
parents: 67
diff changeset
1793 const char *nop_templ = 0;
kono
parents: 67
diff changeset
1794 int code_num;
kono
parents: 67
diff changeset
1795 rtx_insn *my_nop = make_insn_raw (gen_nop ());
kono
parents: 67
diff changeset
1796
kono
parents: 67
diff changeset
1797 /* We use the template alone, relying on the (currently sane) assumption
kono
parents: 67
diff changeset
1798 that the NOP template does not have variable operands. */
kono
parents: 67
diff changeset
1799 code_num = recog_memoized (my_nop);
kono
parents: 67
diff changeset
1800 nop_templ = get_insn_template (code_num, my_nop);
kono
parents: 67
diff changeset
1801
kono
parents: 67
diff changeset
1802 if (record_p && targetm_common.have_named_sections)
kono
parents: 67
diff changeset
1803 {
kono
parents: 67
diff changeset
1804 char buf[256];
kono
parents: 67
diff changeset
1805 static int patch_area_number;
kono
parents: 67
diff changeset
1806 section *previous_section = in_section;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1807 const char *asm_op = integer_asm_op (POINTER_SIZE_UNITS, false);
111
kono
parents: 67
diff changeset
1808
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1809 gcc_assert (asm_op != NULL);
111
kono
parents: 67
diff changeset
1810 patch_area_number++;
kono
parents: 67
diff changeset
1811 ASM_GENERATE_INTERNAL_LABEL (buf, "LPFE", patch_area_number);
kono
parents: 67
diff changeset
1812
kono
parents: 67
diff changeset
1813 switch_to_section (get_section ("__patchable_function_entries",
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1814 SECTION_WRITE | SECTION_RELRO, NULL));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1815 assemble_align (POINTER_SIZE);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1816 fputs (asm_op, file);
111
kono
parents: 67
diff changeset
1817 assemble_name_raw (file, buf);
kono
parents: 67
diff changeset
1818 fputc ('\n', file);
kono
parents: 67
diff changeset
1819
kono
parents: 67
diff changeset
1820 switch_to_section (previous_section);
kono
parents: 67
diff changeset
1821 ASM_OUTPUT_LABEL (file, buf);
kono
parents: 67
diff changeset
1822 }
kono
parents: 67
diff changeset
1823
kono
parents: 67
diff changeset
1824 unsigned i;
kono
parents: 67
diff changeset
1825 for (i = 0; i < patch_area_size; ++i)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1826 output_asm_insn (nop_templ, NULL);
111
kono
parents: 67
diff changeset
1827 }
kono
parents: 67
diff changeset
1828
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1829 bool
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1830 default_profile_before_prologue (void)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1831 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1832 #ifdef PROFILE_BEFORE_PROLOGUE
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1833 return true;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1834 #else
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1835 return false;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1836 #endif
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1837 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1838
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1839 /* The default implementation of TARGET_PREFERRED_RELOAD_CLASS. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1840
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1841 reg_class_t
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1842 default_preferred_reload_class (rtx x ATTRIBUTE_UNUSED,
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1843 reg_class_t rclass)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1844 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1845 #ifdef PREFERRED_RELOAD_CLASS
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1846 return (reg_class_t) PREFERRED_RELOAD_CLASS (x, (enum reg_class) rclass);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1847 #else
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1848 return rclass;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1849 #endif
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1850 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1851
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1852 /* The default implementation of TARGET_OUTPUT_PREFERRED_RELOAD_CLASS. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1853
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1854 reg_class_t
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1855 default_preferred_output_reload_class (rtx x ATTRIBUTE_UNUSED,
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1856 reg_class_t rclass)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1857 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1858 return rclass;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1859 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1860
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1861 /* The default implementation of TARGET_PREFERRED_RENAME_CLASS. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1862 reg_class_t
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1863 default_preferred_rename_class (reg_class_t rclass ATTRIBUTE_UNUSED)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1864 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1865 return NO_REGS;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1866 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1867
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1868 /* The default implementation of TARGET_CLASS_LIKELY_SPILLED_P. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1869
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1870 bool
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1871 default_class_likely_spilled_p (reg_class_t rclass)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1872 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1873 return (reg_class_size[(int) rclass] == 1);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1874 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1875
111
kono
parents: 67
diff changeset
1876 /* The default implementation of TARGET_CLASS_MAX_NREGS. */
kono
parents: 67
diff changeset
1877
kono
parents: 67
diff changeset
1878 unsigned char
kono
parents: 67
diff changeset
1879 default_class_max_nregs (reg_class_t rclass ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
1880 machine_mode mode ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
1881 {
kono
parents: 67
diff changeset
1882 #ifdef CLASS_MAX_NREGS
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1883 return (unsigned char) CLASS_MAX_NREGS ((enum reg_class) rclass,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1884 MACRO_MODE (mode));
111
kono
parents: 67
diff changeset
1885 #else
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1886 /* Targets with variable-sized modes must provide their own definition
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1887 of this hook. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1888 unsigned int size = GET_MODE_SIZE (mode).to_constant ();
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1889 return (size + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
111
kono
parents: 67
diff changeset
1890 #endif
kono
parents: 67
diff changeset
1891 }
kono
parents: 67
diff changeset
1892
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1893 /* Determine the debugging unwind mechanism for the target. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1894
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1895 enum unwind_info_type
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1896 default_debug_unwind_info (void)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1897 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1898 /* If the target wants to force the use of dwarf2 unwind info, let it. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1899 /* ??? Change all users to the hook, then poison this. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1900 #ifdef DWARF2_FRAME_INFO
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1901 if (DWARF2_FRAME_INFO)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1902 return UI_DWARF2;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1903 #endif
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1904
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1905 /* Otherwise, only turn it on if dwarf2 debugging is enabled. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1906 #ifdef DWARF2_DEBUGGING_INFO
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1907 if (write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1908 return UI_DWARF2;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1909 #endif
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1910
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1911 return UI_NONE;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1912 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1913
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1914 /* Targets that set NUM_POLY_INT_COEFFS to something greater than 1
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1915 must define this hook. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1916
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1917 unsigned int
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1918 default_dwarf_poly_indeterminate_value (unsigned int, unsigned int *, int *)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1919 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1920 gcc_unreachable ();
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1921 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1922
111
kono
parents: 67
diff changeset
1923 /* Determine the correct mode for a Dwarf frame register that represents
kono
parents: 67
diff changeset
1924 register REGNO. */
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1925
111
kono
parents: 67
diff changeset
1926 machine_mode
kono
parents: 67
diff changeset
1927 default_dwarf_frame_reg_mode (int regno)
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1928 {
111
kono
parents: 67
diff changeset
1929 machine_mode save_mode = reg_raw_mode[regno];
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1930
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1931 if (targetm.hard_regno_call_part_clobbered (eh_edge_abi.id (),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1932 regno, save_mode))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1933 save_mode = choose_hard_reg_mode (regno, 1, &eh_edge_abi);
111
kono
parents: 67
diff changeset
1934 return save_mode;
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1935 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1936
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1937 /* To be used by targets where reg_raw_mode doesn't return the right
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1938 mode for registers used in apply_builtin_return and apply_builtin_arg. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1939
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1940 fixed_size_mode
111
kono
parents: 67
diff changeset
1941 default_get_reg_raw_mode (int regno)
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1942 {
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1943 /* Targets must override this hook if the underlying register is
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1944 variable-sized. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1945 return as_a <fixed_size_mode> (reg_raw_mode[regno]);
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1946 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1947
111
kono
parents: 67
diff changeset
1948 /* Return true if a leaf function should stay leaf even with profiling
kono
parents: 67
diff changeset
1949 enabled. */
kono
parents: 67
diff changeset
1950
kono
parents: 67
diff changeset
1951 bool
kono
parents: 67
diff changeset
1952 default_keep_leaf_when_profiled ()
kono
parents: 67
diff changeset
1953 {
kono
parents: 67
diff changeset
1954 return false;
kono
parents: 67
diff changeset
1955 }
kono
parents: 67
diff changeset
1956
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1957 /* Return true if the state of option OPTION should be stored in PCH files
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1958 and checked by default_pch_valid_p. Store the option's current state
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1959 in STATE if so. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1960
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1961 static inline bool
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1962 option_affects_pch_p (int option, struct cl_option_state *state)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1963 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1964 if ((cl_options[option].flags & CL_TARGET) == 0)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1965 return false;
111
kono
parents: 67
diff changeset
1966 if ((cl_options[option].flags & CL_PCH_IGNORE) != 0)
kono
parents: 67
diff changeset
1967 return false;
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1968 if (option_flag_var (option, &global_options) == &target_flags)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1969 if (targetm.check_pch_target_flags)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1970 return false;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1971 return get_option_state (&global_options, option, state);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1972 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1973
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1974 /* Default version of get_pch_validity.
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1975 By default, every flag difference is fatal; that will be mostly right for
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1976 most targets, but completely right for very few. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1977
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1978 void *
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1979 default_get_pch_validity (size_t *sz)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1980 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1981 struct cl_option_state state;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1982 size_t i;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1983 char *result, *r;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1984
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1985 *sz = 2;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1986 if (targetm.check_pch_target_flags)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1987 *sz += sizeof (target_flags);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1988 for (i = 0; i < cl_options_count; i++)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1989 if (option_affects_pch_p (i, &state))
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1990 *sz += state.size;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1991
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1992 result = r = XNEWVEC (char, *sz);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1993 r[0] = flag_pic;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1994 r[1] = flag_pie;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1995 r += 2;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1996 if (targetm.check_pch_target_flags)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1997 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1998 memcpy (r, &target_flags, sizeof (target_flags));
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1999 r += sizeof (target_flags);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2000 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2001
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2002 for (i = 0; i < cl_options_count; i++)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2003 if (option_affects_pch_p (i, &state))
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2004 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2005 memcpy (r, state.data, state.size);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2006 r += state.size;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2007 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2008
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2009 return result;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2010 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2011
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2012 /* Return a message which says that a PCH file was created with a different
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2013 setting of OPTION. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2014
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2015 static const char *
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2016 pch_option_mismatch (const char *option)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2017 {
111
kono
parents: 67
diff changeset
2018 return xasprintf (_("created and used with differing settings of '%s'"),
kono
parents: 67
diff changeset
2019 option);
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2020 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2021
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2022 /* Default version of pch_valid_p. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2023
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2024 const char *
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2025 default_pch_valid_p (const void *data_p, size_t len)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2026 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2027 struct cl_option_state state;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2028 const char *data = (const char *)data_p;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2029 size_t i;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2030
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2031 /* -fpic and -fpie also usually make a PCH invalid. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2032 if (data[0] != flag_pic)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2033 return _("created and used with different settings of %<-fpic%>");
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2034 if (data[1] != flag_pie)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2035 return _("created and used with different settings of %<-fpie%>");
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2036 data += 2;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2037
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2038 /* Check target_flags. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2039 if (targetm.check_pch_target_flags)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2040 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2041 int tf;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2042 const char *r;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2043
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2044 memcpy (&tf, data, sizeof (target_flags));
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2045 data += sizeof (target_flags);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2046 len -= sizeof (target_flags);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2047 r = targetm.check_pch_target_flags (tf);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2048 if (r != NULL)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2049 return r;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2050 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2051
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2052 for (i = 0; i < cl_options_count; i++)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2053 if (option_affects_pch_p (i, &state))
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2054 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2055 if (memcmp (data, state.data, state.size) != 0)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2056 return pch_option_mismatch (cl_options[i].opt_text);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2057 data += state.size;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2058 len -= state.size;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2059 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2060
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2061 return NULL;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2062 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2063
111
kono
parents: 67
diff changeset
2064 /* Default version of cstore_mode. */
kono
parents: 67
diff changeset
2065
kono
parents: 67
diff changeset
2066 scalar_int_mode
kono
parents: 67
diff changeset
2067 default_cstore_mode (enum insn_code icode)
kono
parents: 67
diff changeset
2068 {
kono
parents: 67
diff changeset
2069 return as_a <scalar_int_mode> (insn_data[(int) icode].operand[0].mode);
kono
parents: 67
diff changeset
2070 }
kono
parents: 67
diff changeset
2071
kono
parents: 67
diff changeset
2072 /* Default version of member_type_forces_blk. */
kono
parents: 67
diff changeset
2073
kono
parents: 67
diff changeset
2074 bool
kono
parents: 67
diff changeset
2075 default_member_type_forces_blk (const_tree, machine_mode)
kono
parents: 67
diff changeset
2076 {
kono
parents: 67
diff changeset
2077 return false;
kono
parents: 67
diff changeset
2078 }
kono
parents: 67
diff changeset
2079
kono
parents: 67
diff changeset
2080 rtx
kono
parents: 67
diff changeset
2081 default_load_bounds_for_arg (rtx addr ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
2082 rtx ptr ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
2083 rtx bnd ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
2084 {
kono
parents: 67
diff changeset
2085 gcc_unreachable ();
kono
parents: 67
diff changeset
2086 }
kono
parents: 67
diff changeset
2087
kono
parents: 67
diff changeset
2088 void
kono
parents: 67
diff changeset
2089 default_store_bounds_for_arg (rtx val ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
2090 rtx addr ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
2091 rtx bounds ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
2092 rtx to ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
2093 {
kono
parents: 67
diff changeset
2094 gcc_unreachable ();
kono
parents: 67
diff changeset
2095 }
kono
parents: 67
diff changeset
2096
kono
parents: 67
diff changeset
2097 rtx
kono
parents: 67
diff changeset
2098 default_load_returned_bounds (rtx slot ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
2099 {
kono
parents: 67
diff changeset
2100 gcc_unreachable ();
kono
parents: 67
diff changeset
2101 }
kono
parents: 67
diff changeset
2102
kono
parents: 67
diff changeset
2103 void
kono
parents: 67
diff changeset
2104 default_store_returned_bounds (rtx slot ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
2105 rtx bounds ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
2106 {
kono
parents: 67
diff changeset
2107 gcc_unreachable ();
kono
parents: 67
diff changeset
2108 }
kono
parents: 67
diff changeset
2109
kono
parents: 67
diff changeset
2110 /* Default version of canonicalize_comparison. */
kono
parents: 67
diff changeset
2111
kono
parents: 67
diff changeset
2112 void
kono
parents: 67
diff changeset
2113 default_canonicalize_comparison (int *, rtx *, rtx *, bool)
kono
parents: 67
diff changeset
2114 {
kono
parents: 67
diff changeset
2115 }
kono
parents: 67
diff changeset
2116
kono
parents: 67
diff changeset
2117 /* Default implementation of TARGET_ATOMIC_ASSIGN_EXPAND_FENV. */
kono
parents: 67
diff changeset
2118
kono
parents: 67
diff changeset
2119 void
kono
parents: 67
diff changeset
2120 default_atomic_assign_expand_fenv (tree *, tree *, tree *)
kono
parents: 67
diff changeset
2121 {
kono
parents: 67
diff changeset
2122 }
kono
parents: 67
diff changeset
2123
kono
parents: 67
diff changeset
2124 #ifndef PAD_VARARGS_DOWN
kono
parents: 67
diff changeset
2125 #define PAD_VARARGS_DOWN BYTES_BIG_ENDIAN
kono
parents: 67
diff changeset
2126 #endif
kono
parents: 67
diff changeset
2127
kono
parents: 67
diff changeset
2128 /* Build an indirect-ref expression over the given TREE, which represents a
kono
parents: 67
diff changeset
2129 piece of a va_arg() expansion. */
kono
parents: 67
diff changeset
2130 tree
kono
parents: 67
diff changeset
2131 build_va_arg_indirect_ref (tree addr)
kono
parents: 67
diff changeset
2132 {
kono
parents: 67
diff changeset
2133 addr = build_simple_mem_ref_loc (EXPR_LOCATION (addr), addr);
kono
parents: 67
diff changeset
2134 return addr;
kono
parents: 67
diff changeset
2135 }
kono
parents: 67
diff changeset
2136
kono
parents: 67
diff changeset
2137 /* The "standard" implementation of va_arg: read the value from the
kono
parents: 67
diff changeset
2138 current (padded) address and increment by the (padded) size. */
kono
parents: 67
diff changeset
2139
kono
parents: 67
diff changeset
2140 tree
kono
parents: 67
diff changeset
2141 std_gimplify_va_arg_expr (tree valist, tree type, gimple_seq *pre_p,
kono
parents: 67
diff changeset
2142 gimple_seq *post_p)
kono
parents: 67
diff changeset
2143 {
kono
parents: 67
diff changeset
2144 tree addr, t, type_size, rounded_size, valist_tmp;
kono
parents: 67
diff changeset
2145 unsigned HOST_WIDE_INT align, boundary;
kono
parents: 67
diff changeset
2146 bool indirect;
kono
parents: 67
diff changeset
2147
kono
parents: 67
diff changeset
2148 /* All of the alignment and movement below is for args-grow-up machines.
kono
parents: 67
diff changeset
2149 As of 2004, there are only 3 ARGS_GROW_DOWNWARD targets, and they all
kono
parents: 67
diff changeset
2150 implement their own specialized gimplify_va_arg_expr routines. */
kono
parents: 67
diff changeset
2151 if (ARGS_GROW_DOWNWARD)
kono
parents: 67
diff changeset
2152 gcc_unreachable ();
kono
parents: 67
diff changeset
2153
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2154 indirect = pass_va_arg_by_reference (type);
111
kono
parents: 67
diff changeset
2155 if (indirect)
kono
parents: 67
diff changeset
2156 type = build_pointer_type (type);
kono
parents: 67
diff changeset
2157
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2158 if (targetm.calls.split_complex_arg
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2159 && TREE_CODE (type) == COMPLEX_TYPE
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2160 && targetm.calls.split_complex_arg (type))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2161 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2162 tree real_part, imag_part;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2163
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2164 real_part = std_gimplify_va_arg_expr (valist,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2165 TREE_TYPE (type), pre_p, NULL);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2166 real_part = get_initialized_tmp_var (real_part, pre_p);
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2167
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2168 imag_part = std_gimplify_va_arg_expr (unshare_expr (valist),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2169 TREE_TYPE (type), pre_p, NULL);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2170 imag_part = get_initialized_tmp_var (imag_part, pre_p);
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2171
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2172 return build2 (COMPLEX_EXPR, type, real_part, imag_part);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2173 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2174
111
kono
parents: 67
diff changeset
2175 align = PARM_BOUNDARY / BITS_PER_UNIT;
kono
parents: 67
diff changeset
2176 boundary = targetm.calls.function_arg_boundary (TYPE_MODE (type), type);
kono
parents: 67
diff changeset
2177
kono
parents: 67
diff changeset
2178 /* When we align parameter on stack for caller, if the parameter
kono
parents: 67
diff changeset
2179 alignment is beyond MAX_SUPPORTED_STACK_ALIGNMENT, it will be
kono
parents: 67
diff changeset
2180 aligned at MAX_SUPPORTED_STACK_ALIGNMENT. We will match callee
kono
parents: 67
diff changeset
2181 here with caller. */
kono
parents: 67
diff changeset
2182 if (boundary > MAX_SUPPORTED_STACK_ALIGNMENT)
kono
parents: 67
diff changeset
2183 boundary = MAX_SUPPORTED_STACK_ALIGNMENT;
kono
parents: 67
diff changeset
2184
kono
parents: 67
diff changeset
2185 boundary /= BITS_PER_UNIT;
kono
parents: 67
diff changeset
2186
kono
parents: 67
diff changeset
2187 /* Hoist the valist value into a temporary for the moment. */
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2188 valist_tmp = get_initialized_tmp_var (valist, pre_p);
111
kono
parents: 67
diff changeset
2189
kono
parents: 67
diff changeset
2190 /* va_list pointer is aligned to PARM_BOUNDARY. If argument actually
kono
parents: 67
diff changeset
2191 requires greater alignment, we must perform dynamic alignment. */
kono
parents: 67
diff changeset
2192 if (boundary > align
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2193 && !TYPE_EMPTY_P (type)
111
kono
parents: 67
diff changeset
2194 && !integer_zerop (TYPE_SIZE (type)))
kono
parents: 67
diff changeset
2195 {
kono
parents: 67
diff changeset
2196 t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist_tmp,
kono
parents: 67
diff changeset
2197 fold_build_pointer_plus_hwi (valist_tmp, boundary - 1));
kono
parents: 67
diff changeset
2198 gimplify_and_add (t, pre_p);
kono
parents: 67
diff changeset
2199
kono
parents: 67
diff changeset
2200 t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist_tmp,
kono
parents: 67
diff changeset
2201 fold_build2 (BIT_AND_EXPR, TREE_TYPE (valist),
kono
parents: 67
diff changeset
2202 valist_tmp,
kono
parents: 67
diff changeset
2203 build_int_cst (TREE_TYPE (valist), -boundary)));
kono
parents: 67
diff changeset
2204 gimplify_and_add (t, pre_p);
kono
parents: 67
diff changeset
2205 }
kono
parents: 67
diff changeset
2206 else
kono
parents: 67
diff changeset
2207 boundary = align;
kono
parents: 67
diff changeset
2208
kono
parents: 67
diff changeset
2209 /* If the actual alignment is less than the alignment of the type,
kono
parents: 67
diff changeset
2210 adjust the type accordingly so that we don't assume strict alignment
kono
parents: 67
diff changeset
2211 when dereferencing the pointer. */
kono
parents: 67
diff changeset
2212 boundary *= BITS_PER_UNIT;
kono
parents: 67
diff changeset
2213 if (boundary < TYPE_ALIGN (type))
kono
parents: 67
diff changeset
2214 {
kono
parents: 67
diff changeset
2215 type = build_variant_type_copy (type);
kono
parents: 67
diff changeset
2216 SET_TYPE_ALIGN (type, boundary);
kono
parents: 67
diff changeset
2217 }
kono
parents: 67
diff changeset
2218
kono
parents: 67
diff changeset
2219 /* Compute the rounded size of the type. */
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2220 type_size = arg_size_in_bytes (type);
111
kono
parents: 67
diff changeset
2221 rounded_size = round_up (type_size, align);
kono
parents: 67
diff changeset
2222
kono
parents: 67
diff changeset
2223 /* Reduce rounded_size so it's sharable with the postqueue. */
kono
parents: 67
diff changeset
2224 gimplify_expr (&rounded_size, pre_p, post_p, is_gimple_val, fb_rvalue);
kono
parents: 67
diff changeset
2225
kono
parents: 67
diff changeset
2226 /* Get AP. */
kono
parents: 67
diff changeset
2227 addr = valist_tmp;
kono
parents: 67
diff changeset
2228 if (PAD_VARARGS_DOWN && !integer_zerop (rounded_size))
kono
parents: 67
diff changeset
2229 {
kono
parents: 67
diff changeset
2230 /* Small args are padded downward. */
kono
parents: 67
diff changeset
2231 t = fold_build2_loc (input_location, GT_EXPR, sizetype,
kono
parents: 67
diff changeset
2232 rounded_size, size_int (align));
kono
parents: 67
diff changeset
2233 t = fold_build3 (COND_EXPR, sizetype, t, size_zero_node,
kono
parents: 67
diff changeset
2234 size_binop (MINUS_EXPR, rounded_size, type_size));
kono
parents: 67
diff changeset
2235 addr = fold_build_pointer_plus (addr, t);
kono
parents: 67
diff changeset
2236 }
kono
parents: 67
diff changeset
2237
kono
parents: 67
diff changeset
2238 /* Compute new value for AP. */
kono
parents: 67
diff changeset
2239 t = fold_build_pointer_plus (valist_tmp, rounded_size);
kono
parents: 67
diff changeset
2240 t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist, t);
kono
parents: 67
diff changeset
2241 gimplify_and_add (t, pre_p);
kono
parents: 67
diff changeset
2242
kono
parents: 67
diff changeset
2243 addr = fold_convert (build_pointer_type (type), addr);
kono
parents: 67
diff changeset
2244
kono
parents: 67
diff changeset
2245 if (indirect)
kono
parents: 67
diff changeset
2246 addr = build_va_arg_indirect_ref (addr);
kono
parents: 67
diff changeset
2247
kono
parents: 67
diff changeset
2248 return build_va_arg_indirect_ref (addr);
kono
parents: 67
diff changeset
2249 }
kono
parents: 67
diff changeset
2250
kono
parents: 67
diff changeset
2251 /* An implementation of TARGET_CAN_USE_DOLOOP_P for targets that do
kono
parents: 67
diff changeset
2252 not support nested low-overhead loops. */
kono
parents: 67
diff changeset
2253
kono
parents: 67
diff changeset
2254 bool
kono
parents: 67
diff changeset
2255 can_use_doloop_if_innermost (const widest_int &, const widest_int &,
kono
parents: 67
diff changeset
2256 unsigned int loop_depth, bool)
kono
parents: 67
diff changeset
2257 {
kono
parents: 67
diff changeset
2258 return loop_depth == 1;
kono
parents: 67
diff changeset
2259 }
kono
parents: 67
diff changeset
2260
kono
parents: 67
diff changeset
2261 /* Default implementation of TARGET_OPTAB_SUPPORTED_P. */
kono
parents: 67
diff changeset
2262
kono
parents: 67
diff changeset
2263 bool
kono
parents: 67
diff changeset
2264 default_optab_supported_p (int, machine_mode, machine_mode, optimization_type)
kono
parents: 67
diff changeset
2265 {
kono
parents: 67
diff changeset
2266 return true;
kono
parents: 67
diff changeset
2267 }
kono
parents: 67
diff changeset
2268
kono
parents: 67
diff changeset
2269 /* Default implementation of TARGET_MAX_NOCE_IFCVT_SEQ_COST. */
kono
parents: 67
diff changeset
2270
kono
parents: 67
diff changeset
2271 unsigned int
kono
parents: 67
diff changeset
2272 default_max_noce_ifcvt_seq_cost (edge e)
kono
parents: 67
diff changeset
2273 {
kono
parents: 67
diff changeset
2274 bool predictable_p = predictable_edge_p (e);
kono
parents: 67
diff changeset
2275
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2276 if (predictable_p)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2277 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2278 if (global_options_set.x_param_max_rtl_if_conversion_predictable_cost)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2279 return param_max_rtl_if_conversion_predictable_cost;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2280 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2281 else
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2282 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2283 if (global_options_set.x_param_max_rtl_if_conversion_unpredictable_cost)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2284 return param_max_rtl_if_conversion_unpredictable_cost;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2285 }
111
kono
parents: 67
diff changeset
2286
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2287 return BRANCH_COST (true, predictable_p) * COSTS_N_INSNS (3);
111
kono
parents: 67
diff changeset
2288 }
kono
parents: 67
diff changeset
2289
kono
parents: 67
diff changeset
2290 /* Default implementation of TARGET_MIN_ARITHMETIC_PRECISION. */
kono
parents: 67
diff changeset
2291
kono
parents: 67
diff changeset
2292 unsigned int
kono
parents: 67
diff changeset
2293 default_min_arithmetic_precision (void)
kono
parents: 67
diff changeset
2294 {
kono
parents: 67
diff changeset
2295 return WORD_REGISTER_OPERATIONS ? BITS_PER_WORD : BITS_PER_UNIT;
kono
parents: 67
diff changeset
2296 }
kono
parents: 67
diff changeset
2297
kono
parents: 67
diff changeset
2298 /* Default implementation of TARGET_C_EXCESS_PRECISION. */
kono
parents: 67
diff changeset
2299
kono
parents: 67
diff changeset
2300 enum flt_eval_method
kono
parents: 67
diff changeset
2301 default_excess_precision (enum excess_precision_type ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
2302 {
kono
parents: 67
diff changeset
2303 return FLT_EVAL_METHOD_PROMOTE_TO_FLOAT;
kono
parents: 67
diff changeset
2304 }
kono
parents: 67
diff changeset
2305
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2306 /* Default implementation for
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2307 TARGET_STACK_CLASH_PROTECTION_ALLOCA_PROBE_RANGE. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2308 HOST_WIDE_INT
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2309 default_stack_clash_protection_alloca_probe_range (void)
111
kono
parents: 67
diff changeset
2310 {
kono
parents: 67
diff changeset
2311 return 0;
kono
parents: 67
diff changeset
2312 }
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
2313
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2314 /* The default implementation of TARGET_EARLY_REMAT_MODES. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2315
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2316 void
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2317 default_select_early_remat_modes (sbitmap)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2318 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2319 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2320
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2321 /* The default implementation of TARGET_PREFERRED_ELSE_VALUE. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2322
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2323 tree
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2324 default_preferred_else_value (unsigned, tree type, unsigned, tree *)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2325 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2326 return build_zero_cst (type);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2327 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2328
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2329 /* Default implementation of TARGET_HAVE_SPECULATION_SAFE_VALUE. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2330 bool
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2331 default_have_speculation_safe_value (bool active ATTRIBUTE_UNUSED)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2332 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2333 #ifdef HAVE_speculation_barrier
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2334 return active ? HAVE_speculation_barrier : true;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2335 #else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2336 return false;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2337 #endif
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2338 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2339 /* Alternative implementation of TARGET_HAVE_SPECULATION_SAFE_VALUE
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2340 that can be used on targets that never have speculative execution. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2341 bool
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2342 speculation_safe_value_not_needed (bool active)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2343 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2344 return !active;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2345 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2346
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2347 /* Default implementation of the speculation-safe-load builtin. This
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2348 implementation simply copies val to result and generates a
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2349 speculation_barrier insn, if such a pattern is defined. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2350 rtx
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2351 default_speculation_safe_value (machine_mode mode ATTRIBUTE_UNUSED,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2352 rtx result, rtx val,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2353 rtx failval ATTRIBUTE_UNUSED)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2354 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2355 emit_move_insn (result, val);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2356
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2357 #ifdef HAVE_speculation_barrier
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2358 /* Assume the target knows what it is doing: if it defines a
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2359 speculation barrier, but it is not enabled, then assume that one
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2360 isn't needed. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2361 if (HAVE_speculation_barrier)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2362 emit_insn (gen_speculation_barrier ());
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2363 #endif
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2364
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2365 return result;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2366 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2367
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2368 #include "gt-targhooks.h"