#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. */
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));
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");
}
}
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
char **argv;
{
rtx desc;
- FILE *infile;
- register int c;
int have_delay = 0;
int have_annul_true = 0;
int have_annul_false = 0;
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");
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);
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);
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;