annotate gcc/targhooks.c @ 118:fd00160c1b76

ifdef TARGET_64BIT
author mir3636
date Tue, 27 Feb 2018 15:01:35 +0900
parents 04ced10e8804
children 84e7813d76e9
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.
111
kono
parents: 67
diff changeset
2 Copyright (C) 2003-2017 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 "params.h"
kono
parents: 67
diff changeset
83 #include "real.h"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
84
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
85
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
86 bool
111
kono
parents: 67
diff changeset
87 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
88 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
89 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
90 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
91 #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
92 /* 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
93 if (strict)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
94 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
95 else
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
96 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
97 #else
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
98 gcc_unreachable ();
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
99 #endif
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
100 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
101
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 void
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 default_external_libcall (rtx fun ATTRIBUTE_UNUSED)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 #ifdef ASM_OUTPUT_EXTERNAL_LIBCALL
111
kono
parents: 67
diff changeset
106 ASM_OUTPUT_EXTERNAL_LIBCALL (asm_out_file, fun);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 #endif
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 }
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 int
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 default_unspec_may_trap_p (const_rtx x, unsigned flags)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 int i;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
114
111
kono
parents: 67
diff changeset
115 /* Any floating arithmetic may trap. */
kono
parents: 67
diff changeset
116 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
117 return 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
118
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
119 for (i = 0; i < XVECLEN (x, 0); ++i)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
121 if (may_trap_p_1 (XVECEXP (x, 0, i), flags))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 return 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 }
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 return 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
127
111
kono
parents: 67
diff changeset
128 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
129 default_promote_function_mode (const_tree type ATTRIBUTE_UNUSED,
111
kono
parents: 67
diff changeset
130 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
131 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
132 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
133 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
134 {
111
kono
parents: 67
diff changeset
135 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
136 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
137 return mode;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
138 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
139
111
kono
parents: 67
diff changeset
140 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
141 default_promote_function_mode_always_promote (const_tree type,
111
kono
parents: 67
diff changeset
142 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
143 int *punsignedp,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
144 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
145 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
146 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
147 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
148 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
149
111
kono
parents: 67
diff changeset
150 machine_mode
kono
parents: 67
diff changeset
151 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
152 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
153 if (m1 == m2)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
154 return m1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
155 return VOIDmode;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
156 }
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 bool
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
159 default_return_in_memory (const_tree type,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
160 const_tree fntype ATTRIBUTE_UNUSED)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
161 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
162 return (TYPE_MODE (type) == BLKmode);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
163 }
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 rtx
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
166 default_legitimize_address (rtx x, rtx orig_x ATTRIBUTE_UNUSED,
111
kono
parents: 67
diff changeset
167 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
168 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
169 return x;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
170 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
171
111
kono
parents: 67
diff changeset
172 bool
kono
parents: 67
diff changeset
173 default_legitimize_address_displacement (rtx *disp ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
174 rtx *offset ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
175 machine_mode mode ATTRIBUTE_UNUSED)
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 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
191 error ("__builtin_saveregs not supported by this target");
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
111
kono
parents: 67
diff changeset
196 default_setup_incoming_varargs (cumulative_args_t ca ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
197 machine_mode mode ATTRIBUTE_UNUSED,
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
198 tree type ATTRIBUTE_UNUSED,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
199 int *pretend_arg_size ATTRIBUTE_UNUSED,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
200 int second_time ATTRIBUTE_UNUSED)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
201 {
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
204 /* The default implementation of TARGET_BUILTIN_SETJMP_FRAME_VALUE. */
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 rtx
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
207 default_builtin_setjmp_frame_value (void)
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 return virtual_stack_vars_rtx;
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
212 /* 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
213
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
214 bool
111
kono
parents: 67
diff changeset
215 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
216 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
217 return false;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
218 }
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 bool
111
kono
parents: 67
diff changeset
221 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
222 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
223 return (targetm.calls.setup_incoming_varargs
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
224 != default_setup_incoming_varargs);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
225 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
226
111
kono
parents: 67
diff changeset
227 scalar_int_mode
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
228 default_eh_return_filter_mode (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
229 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
230 return targetm.unwind_word_mode ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
231 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
232
111
kono
parents: 67
diff changeset
233 scalar_int_mode
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
234 default_libgcc_cmp_return_mode (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
235 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
236 return word_mode;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
237 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
238
111
kono
parents: 67
diff changeset
239 scalar_int_mode
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
240 default_libgcc_shift_count_mode (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
241 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
242 return word_mode;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
243 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
244
111
kono
parents: 67
diff changeset
245 scalar_int_mode
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
246 default_unwind_word_mode (void)
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 return word_mode;
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
251 /* The default implementation of TARGET_SHIFT_TRUNCATION_MASK. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
252
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
253 unsigned HOST_WIDE_INT
111
kono
parents: 67
diff changeset
254 default_shift_truncation_mask (machine_mode mode)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
255 {
111
kono
parents: 67
diff changeset
256 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
257 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
258
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
259 /* The default implementation of TARGET_MIN_DIVISIONS_FOR_RECIP_MUL. */
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 unsigned int
111
kono
parents: 67
diff changeset
262 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
263 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
264 return have_insn_for (DIV, mode) ? 3 : 2;
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
267 /* The default implementation of TARGET_MODE_REP_EXTENDED. */
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 int
111
kono
parents: 67
diff changeset
270 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
271 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
272 return UNKNOWN;
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
275 /* 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
276
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
277 bool
111
kono
parents: 67
diff changeset
278 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
279 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
280 return true;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
281 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
282
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
283 /* Return machine mode for non-standard suffix
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
284 or VOIDmode if non-standard suffixes are unsupported. */
111
kono
parents: 67
diff changeset
285 machine_mode
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
286 default_mode_for_suffix (char suffix ATTRIBUTE_UNUSED)
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 return VOIDmode;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
289 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
290
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
291 /* 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
292 tree
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
293 default_cxx_guard_type (void)
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 return long_long_integer_type_node;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
296 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
297
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
298 /* 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
299 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
300 known that a cookie is needed. */
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
303 default_cxx_get_cookie_size (tree type)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
304 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
305 tree cookie_size;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
306
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
307 /* 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
308 (true_type)) bytes. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
309 tree sizetype_size;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
310 tree type_align;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
311
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
312 sizetype_size = size_in_bytes (sizetype);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
313 type_align = size_int (TYPE_ALIGN_UNIT (type));
111
kono
parents: 67
diff changeset
314 if (tree_int_cst_lt (type_align, sizetype_size))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
315 cookie_size = sizetype_size;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
316 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
317 cookie_size = type_align;
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 cookie_size;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
320 }
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 /* 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
323 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
324
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
325 bool
111
kono
parents: 67
diff changeset
326 hook_pass_by_reference_must_pass_in_stack (cumulative_args_t c ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
327 machine_mode mode ATTRIBUTE_UNUSED, const_tree type ATTRIBUTE_UNUSED,
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
328 bool named_arg ATTRIBUTE_UNUSED)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
329 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
330 return targetm.calls.must_pass_in_stack (mode, type);
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
333 /* Return true if a parameter follows callee copies conventions. This
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
334 version of the hook is true for all named arguments. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
335
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
336 bool
111
kono
parents: 67
diff changeset
337 hook_callee_copies_named (cumulative_args_t ca ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
338 machine_mode mode ATTRIBUTE_UNUSED,
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
339 const_tree type ATTRIBUTE_UNUSED, bool named)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
340 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
341 return named;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
342 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
343
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
344 /* 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
345
f6334be47118 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 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
347 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
348 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
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 #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
351 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
352 #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
353 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
354 #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
355 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
356
f6334be47118 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 /* 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
358 address is X. */
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
359
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
360 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
361 default_print_operand_address (FILE *stream ATTRIBUTE_UNUSED,
111
kono
parents: 67
diff changeset
362 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
363 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
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 #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
366 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
367 #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
368 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
369 #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
370 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
371
f6334be47118 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 /* 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
373 `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
374
f6334be47118 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 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
376 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
377 {
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
378 #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
379 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
380 #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
381 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
382 #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
383 }
f6334be47118 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
f6334be47118 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 /* 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
386 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
387 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
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 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
390 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
391 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
392 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
393 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
394 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
395
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
396 /* 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
397 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
398 the arithmetic is supported.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
399
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
400 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
401 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
402 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
403 supported by optabs.c. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
404
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
405 bool
111
kono
parents: 67
diff changeset
406 default_scalar_mode_supported_p (scalar_mode mode)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
407 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
408 int precision = GET_MODE_PRECISION (mode);
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 switch (GET_MODE_CLASS (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 case MODE_PARTIAL_INT:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
413 case MODE_INT:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
414 if (precision == CHAR_TYPE_SIZE)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
415 return true;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
416 if (precision == SHORT_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 == INT_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 == LONG_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_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 == 2 * BITS_PER_WORD)
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 return false;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
427
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
428 case MODE_FLOAT:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
429 if (precision == FLOAT_TYPE_SIZE)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
430 return true;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
431 if (precision == DOUBLE_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 == LONG_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 return false;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
436
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
437 case MODE_DECIMAL_FLOAT:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
438 case MODE_FRACT:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
439 case MODE_UFRACT:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
440 case MODE_ACCUM:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
441 case MODE_UACCUM:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
442 return false;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
443
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
444 default:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
445 gcc_unreachable ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
446 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
447 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
448
111
kono
parents: 67
diff changeset
449 /* Return true if libgcc supports floating-point mode MODE (known to
kono
parents: 67
diff changeset
450 be supported as a scalar mode). */
kono
parents: 67
diff changeset
451
kono
parents: 67
diff changeset
452 bool
kono
parents: 67
diff changeset
453 default_libgcc_floating_mode_supported_p (scalar_float_mode mode)
kono
parents: 67
diff changeset
454 {
kono
parents: 67
diff changeset
455 switch (mode)
kono
parents: 67
diff changeset
456 {
kono
parents: 67
diff changeset
457 #ifdef HAVE_SFmode
kono
parents: 67
diff changeset
458 case E_SFmode:
kono
parents: 67
diff changeset
459 #endif
kono
parents: 67
diff changeset
460 #ifdef HAVE_DFmode
kono
parents: 67
diff changeset
461 case E_DFmode:
kono
parents: 67
diff changeset
462 #endif
kono
parents: 67
diff changeset
463 #ifdef HAVE_XFmode
kono
parents: 67
diff changeset
464 case E_XFmode:
kono
parents: 67
diff changeset
465 #endif
kono
parents: 67
diff changeset
466 #ifdef HAVE_TFmode
kono
parents: 67
diff changeset
467 case E_TFmode:
kono
parents: 67
diff changeset
468 #endif
kono
parents: 67
diff changeset
469 return true;
kono
parents: 67
diff changeset
470
kono
parents: 67
diff changeset
471 default:
kono
parents: 67
diff changeset
472 return false;
kono
parents: 67
diff changeset
473 }
kono
parents: 67
diff changeset
474 }
kono
parents: 67
diff changeset
475
kono
parents: 67
diff changeset
476 /* Return the machine mode to use for the type _FloatN, if EXTENDED is
kono
parents: 67
diff changeset
477 false, or _FloatNx, if EXTENDED is true, or VOIDmode if not
kono
parents: 67
diff changeset
478 supported. */
kono
parents: 67
diff changeset
479 opt_scalar_float_mode
kono
parents: 67
diff changeset
480 default_floatn_mode (int n, bool extended)
kono
parents: 67
diff changeset
481 {
kono
parents: 67
diff changeset
482 if (extended)
kono
parents: 67
diff changeset
483 {
kono
parents: 67
diff changeset
484 opt_scalar_float_mode cand1, cand2;
kono
parents: 67
diff changeset
485 scalar_float_mode mode;
kono
parents: 67
diff changeset
486 switch (n)
kono
parents: 67
diff changeset
487 {
kono
parents: 67
diff changeset
488 case 32:
kono
parents: 67
diff changeset
489 #ifdef HAVE_DFmode
kono
parents: 67
diff changeset
490 cand1 = DFmode;
kono
parents: 67
diff changeset
491 #endif
kono
parents: 67
diff changeset
492 break;
kono
parents: 67
diff changeset
493
kono
parents: 67
diff changeset
494 case 64:
kono
parents: 67
diff changeset
495 #ifdef HAVE_XFmode
kono
parents: 67
diff changeset
496 cand1 = XFmode;
kono
parents: 67
diff changeset
497 #endif
kono
parents: 67
diff changeset
498 #ifdef HAVE_TFmode
kono
parents: 67
diff changeset
499 cand2 = TFmode;
kono
parents: 67
diff changeset
500 #endif
kono
parents: 67
diff changeset
501 break;
kono
parents: 67
diff changeset
502
kono
parents: 67
diff changeset
503 case 128:
kono
parents: 67
diff changeset
504 break;
kono
parents: 67
diff changeset
505
kono
parents: 67
diff changeset
506 default:
kono
parents: 67
diff changeset
507 /* Those are the only valid _FloatNx types. */
kono
parents: 67
diff changeset
508 gcc_unreachable ();
kono
parents: 67
diff changeset
509 }
kono
parents: 67
diff changeset
510 if (cand1.exists (&mode)
kono
parents: 67
diff changeset
511 && REAL_MODE_FORMAT (mode)->ieee_bits > n
kono
parents: 67
diff changeset
512 && targetm.scalar_mode_supported_p (mode)
kono
parents: 67
diff changeset
513 && targetm.libgcc_floating_mode_supported_p (mode))
kono
parents: 67
diff changeset
514 return cand1;
kono
parents: 67
diff changeset
515 if (cand2.exists (&mode)
kono
parents: 67
diff changeset
516 && REAL_MODE_FORMAT (mode)->ieee_bits > n
kono
parents: 67
diff changeset
517 && targetm.scalar_mode_supported_p (mode)
kono
parents: 67
diff changeset
518 && targetm.libgcc_floating_mode_supported_p (mode))
kono
parents: 67
diff changeset
519 return cand2;
kono
parents: 67
diff changeset
520 }
kono
parents: 67
diff changeset
521 else
kono
parents: 67
diff changeset
522 {
kono
parents: 67
diff changeset
523 opt_scalar_float_mode cand;
kono
parents: 67
diff changeset
524 scalar_float_mode mode;
kono
parents: 67
diff changeset
525 switch (n)
kono
parents: 67
diff changeset
526 {
kono
parents: 67
diff changeset
527 case 16:
kono
parents: 67
diff changeset
528 /* Always enable _Float16 if we have basic support for the mode.
kono
parents: 67
diff changeset
529 Targets can control the range and precision of operations on
kono
parents: 67
diff changeset
530 the _Float16 type using TARGET_C_EXCESS_PRECISION. */
kono
parents: 67
diff changeset
531 #ifdef HAVE_HFmode
kono
parents: 67
diff changeset
532 cand = HFmode;
kono
parents: 67
diff changeset
533 #endif
kono
parents: 67
diff changeset
534 break;
kono
parents: 67
diff changeset
535
kono
parents: 67
diff changeset
536 case 32:
kono
parents: 67
diff changeset
537 #ifdef HAVE_SFmode
kono
parents: 67
diff changeset
538 cand = SFmode;
kono
parents: 67
diff changeset
539 #endif
kono
parents: 67
diff changeset
540 break;
kono
parents: 67
diff changeset
541
kono
parents: 67
diff changeset
542 case 64:
kono
parents: 67
diff changeset
543 #ifdef HAVE_DFmode
kono
parents: 67
diff changeset
544 cand = DFmode;
kono
parents: 67
diff changeset
545 #endif
kono
parents: 67
diff changeset
546 break;
kono
parents: 67
diff changeset
547
kono
parents: 67
diff changeset
548 case 128:
kono
parents: 67
diff changeset
549 #ifdef HAVE_TFmode
kono
parents: 67
diff changeset
550 cand = TFmode;
kono
parents: 67
diff changeset
551 #endif
kono
parents: 67
diff changeset
552 break;
kono
parents: 67
diff changeset
553
kono
parents: 67
diff changeset
554 default:
kono
parents: 67
diff changeset
555 break;
kono
parents: 67
diff changeset
556 }
kono
parents: 67
diff changeset
557 if (cand.exists (&mode)
kono
parents: 67
diff changeset
558 && REAL_MODE_FORMAT (mode)->ieee_bits == n
kono
parents: 67
diff changeset
559 && targetm.scalar_mode_supported_p (mode)
kono
parents: 67
diff changeset
560 && targetm.libgcc_floating_mode_supported_p (mode))
kono
parents: 67
diff changeset
561 return cand;
kono
parents: 67
diff changeset
562 }
kono
parents: 67
diff changeset
563 return opt_scalar_float_mode ();
kono
parents: 67
diff changeset
564 }
kono
parents: 67
diff changeset
565
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
566 /* 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
567 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
568 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
569 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
570 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
571 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
572
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
573 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
574 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
575 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
576 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
577 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
578
111
kono
parents: 67
diff changeset
579 /* True if the target supports floating-point exceptions and rounding
kono
parents: 67
diff changeset
580 modes. */
kono
parents: 67
diff changeset
581
kono
parents: 67
diff changeset
582 bool
kono
parents: 67
diff changeset
583 default_float_exceptions_rounding_supported_p (void)
kono
parents: 67
diff changeset
584 {
kono
parents: 67
diff changeset
585 #ifdef HAVE_adddf3
kono
parents: 67
diff changeset
586 return HAVE_adddf3;
kono
parents: 67
diff changeset
587 #else
kono
parents: 67
diff changeset
588 return false;
kono
parents: 67
diff changeset
589 #endif
kono
parents: 67
diff changeset
590 }
kono
parents: 67
diff changeset
591
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
592 /* True if the target supports decimal floating point. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
593
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
594 bool
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
595 default_decimal_float_supported_p (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
596 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
597 return ENABLE_DECIMAL_FLOAT;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
598 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
599
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
600 /* True if the target supports fixed-point arithmetic. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
601
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
602 bool
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
603 default_fixed_point_supported_p (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
604 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
605 return ENABLE_FIXED_POINT;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
606 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
607
111
kono
parents: 67
diff changeset
608 /* True if the target supports GNU indirect functions. */
kono
parents: 67
diff changeset
609
kono
parents: 67
diff changeset
610 bool
kono
parents: 67
diff changeset
611 default_has_ifunc_p (void)
kono
parents: 67
diff changeset
612 {
kono
parents: 67
diff changeset
613 return HAVE_GNU_INDIRECT_FUNCTION;
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 /* 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
617 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
618
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
619 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
620 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
621 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
622 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
623 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
624 these cases. */
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 const char *
111
kono
parents: 67
diff changeset
627 default_invalid_within_doloop (const rtx_insn *insn)
0
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 if (CALL_P (insn))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
630 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
631
111
kono
parents: 67
diff changeset
632 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
633 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
634
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
635 return NULL;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
636 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
637
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
638 /* Mapping of builtin functions to vectorized variants. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
639
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
640 tree
111
kono
parents: 67
diff changeset
641 default_builtin_vectorized_function (unsigned int, tree, tree)
kono
parents: 67
diff changeset
642 {
kono
parents: 67
diff changeset
643 return NULL_TREE;
kono
parents: 67
diff changeset
644 }
kono
parents: 67
diff changeset
645
kono
parents: 67
diff changeset
646 /* Mapping of target builtin functions to vectorized variants. */
kono
parents: 67
diff changeset
647
kono
parents: 67
diff changeset
648 tree
kono
parents: 67
diff changeset
649 default_builtin_md_vectorized_function (tree, tree, tree)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
650 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
651 return NULL_TREE;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
652 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
653
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
654 /* Vectorized conversion. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
655
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
656 tree
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
657 default_builtin_vectorized_conversion (unsigned int code 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
658 tree dest_type 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
659 tree src_type ATTRIBUTE_UNUSED)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
660 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
661 return NULL_TREE;
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
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
664 /* 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
665
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
666 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
667 default_builtin_vectorization_cost (enum vect_cost_for_stmt type_of_cost,
111
kono
parents: 67
diff changeset
668 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
669 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
670 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
671 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
672 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
673 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
674 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
675 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
676 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
677 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
678 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
679 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
680 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
681 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
682 case vec_perm:
111
kono
parents: 67
diff changeset
683 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
684 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
685
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
686 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
687 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
688 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
689
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
690 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
691 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
692
111
kono
parents: 67
diff changeset
693 case vec_construct:
kono
parents: 67
diff changeset
694 return TYPE_VECTOR_SUBPARTS (vectype) - 1;
kono
parents: 67
diff changeset
695
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 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
697 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
698 }
f6334be47118 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
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
701 /* Reciprocal. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
702
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
703 tree
111
kono
parents: 67
diff changeset
704 default_builtin_reciprocal (tree)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
705 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
706 return NULL_TREE;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
707 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
708
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
709 bool
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
710 hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false (
111
kono
parents: 67
diff changeset
711 cumulative_args_t ca ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
712 machine_mode mode ATTRIBUTE_UNUSED,
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
713 const_tree type ATTRIBUTE_UNUSED, bool named ATTRIBUTE_UNUSED)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
714 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
715 return false;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
716 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
717
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
718 bool
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
719 hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true (
111
kono
parents: 67
diff changeset
720 cumulative_args_t ca ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
721 machine_mode mode ATTRIBUTE_UNUSED,
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
722 const_tree type ATTRIBUTE_UNUSED, bool named ATTRIBUTE_UNUSED)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
723 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
724 return true;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
725 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
726
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
727 int
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
728 hook_int_CUMULATIVE_ARGS_mode_tree_bool_0 (
111
kono
parents: 67
diff changeset
729 cumulative_args_t ca ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
730 machine_mode mode ATTRIBUTE_UNUSED,
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
731 tree type ATTRIBUTE_UNUSED, bool named ATTRIBUTE_UNUSED)
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 0;
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
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
736 void
111
kono
parents: 67
diff changeset
737 default_function_arg_advance (cumulative_args_t ca ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
738 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
739 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
740 bool named 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
741 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
742 gcc_unreachable ();
111
kono
parents: 67
diff changeset
743 }
kono
parents: 67
diff changeset
744
kono
parents: 67
diff changeset
745 /* Default implementation of TARGET_FUNCTION_ARG_OFFSET. */
kono
parents: 67
diff changeset
746
kono
parents: 67
diff changeset
747 HOST_WIDE_INT
kono
parents: 67
diff changeset
748 default_function_arg_offset (machine_mode, const_tree)
kono
parents: 67
diff changeset
749 {
kono
parents: 67
diff changeset
750 return 0;
kono
parents: 67
diff changeset
751 }
kono
parents: 67
diff changeset
752
kono
parents: 67
diff changeset
753 /* Default implementation of TARGET_FUNCTION_ARG_PADDING: usually pad
kono
parents: 67
diff changeset
754 upward, but pad short args downward on big-endian machines. */
kono
parents: 67
diff changeset
755
kono
parents: 67
diff changeset
756 pad_direction
kono
parents: 67
diff changeset
757 default_function_arg_padding (machine_mode mode, const_tree type)
kono
parents: 67
diff changeset
758 {
kono
parents: 67
diff changeset
759 if (!BYTES_BIG_ENDIAN)
kono
parents: 67
diff changeset
760 return PAD_UPWARD;
kono
parents: 67
diff changeset
761
kono
parents: 67
diff changeset
762 unsigned HOST_WIDE_INT size;
kono
parents: 67
diff changeset
763 if (mode == BLKmode)
kono
parents: 67
diff changeset
764 {
kono
parents: 67
diff changeset
765 if (!type || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
kono
parents: 67
diff changeset
766 return PAD_UPWARD;
kono
parents: 67
diff changeset
767 size = int_size_in_bytes (type);
kono
parents: 67
diff changeset
768 }
kono
parents: 67
diff changeset
769 else
kono
parents: 67
diff changeset
770 size = GET_MODE_SIZE (mode);
kono
parents: 67
diff changeset
771
kono
parents: 67
diff changeset
772 if (size < (PARM_BOUNDARY / BITS_PER_UNIT))
kono
parents: 67
diff changeset
773 return PAD_DOWNWARD;
kono
parents: 67
diff changeset
774
kono
parents: 67
diff changeset
775 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
776 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
777
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
778 rtx
111
kono
parents: 67
diff changeset
779 default_function_arg (cumulative_args_t ca ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
780 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
781 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
782 bool named 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
783 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
784 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
785 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
786
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
787 rtx
111
kono
parents: 67
diff changeset
788 default_function_incoming_arg (cumulative_args_t ca ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
789 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
790 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
791 bool named 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
792 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
793 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
794 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
795
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
796 unsigned int
111
kono
parents: 67
diff changeset
797 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
798 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
799 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
800 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
801 }
f6334be47118 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
111
kono
parents: 67
diff changeset
803 unsigned int
kono
parents: 67
diff changeset
804 default_function_arg_round_boundary (machine_mode mode ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
805 const_tree type ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
806 {
kono
parents: 67
diff changeset
807 return PARM_BOUNDARY;
kono
parents: 67
diff changeset
808 }
kono
parents: 67
diff changeset
809
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
810 void
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
811 hook_void_bitmap (bitmap regs ATTRIBUTE_UNUSED)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
812 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
813 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
814
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
815 const char *
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
816 hook_invalid_arg_for_unprototyped_fn (
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
817 const_tree typelist ATTRIBUTE_UNUSED,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
818 const_tree funcdecl ATTRIBUTE_UNUSED,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
819 const_tree val ATTRIBUTE_UNUSED)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
820 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
821 return NULL;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
822 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
823
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
824 /* Initialize the stack protection decls. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
825
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
826 /* Stack protection related decls living in libgcc. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
827 static GTY(()) tree stack_chk_guard_decl;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
828
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
829 tree
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
830 default_stack_protect_guard (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
831 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
832 tree t = stack_chk_guard_decl;
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 if (t == NULL)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
835 {
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
836 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
837
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
838 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
839 VAR_DECL, get_identifier ("__stack_chk_guard"),
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
840 ptr_type_node);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
841 TREE_STATIC (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
842 TREE_PUBLIC (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
843 DECL_EXTERNAL (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
844 TREE_USED (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
845 TREE_THIS_VOLATILE (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
846 DECL_ARTIFICIAL (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
847 DECL_IGNORED_P (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
848
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
849 /* 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
850 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
851 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
852 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
853
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
854 stack_chk_guard_decl = t;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
855 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
856
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
857 return t;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
858 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
859
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
860 static GTY(()) tree stack_chk_fail_decl;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
861
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
862 tree
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
863 default_external_stack_protect_fail (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
864 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
865 tree t = stack_chk_fail_decl;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
866
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
867 if (t == NULL_TREE)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
868 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
869 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
870 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
871 FUNCTION_DECL, get_identifier ("__stack_chk_fail"), t);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
872 TREE_STATIC (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
873 TREE_PUBLIC (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
874 DECL_EXTERNAL (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
875 TREE_USED (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
876 TREE_THIS_VOLATILE (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
877 TREE_NOTHROW (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
878 DECL_ARTIFICIAL (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
879 DECL_IGNORED_P (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
880 DECL_VISIBILITY (t) = VISIBILITY_DEFAULT;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
881 DECL_VISIBILITY_SPECIFIED (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
882
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
883 stack_chk_fail_decl = t;
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
886 return build_call_expr (t, 0);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
887 }
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 tree
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
890 default_hidden_stack_protect_fail (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
891 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
892 #ifndef HAVE_GAS_HIDDEN
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
893 return default_external_stack_protect_fail ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
894 #else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
895 tree t = stack_chk_fail_decl;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
896
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
897 if (!flag_pic)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
898 return default_external_stack_protect_fail ();
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
899
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
900 if (t == NULL_TREE)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
901 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
902 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
903 t = build_decl (UNKNOWN_LOCATION, FUNCTION_DECL,
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
904 get_identifier ("__stack_chk_fail_local"), t);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
905 TREE_STATIC (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
906 TREE_PUBLIC (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
907 DECL_EXTERNAL (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
908 TREE_USED (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
909 TREE_THIS_VOLATILE (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
910 TREE_NOTHROW (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
911 DECL_ARTIFICIAL (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
912 DECL_IGNORED_P (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
913 DECL_VISIBILITY_SPECIFIED (t) = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
914 DECL_VISIBILITY (t) = VISIBILITY_HIDDEN;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
915
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
916 stack_chk_fail_decl = t;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
917 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
918
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
919 return build_call_expr (t, 0);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
920 #endif
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
923 bool
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
924 hook_bool_const_rtx_commutative_p (const_rtx x,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
925 int outer_code ATTRIBUTE_UNUSED)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
926 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
927 return COMMUTATIVE_P (x);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
928 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
929
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
930 rtx
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
931 default_function_value (const_tree ret_type ATTRIBUTE_UNUSED,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
932 const_tree fn_decl_or_type,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
933 bool outgoing ATTRIBUTE_UNUSED)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
934 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
935 /* The old interface doesn't handle receiving the function type. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
936 if (fn_decl_or_type
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
937 && !DECL_P (fn_decl_or_type))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
938 fn_decl_or_type = NULL;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
939
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
940 #ifdef FUNCTION_VALUE
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
941 return FUNCTION_VALUE (ret_type, fn_decl_or_type);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
942 #else
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
943 gcc_unreachable ();
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
944 #endif
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
945 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
946
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
947 rtx
111
kono
parents: 67
diff changeset
948 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
949 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
950 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
951 #ifdef LIBCALL_VALUE
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
952 return LIBCALL_VALUE (mode);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
953 #else
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
954 gcc_unreachable ();
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
955 #endif
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
956 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
957
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
958 /* 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
959
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
960 bool
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
961 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
962 {
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
963 #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
964 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
965 #else
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
966 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
967 #endif
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
968 }
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
969
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
970 rtx
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
971 default_internal_arg_pointer (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
972 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
973 /* 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
974 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
975 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
976 considered fixed even though it is not marked as such. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
977 if ((ARG_POINTER_REGNUM == STACK_POINTER_REGNUM
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
978 || ! (fixed_regs[ARG_POINTER_REGNUM]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
979 || ARG_POINTER_REGNUM == FRAME_POINTER_REGNUM)))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
980 return copy_to_reg (virtual_incoming_args_rtx);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
981 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
982 return virtual_incoming_args_rtx;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
983 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
984
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
985 rtx
111
kono
parents: 67
diff changeset
986 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
987 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
988 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
989 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
990 #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
991 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
992 #endif
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
993 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
994
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
995 #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
996 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
997 #endif
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
998
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
999 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1000 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
1001 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
1002 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1003 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
1004 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
1005 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1006
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1007 /* 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
1008 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
1009 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
1010 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1011 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1012
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1013 void
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1014 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
1015 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
1016 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1017 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
1018 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1019
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
1020 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
1021 default_return_pops_args (tree fundecl 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
1022 tree funtype 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
1023 int size 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
1024 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1025 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
1026 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1027
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1028 reg_class_t
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1029 default_branch_target_register_class (void)
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 return NO_REGS;
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
111
kono
parents: 67
diff changeset
1034 reg_class_t
kono
parents: 67
diff changeset
1035 default_ira_change_pseudo_allocno_class (int regno ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
1036 reg_class_t cl,
kono
parents: 67
diff changeset
1037 reg_class_t best_cl ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
1038 {
kono
parents: 67
diff changeset
1039 return cl;
kono
parents: 67
diff changeset
1040 }
kono
parents: 67
diff changeset
1041
kono
parents: 67
diff changeset
1042 extern bool
kono
parents: 67
diff changeset
1043 default_lra_p (void)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1044 {
111
kono
parents: 67
diff changeset
1045 return true;
kono
parents: 67
diff changeset
1046 }
kono
parents: 67
diff changeset
1047
kono
parents: 67
diff changeset
1048 int
kono
parents: 67
diff changeset
1049 default_register_priority (int hard_regno ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
1050 {
kono
parents: 67
diff changeset
1051 return 0;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1052 }
111
kono
parents: 67
diff changeset
1053
kono
parents: 67
diff changeset
1054 extern bool
kono
parents: 67
diff changeset
1055 default_register_usage_leveling_p (void)
kono
parents: 67
diff changeset
1056 {
kono
parents: 67
diff changeset
1057 return false;
kono
parents: 67
diff changeset
1058 }
kono
parents: 67
diff changeset
1059
kono
parents: 67
diff changeset
1060 extern bool
kono
parents: 67
diff changeset
1061 default_different_addr_displacement_p (void)
kono
parents: 67
diff changeset
1062 {
kono
parents: 67
diff changeset
1063 return false;
kono
parents: 67
diff changeset
1064 }
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1065
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
1066 reg_class_t
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1067 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
1068 reg_class_t reload_class_i ATTRIBUTE_UNUSED,
111
kono
parents: 67
diff changeset
1069 machine_mode reload_mode ATTRIBUTE_UNUSED,
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1070 secondary_reload_info *sri)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1071 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1072 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
1073 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
1074
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1075 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
1076 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1077 sri->icode = sri->prev_sri->t_icode;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1078 return NO_REGS;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1079 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1080 #ifdef SECONDARY_INPUT_RELOAD_CLASS
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1081 if (in_p)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1082 rclass = SECONDARY_INPUT_RELOAD_CLASS (reload_class, reload_mode, x);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1083 #endif
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1084 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1085 if (! in_p)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1086 rclass = SECONDARY_OUTPUT_RELOAD_CLASS (reload_class, reload_mode, x);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1087 #endif
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1088 if (rclass != NO_REGS)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1089 {
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
1090 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
1091 = 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
1092 reload_mode);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1093
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1094 if (icode != CODE_FOR_nothing
111
kono
parents: 67
diff changeset
1095 && !insn_operand_matches (icode, in_p, x))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1096 icode = CODE_FOR_nothing;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1097 else if (icode != CODE_FOR_nothing)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1098 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1099 const char *insn_constraint, *scratch_constraint;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1100 enum reg_class insn_class, scratch_class;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1101
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1102 gcc_assert (insn_data[(int) icode].n_operands == 3);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1103 insn_constraint = insn_data[(int) icode].operand[!in_p].constraint;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1104 if (!*insn_constraint)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1105 insn_class = ALL_REGS;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1106 else
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 (in_p)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1109 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1110 gcc_assert (*insn_constraint == '=');
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1111 insn_constraint++;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1112 }
111
kono
parents: 67
diff changeset
1113 insn_class = (reg_class_for_constraint
kono
parents: 67
diff changeset
1114 (lookup_constraint (insn_constraint)));
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1115 gcc_assert (insn_class != NO_REGS);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1116 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1117
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1118 scratch_constraint = insn_data[(int) icode].operand[2].constraint;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1119 /* The scratch register's constraint must start with "=&",
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1120 except for an input reload, where only "=" is necessary,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1121 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
1122 the input. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1123 gcc_assert (scratch_constraint[0] == '='
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1124 && (in_p || scratch_constraint[1] == '&'));
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1125 scratch_constraint++;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1126 if (*scratch_constraint == '&')
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1127 scratch_constraint++;
111
kono
parents: 67
diff changeset
1128 scratch_class = (reg_class_for_constraint
kono
parents: 67
diff changeset
1129 (lookup_constraint (scratch_constraint)));
0
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 if (reg_class_subset_p (reload_class, insn_class))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1132 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1133 gcc_assert (scratch_class == rclass);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1134 rclass = NO_REGS;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1135 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1136 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1137 rclass = insn_class;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1138
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1139 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1140 if (rclass == NO_REGS)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1141 sri->icode = icode;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1142 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1143 sri->t_icode = icode;
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 return rclass;
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
111
kono
parents: 67
diff changeset
1148 /* The default implementation of TARGET_SECONDARY_MEMORY_NEEDED_MODE. */
kono
parents: 67
diff changeset
1149
kono
parents: 67
diff changeset
1150 machine_mode
kono
parents: 67
diff changeset
1151 default_secondary_memory_needed_mode (machine_mode mode)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1152 {
111
kono
parents: 67
diff changeset
1153 if (!targetm.lra_p ()
kono
parents: 67
diff changeset
1154 && GET_MODE_BITSIZE (mode) < BITS_PER_WORD
kono
parents: 67
diff changeset
1155 && INTEGRAL_MODE_P (mode))
kono
parents: 67
diff changeset
1156 return mode_for_size (BITS_PER_WORD, GET_MODE_CLASS (mode), 0).require ();
kono
parents: 67
diff changeset
1157 return mode;
0
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1160 /* 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
1161 should be placed in readonly memory. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1162
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1163 int
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1164 default_reloc_rw_mask (void)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1165 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1166 return flag_pic ? 3 : 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1167 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1168
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1169 /* By default, do no modification. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1170 tree default_mangle_decl_assembler_name (tree decl ATTRIBUTE_UNUSED,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1171 tree id)
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 return id;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1174 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1175
111
kono
parents: 67
diff changeset
1176 /* The default implementation of TARGET_STATIC_RTX_ALIGNMENT. */
kono
parents: 67
diff changeset
1177
kono
parents: 67
diff changeset
1178 HOST_WIDE_INT
kono
parents: 67
diff changeset
1179 default_static_rtx_alignment (machine_mode mode)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1180 {
111
kono
parents: 67
diff changeset
1181 return GET_MODE_ALIGNMENT (mode);
kono
parents: 67
diff changeset
1182 }
kono
parents: 67
diff changeset
1183
kono
parents: 67
diff changeset
1184 /* The default implementation of TARGET_CONSTANT_ALIGNMENT. */
kono
parents: 67
diff changeset
1185
kono
parents: 67
diff changeset
1186 HOST_WIDE_INT
kono
parents: 67
diff changeset
1187 default_constant_alignment (const_tree, HOST_WIDE_INT align)
kono
parents: 67
diff changeset
1188 {
kono
parents: 67
diff changeset
1189 return align;
kono
parents: 67
diff changeset
1190 }
kono
parents: 67
diff changeset
1191
kono
parents: 67
diff changeset
1192 /* An implementation of TARGET_CONSTANT_ALIGNMENT that aligns strings
kono
parents: 67
diff changeset
1193 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
1194
111
kono
parents: 67
diff changeset
1195 HOST_WIDE_INT
kono
parents: 67
diff changeset
1196 constant_alignment_word_strings (const_tree exp, HOST_WIDE_INT align)
kono
parents: 67
diff changeset
1197 {
kono
parents: 67
diff changeset
1198 if (TREE_CODE (exp) == STRING_CST)
kono
parents: 67
diff changeset
1199 return MAX (align, BITS_PER_WORD);
kono
parents: 67
diff changeset
1200 return align;
kono
parents: 67
diff changeset
1201 }
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1202
111
kono
parents: 67
diff changeset
1203 /* Default to natural alignment for vector types. */
kono
parents: 67
diff changeset
1204 HOST_WIDE_INT
kono
parents: 67
diff changeset
1205 default_vector_alignment (const_tree type)
kono
parents: 67
diff changeset
1206 {
kono
parents: 67
diff changeset
1207 HOST_WIDE_INT align = tree_to_shwi (TYPE_SIZE (type));
kono
parents: 67
diff changeset
1208 if (align > MAX_OFILE_ALIGNMENT)
kono
parents: 67
diff changeset
1209 align = MAX_OFILE_ALIGNMENT;
kono
parents: 67
diff changeset
1210 return align;
kono
parents: 67
diff changeset
1211 }
kono
parents: 67
diff changeset
1212
kono
parents: 67
diff changeset
1213 /* The default implementation of
kono
parents: 67
diff changeset
1214 TARGET_VECTORIZE_PREFERRED_VECTOR_ALIGNMENT. */
kono
parents: 67
diff changeset
1215
kono
parents: 67
diff changeset
1216 HOST_WIDE_INT
kono
parents: 67
diff changeset
1217 default_preferred_vector_alignment (const_tree type)
kono
parents: 67
diff changeset
1218 {
kono
parents: 67
diff changeset
1219 return TYPE_ALIGN (type);
kono
parents: 67
diff changeset
1220 }
kono
parents: 67
diff changeset
1221
kono
parents: 67
diff changeset
1222 /* By default assume vectors of element TYPE require a multiple of the natural
kono
parents: 67
diff changeset
1223 alignment of TYPE. TYPE is naturally aligned if IS_PACKED is false. */
kono
parents: 67
diff changeset
1224 bool
kono
parents: 67
diff changeset
1225 default_builtin_vector_alignment_reachable (const_tree /*type*/, bool is_packed)
kono
parents: 67
diff changeset
1226 {
kono
parents: 67
diff changeset
1227 return ! is_packed;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1228 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1229
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1230 /* 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
1231 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
1232 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
1233 bool
111
kono
parents: 67
diff changeset
1234 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
1235 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
1236 ATTRIBUTE_UNUSED,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1237 int misalignment
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1238 ATTRIBUTE_UNUSED,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1239 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
1240 ATTRIBUTE_UNUSED)
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1241 {
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
1242 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
1243 return true;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1244 return false;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1245 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1246
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
1247 /* 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
1248 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
1249
111
kono
parents: 67
diff changeset
1250 machine_mode
kono
parents: 67
diff changeset
1251 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
1252 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1253 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
1254 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1255
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1256 /* By default only the size derived from the preferred vector 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
1257 is tried. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1258
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1259 unsigned 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
1260 default_autovectorize_vector_sizes (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
1261 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1262 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
1263 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1264
111
kono
parents: 67
diff changeset
1265 /* By defaults a vector of integers is used as a mask. */
kono
parents: 67
diff changeset
1266
kono
parents: 67
diff changeset
1267 opt_machine_mode
kono
parents: 67
diff changeset
1268 default_get_mask_mode (unsigned nunits, unsigned vector_size)
kono
parents: 67
diff changeset
1269 {
kono
parents: 67
diff changeset
1270 unsigned elem_size = vector_size / nunits;
kono
parents: 67
diff changeset
1271 scalar_int_mode elem_mode
kono
parents: 67
diff changeset
1272 = smallest_int_mode_for_size (elem_size * BITS_PER_UNIT);
kono
parents: 67
diff changeset
1273 machine_mode vector_mode;
kono
parents: 67
diff changeset
1274
kono
parents: 67
diff changeset
1275 gcc_assert (elem_size * nunits == vector_size);
kono
parents: 67
diff changeset
1276
kono
parents: 67
diff changeset
1277 if (mode_for_vector (elem_mode, nunits).exists (&vector_mode)
kono
parents: 67
diff changeset
1278 && VECTOR_MODE_P (vector_mode)
kono
parents: 67
diff changeset
1279 && targetm.vector_mode_supported_p (vector_mode))
kono
parents: 67
diff changeset
1280 return vector_mode;
kono
parents: 67
diff changeset
1281
kono
parents: 67
diff changeset
1282 return opt_machine_mode ();
kono
parents: 67
diff changeset
1283 }
kono
parents: 67
diff changeset
1284
kono
parents: 67
diff changeset
1285 /* By default, the cost model accumulates three separate costs (prologue,
kono
parents: 67
diff changeset
1286 loop body, and epilogue) for a vectorized loop or block. So allocate an
kono
parents: 67
diff changeset
1287 array of three unsigned ints, set it to zero, and return its address. */
kono
parents: 67
diff changeset
1288
kono
parents: 67
diff changeset
1289 void *
kono
parents: 67
diff changeset
1290 default_init_cost (struct loop *loop_info ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
1291 {
kono
parents: 67
diff changeset
1292 unsigned *cost = XNEWVEC (unsigned, 3);
kono
parents: 67
diff changeset
1293 cost[vect_prologue] = cost[vect_body] = cost[vect_epilogue] = 0;
kono
parents: 67
diff changeset
1294 return cost;
kono
parents: 67
diff changeset
1295 }
kono
parents: 67
diff changeset
1296
kono
parents: 67
diff changeset
1297 /* By default, the cost model looks up the cost of the given statement
kono
parents: 67
diff changeset
1298 kind and mode, multiplies it by the occurrence count, accumulates
kono
parents: 67
diff changeset
1299 it into the cost specified by WHERE, and returns the cost added. */
kono
parents: 67
diff changeset
1300
kono
parents: 67
diff changeset
1301 unsigned
kono
parents: 67
diff changeset
1302 default_add_stmt_cost (void *data, int count, enum vect_cost_for_stmt kind,
kono
parents: 67
diff changeset
1303 struct _stmt_vec_info *stmt_info, int misalign,
kono
parents: 67
diff changeset
1304 enum vect_cost_model_location where)
kono
parents: 67
diff changeset
1305 {
kono
parents: 67
diff changeset
1306 unsigned *cost = (unsigned *) data;
kono
parents: 67
diff changeset
1307 unsigned retval = 0;
kono
parents: 67
diff changeset
1308
kono
parents: 67
diff changeset
1309 tree vectype = stmt_info ? stmt_vectype (stmt_info) : NULL_TREE;
kono
parents: 67
diff changeset
1310 int stmt_cost = targetm.vectorize.builtin_vectorization_cost (kind, vectype,
kono
parents: 67
diff changeset
1311 misalign);
kono
parents: 67
diff changeset
1312 /* Statements in an inner loop relative to the loop being
kono
parents: 67
diff changeset
1313 vectorized are weighted more heavily. The value here is
kono
parents: 67
diff changeset
1314 arbitrary and could potentially be improved with analysis. */
kono
parents: 67
diff changeset
1315 if (where == vect_body && stmt_info && stmt_in_inner_loop_p (stmt_info))
kono
parents: 67
diff changeset
1316 count *= 50; /* FIXME. */
kono
parents: 67
diff changeset
1317
kono
parents: 67
diff changeset
1318 retval = (unsigned) (count * stmt_cost);
kono
parents: 67
diff changeset
1319 cost[where] += retval;
kono
parents: 67
diff changeset
1320
kono
parents: 67
diff changeset
1321 return retval;
kono
parents: 67
diff changeset
1322 }
kono
parents: 67
diff changeset
1323
kono
parents: 67
diff changeset
1324 /* By default, the cost model just returns the accumulated costs. */
kono
parents: 67
diff changeset
1325
kono
parents: 67
diff changeset
1326 void
kono
parents: 67
diff changeset
1327 default_finish_cost (void *data, unsigned *prologue_cost,
kono
parents: 67
diff changeset
1328 unsigned *body_cost, unsigned *epilogue_cost)
kono
parents: 67
diff changeset
1329 {
kono
parents: 67
diff changeset
1330 unsigned *cost = (unsigned *) data;
kono
parents: 67
diff changeset
1331 *prologue_cost = cost[vect_prologue];
kono
parents: 67
diff changeset
1332 *body_cost = cost[vect_body];
kono
parents: 67
diff changeset
1333 *epilogue_cost = cost[vect_epilogue];
kono
parents: 67
diff changeset
1334 }
kono
parents: 67
diff changeset
1335
kono
parents: 67
diff changeset
1336 /* Free the cost data. */
kono
parents: 67
diff changeset
1337
kono
parents: 67
diff changeset
1338 void
kono
parents: 67
diff changeset
1339 default_destroy_cost_data (void *data)
kono
parents: 67
diff changeset
1340 {
kono
parents: 67
diff changeset
1341 free (data);
kono
parents: 67
diff changeset
1342 }
kono
parents: 67
diff changeset
1343
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1344 /* 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
1345 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
1346 bool
111
kono
parents: 67
diff changeset
1347 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
1348 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1349 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
1350 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1351
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
1352 /* 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
1353 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
1354 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
1355 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
1356 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1357 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
1358 /* 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
1359 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
1360 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
1361 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
1362 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
1363 || 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
1364 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
1365 /* The default implementation assumes an 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
1366 declaration is never defined in the current compilation unit. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1367 if (DECL_P (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
1368 && !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
1369 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
1370 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
1371 && 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
1372 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1373 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
1374 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
1375 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1376 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
1377 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1378
111
kono
parents: 67
diff changeset
1379 /* Return the mode for a pointer to a given ADDRSPACE,
kono
parents: 67
diff changeset
1380 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
1381
111
kono
parents: 67
diff changeset
1382 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
1383 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
1384 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1385 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
1386 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1387
111
kono
parents: 67
diff changeset
1388 /* Return the mode for an address in a given ADDRSPACE,
kono
parents: 67
diff changeset
1389 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
1390
111
kono
parents: 67
diff changeset
1391 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
1392 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
1393 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1394 return Pmode;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1395 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1396
111
kono
parents: 67
diff changeset
1397 /* Named address space version of valid_pointer_mode.
kono
parents: 67
diff changeset
1398 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
1399
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1400 bool
111
kono
parents: 67
diff changeset
1401 default_addr_space_valid_pointer_mode (scalar_int_mode mode,
kono
parents: 67
diff changeset
1402 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
1403 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1404 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
1405 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1406
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1407 /* 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
1408 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
1409 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
1410 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
1411
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1412 bool
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1413 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
1414 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1415 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
1416 return false;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1417 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
1418 return false;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1419
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1420 return true;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1421 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1422
111
kono
parents: 67
diff changeset
1423 /* Named address space version of legitimate_address_p.
kono
parents: 67
diff changeset
1424 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
1425
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1426 bool
111
kono
parents: 67
diff changeset
1427 default_addr_space_legitimate_address_p (machine_mode mode, rtx mem,
kono
parents: 67
diff changeset
1428 bool strict,
kono
parents: 67
diff changeset
1429 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
1430 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1431 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
1432 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1433
111
kono
parents: 67
diff changeset
1434 /* Named address space version of LEGITIMIZE_ADDRESS.
kono
parents: 67
diff changeset
1435 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
1436
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1437 rtx
111
kono
parents: 67
diff changeset
1438 default_addr_space_legitimize_address (rtx x, rtx oldx, machine_mode mode,
kono
parents: 67
diff changeset
1439 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
1440 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1441 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
1442 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1443
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1444 /* 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
1445 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
1446 space. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1447
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1448 bool
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1449 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
1450 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1451 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
1452 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1453
111
kono
parents: 67
diff changeset
1454 /* The default hook for determining if 0 within a named address
kono
parents: 67
diff changeset
1455 space is a valid address. */
kono
parents: 67
diff changeset
1456
kono
parents: 67
diff changeset
1457 bool
kono
parents: 67
diff changeset
1458 default_addr_space_zero_address_valid (addr_space_t as ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
1459 {
kono
parents: 67
diff changeset
1460 return false;
kono
parents: 67
diff changeset
1461 }
kono
parents: 67
diff changeset
1462
kono
parents: 67
diff changeset
1463 /* The default hook for debugging the address space is to return the
kono
parents: 67
diff changeset
1464 address space number to indicate DW_AT_address_class. */
kono
parents: 67
diff changeset
1465 int
kono
parents: 67
diff changeset
1466 default_addr_space_debug (addr_space_t as)
kono
parents: 67
diff changeset
1467 {
kono
parents: 67
diff changeset
1468 return as;
kono
parents: 67
diff changeset
1469 }
kono
parents: 67
diff changeset
1470
kono
parents: 67
diff changeset
1471 /* The default hook implementation for TARGET_ADDR_SPACE_DIAGNOSE_USAGE.
kono
parents: 67
diff changeset
1472 Don't complain about any address space. */
kono
parents: 67
diff changeset
1473
kono
parents: 67
diff changeset
1474 void
kono
parents: 67
diff changeset
1475 default_addr_space_diagnose_usage (addr_space_t, location_t)
kono
parents: 67
diff changeset
1476 {
kono
parents: 67
diff changeset
1477 }
kono
parents: 67
diff changeset
1478
kono
parents: 67
diff changeset
1479
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1480 /* 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
1481 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
1482
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1483 rtx
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1484 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
1485 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
1486 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
1487 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1488 gcc_unreachable ();
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1489 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1490
111
kono
parents: 67
diff changeset
1491 /* The defualt implementation of TARGET_HARD_REGNO_NREGS. */
kono
parents: 67
diff changeset
1492
kono
parents: 67
diff changeset
1493 unsigned int
kono
parents: 67
diff changeset
1494 default_hard_regno_nregs (unsigned int, machine_mode mode)
kono
parents: 67
diff changeset
1495 {
kono
parents: 67
diff changeset
1496 return CEIL (GET_MODE_SIZE (mode), UNITS_PER_WORD);
kono
parents: 67
diff changeset
1497 }
kono
parents: 67
diff changeset
1498
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1499 bool
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1500 default_hard_regno_scratch_ok (unsigned int regno ATTRIBUTE_UNUSED)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1501 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1502 return true;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1503 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1504
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1505 /* 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
1506
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1507 bool
111
kono
parents: 67
diff changeset
1508 default_mode_dependent_address_p (const_rtx addr ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
1509 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
1510 {
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1511 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
1512 }
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
1513
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1514 bool
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1515 default_target_option_valid_attribute_p (tree ARG_UNUSED (fndecl),
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1516 tree ARG_UNUSED (name),
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1517 tree ARG_UNUSED (args),
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1518 int ARG_UNUSED (flags))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1519 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1520 warning (OPT_Wattributes,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1521 "target attribute is not supported on this machine");
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1522
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1523 return false;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1524 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1525
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1526 bool
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1527 default_target_option_pragma_parse (tree ARG_UNUSED (args),
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1528 tree ARG_UNUSED (pop_target))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1529 {
111
kono
parents: 67
diff changeset
1530 /* If args is NULL the caller is handle_pragma_pop_options (). In that case,
kono
parents: 67
diff changeset
1531 emit no warning because "#pragma GCC pop_target" is valid on targets that
kono
parents: 67
diff changeset
1532 do not have the "target" pragma. */
kono
parents: 67
diff changeset
1533 if (args)
kono
parents: 67
diff changeset
1534 warning (OPT_Wpragmas,
kono
parents: 67
diff changeset
1535 "#pragma GCC target is not supported for this machine");
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1536
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1537 return false;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1538 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1539
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1540 bool
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1541 default_target_can_inline_p (tree caller, tree callee)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1542 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1543 tree callee_opts = DECL_FUNCTION_SPECIFIC_TARGET (callee);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1544 tree caller_opts = DECL_FUNCTION_SPECIFIC_TARGET (caller);
111
kono
parents: 67
diff changeset
1545 if (! callee_opts)
kono
parents: 67
diff changeset
1546 callee_opts = target_option_default_node;
kono
parents: 67
diff changeset
1547 if (! caller_opts)
kono
parents: 67
diff changeset
1548 caller_opts = target_option_default_node;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1549
111
kono
parents: 67
diff changeset
1550 /* If both caller and callee have attributes, assume that if the
kono
parents: 67
diff changeset
1551 pointer is different, the two functions have different target
kono
parents: 67
diff changeset
1552 options since build_target_option_node uses a hash table for the
kono
parents: 67
diff changeset
1553 options. */
kono
parents: 67
diff changeset
1554 return callee_opts == caller_opts;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1555 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1556
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1557 /* 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
1558 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
1559 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
1560
111
kono
parents: 67
diff changeset
1561 unsigned int
kono
parents: 67
diff changeset
1562 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
1563 {
111
kono
parents: 67
diff changeset
1564 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
1565 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1566
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1567 bool
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1568 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
1569 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1570 return HAVE_conditional_execution;
111
kono
parents: 67
diff changeset
1571 }
kono
parents: 67
diff changeset
1572
kono
parents: 67
diff changeset
1573 /* By default we assume that c99 functions are present at the runtime,
kono
parents: 67
diff changeset
1574 but sincos is not. */
kono
parents: 67
diff changeset
1575 bool
kono
parents: 67
diff changeset
1576 default_libc_has_function (enum function_class fn_class)
kono
parents: 67
diff changeset
1577 {
kono
parents: 67
diff changeset
1578 if (fn_class == function_c94
kono
parents: 67
diff changeset
1579 || fn_class == function_c99_misc
kono
parents: 67
diff changeset
1580 || fn_class == function_c99_math_complex)
kono
parents: 67
diff changeset
1581 return true;
kono
parents: 67
diff changeset
1582
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1583 return false;
111
kono
parents: 67
diff changeset
1584 }
kono
parents: 67
diff changeset
1585
kono
parents: 67
diff changeset
1586 bool
kono
parents: 67
diff changeset
1587 gnu_libc_has_function (enum function_class fn_class ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
1588 {
kono
parents: 67
diff changeset
1589 return true;
kono
parents: 67
diff changeset
1590 }
kono
parents: 67
diff changeset
1591
kono
parents: 67
diff changeset
1592 bool
kono
parents: 67
diff changeset
1593 no_c99_libc_has_function (enum function_class fn_class ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
1594 {
kono
parents: 67
diff changeset
1595 return false;
kono
parents: 67
diff changeset
1596 }
kono
parents: 67
diff changeset
1597
kono
parents: 67
diff changeset
1598 tree
kono
parents: 67
diff changeset
1599 default_builtin_tm_load_store (tree ARG_UNUSED (type))
kono
parents: 67
diff changeset
1600 {
kono
parents: 67
diff changeset
1601 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
1602 }
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1603
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
1604 /* 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
1605
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1606 int
111
kono
parents: 67
diff changeset
1607 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
1608 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
1609 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
1610 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1611 #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
1612 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
1613 #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
1614 return MEMORY_MOVE_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
1615 #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
1616 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1617
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1618 /* 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
1619 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
1620
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1621 int
111
kono
parents: 67
diff changeset
1622 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
1623 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
1624 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
1625 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1626 #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
1627 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
1628 #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
1629 return REGISTER_MOVE_COST (mode, (enum reg_class) from, (enum reg_class) to);
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1630 #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
1631 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1632
111
kono
parents: 67
diff changeset
1633 /* The default implementation of TARGET_SLOW_UNALIGNED_ACCESS. */
kono
parents: 67
diff changeset
1634
kono
parents: 67
diff changeset
1635 bool
kono
parents: 67
diff changeset
1636 default_slow_unaligned_access (machine_mode, unsigned int)
kono
parents: 67
diff changeset
1637 {
kono
parents: 67
diff changeset
1638 return STRICT_ALIGNMENT;
kono
parents: 67
diff changeset
1639 }
kono
parents: 67
diff changeset
1640
kono
parents: 67
diff changeset
1641 /* For hooks which use the MOVE_RATIO macro, this gives the legacy default
kono
parents: 67
diff changeset
1642 behavior. SPEED_P is true if we are compiling for speed. */
kono
parents: 67
diff changeset
1643
kono
parents: 67
diff changeset
1644 unsigned int
kono
parents: 67
diff changeset
1645 get_move_ratio (bool speed_p ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
1646 {
kono
parents: 67
diff changeset
1647 unsigned int move_ratio;
kono
parents: 67
diff changeset
1648 #ifdef MOVE_RATIO
kono
parents: 67
diff changeset
1649 move_ratio = (unsigned int) MOVE_RATIO (speed_p);
kono
parents: 67
diff changeset
1650 #else
kono
parents: 67
diff changeset
1651 #if defined (HAVE_movmemqi) || defined (HAVE_movmemhi) || defined (HAVE_movmemsi) || defined (HAVE_movmemdi) || defined (HAVE_movmemti)
kono
parents: 67
diff changeset
1652 move_ratio = 2;
kono
parents: 67
diff changeset
1653 #else /* No movmem patterns, pick a default. */
kono
parents: 67
diff changeset
1654 move_ratio = ((speed_p) ? 15 : 3);
kono
parents: 67
diff changeset
1655 #endif
kono
parents: 67
diff changeset
1656 #endif
kono
parents: 67
diff changeset
1657 return move_ratio;
kono
parents: 67
diff changeset
1658 }
kono
parents: 67
diff changeset
1659
kono
parents: 67
diff changeset
1660 /* Return TRUE if the move_by_pieces/set_by_pieces infrastructure should be
kono
parents: 67
diff changeset
1661 used; return FALSE if the movmem/setmem optab should be expanded, or
kono
parents: 67
diff changeset
1662 a call to memcpy emitted. */
kono
parents: 67
diff changeset
1663
kono
parents: 67
diff changeset
1664 bool
kono
parents: 67
diff changeset
1665 default_use_by_pieces_infrastructure_p (unsigned HOST_WIDE_INT size,
kono
parents: 67
diff changeset
1666 unsigned int alignment,
kono
parents: 67
diff changeset
1667 enum by_pieces_operation op,
kono
parents: 67
diff changeset
1668 bool speed_p)
kono
parents: 67
diff changeset
1669 {
kono
parents: 67
diff changeset
1670 unsigned int max_size = 0;
kono
parents: 67
diff changeset
1671 unsigned int ratio = 0;
kono
parents: 67
diff changeset
1672
kono
parents: 67
diff changeset
1673 switch (op)
kono
parents: 67
diff changeset
1674 {
kono
parents: 67
diff changeset
1675 case CLEAR_BY_PIECES:
kono
parents: 67
diff changeset
1676 max_size = STORE_MAX_PIECES;
kono
parents: 67
diff changeset
1677 ratio = CLEAR_RATIO (speed_p);
kono
parents: 67
diff changeset
1678 break;
kono
parents: 67
diff changeset
1679 case MOVE_BY_PIECES:
kono
parents: 67
diff changeset
1680 max_size = MOVE_MAX_PIECES;
kono
parents: 67
diff changeset
1681 ratio = get_move_ratio (speed_p);
kono
parents: 67
diff changeset
1682 break;
kono
parents: 67
diff changeset
1683 case SET_BY_PIECES:
kono
parents: 67
diff changeset
1684 max_size = STORE_MAX_PIECES;
kono
parents: 67
diff changeset
1685 ratio = SET_RATIO (speed_p);
kono
parents: 67
diff changeset
1686 break;
kono
parents: 67
diff changeset
1687 case STORE_BY_PIECES:
kono
parents: 67
diff changeset
1688 max_size = STORE_MAX_PIECES;
kono
parents: 67
diff changeset
1689 ratio = get_move_ratio (speed_p);
kono
parents: 67
diff changeset
1690 break;
kono
parents: 67
diff changeset
1691 case COMPARE_BY_PIECES:
kono
parents: 67
diff changeset
1692 max_size = COMPARE_MAX_PIECES;
kono
parents: 67
diff changeset
1693 /* Pick a likely default, just as in get_move_ratio. */
kono
parents: 67
diff changeset
1694 ratio = speed_p ? 15 : 3;
kono
parents: 67
diff changeset
1695 break;
kono
parents: 67
diff changeset
1696 }
kono
parents: 67
diff changeset
1697
kono
parents: 67
diff changeset
1698 return by_pieces_ninsns (size, alignment, max_size + 1, op) < ratio;
kono
parents: 67
diff changeset
1699 }
kono
parents: 67
diff changeset
1700
kono
parents: 67
diff changeset
1701 /* This hook controls code generation for expanding a memcmp operation by
kono
parents: 67
diff changeset
1702 pieces. Return 1 for the normal pattern of compare/jump after each pair
kono
parents: 67
diff changeset
1703 of loads, or a higher number to reduce the number of branches. */
kono
parents: 67
diff changeset
1704
kono
parents: 67
diff changeset
1705 int
kono
parents: 67
diff changeset
1706 default_compare_by_pieces_branch_ratio (machine_mode)
kono
parents: 67
diff changeset
1707 {
kono
parents: 67
diff changeset
1708 return 1;
kono
parents: 67
diff changeset
1709 }
kono
parents: 67
diff changeset
1710
kono
parents: 67
diff changeset
1711 /* Write PATCH_AREA_SIZE NOPs into the asm outfile FILE around a function
kono
parents: 67
diff changeset
1712 entry. If RECORD_P is true and the target supports named sections,
kono
parents: 67
diff changeset
1713 the location of the NOPs will be recorded in a special object section
kono
parents: 67
diff changeset
1714 called "__patchable_function_entries". This routine may be called
kono
parents: 67
diff changeset
1715 twice per function to put NOPs before and after the function
kono
parents: 67
diff changeset
1716 entry. */
kono
parents: 67
diff changeset
1717
kono
parents: 67
diff changeset
1718 void
kono
parents: 67
diff changeset
1719 default_print_patchable_function_entry (FILE *file,
kono
parents: 67
diff changeset
1720 unsigned HOST_WIDE_INT patch_area_size,
kono
parents: 67
diff changeset
1721 bool record_p)
kono
parents: 67
diff changeset
1722 {
kono
parents: 67
diff changeset
1723 const char *nop_templ = 0;
kono
parents: 67
diff changeset
1724 int code_num;
kono
parents: 67
diff changeset
1725 rtx_insn *my_nop = make_insn_raw (gen_nop ());
kono
parents: 67
diff changeset
1726
kono
parents: 67
diff changeset
1727 /* We use the template alone, relying on the (currently sane) assumption
kono
parents: 67
diff changeset
1728 that the NOP template does not have variable operands. */
kono
parents: 67
diff changeset
1729 code_num = recog_memoized (my_nop);
kono
parents: 67
diff changeset
1730 nop_templ = get_insn_template (code_num, my_nop);
kono
parents: 67
diff changeset
1731
kono
parents: 67
diff changeset
1732 if (record_p && targetm_common.have_named_sections)
kono
parents: 67
diff changeset
1733 {
kono
parents: 67
diff changeset
1734 char buf[256];
kono
parents: 67
diff changeset
1735 static int patch_area_number;
kono
parents: 67
diff changeset
1736 section *previous_section = in_section;
kono
parents: 67
diff changeset
1737
kono
parents: 67
diff changeset
1738 patch_area_number++;
kono
parents: 67
diff changeset
1739 ASM_GENERATE_INTERNAL_LABEL (buf, "LPFE", patch_area_number);
kono
parents: 67
diff changeset
1740
kono
parents: 67
diff changeset
1741 switch_to_section (get_section ("__patchable_function_entries",
kono
parents: 67
diff changeset
1742 0, NULL));
kono
parents: 67
diff changeset
1743 fputs (integer_asm_op (POINTER_SIZE_UNITS, false), file);
kono
parents: 67
diff changeset
1744 assemble_name_raw (file, buf);
kono
parents: 67
diff changeset
1745 fputc ('\n', file);
kono
parents: 67
diff changeset
1746
kono
parents: 67
diff changeset
1747 switch_to_section (previous_section);
kono
parents: 67
diff changeset
1748 ASM_OUTPUT_LABEL (file, buf);
kono
parents: 67
diff changeset
1749 }
kono
parents: 67
diff changeset
1750
kono
parents: 67
diff changeset
1751 unsigned i;
kono
parents: 67
diff changeset
1752 for (i = 0; i < patch_area_size; ++i)
kono
parents: 67
diff changeset
1753 fprintf (file, "\t%s\n", nop_templ);
kono
parents: 67
diff changeset
1754 }
kono
parents: 67
diff changeset
1755
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
1756 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
1757 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
1758 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1759 #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
1760 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
1761 #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
1762 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
1763 #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
1764 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1765
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1766 /* 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
1767
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1768 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
1769 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
1770 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
1771 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1772 #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
1773 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
1774 #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
1775 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
1776 #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
1777 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1778
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1779 /* 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
1780
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1781 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
1782 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
1783 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
1784 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1785 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
1786 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1787
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1788 /* 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
1789 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
1790 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
1791 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1792 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
1793 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1794
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1795 /* 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
1796
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1797 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
1798 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
1799 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1800 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
1801 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1802
111
kono
parents: 67
diff changeset
1803 /* The default implementation of TARGET_CLASS_MAX_NREGS. */
kono
parents: 67
diff changeset
1804
kono
parents: 67
diff changeset
1805 unsigned char
kono
parents: 67
diff changeset
1806 default_class_max_nregs (reg_class_t rclass ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
1807 machine_mode mode ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
1808 {
kono
parents: 67
diff changeset
1809 #ifdef CLASS_MAX_NREGS
kono
parents: 67
diff changeset
1810 return (unsigned char) CLASS_MAX_NREGS ((enum reg_class) rclass, mode);
kono
parents: 67
diff changeset
1811 #else
kono
parents: 67
diff changeset
1812 return ((GET_MODE_SIZE (mode) + UNITS_PER_WORD - 1) / UNITS_PER_WORD);
kono
parents: 67
diff changeset
1813 #endif
kono
parents: 67
diff changeset
1814 }
kono
parents: 67
diff changeset
1815
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
1816 /* 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
1817
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1818 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
1819 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
1820 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1821 /* 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
1822 /* ??? 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
1823 #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
1824 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
1825 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
1826 #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
1827
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1828 /* 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
1829 #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
1830 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
1831 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
1832 #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
1833
f6334be47118 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 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
1835 }
f6334be47118 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
111
kono
parents: 67
diff changeset
1837 /* Determine the correct mode for a Dwarf frame register that represents
kono
parents: 67
diff changeset
1838 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
1839
111
kono
parents: 67
diff changeset
1840 machine_mode
kono
parents: 67
diff changeset
1841 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
1842 {
111
kono
parents: 67
diff changeset
1843 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
1844
111
kono
parents: 67
diff changeset
1845 if (targetm.hard_regno_call_part_clobbered (regno, save_mode))
kono
parents: 67
diff changeset
1846 save_mode = choose_hard_reg_mode (regno, 1, true);
kono
parents: 67
diff changeset
1847 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
1848 }
f6334be47118 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
f6334be47118 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 /* 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
1851 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
1852
111
kono
parents: 67
diff changeset
1853 machine_mode
kono
parents: 67
diff changeset
1854 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
1855 {
f6334be47118 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 return reg_raw_mode[regno];
f6334be47118 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
111
kono
parents: 67
diff changeset
1859 /* Return true if a leaf function should stay leaf even with profiling
kono
parents: 67
diff changeset
1860 enabled. */
kono
parents: 67
diff changeset
1861
kono
parents: 67
diff changeset
1862 bool
kono
parents: 67
diff changeset
1863 default_keep_leaf_when_profiled ()
kono
parents: 67
diff changeset
1864 {
kono
parents: 67
diff changeset
1865 return false;
kono
parents: 67
diff changeset
1866 }
kono
parents: 67
diff changeset
1867
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
1868 /* 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
1869 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
1870 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
1871
f6334be47118 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 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
1873 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
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 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
1876 return false;
111
kono
parents: 67
diff changeset
1877 if ((cl_options[option].flags & CL_PCH_IGNORE) != 0)
kono
parents: 67
diff changeset
1878 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
1879 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
1880 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
1881 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
1882 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
1883 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1884
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1885 /* 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
1886 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
1887 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
1888
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1889 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
1890 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
1891 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1892 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
1893 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
1894 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
1895
f6334be47118 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 *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
1897 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
1898 *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
1899 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
1900 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
1901 *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
1902
f6334be47118 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 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
1904 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
1905 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
1906 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
1907 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
1908 {
f6334be47118 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 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
1910 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
1911 }
f6334be47118 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 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
1914 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
1915 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1916 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
1917 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
1918 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1919
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1920 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
1921 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1922
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1923 /* 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
1924 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
1925
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1926 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
1927 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
1928 {
111
kono
parents: 67
diff changeset
1929 return xasprintf (_("created and used with differing settings of '%s'"),
kono
parents: 67
diff changeset
1930 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
1931 }
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1932
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1933 /* 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
1934
f6334be47118 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 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
1936 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
1937 {
f6334be47118 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 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
1939 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
1940 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
1941
f6334be47118 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 /* -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
1943 if (data[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
1944 return _("created and used with different settings of -fpic");
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1945 if (data[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
1946 return _("created and used with different settings of -fpie");
f6334be47118 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 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
1948
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1949 /* 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
1950 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
1951 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1952 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
1953 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
1954
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1955 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
1956 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
1957 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
1958 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
1959 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
1960 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
1961 }
f6334be47118 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
f6334be47118 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 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
1964 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
1965 {
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
1966 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
1967 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
1968 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
1969 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
1970 }
f6334be47118 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
f6334be47118 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 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
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
111
kono
parents: 67
diff changeset
1975 /* Default version of cstore_mode. */
kono
parents: 67
diff changeset
1976
kono
parents: 67
diff changeset
1977 scalar_int_mode
kono
parents: 67
diff changeset
1978 default_cstore_mode (enum insn_code icode)
kono
parents: 67
diff changeset
1979 {
kono
parents: 67
diff changeset
1980 return as_a <scalar_int_mode> (insn_data[(int) icode].operand[0].mode);
kono
parents: 67
diff changeset
1981 }
kono
parents: 67
diff changeset
1982
kono
parents: 67
diff changeset
1983 /* Default version of member_type_forces_blk. */
kono
parents: 67
diff changeset
1984
kono
parents: 67
diff changeset
1985 bool
kono
parents: 67
diff changeset
1986 default_member_type_forces_blk (const_tree, machine_mode)
kono
parents: 67
diff changeset
1987 {
kono
parents: 67
diff changeset
1988 return false;
kono
parents: 67
diff changeset
1989 }
kono
parents: 67
diff changeset
1990
kono
parents: 67
diff changeset
1991 rtx
kono
parents: 67
diff changeset
1992 default_load_bounds_for_arg (rtx addr ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
1993 rtx ptr ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
1994 rtx bnd ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
1995 {
kono
parents: 67
diff changeset
1996 gcc_unreachable ();
kono
parents: 67
diff changeset
1997 }
kono
parents: 67
diff changeset
1998
kono
parents: 67
diff changeset
1999 void
kono
parents: 67
diff changeset
2000 default_store_bounds_for_arg (rtx val ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
2001 rtx addr ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
2002 rtx bounds ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
2003 rtx to ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
2004 {
kono
parents: 67
diff changeset
2005 gcc_unreachable ();
kono
parents: 67
diff changeset
2006 }
kono
parents: 67
diff changeset
2007
kono
parents: 67
diff changeset
2008 rtx
kono
parents: 67
diff changeset
2009 default_load_returned_bounds (rtx slot ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
2010 {
kono
parents: 67
diff changeset
2011 gcc_unreachable ();
kono
parents: 67
diff changeset
2012 }
kono
parents: 67
diff changeset
2013
kono
parents: 67
diff changeset
2014 void
kono
parents: 67
diff changeset
2015 default_store_returned_bounds (rtx slot ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
2016 rtx bounds ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
2017 {
kono
parents: 67
diff changeset
2018 gcc_unreachable ();
kono
parents: 67
diff changeset
2019 }
kono
parents: 67
diff changeset
2020
kono
parents: 67
diff changeset
2021 /* Default version of canonicalize_comparison. */
kono
parents: 67
diff changeset
2022
kono
parents: 67
diff changeset
2023 void
kono
parents: 67
diff changeset
2024 default_canonicalize_comparison (int *, rtx *, rtx *, bool)
kono
parents: 67
diff changeset
2025 {
kono
parents: 67
diff changeset
2026 }
kono
parents: 67
diff changeset
2027
kono
parents: 67
diff changeset
2028 /* Default implementation of TARGET_ATOMIC_ASSIGN_EXPAND_FENV. */
kono
parents: 67
diff changeset
2029
kono
parents: 67
diff changeset
2030 void
kono
parents: 67
diff changeset
2031 default_atomic_assign_expand_fenv (tree *, tree *, tree *)
kono
parents: 67
diff changeset
2032 {
kono
parents: 67
diff changeset
2033 }
kono
parents: 67
diff changeset
2034
kono
parents: 67
diff changeset
2035 #ifndef PAD_VARARGS_DOWN
kono
parents: 67
diff changeset
2036 #define PAD_VARARGS_DOWN BYTES_BIG_ENDIAN
kono
parents: 67
diff changeset
2037 #endif
kono
parents: 67
diff changeset
2038
kono
parents: 67
diff changeset
2039 /* Build an indirect-ref expression over the given TREE, which represents a
kono
parents: 67
diff changeset
2040 piece of a va_arg() expansion. */
kono
parents: 67
diff changeset
2041 tree
kono
parents: 67
diff changeset
2042 build_va_arg_indirect_ref (tree addr)
kono
parents: 67
diff changeset
2043 {
kono
parents: 67
diff changeset
2044 addr = build_simple_mem_ref_loc (EXPR_LOCATION (addr), addr);
kono
parents: 67
diff changeset
2045 return addr;
kono
parents: 67
diff changeset
2046 }
kono
parents: 67
diff changeset
2047
kono
parents: 67
diff changeset
2048 /* The "standard" implementation of va_arg: read the value from the
kono
parents: 67
diff changeset
2049 current (padded) address and increment by the (padded) size. */
kono
parents: 67
diff changeset
2050
kono
parents: 67
diff changeset
2051 tree
kono
parents: 67
diff changeset
2052 std_gimplify_va_arg_expr (tree valist, tree type, gimple_seq *pre_p,
kono
parents: 67
diff changeset
2053 gimple_seq *post_p)
kono
parents: 67
diff changeset
2054 {
kono
parents: 67
diff changeset
2055 tree addr, t, type_size, rounded_size, valist_tmp;
kono
parents: 67
diff changeset
2056 unsigned HOST_WIDE_INT align, boundary;
kono
parents: 67
diff changeset
2057 bool indirect;
kono
parents: 67
diff changeset
2058
kono
parents: 67
diff changeset
2059 /* All of the alignment and movement below is for args-grow-up machines.
kono
parents: 67
diff changeset
2060 As of 2004, there are only 3 ARGS_GROW_DOWNWARD targets, and they all
kono
parents: 67
diff changeset
2061 implement their own specialized gimplify_va_arg_expr routines. */
kono
parents: 67
diff changeset
2062 if (ARGS_GROW_DOWNWARD)
kono
parents: 67
diff changeset
2063 gcc_unreachable ();
kono
parents: 67
diff changeset
2064
kono
parents: 67
diff changeset
2065 indirect = pass_by_reference (NULL, TYPE_MODE (type), type, false);
kono
parents: 67
diff changeset
2066 if (indirect)
kono
parents: 67
diff changeset
2067 type = build_pointer_type (type);
kono
parents: 67
diff changeset
2068
kono
parents: 67
diff changeset
2069 align = PARM_BOUNDARY / BITS_PER_UNIT;
kono
parents: 67
diff changeset
2070 boundary = targetm.calls.function_arg_boundary (TYPE_MODE (type), type);
kono
parents: 67
diff changeset
2071
kono
parents: 67
diff changeset
2072 /* When we align parameter on stack for caller, if the parameter
kono
parents: 67
diff changeset
2073 alignment is beyond MAX_SUPPORTED_STACK_ALIGNMENT, it will be
kono
parents: 67
diff changeset
2074 aligned at MAX_SUPPORTED_STACK_ALIGNMENT. We will match callee
kono
parents: 67
diff changeset
2075 here with caller. */
kono
parents: 67
diff changeset
2076 if (boundary > MAX_SUPPORTED_STACK_ALIGNMENT)
kono
parents: 67
diff changeset
2077 boundary = MAX_SUPPORTED_STACK_ALIGNMENT;
kono
parents: 67
diff changeset
2078
kono
parents: 67
diff changeset
2079 boundary /= BITS_PER_UNIT;
kono
parents: 67
diff changeset
2080
kono
parents: 67
diff changeset
2081 /* Hoist the valist value into a temporary for the moment. */
kono
parents: 67
diff changeset
2082 valist_tmp = get_initialized_tmp_var (valist, pre_p, NULL);
kono
parents: 67
diff changeset
2083
kono
parents: 67
diff changeset
2084 /* va_list pointer is aligned to PARM_BOUNDARY. If argument actually
kono
parents: 67
diff changeset
2085 requires greater alignment, we must perform dynamic alignment. */
kono
parents: 67
diff changeset
2086 if (boundary > align
kono
parents: 67
diff changeset
2087 && !integer_zerop (TYPE_SIZE (type)))
kono
parents: 67
diff changeset
2088 {
kono
parents: 67
diff changeset
2089 t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist_tmp,
kono
parents: 67
diff changeset
2090 fold_build_pointer_plus_hwi (valist_tmp, boundary - 1));
kono
parents: 67
diff changeset
2091 gimplify_and_add (t, pre_p);
kono
parents: 67
diff changeset
2092
kono
parents: 67
diff changeset
2093 t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist_tmp,
kono
parents: 67
diff changeset
2094 fold_build2 (BIT_AND_EXPR, TREE_TYPE (valist),
kono
parents: 67
diff changeset
2095 valist_tmp,
kono
parents: 67
diff changeset
2096 build_int_cst (TREE_TYPE (valist), -boundary)));
kono
parents: 67
diff changeset
2097 gimplify_and_add (t, pre_p);
kono
parents: 67
diff changeset
2098 }
kono
parents: 67
diff changeset
2099 else
kono
parents: 67
diff changeset
2100 boundary = align;
kono
parents: 67
diff changeset
2101
kono
parents: 67
diff changeset
2102 /* If the actual alignment is less than the alignment of the type,
kono
parents: 67
diff changeset
2103 adjust the type accordingly so that we don't assume strict alignment
kono
parents: 67
diff changeset
2104 when dereferencing the pointer. */
kono
parents: 67
diff changeset
2105 boundary *= BITS_PER_UNIT;
kono
parents: 67
diff changeset
2106 if (boundary < TYPE_ALIGN (type))
kono
parents: 67
diff changeset
2107 {
kono
parents: 67
diff changeset
2108 type = build_variant_type_copy (type);
kono
parents: 67
diff changeset
2109 SET_TYPE_ALIGN (type, boundary);
kono
parents: 67
diff changeset
2110 }
kono
parents: 67
diff changeset
2111
kono
parents: 67
diff changeset
2112 /* Compute the rounded size of the type. */
kono
parents: 67
diff changeset
2113 type_size = size_in_bytes (type);
kono
parents: 67
diff changeset
2114 rounded_size = round_up (type_size, align);
kono
parents: 67
diff changeset
2115
kono
parents: 67
diff changeset
2116 /* Reduce rounded_size so it's sharable with the postqueue. */
kono
parents: 67
diff changeset
2117 gimplify_expr (&rounded_size, pre_p, post_p, is_gimple_val, fb_rvalue);
kono
parents: 67
diff changeset
2118
kono
parents: 67
diff changeset
2119 /* Get AP. */
kono
parents: 67
diff changeset
2120 addr = valist_tmp;
kono
parents: 67
diff changeset
2121 if (PAD_VARARGS_DOWN && !integer_zerop (rounded_size))
kono
parents: 67
diff changeset
2122 {
kono
parents: 67
diff changeset
2123 /* Small args are padded downward. */
kono
parents: 67
diff changeset
2124 t = fold_build2_loc (input_location, GT_EXPR, sizetype,
kono
parents: 67
diff changeset
2125 rounded_size, size_int (align));
kono
parents: 67
diff changeset
2126 t = fold_build3 (COND_EXPR, sizetype, t, size_zero_node,
kono
parents: 67
diff changeset
2127 size_binop (MINUS_EXPR, rounded_size, type_size));
kono
parents: 67
diff changeset
2128 addr = fold_build_pointer_plus (addr, t);
kono
parents: 67
diff changeset
2129 }
kono
parents: 67
diff changeset
2130
kono
parents: 67
diff changeset
2131 /* Compute new value for AP. */
kono
parents: 67
diff changeset
2132 t = fold_build_pointer_plus (valist_tmp, rounded_size);
kono
parents: 67
diff changeset
2133 t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist, t);
kono
parents: 67
diff changeset
2134 gimplify_and_add (t, pre_p);
kono
parents: 67
diff changeset
2135
kono
parents: 67
diff changeset
2136 addr = fold_convert (build_pointer_type (type), addr);
kono
parents: 67
diff changeset
2137
kono
parents: 67
diff changeset
2138 if (indirect)
kono
parents: 67
diff changeset
2139 addr = build_va_arg_indirect_ref (addr);
kono
parents: 67
diff changeset
2140
kono
parents: 67
diff changeset
2141 return build_va_arg_indirect_ref (addr);
kono
parents: 67
diff changeset
2142 }
kono
parents: 67
diff changeset
2143
kono
parents: 67
diff changeset
2144 tree
kono
parents: 67
diff changeset
2145 default_chkp_bound_type (void)
kono
parents: 67
diff changeset
2146 {
kono
parents: 67
diff changeset
2147 tree res = make_node (POINTER_BOUNDS_TYPE);
kono
parents: 67
diff changeset
2148 TYPE_PRECISION (res) = TYPE_PRECISION (size_type_node) * 2;
kono
parents: 67
diff changeset
2149 TYPE_NAME (res) = get_identifier ("__bounds_type");
kono
parents: 67
diff changeset
2150 SET_TYPE_MODE (res, targetm.chkp_bound_mode ());
kono
parents: 67
diff changeset
2151 layout_type (res);
kono
parents: 67
diff changeset
2152 return res;
kono
parents: 67
diff changeset
2153 }
kono
parents: 67
diff changeset
2154
kono
parents: 67
diff changeset
2155 machine_mode
kono
parents: 67
diff changeset
2156 default_chkp_bound_mode (void)
kono
parents: 67
diff changeset
2157 {
kono
parents: 67
diff changeset
2158 return VOIDmode;
kono
parents: 67
diff changeset
2159 }
kono
parents: 67
diff changeset
2160
kono
parents: 67
diff changeset
2161 tree
kono
parents: 67
diff changeset
2162 default_builtin_chkp_function (unsigned int fcode ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
2163 {
kono
parents: 67
diff changeset
2164 return NULL_TREE;
kono
parents: 67
diff changeset
2165 }
kono
parents: 67
diff changeset
2166
kono
parents: 67
diff changeset
2167 rtx
kono
parents: 67
diff changeset
2168 default_chkp_function_value_bounds (const_tree ret_type ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
2169 const_tree fn_decl_or_type ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
2170 bool outgoing ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
2171 {
kono
parents: 67
diff changeset
2172 gcc_unreachable ();
kono
parents: 67
diff changeset
2173 }
kono
parents: 67
diff changeset
2174
kono
parents: 67
diff changeset
2175 tree
kono
parents: 67
diff changeset
2176 default_chkp_make_bounds_constant (HOST_WIDE_INT lb ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
2177 HOST_WIDE_INT ub ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
2178 {
kono
parents: 67
diff changeset
2179 return NULL_TREE;
kono
parents: 67
diff changeset
2180 }
kono
parents: 67
diff changeset
2181
kono
parents: 67
diff changeset
2182 int
kono
parents: 67
diff changeset
2183 default_chkp_initialize_bounds (tree var ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
2184 tree lb ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
2185 tree ub ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
2186 tree *stmts ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
2187 {
kono
parents: 67
diff changeset
2188 return 0;
kono
parents: 67
diff changeset
2189 }
kono
parents: 67
diff changeset
2190
kono
parents: 67
diff changeset
2191 void
kono
parents: 67
diff changeset
2192 default_setup_incoming_vararg_bounds (cumulative_args_t ca ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
2193 machine_mode mode ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
2194 tree type ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
2195 int *pretend_arg_size ATTRIBUTE_UNUSED,
kono
parents: 67
diff changeset
2196 int second_time ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
2197 {
kono
parents: 67
diff changeset
2198 }
kono
parents: 67
diff changeset
2199
kono
parents: 67
diff changeset
2200 /* An implementation of TARGET_CAN_USE_DOLOOP_P for targets that do
kono
parents: 67
diff changeset
2201 not support nested low-overhead loops. */
kono
parents: 67
diff changeset
2202
kono
parents: 67
diff changeset
2203 bool
kono
parents: 67
diff changeset
2204 can_use_doloop_if_innermost (const widest_int &, const widest_int &,
kono
parents: 67
diff changeset
2205 unsigned int loop_depth, bool)
kono
parents: 67
diff changeset
2206 {
kono
parents: 67
diff changeset
2207 return loop_depth == 1;
kono
parents: 67
diff changeset
2208 }
kono
parents: 67
diff changeset
2209
kono
parents: 67
diff changeset
2210 /* Default implementation of TARGET_OPTAB_SUPPORTED_P. */
kono
parents: 67
diff changeset
2211
kono
parents: 67
diff changeset
2212 bool
kono
parents: 67
diff changeset
2213 default_optab_supported_p (int, machine_mode, machine_mode, optimization_type)
kono
parents: 67
diff changeset
2214 {
kono
parents: 67
diff changeset
2215 return true;
kono
parents: 67
diff changeset
2216 }
kono
parents: 67
diff changeset
2217
kono
parents: 67
diff changeset
2218 /* Default implementation of TARGET_MAX_NOCE_IFCVT_SEQ_COST. */
kono
parents: 67
diff changeset
2219
kono
parents: 67
diff changeset
2220 unsigned int
kono
parents: 67
diff changeset
2221 default_max_noce_ifcvt_seq_cost (edge e)
kono
parents: 67
diff changeset
2222 {
kono
parents: 67
diff changeset
2223 bool predictable_p = predictable_edge_p (e);
kono
parents: 67
diff changeset
2224
kono
parents: 67
diff changeset
2225 enum compiler_param param
kono
parents: 67
diff changeset
2226 = (predictable_p
kono
parents: 67
diff changeset
2227 ? PARAM_MAX_RTL_IF_CONVERSION_PREDICTABLE_COST
kono
parents: 67
diff changeset
2228 : PARAM_MAX_RTL_IF_CONVERSION_UNPREDICTABLE_COST);
kono
parents: 67
diff changeset
2229
kono
parents: 67
diff changeset
2230 /* If we have a parameter set, use that, otherwise take a guess using
kono
parents: 67
diff changeset
2231 BRANCH_COST. */
kono
parents: 67
diff changeset
2232 if (global_options_set.x_param_values[param])
kono
parents: 67
diff changeset
2233 return PARAM_VALUE (param);
kono
parents: 67
diff changeset
2234 else
kono
parents: 67
diff changeset
2235 return BRANCH_COST (true, predictable_p) * COSTS_N_INSNS (3);
kono
parents: 67
diff changeset
2236 }
kono
parents: 67
diff changeset
2237
kono
parents: 67
diff changeset
2238 /* Default implementation of TARGET_MIN_ARITHMETIC_PRECISION. */
kono
parents: 67
diff changeset
2239
kono
parents: 67
diff changeset
2240 unsigned int
kono
parents: 67
diff changeset
2241 default_min_arithmetic_precision (void)
kono
parents: 67
diff changeset
2242 {
kono
parents: 67
diff changeset
2243 return WORD_REGISTER_OPERATIONS ? BITS_PER_WORD : BITS_PER_UNIT;
kono
parents: 67
diff changeset
2244 }
kono
parents: 67
diff changeset
2245
kono
parents: 67
diff changeset
2246 /* Default implementation of TARGET_C_EXCESS_PRECISION. */
kono
parents: 67
diff changeset
2247
kono
parents: 67
diff changeset
2248 enum flt_eval_method
kono
parents: 67
diff changeset
2249 default_excess_precision (enum excess_precision_type ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
2250 {
kono
parents: 67
diff changeset
2251 return FLT_EVAL_METHOD_PROMOTE_TO_FLOAT;
kono
parents: 67
diff changeset
2252 }
kono
parents: 67
diff changeset
2253
kono
parents: 67
diff changeset
2254 bool
kono
parents: 67
diff changeset
2255 default_stack_clash_protection_final_dynamic_probe (rtx residual ATTRIBUTE_UNUSED)
kono
parents: 67
diff changeset
2256 {
kono
parents: 67
diff changeset
2257 return 0;
kono
parents: 67
diff changeset
2258 }
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
2259
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2260 #include "gt-targhooks.h"