/* Generate code to allocate RTL structures.
- Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
This file is part of GCC.
02111-1307, USA. */
-#include "hconfig.h"
+#include "bconfig.h"
#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
#define NO_GENRTL_H
#include "rtl.h"
#include "real.h"
-struct rtx_definition
+struct rtx_definition
{
const char *const enumname, *const name, *const format;
};
#define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) { STRINGX(ENUM), NAME, FORMAT },
-static const struct rtx_definition defs[] =
-{
+static const struct rtx_definition defs[] =
+{
#include "rtl.def" /* rtl expressions are documented here */
};
static const char *accessor_from_format PARAMS ((int));
static int special_format PARAMS ((const char *));
static int special_rtx PARAMS ((int));
+static int excluded_rtx PARAMS ((int));
static void find_formats PARAMS ((void));
static void gendecl PARAMS ((const char *));
static void genmacro PARAMS ((int));
return "struct bitmap_head_def *"; /* bitmap - typedef not available */
case 't':
return "union tree_node *"; /* tree - typedef not available */
+ case 'B':
+ return "struct basic_block_def *"; /* basic block - typedef not available */
default:
abort ();
}
case 't':
return "XTREE";
+ case 'B':
+ return "XBBDEF";
+
default:
abort ();
}
return (strcmp (defs[idx].enumname, "CONST_INT") == 0
|| strcmp (defs[idx].enumname, "REG") == 0
|| strcmp (defs[idx].enumname, "SUBREG") == 0
- || strcmp (defs[idx].enumname, "MEM") == 0);
+ || strcmp (defs[idx].enumname, "MEM") == 0
+ || strcmp (defs[idx].enumname, "CONST_VECTOR") == 0);
}
/* Return nonzero if the RTL code given by index IDX is one that we should
{
const char *p;
int i, pos;
-
+
printf ("extern rtx gen_rtx_fmt_%s\tPARAMS ((RTX_CODE, ", format);
printf ("enum machine_mode mode");
/* Generate macros to generate RTL of code IDX using the functions we
write. */
-static void
+static void
genmacro (idx)
int idx;
{
{
const char *p;
int i, j;
-
+
/* Start by writing the definition of the function name and the types
of the arguments. */
puts ("#include \"config.h\"");
puts ("#include \"system.h\"");
+ puts ("#include \"coretypes.h\"");
+ puts ("#include \"tm.h\"");
puts ("#include \"obstack.h\"");
puts ("#include \"rtl.h\"");
puts ("#include \"ggc.h\"\n");
- puts ("extern struct obstack *rtl_obstack;\n");
- puts ("#define obstack_alloc_rtx(n) \\");
- puts (" ((rtx) obstack_alloc (rtl_obstack, \\");
- puts (" sizeof (struct rtx_def) \\");
- puts (" + ((n) - 1) * sizeof (rtunion)))\n");
for (fmt = formats; *fmt != 0; fmt++)
gendef (*fmt);