OSDN Git Service

contrib:
[pf3gnuchains/gcc-fork.git] / gcc / genattr.c
index 1a3abcd..27123d8 100644 (file)
@@ -23,14 +23,9 @@ Boston, MA 02111-1307, USA.  */
 #include "hconfig.h"
 #include "system.h"
 #include "rtl.h"
-#include "obstack.h"
 #include "errors.h"
+#include "gensupport.h"
 
-static struct obstack obstack;
-struct obstack *rtl_obstack = &obstack;
-
-#define obstack_chunk_alloc xmalloc
-#define obstack_chunk_free free
 
 /* A range of values.  */
 
@@ -91,7 +86,7 @@ static void
 gen_attr (attr)
      rtx attr;
 {
-  char *p;
+  const char *p;
   int is_const = GET_CODE (XEXP (attr, 2)) == CONST;  
 
   printf ("#define HAVE_ATTR_%s\n", XSTR (attr, 0));
@@ -131,8 +126,7 @@ gen_attr (attr)
       printf ("extern int insn_default_length PARAMS ((rtx));\n");
       printf ("extern int insn_variable_length_p PARAMS ((rtx));\n");
       printf ("extern int insn_current_length PARAMS ((rtx));\n\n");
-      printf ("extern int *insn_addresses;\n");
-      printf ("extern int insn_current_address;\n\n");
+      printf ("#include \"insn-addr.h\"\n\n");
     }
 }
 
@@ -188,32 +182,6 @@ write_units (num_units, multiplicity, simultaneity,
   printf ("#define INSN_QUEUE_SIZE %d\n", q_size);
 }
 
-PTR
-xmalloc (size)
-  size_t size;
-{
-  register PTR val = (PTR) malloc (size);
-
-  if (val == 0)
-    fatal ("virtual memory exhausted");
-  return val;
-}
-
-PTR
-xrealloc (old, size)
-  PTR old;
-  size_t size;
-{
-  register PTR ptr;
-  if (old)
-    ptr = (PTR) realloc (old, size);
-  else
-    ptr = (PTR) malloc (size);
-  if (!ptr)
-    fatal ("virtual memory exhausted");
-  return ptr;
-}
-
 extern int main PARAMS ((int, char **));
 
 int
@@ -222,8 +190,6 @@ main (argc, argv)
      char **argv;
 {
   rtx desc;
-  FILE *infile;
-  register int c;
   int have_delay = 0;
   int have_annul_true = 0;
   int have_annul_false = 0;
@@ -240,18 +206,12 @@ main (argc, argv)
   init_range (&all_blockage);
 
   progname = "genattr";
-  obstack_init (rtl_obstack);
 
   if (argc <= 1)
     fatal ("No input file name.");
 
-  infile = fopen (argv[1], "r");
-  if (infile == 0)
-    {
-      perror (argv[1]);
-      return (FATAL_EXIT_CODE);
-    }
-  read_rtx_filename = argv[1];
+  if (init_md_reader (argv[1]) != SUCCESS_EXIT_CODE)
+    return (FATAL_EXIT_CODE);
 
   printf ("/* Generated automatically by the program `genattr'\n\
 from the machine description file `md'.  */\n\n");
@@ -266,12 +226,12 @@ from the machine description file `md'.  */\n\n");
 
   while (1)
     {
-      c = read_skip_spaces (infile);
-      if (c == EOF)
+      int line_no, insn_code_number;
+
+      desc = read_md_rtx (&line_no, &insn_code_number);
+      if (desc == NULL)
        break;
-      ungetc (c, infile);
 
-      desc = read_rtx (infile);
       if (GET_CODE (desc) == DEFINE_ATTR)
        gen_attr (desc);
 
@@ -306,7 +266,7 @@ from the machine description file `md'.  */\n\n");
 
       else if (GET_CODE (desc) == DEFINE_FUNCTION_UNIT)
        {
-         char *name = XSTR (desc, 0);
+         const char *name = XSTR (desc, 0);
          int multiplicity = XINT (desc, 1);
          int simultaneity = XINT (desc, 2);
          int ready_cost = MAX (XINT (desc, 4), 1);
@@ -323,7 +283,7 @@ from the machine description file `md'.  */\n\n");
              unit = (struct function_unit *)
                alloca (sizeof (struct function_unit));
              unit->name = (char *) alloca (len);
-             bcopy (name, unit->name, len);
+             memcpy (unit->name, name, len);
              unit->multiplicity = multiplicity;
              unit->simultaneity = simultaneity;
              unit->ready_cost.min = unit->ready_cost.max = ready_cost;