From 9fb9ab547dc63e004e9d068ecded882f25715ca4 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Tue, 22 Mar 2016 22:32:41 -0400 Subject: [PATCH 11/91] FIXME: enough to parse first insn --- gcc/read-rtl.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 66 insertions(+), 2 deletions(-) diff --git a/gcc/read-rtl.c b/gcc/read-rtl.c index 9d0abb3..3e06ddc 100644 --- a/gcc/read-rtl.c +++ b/gcc/read-rtl.c @@ -1453,6 +1453,18 @@ read_rtx_code (const char *code_name) */ if (i == 5 && NOTE_P (return_rtx)) break; + + if (i == 4 && INSN_P (return_rtx)) + { + // FIXME: location from fprintf (outfile, " %s:%i", xloc.file, xloc.line); + // and this won't work with filenames with a ':' in them + char ch; + do + ch = read_char (); + while (ch != ':'); + read_name (&name); + break; + } read_name (&name); int value; @@ -1481,8 +1493,37 @@ read_rtx_code (const char *code_name) set_regno_raw (return_rtx, atoi (name.string), 1); REG_ATTRS (return_rtx) = NULL; #ifndef GENERATOR_FILE - read_name (&name); // FIXME - fprintf (stderr, "FIXME: 'r': extra string `%s'\n", name.string); + { + unsigned int regno = REGNO (return_rtx); + if (regno < FIRST_PSEUDO_REGISTER + || regno <= LAST_VIRTUAL_REGISTER) + { + read_name (&name); // FIXME + fprintf (stderr, "FIXME: 'r': extra string `%s'\n", name.string); + } + char ch; + ch = read_char (); + if (ch == ' ' || ch == '[') + { + if (ch == ' ') + ch = read_char (); + if (ch == '[') + { + // FIXME: parse extra stuff at end of 'r' + do + { + ch = read_char (); + if (ch == ']') + break; + } + while (1); + } + else + unread_char (ch); + } + else + unread_char (ch); + } #endif break; @@ -1490,6 +1531,29 @@ read_rtx_code (const char *code_name) gcc_unreachable (); } +#ifndef GENERATOR_FILE + if (MEM_P (return_rtx)) + { + char ch; + ch = read_char (); + if (ch != ' ') + fatal_with_file_and_line ("missing ' '"); + ch = read_char (); + if (ch != '[') + fatal_with_file_and_line ("missing '['"); + read_name (&name); + MEM_ALIAS_SET (return_rtx) = atoi (name.string); + // FIXME etc... + do + { + ch = read_char (); + if (ch == ']') + break; + } + while (1); + } +#endif + if (CONST_WIDE_INT_P (return_rtx)) { read_name (&name); -- 1.8.5.3