1/* General-purpose hooks.
2   Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
3
4This program is free software; you can redistribute it and/or modify it
5under the terms of the GNU General Public License as published by the
6Free Software Foundation; either version 2, or (at your option) any
7later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program; if not, write to the Free Software
16Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
18 In other words, you are welcome to use, share and improve this program.
19 You are forbidden to forbid anyone else to use, share and improve
20 what you give them.   Help stamp out software-hoarding!  */
21
22/* This file contains generic hooks that can be used as defaults for
23   target or language-dependent hook initializers.  */
24
25#include "config.h"
26#include "system.h"
27#include "coretypes.h"
28#include "tm.h"
29#include "hooks.h"
30
31/* Generic hook that does absolutely zappo.  */
32void
33hook_void_void (void)
34{
35}
36
37/* Generic hook that takes no arguments and returns false.  */
38bool
39hook_bool_void_false (void)
40{
41  return false;
42}
43
44/* Generic hook that takes no arguments and returns true.  */
45bool
46hook_bool_void_true (void)
47{
48  return true;
49}
50
51/* Generic hook that takes no arguments and returns NO_REGS.  */
52int
53hook_int_void_no_regs (void)
54{
55  return NO_REGS;
56}
57
58/* Generic hook that takes (bool) and returns false.  */
59bool
60hook_bool_bool_false (bool a ATTRIBUTE_UNUSED)
61{
62  return false;
63}
64
65/* Generic hook that takes (enum machine_mode) and returns false.  */
66bool
67hook_bool_mode_false (enum machine_mode mode ATTRIBUTE_UNUSED)
68{
69  return false;
70}
71
72/* Generic hook that takes (FILE *, const char *) and does nothing.  */
73void
74hook_void_FILEptr_constcharptr (FILE *a ATTRIBUTE_UNUSED, const char *b ATTRIBUTE_UNUSED)
75{
76}
77
78/* Used for the TARGET_ASM_CAN_OUTPUT_MI_THUNK hook.  */
79bool
80hook_bool_tree_hwi_hwi_tree_false (tree a ATTRIBUTE_UNUSED,
81				   HOST_WIDE_INT b ATTRIBUTE_UNUSED,
82				   HOST_WIDE_INT c ATTRIBUTE_UNUSED,
83				   tree d ATTRIBUTE_UNUSED)
84{
85  return false;
86}
87
88bool
89hook_bool_tree_hwi_hwi_tree_true (tree a ATTRIBUTE_UNUSED,
90				  HOST_WIDE_INT b ATTRIBUTE_UNUSED,
91				  HOST_WIDE_INT c ATTRIBUTE_UNUSED,
92				  tree d ATTRIBUTE_UNUSED)
93{
94  return true;
95}
96
97bool
98hook_bool_constcharptr_size_t_false (const char *a ATTRIBUTE_UNUSED,
99				     size_t b ATTRIBUTE_UNUSED)
100{
101  return false;
102}
103
104bool
105hook_bool_size_t_constcharptr_int_true (size_t a ATTRIBUTE_UNUSED,
106					const char *b ATTRIBUTE_UNUSED,
107					int c ATTRIBUTE_UNUSED)
108{
109  return true;
110}
111
112bool
113default_can_output_mi_thunk_no_vcall (tree a ATTRIBUTE_UNUSED,
114				      HOST_WIDE_INT b ATTRIBUTE_UNUSED,
115				      HOST_WIDE_INT c,
116				      tree d ATTRIBUTE_UNUSED)
117{
118  return c == 0;
119}
120
121int
122hook_int_tree_0 (tree a ATTRIBUTE_UNUSED)
123{
124  return 0;
125}
126
127/* ??? Used for comp_type_attributes, which ought to return bool.  */
128int
129hook_int_tree_tree_1 (tree a ATTRIBUTE_UNUSED, tree b ATTRIBUTE_UNUSED)
130{
131  return 1;
132}
133
134int
135hook_int_rtx_0 (rtx a ATTRIBUTE_UNUSED)
136{
137  return 0;
138}
139
140int
141hook_int_size_t_constcharptr_int_0 (size_t a ATTRIBUTE_UNUSED,
142				    const char *b ATTRIBUTE_UNUSED,
143				    int c ATTRIBUTE_UNUSED)
144{
145  return 0;
146}
147
148unsigned int
149hook_uint_uint_constcharptrptr_0 (unsigned int a ATTRIBUTE_UNUSED,
150				  const char **b ATTRIBUTE_UNUSED)
151{
152  return 0;
153}
154
155void
156hook_void_tree (tree a ATTRIBUTE_UNUSED)
157{
158}
159
160void
161hook_void_constcharptr (const char *a ATTRIBUTE_UNUSED)
162{
163}
164
165void
166hook_void_tree_treeptr (tree a ATTRIBUTE_UNUSED, tree *b ATTRIBUTE_UNUSED)
167{
168}
169
170bool
171hook_bool_tree_false (tree a ATTRIBUTE_UNUSED)
172{
173  return false;
174}
175
176bool
177hook_bool_tree_true (tree a ATTRIBUTE_UNUSED)
178{
179  return true;
180}
181
182bool
183hook_bool_tree_tree_false (tree a ATTRIBUTE_UNUSED, tree b ATTRIBUTE_UNUSED)
184{
185  return false;
186}
187
188bool
189hook_bool_rtx_false (rtx a ATTRIBUTE_UNUSED)
190{
191  return false;
192}
193
194bool
195hook_bool_rtx_int_false (rtx a ATTRIBUTE_UNUSED, int code ATTRIBUTE_UNUSED)
196{
197  return false;
198}
199
200bool
201hook_bool_uintp_uintp_false (unsigned int *a ATTRIBUTE_UNUSED,
202			     unsigned int *b ATTRIBUTE_UNUSED)
203{
204  return false;
205}
206
207bool
208hook_bool_rtx_int_int_intp_false (rtx a ATTRIBUTE_UNUSED,
209				  int b ATTRIBUTE_UNUSED,
210				  int c ATTRIBUTE_UNUSED,
211				  int *d ATTRIBUTE_UNUSED)
212{
213  return false;
214}
215
216/* Generic hook that takes an rtx and returns it.  */
217rtx
218hook_rtx_rtx_identity (rtx x)
219{
220  return x;
221}
222
223/* Generic hook that takes an rtx and returns NULL_RTX.  */
224rtx
225hook_rtx_rtx_null (rtx x ATTRIBUTE_UNUSED)
226{
227  return NULL;
228}
229
230/* Generic hook that takes a tree and an int and returns NULL_RTX.  */
231rtx
232hook_rtx_tree_int_null (tree a ATTRIBUTE_UNUSED, int b ATTRIBUTE_UNUSED)
233{
234  return NULL;
235}
236
237/* Generic hook that takes three trees and returns the last one as is.  */
238tree
239hook_tree_tree_tree_tree_3rd_identity (tree a ATTRIBUTE_UNUSED,
240				       tree b ATTRIBUTE_UNUSED, tree c)
241{
242  return c;
243}
244
245/* Generic hook that takes a tree and returns a NULL string.  */
246const char *
247hook_constcharptr_tree_null (tree t ATTRIBUTE_UNUSED)
248{
249  return NULL;
250}
251
252tree
253hook_tree_tree_tree_bool_null (tree t0 ATTRIBUTE_UNUSED, tree t1 ATTRIBUTE_UNUSED,
254			       bool ignore ATTRIBUTE_UNUSED)
255{
256  return NULL;
257}
258
259/* Generic hook that takes a rtx and returns a NULL string.  */
260const char *
261hook_constcharptr_rtx_null (rtx r ATTRIBUTE_UNUSED)
262{
263  return NULL;
264}
265
266const char *
267hook_constcharptr_tree_tree_null (tree t0 ATTRIBUTE_UNUSED,
268				  tree t1 ATTRIBUTE_UNUSED)
269{
270  return NULL;
271}
272
273const char *
274hook_constcharptr_int_tree_null (int i ATTRIBUTE_UNUSED,
275				 tree t0 ATTRIBUTE_UNUSED)
276{
277  return NULL;
278}
279
280const char *
281hook_constcharptr_int_tree_tree_null (int i ATTRIBUTE_UNUSED,
282				      tree t0 ATTRIBUTE_UNUSED,
283				      tree t1 ATTRIBUTE_UNUSED)
284{
285  return NULL;
286}
287