Commit 57406c63 by Richard Sandiford Committed by Richard Sandiford

rtl.h (read_rtx): Change prototype.

	* rtl.h (read_rtx): Change prototype.
	* read-rtl.c (read_rtx): Provide the caller with both an rtx and a
	line number.  Return true on success.
	* gensupport.c (process_include, init_md_reader_args_cb): Adjust
	callers accordingly.

From-SVN: r86657
parent 6a6bfc8e
2004-08-26 Richard Sandiford <rsandifo@redhat.com>
* rtl.h (read_rtx): Change prototype.
* read-rtl.c (read_rtx): Provide the caller with both an rtx and a
line number. Return true on success.
* gensupport.c (process_include, init_md_reader_args_cb): Adjust
callers accordingly.
2004-08-26 Richard Henderson <rth@redhat.com> 2004-08-26 Richard Henderson <rth@redhat.com>
* c-typeck.c (build_offsetof): Remove. * c-typeck.c (build_offsetof): Remove.
......
...@@ -246,20 +246,8 @@ process_include (rtx desc, int lineno) ...@@ -246,20 +246,8 @@ process_include (rtx desc, int lineno)
read_rtx_lineno = 1; read_rtx_lineno = 1;
/* Read the entire file. */ /* Read the entire file. */
while (1) while (read_rtx (input_file, &desc, &lineno))
{ process_rtx (desc, lineno);
rtx desc;
int c;
c = read_skip_spaces (input_file);
if (c == EOF)
break;
ungetc (c, input_file);
lineno = read_rtx_lineno;
desc = read_rtx (input_file);
process_rtx (desc, lineno);
}
/* Do not free pathname. It is attached to the various rtx queue /* Do not free pathname. It is attached to the various rtx queue
elements. */ elements. */
...@@ -911,9 +899,10 @@ int ...@@ -911,9 +899,10 @@ int
init_md_reader_args_cb (int argc, char **argv, bool (*parse_opt)(const char *)) init_md_reader_args_cb (int argc, char **argv, bool (*parse_opt)(const char *))
{ {
FILE *input_file; FILE *input_file;
int i; int i, lineno;
size_t ix; size_t ix;
char *lastsl; char *lastsl;
rtx desc;
for (i = 1; i < argc; i++) for (i = 1; i < argc; i++)
{ {
...@@ -991,19 +980,8 @@ init_md_reader_args_cb (int argc, char **argv, bool (*parse_opt)(const char *)) ...@@ -991,19 +980,8 @@ init_md_reader_args_cb (int argc, char **argv, bool (*parse_opt)(const char *))
sequence_num = 0; sequence_num = 0;
/* Read the entire file. */ /* Read the entire file. */
while (1) while (read_rtx (input_file, &desc, &lineno))
{ process_rtx (desc, lineno);
rtx desc;
int lineno;
int c = read_skip_spaces (input_file);
if (c == EOF)
break;
ungetc (c, input_file);
lineno = read_rtx_lineno;
desc = read_rtx (input_file);
process_rtx (desc, lineno);
}
fclose (input_file); fclose (input_file);
/* Process define_cond_exec patterns. */ /* Process define_cond_exec patterns. */
......
...@@ -1066,16 +1066,20 @@ check_code_macro (struct mapping *macro, FILE *infile) ...@@ -1066,16 +1066,20 @@ check_code_macro (struct mapping *macro, FILE *infile)
bellwether_codes[macro->index] = bellwether; bellwether_codes[macro->index] = bellwether;
} }
/* Read an rtx in printed representation from INFILE /* Read an rtx in printed representation from INFILE and store its
and return an actual rtx in core constructed accordingly. core representation in *X. Also store the line number of the
opening '(' in *LINENO. Return true on success or false if the
end of file has been reached.
read_rtx is not used in the compiler proper, but rather in read_rtx is not used in the compiler proper, but rather in
the utilities gen*.c that construct C code from machine descriptions. */ the utilities gen*.c that construct C code from machine descriptions. */
rtx bool
read_rtx (FILE *infile) read_rtx (FILE *infile, rtx *x, int *lineno)
{ {
static rtx queue_head, queue_next; static rtx queue_head, queue_next;
rtx return_rtx; static int queue_lineno;
int c;
/* Do one-time initialization. */ /* Do one-time initialization. */
if (queue_head == 0) if (queue_head == 0)
...@@ -1087,8 +1091,13 @@ read_rtx (FILE *infile) ...@@ -1087,8 +1091,13 @@ read_rtx (FILE *infile)
if (queue_next == 0) if (queue_next == 0)
{ {
queue_next = queue_head; c = read_skip_spaces (infile);
if (c == EOF)
return false;
ungetc (c, infile);
queue_next = queue_head;
queue_lineno = read_rtx_lineno;
XEXP (queue_next, 0) = read_rtx_1 (infile); XEXP (queue_next, 0) = read_rtx_1 (infile);
XEXP (queue_next, 1) = 0; XEXP (queue_next, 1) = 0;
...@@ -1096,10 +1105,11 @@ read_rtx (FILE *infile) ...@@ -1096,10 +1105,11 @@ read_rtx (FILE *infile)
htab_traverse (codes.macros, apply_macro_traverse, queue_next); htab_traverse (codes.macros, apply_macro_traverse, queue_next);
} }
return_rtx = XEXP (queue_next, 0); *x = XEXP (queue_next, 0);
*lineno = queue_lineno;
queue_next = XEXP (queue_next, 1); queue_next = XEXP (queue_next, 1);
return return_rtx; return true;
} }
/* Subroutine of read_rtx that reads one construct from INFILE but /* Subroutine of read_rtx that reads one construct from INFILE but
......
...@@ -2147,7 +2147,7 @@ struct md_constant { char *name, *value; }; ...@@ -2147,7 +2147,7 @@ struct md_constant { char *name, *value; };
/* In read-rtl.c */ /* In read-rtl.c */
extern int read_skip_spaces (FILE *); extern int read_skip_spaces (FILE *);
extern rtx read_rtx (FILE *); extern bool read_rtx (FILE *, rtx *, int *);
extern const char *read_rtx_filename; extern const char *read_rtx_filename;
extern int read_rtx_lineno; extern int read_rtx_lineno;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment