]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/genopinit.c
rtl.h (union rtunion_def): Have all members start with the prefix "rt_".
[thirdparty/gcc.git] / gcc / genopinit.c
CommitLineData
af9e4a0c 1/* Generate code to initialize optabs from machine description.
b5e01d4b 2 Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
d9221e01 3 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
af9e4a0c 4
1322177d 5This file is part of GCC.
af9e4a0c 6
1322177d
LB
7GCC is free software; you can redistribute it and/or modify it under
8the terms of the GNU General Public License as published by the Free
9Software Foundation; either version 2, or (at your option) any later
10version.
af9e4a0c 11
1322177d
LB
12GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13WARRANTY; without even the implied warranty of MERCHANTABILITY or
14FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15for more details.
af9e4a0c
RK
16
17You should have received a copy of the GNU General Public License
1322177d
LB
18along with GCC; see the file COPYING. If not, write to the Free
19Software Foundation, 59 Temple Place - Suite 330, Boston, MA
2002111-1307, USA. */
af9e4a0c
RK
21
22
4977bab6 23#include "bconfig.h"
0b93b64e 24#include "system.h"
4977bab6
ZW
25#include "coretypes.h"
26#include "tm.h"
af9e4a0c 27#include "rtl.h"
f8b6598e 28#include "errors.h"
c88c0d42 29#include "gensupport.h"
ccd043a9 30
af9e4a0c 31
af9e4a0c
RK
32/* Many parts of GCC use arrays that are indexed by machine mode and
33 contain the insn codes for pattern in the MD file that perform a given
34 operation on operands of that mode.
35
36 These patterns are present in the MD file with names that contain
37 the mode(s) used and the name of the operation. This program
38 writes a function `init_all_optabs' that initializes the optabs with
39 all the insn codes of the relevant patterns present in the MD file.
40
41 This array contains a list of optabs that need to be initialized. Within
42 each string, the name of the pattern to be matched against is delimited
1b3459d2 43 with $( and $). In the string, $a and $b are used to match a short mode
af9e4a0c
RK
44 name (the part of the mode name not including `mode' and converted to
45 lower-case). When writing out the initializer, the entire string is
1b3459d2 46 used. $A and $B are replaced with the full name of the mode; $a and $b
af9e4a0c
RK
47 are replaced with the short form of the name, as above.
48
1b3459d2
ZW
49 If $N is present in the pattern, it means the two modes must be consecutive
50 widths in the same mode class (e.g, QImode and HImode). $I means that
91ce572a
CC
51 only full integer modes should be considered for the next mode, and $F
52 means that only float modes should be considered.
53 $P means that both full and partial integer modes should be considered.
54
55 $V means to emit 'v' if the first mode is a MODE_FLOAT mode.
af9e4a0c
RK
56
57 For some optabs, we store the operation by RTL codes. These are only
1b3459d2 58 used for comparisons. In that case, $c and $C are the lower-case and
af9e4a0c
RK
59 upper-case forms of the comparison, respectively. */
60
83182544 61static const char * const optabs[] =
85363ca0
ZW
62{ "sext_optab->handlers[$B][$A].insn_code = CODE_FOR_$(extend$a$b2$)",
63 "zext_optab->handlers[$B][$A].insn_code = CODE_FOR_$(zero_extend$a$b2$)",
64 "sfix_optab->handlers[$B][$A].insn_code = CODE_FOR_$(fix$F$a$I$b2$)",
65 "ufix_optab->handlers[$B][$A].insn_code = CODE_FOR_$(fixuns$F$a$b2$)",
66 "sfixtrunc_optab->handlers[$B][$A].insn_code = CODE_FOR_$(fix_trunc$F$a$I$b2$)",
67 "ufixtrunc_optab->handlers[$B][$A].insn_code = CODE_FOR_$(fixuns_trunc$F$a$I$b2$)",
68 "sfloat_optab->handlers[$B][$A].insn_code = CODE_FOR_$(float$I$a$F$b2$)",
69 "ufloat_optab->handlers[$B][$A].insn_code = CODE_FOR_$(floatuns$I$a$F$b2$)",
70 "trunc_optab->handlers[$B][$A].insn_code = CODE_FOR_$(trunc$a$b2$)",
91ce572a 71 "add_optab->handlers[$A].insn_code = CODE_FOR_$(add$P$a3$)",
85363ca0
ZW
72 "addv_optab->handlers[$A].insn_code =\n\
73 add_optab->handlers[$A].insn_code = CODE_FOR_$(add$F$a3$)",
74 "addv_optab->handlers[$A].insn_code = CODE_FOR_$(addv$I$a3$)",
91ce572a 75 "sub_optab->handlers[$A].insn_code = CODE_FOR_$(sub$P$a3$)",
85363ca0
ZW
76 "subv_optab->handlers[$A].insn_code =\n\
77 sub_optab->handlers[$A].insn_code = CODE_FOR_$(sub$F$a3$)",
78 "subv_optab->handlers[$A].insn_code = CODE_FOR_$(subv$I$a3$)",
91ce572a 79 "smul_optab->handlers[$A].insn_code = CODE_FOR_$(mul$P$a3$)",
85363ca0
ZW
80 "smulv_optab->handlers[$A].insn_code =\n\
81 smul_optab->handlers[$A].insn_code = CODE_FOR_$(mul$F$a3$)",
82 "smulv_optab->handlers[$A].insn_code = CODE_FOR_$(mulv$I$a3$)",
1b3459d2
ZW
83 "umul_highpart_optab->handlers[$A].insn_code = CODE_FOR_$(umul$a3_highpart$)",
84 "smul_highpart_optab->handlers[$A].insn_code = CODE_FOR_$(smul$a3_highpart$)",
85 "smul_widen_optab->handlers[$B].insn_code = CODE_FOR_$(mul$a$b3$)$N",
86 "umul_widen_optab->handlers[$B].insn_code = CODE_FOR_$(umul$a$b3$)$N",
ef89d648 87 "sdiv_optab->handlers[$A].insn_code = CODE_FOR_$(div$a3$)",
85363ca0 88 "sdivv_optab->handlers[$A].insn_code = CODE_FOR_$(div$V$I$a3$)",
1b3459d2
ZW
89 "udiv_optab->handlers[$A].insn_code = CODE_FOR_$(udiv$I$a3$)",
90 "sdivmod_optab->handlers[$A].insn_code = CODE_FOR_$(divmod$a4$)",
91 "udivmod_optab->handlers[$A].insn_code = CODE_FOR_$(udivmod$a4$)",
92 "smod_optab->handlers[$A].insn_code = CODE_FOR_$(mod$a3$)",
93 "umod_optab->handlers[$A].insn_code = CODE_FOR_$(umod$a3$)",
5ae27cfa
UB
94 "fmod_optab->handlers[$A].insn_code = CODE_FOR_$(fmod$a3$)",
95 "drem_optab->handlers[$A].insn_code = CODE_FOR_$(drem$a3$)",
1b3459d2
ZW
96 "ftrunc_optab->handlers[$A].insn_code = CODE_FOR_$(ftrunc$F$a2$)",
97 "and_optab->handlers[$A].insn_code = CODE_FOR_$(and$a3$)",
98 "ior_optab->handlers[$A].insn_code = CODE_FOR_$(ior$a3$)",
99 "xor_optab->handlers[$A].insn_code = CODE_FOR_$(xor$a3$)",
100 "ashl_optab->handlers[$A].insn_code = CODE_FOR_$(ashl$a3$)",
101 "ashr_optab->handlers[$A].insn_code = CODE_FOR_$(ashr$a3$)",
102 "lshr_optab->handlers[$A].insn_code = CODE_FOR_$(lshr$a3$)",
103 "rotl_optab->handlers[$A].insn_code = CODE_FOR_$(rotl$a3$)",
104 "rotr_optab->handlers[$A].insn_code = CODE_FOR_$(rotr$a3$)",
105 "smin_optab->handlers[$A].insn_code = CODE_FOR_$(smin$I$a3$)",
106 "smin_optab->handlers[$A].insn_code = CODE_FOR_$(min$F$a3$)",
107 "smax_optab->handlers[$A].insn_code = CODE_FOR_$(smax$I$a3$)",
108 "smax_optab->handlers[$A].insn_code = CODE_FOR_$(max$F$a3$)",
109 "umin_optab->handlers[$A].insn_code = CODE_FOR_$(umin$I$a3$)",
110 "umax_optab->handlers[$A].insn_code = CODE_FOR_$(umax$I$a3$)",
b5e01d4b
RS
111 "pow_optab->handlers[$A].insn_code = CODE_FOR_$(pow$a3$)",
112 "atan2_optab->handlers[$A].insn_code = CODE_FOR_$(atan2$a3$)",
91ce572a 113 "neg_optab->handlers[$A].insn_code = CODE_FOR_$(neg$P$a2$)",
85363ca0
ZW
114 "negv_optab->handlers[$A].insn_code =\n\
115 neg_optab->handlers[$A].insn_code = CODE_FOR_$(neg$F$a2$)",
116 "negv_optab->handlers[$A].insn_code = CODE_FOR_$(negv$I$a2$)",
91ce572a 117 "abs_optab->handlers[$A].insn_code = CODE_FOR_$(abs$P$a2$)",
85363ca0
ZW
118 "absv_optab->handlers[$A].insn_code =\n\
119 abs_optab->handlers[$A].insn_code = CODE_FOR_$(abs$F$a2$)",
120 "absv_optab->handlers[$A].insn_code = CODE_FOR_$(absv$I$a2$)",
1b3459d2 121 "sqrt_optab->handlers[$A].insn_code = CODE_FOR_$(sqrt$a2$)",
4977bab6
ZW
122 "floor_optab->handlers[$A].insn_code = CODE_FOR_$(floor$a2$)",
123 "ceil_optab->handlers[$A].insn_code = CODE_FOR_$(ceil$a2$)",
124 "round_optab->handlers[$A].insn_code = CODE_FOR_$(round$a2$)",
125 "trunc_optab->handlers[$A].insn_code = CODE_FOR_$(trunc$a2$)",
126 "nearbyint_optab->handlers[$A].insn_code = CODE_FOR_$(nearbyint$a2$)",
6c7cf1f0 127 "sincos_optab->handlers[$A].insn_code = CODE_FOR_$(sincos$a3$)",
1b3459d2 128 "sin_optab->handlers[$A].insn_code = CODE_FOR_$(sin$a2$)",
c56122d8 129 "asin_optab->handlers[$A].insn_code = CODE_FOR_$(asin$a2$)",
1b3459d2 130 "cos_optab->handlers[$A].insn_code = CODE_FOR_$(cos$a2$)",
c56122d8 131 "acos_optab->handlers[$A].insn_code = CODE_FOR_$(acos$a2$)",
e7b489c8 132 "exp_optab->handlers[$A].insn_code = CODE_FOR_$(exp$a2$)",
a251102e
UB
133 "exp10_optab->handlers[$A].insn_code = CODE_FOR_$(exp10$a2$)",
134 "exp2_optab->handlers[$A].insn_code = CODE_FOR_$(exp2$a2$)",
7a8e07c7 135 "expm1_optab->handlers[$A].insn_code = CODE_FOR_$(expm1$a2$)",
88b28a31
UB
136 "logb_optab->handlers[$A].insn_code = CODE_FOR_$(logb$a2$)",
137 "ilogb_optab->handlers[$A].insn_code = CODE_FOR_$(ilogb$a2$)",
e7b489c8 138 "log_optab->handlers[$A].insn_code = CODE_FOR_$(log$a2$)",
3b8e0c91
UB
139 "log10_optab->handlers[$A].insn_code = CODE_FOR_$(log10$a2$)",
140 "log2_optab->handlers[$A].insn_code = CODE_FOR_$(log2$a2$)",
c2fcfa4f 141 "log1p_optab->handlers[$A].insn_code = CODE_FOR_$(log1p$a2$)",
82d397c7
RS
142 "tan_optab->handlers[$A].insn_code = CODE_FOR_$(tan$a2$)",
143 "atan_optab->handlers[$A].insn_code = CODE_FOR_$(atan$a2$)",
1b3459d2
ZW
144 "strlen_optab->handlers[$A].insn_code = CODE_FOR_$(strlen$a$)",
145 "one_cmpl_optab->handlers[$A].insn_code = CODE_FOR_$(one_cmpl$a2$)",
146 "ffs_optab->handlers[$A].insn_code = CODE_FOR_$(ffs$a2$)",
2928cd7a
RH
147 "clz_optab->handlers[$A].insn_code = CODE_FOR_$(clz$a2$)",
148 "ctz_optab->handlers[$A].insn_code = CODE_FOR_$(ctz$a2$)",
149 "popcount_optab->handlers[$A].insn_code = CODE_FOR_$(popcount$a2$)",
150 "parity_optab->handlers[$A].insn_code = CODE_FOR_$(parity$a2$)",
1b3459d2
ZW
151 "mov_optab->handlers[$A].insn_code = CODE_FOR_$(mov$a$)",
152 "movstrict_optab->handlers[$A].insn_code = CODE_FOR_$(movstrict$a$)",
153 "cmp_optab->handlers[$A].insn_code = CODE_FOR_$(cmp$a$)",
154 "tst_optab->handlers[$A].insn_code = CODE_FOR_$(tst$a$)",
068f5dea 155 "addcc_optab->handlers[$A].insn_code = CODE_FOR_$(add$acc$)",
1b3459d2
ZW
156 "bcc_gen_fctn[$C] = gen_$(b$c$)",
157 "setcc_gen_code[$C] = CODE_FOR_$(s$c$)",
158 "movcc_gen_code[$A] = CODE_FOR_$(mov$acc$)",
159 "cbranch_optab->handlers[$A].insn_code = CODE_FOR_$(cbranch$a4$)",
160 "cmov_optab->handlers[$A].insn_code = CODE_FOR_$(cmov$a6$)",
161 "cstore_optab->handlers[$A].insn_code = CODE_FOR_$(cstore$a4$)",
371b8fc0 162 "push_optab->handlers[$A].insn_code = CODE_FOR_$(push$a1$)",
1b3459d2
ZW
163 "reload_in_optab[$A] = CODE_FOR_$(reload_in$a$)",
164 "reload_out_optab[$A] = CODE_FOR_$(reload_out$a$)",
70128ad9
AO
165 "movmem_optab[$A] = CODE_FOR_$(movmem$a$)",
166 "clrmem_optab[$A] = CODE_FOR_$(clrmem$a$)",
118355a0 167 "cmpstr_optab[$A] = CODE_FOR_$(cmpstr$a$)",
997404de
JH
168 "cmpmem_optab[$A] = CODE_FOR_$(cmpmem$a$)",
169 "vec_set_optab->handlers[$A].insn_code = CODE_FOR_$(vec_set$a$)",
170 "vec_extract_optab->handlers[$A].insn_code = CODE_FOR_$(vec_extract$a$)",
171 "vec_init_optab->handlers[$A].insn_code = CODE_FOR_$(vec_init$a$)" };
af9e4a0c 172
3d7aafde 173static void gen_insn (rtx);
56c0e996 174
af9e4a0c 175static void
3d7aafde 176gen_insn (rtx insn)
af9e4a0c 177{
3cce094d 178 const char *name = XSTR (insn, 0);
a544cfd2 179 int m1 = 0, m2 = 0, op = 0;
5ae9a7e9 180 size_t pindex;
af9e4a0c 181 int i;
85fda1eb 182 const char *np, *pp, *p, *q;
af9e4a0c
RK
183
184 /* Don't mention instructions whose names are the null string.
185 They are in the machine description just to be recognized. */
186 if (*name == 0)
187 return;
188
189 /* See if NAME matches one of the patterns we have for the optabs we know
190 about. */
191
b6a1cbae 192 for (pindex = 0; pindex < ARRAY_SIZE (optabs); pindex++)
af9e4a0c 193 {
91ce572a 194 int force_float = 0, force_int = 0, force_partial_int = 0;
af9e4a0c
RK
195 int force_consec = 0;
196 int matches = 1;
197
1b3459d2 198 for (pp = optabs[pindex]; pp[0] != '$' || pp[1] != '('; pp++)
af9e4a0c
RK
199 ;
200
1b3459d2 201 for (pp += 2, np = name; matches && ! (pp[0] == '$' && pp[1] == ')');
af9e4a0c
RK
202 pp++)
203 {
1b3459d2 204 if (*pp != '$')
af9e4a0c
RK
205 {
206 if (*pp != *np++)
207 break;
208 }
209 else
210 switch (*++pp)
211 {
212 case 'N':
213 force_consec = 1;
214 break;
215 case 'I':
216 force_int = 1;
217 break;
91ce572a
CC
218 case 'P':
219 force_partial_int = 1;
220 break;
af9e4a0c
RK
221 case 'F':
222 force_float = 1;
223 break;
91ce572a
CC
224 case 'V':
225 break;
af9e4a0c
RK
226 case 'c':
227 for (op = 0; op < NUM_RTX_CODE; op++)
228 {
5f06c983 229 for (p = GET_RTX_NAME(op), q = np; *p; p++, q++)
af9e4a0c
RK
230 if (*p != *q)
231 break;
232
233 /* We have to be concerned about matching "gt" and
234 missing "gtu", e.g., so verify we have reached the
4639555c 235 end of thing we are to match. */
ec8e098d
PB
236 if (*p == 0 && *q == 0
237 && (GET_RTX_CLASS (op) == RTX_COMPARE
238 || GET_RTX_CLASS (op) == RTX_COMM_COMPARE))
af9e4a0c
RK
239 break;
240 }
241
242 if (op == NUM_RTX_CODE)
243 matches = 0;
244 else
5f06c983 245 np += strlen (GET_RTX_NAME(op));
af9e4a0c
RK
246 break;
247 case 'a':
248 case 'b':
4639555c
ILT
249 /* This loop will stop at the first prefix match, so
250 look through the modes in reverse order, in case
94134f42 251 there are extra CC modes and CC is a prefix of the
4639555c 252 CC modes (as it should be). */
85363ca0 253 for (i = (MAX_MACHINE_MODE) - 1; i >= 0; i--)
af9e4a0c 254 {
a4ec8d12 255 for (p = GET_MODE_NAME(i), q = np; *p; p++, q++)
92a438d1 256 if (TOLOWER (*p) != *q)
af9e4a0c
RK
257 break;
258
259 if (*p == 0
7d9e680f
DB
260 && (! force_int || mode_class[i] == MODE_INT
261 || mode_class[i] == MODE_VECTOR_INT)
91ce572a
CC
262 && (! force_partial_int
263 || mode_class[i] == MODE_INT
7d9e680f
DB
264 || mode_class[i] == MODE_PARTIAL_INT
265 || mode_class[i] == MODE_VECTOR_INT)
266 && (! force_float || mode_class[i] == MODE_FLOAT
267 || mode_class[i] == MODE_VECTOR_FLOAT))
af9e4a0c
RK
268 break;
269 }
270
4639555c 271 if (i < 0)
af9e4a0c
RK
272 matches = 0;
273 else if (*pp == 'a')
a4ec8d12 274 m1 = i, np += strlen (GET_MODE_NAME(i));
af9e4a0c 275 else
a4ec8d12 276 m2 = i, np += strlen (GET_MODE_NAME(i));
af9e4a0c 277
91ce572a 278 force_int = force_partial_int = force_float = 0;
af9e4a0c
RK
279 break;
280
281 default:
282 abort ();
283 }
284 }
285
1b3459d2 286 if (matches && pp[0] == '$' && pp[1] == ')'
af9e4a0c 287 && *np == 0
88a5e9da 288 && (! force_consec || (int) GET_MODE_WIDER_MODE(m1) == m2))
af9e4a0c
RK
289 break;
290 }
291
b6a1cbae 292 if (pindex == ARRAY_SIZE (optabs))
af9e4a0c
RK
293 return;
294
295 /* We found a match. If this pattern is only conditionally present,
296 write out the "if" and two extra blanks. */
297
298 if (*XSTR (insn, 2) != 0)
299 printf (" if (HAVE_%s)\n ", name);
300
301 printf (" ");
302
303 /* Now write out the initialization, making all required substitutions. */
304 for (pp = optabs[pindex]; *pp; pp++)
305 {
1b3459d2
ZW
306 if (*pp != '$')
307 putchar (*pp);
af9e4a0c
RK
308 else
309 switch (*++pp)
310 {
311 case '(': case ')':
312 case 'I': case 'F': case 'N':
313 break;
91ce572a
CC
314 case 'V':
315 if (GET_MODE_CLASS (m1) == MODE_FLOAT)
316 printf ("v");
317 break;
af9e4a0c 318 case 'a':
a4ec8d12 319 for (np = GET_MODE_NAME(m1); *np; np++)
92a438d1 320 putchar (TOLOWER (*np));
af9e4a0c
RK
321 break;
322 case 'b':
a4ec8d12 323 for (np = GET_MODE_NAME(m2); *np; np++)
92a438d1 324 putchar (TOLOWER (*np));
af9e4a0c
RK
325 break;
326 case 'A':
85363ca0 327 printf ("%smode", GET_MODE_NAME(m1));
af9e4a0c
RK
328 break;
329 case 'B':
85363ca0 330 printf ("%smode", GET_MODE_NAME(m2));
af9e4a0c
RK
331 break;
332 case 'c':
5f06c983 333 printf ("%s", GET_RTX_NAME(op));
af9e4a0c
RK
334 break;
335 case 'C':
5f06c983 336 for (np = GET_RTX_NAME(op); *np; np++)
92a438d1 337 putchar (TOUPPER (*np));
af9e4a0c
RK
338 break;
339 }
340 }
341
342 printf (";\n");
343}
af9e4a0c 344
3d7aafde 345extern int main (int, char **);
c1b59dce 346
af9e4a0c 347int
3d7aafde 348main (int argc, char **argv)
af9e4a0c
RK
349{
350 rtx desc;
af9e4a0c 351
f8b6598e 352 progname = "genopinit";
af9e4a0c
RK
353
354 if (argc <= 1)
1f978f5f 355 fatal ("no input file name");
af9e4a0c 356
04d8aa70 357 if (init_md_reader_args (argc, argv) != SUCCESS_EXIT_CODE)
c88c0d42 358 return (FATAL_EXIT_CODE);
af9e4a0c 359
af9e4a0c
RK
360 printf ("/* Generated automatically by the program `genopinit'\n\
361from the machine description file `md'. */\n\n");
362
363 printf ("#include \"config.h\"\n");
729da3f5 364 printf ("#include \"system.h\"\n");
4977bab6
ZW
365 printf ("#include \"coretypes.h\"\n");
366 printf ("#include \"tm.h\"\n");
af9e4a0c
RK
367 printf ("#include \"rtl.h\"\n");
368 printf ("#include \"flags.h\"\n");
af9e4a0c
RK
369 printf ("#include \"insn-config.h\"\n");
370 printf ("#include \"recog.h\"\n");
371 printf ("#include \"expr.h\"\n");
e78d8e51 372 printf ("#include \"optabs.h\"\n");
af9e4a0c
RK
373 printf ("#include \"reload.h\"\n\n");
374
6906ba40 375 printf ("void\ninit_all_optabs (void)\n{\n");
af9e4a0c 376
dcc3fcf2
KH
377 puts ("\
378#ifdef FIXUNS_TRUNC_LIKE_FIX_TRUNC\n\
379 int i, j;\n\
380#endif\n");
381
af9e4a0c
RK
382 /* Read the machine description. */
383
384 while (1)
385 {
c88c0d42
CP
386 int line_no, insn_code_number = 0;
387
388 desc = read_md_rtx (&line_no, &insn_code_number);
389 if (desc == NULL)
af9e4a0c 390 break;
af9e4a0c 391
af9e4a0c
RK
392 if (GET_CODE (desc) == DEFINE_INSN || GET_CODE (desc) == DEFINE_EXPAND)
393 gen_insn (desc);
394 }
395
85363ca0
ZW
396 puts ("\
397\n\
398#ifdef FIXUNS_TRUNC_LIKE_FIX_TRUNC\n\
399 /* This flag says the same insns that convert to a signed fixnum\n\
400 also convert validly to an unsigned one. */\n\
401 for (i = 0; i < NUM_MACHINE_MODES; i++)\n\
402 for (j = 0; j < NUM_MACHINE_MODES; j++)\n\
403 ufixtrunc_optab->handlers[i][j].insn_code\n\
404 = sfixtrunc_optab->handlers[i][j].insn_code;\n\
405#endif\n\
406}");
af9e4a0c
RK
407
408 fflush (stdout);
c1b59dce 409 return (ferror (stdout) != 0 ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE);
af9e4a0c 410}
a995e389
RH
411
412/* Define this so we can link with print-rtl.o to get debug_rtx function. */
413const char *
3d7aafde 414get_insn_name (int code ATTRIBUTE_UNUSED)
a995e389
RH
415{
416 return NULL;
417}