diff gcc/genconfig.c @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents f6334be47118
children 84e7813d76e9
line wrap: on
line diff
--- a/gcc/genconfig.c	Sun Aug 21 07:07:55 2011 +0900
+++ b/gcc/genconfig.c	Fri Oct 27 22:46:09 2017 +0900
@@ -1,7 +1,6 @@
 /* Generate from machine description:
    - some #define configuration flags.
-   Copyright (C) 1987, 1991, 1997, 1998, 1999, 2000, 2003, 2004, 2007, 2010
-   Free Software Foundation, Inc.
+   Copyright (C) 1987-2017 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -37,6 +36,8 @@
 static int have_cmove_flag;
 static int have_cond_exec_flag;
 static int have_lo_sum_flag;
+static int have_rotate_flag;
+static int have_rotatert_flag;
 static int have_peephole_flag;
 static int have_peephole2_flag;
 
@@ -50,11 +51,6 @@
 static int dup_operands_seen_this_insn;
 
 static void walk_insn_part (rtx, int, int);
-static void gen_insn (rtx);
-static void gen_expand (rtx);
-static void gen_split (rtx);
-static void gen_peephole (rtx);
-static void gen_peephole2 (rtx);
 
 /* RECOG_P will be nonzero if this pattern was seen in a context where it will
    be used to recognize, rather than just generate an insn.
@@ -87,6 +83,7 @@
     case MATCH_OP_DUP:
     case MATCH_PAR_DUP:
       ++dup_operands_seen_this_insn;
+      /* FALLTHRU */
     case MATCH_SCRATCH:
     case MATCH_PARALLEL:
     case MATCH_OPERATOR:
@@ -118,6 +115,16 @@
 	have_lo_sum_flag = 1;
       return;
 
+    case ROTATE:
+      if (recog_p)
+	have_rotate_flag = 1;
+      return;
+
+    case ROTATERT:
+      if (recog_p)
+	have_rotatert_flag = 1;
+      return;
+
     case SET:
       walk_insn_part (SET_DEST (part), 0, recog_p);
       walk_insn_part (SET_SRC (part), recog_p,
@@ -168,11 +175,12 @@
 }
 
 static void
-gen_insn (rtx insn)
+gen_insn (md_rtx_info *info)
 {
   int i;
 
   /* Walk the insn pattern to gather the #define's status.  */
+  rtx insn = info->def;
   clobbers_seen_this_insn = 0;
   dup_operands_seen_this_insn = 0;
   if (XVEC (insn, 1) != 0)
@@ -188,7 +196,7 @@
 /* Similar but scan a define_expand.  */
 
 static void
-gen_expand (rtx insn)
+gen_expand (md_rtx_info *info)
 {
   int i;
 
@@ -196,6 +204,7 @@
 
   /* Note that we don't bother recording the number of MATCH_DUPs
      that occur in a gen_expand, because only reload cares about that.  */
+  rtx insn = info->def;
   if (XVEC (insn, 1) != 0)
     for (i = 0; i < XVECLEN (insn, 1); i++)
       {
@@ -214,12 +223,13 @@
 /* Similar but scan a define_split.  */
 
 static void
-gen_split (rtx split)
+gen_split (md_rtx_info *info)
 {
   int i;
 
   /* Look through the patterns that are matched
      to compute the maximum operand number.  */
+  rtx split = info->def;
   for (i = 0; i < XVECLEN (split, 0); i++)
     walk_insn_part (XVECEXP (split, 0, i), 1, 0);
   /* Look at the number of insns this insn could split into.  */
@@ -228,23 +238,25 @@
 }
 
 static void
-gen_peephole (rtx peep)
+gen_peephole (md_rtx_info *info)
 {
   int i;
 
   /* Look through the patterns that are matched
      to compute the maximum operand number.  */
+  rtx peep = info->def;
   for (i = 0; i < XVECLEN (peep, 0); i++)
     walk_insn_part (XVECEXP (peep, 0, i), 1, 0);
 }
 
 static void
-gen_peephole2 (rtx peep)
+gen_peephole2 (md_rtx_info *info)
 {
   int i, n;
 
   /* Look through the patterns that are matched
      to compute the maximum operand number.  */
+  rtx peep = info->def;
   for (i = XVECLEN (peep, 0) - 1; i >= 0; --i)
     walk_insn_part (XVECEXP (peep, 0, i), 1, 0);
 
@@ -258,10 +270,8 @@
 }
 
 int
-main (int argc, char **argv)
+main (int argc, const char **argv)
 {
-  rtx desc;
-
   progname = "genconfig";
 
   if (!init_rtx_reader_args (argc, argv))
@@ -280,42 +290,35 @@
 
   /* Read the machine description.  */
 
-  while (1)
-    {
-      int line_no, insn_code_number = 0;
+  md_rtx_info info;
+  while (read_md_rtx (&info))
+    switch (GET_CODE (info.def))
+      {
+      case DEFINE_INSN:
+	gen_insn (&info);
+	break;
 
-      desc = read_md_rtx (&line_no, &insn_code_number);
-      if (desc == NULL)
+      case DEFINE_EXPAND:
+	gen_expand (&info);
 	break;
 
-      switch (GET_CODE (desc))
-	{
-  	  case DEFINE_INSN:
-	    gen_insn (desc);
-	    break;
+      case DEFINE_SPLIT:
+	gen_split (&info);
+	break;
 
-	  case DEFINE_EXPAND:
-	    gen_expand (desc);
-	    break;
-
-	  case DEFINE_SPLIT:
-	    gen_split (desc);
-	    break;
+      case DEFINE_PEEPHOLE2:
+	have_peephole2_flag = 1;
+	gen_peephole2 (&info);
+	break;
 
-	  case DEFINE_PEEPHOLE2:
-	    have_peephole2_flag = 1;
-	    gen_peephole2 (desc);
-	    break;
+      case DEFINE_PEEPHOLE:
+	have_peephole_flag = 1;
+	gen_peephole (&info);
+	break;
 
-	  case DEFINE_PEEPHOLE:
-	    have_peephole_flag = 1;
-	    gen_peephole (desc);
-	    break;
-
-	  default:
-	    break;
-	}
-    }
+      default:
+	break;
+      }
 
   printf ("#define MAX_RECOG_OPERANDS %d\n", max_recog_operands + 1);
   printf ("#define MAX_DUP_OPERANDS %d\n", max_dup_operands);
@@ -335,28 +338,48 @@
     {
       /* We output CC0_P this way to make sure that X is declared
 	 somewhere.  */
+      printf ("#define HAVE_cc0 0\n");
       printf ("#define CC0_P(X) ((X) ? 0 : 0)\n");
     }
 
   if (have_cmove_flag)
     printf ("#define HAVE_conditional_move 1\n");
+  else
+    printf ("#define HAVE_conditional_move 0\n");
 
   if (have_cond_exec_flag)
     printf ("#define HAVE_conditional_execution 1\n");
+  else
+    printf ("#define HAVE_conditional_execution 0\n");
 
   if (have_lo_sum_flag)
     printf ("#define HAVE_lo_sum 1\n");
+  else
+    printf ("#define HAVE_lo_sum 0\n");
+
+  if (have_rotate_flag)
+    printf ("#define HAVE_rotate 1\n");
+
+  if (have_rotatert_flag)
+    printf ("#define HAVE_rotatert 1\n");
 
   if (have_peephole_flag)
     printf ("#define HAVE_peephole 1\n");
+  else
+    printf ("#define HAVE_peephole 0\n");
 
   if (have_peephole2_flag)
     {
       printf ("#define HAVE_peephole2 1\n");
       printf ("#define MAX_INSNS_PER_PEEP2 %d\n", max_insns_per_peep2);
     }
+  else
+    {
+      printf ("#define HAVE_peephole2 0\n");
+      printf ("#define MAX_INSNS_PER_PEEP2 0\n");
+    }
 
-  puts("\n#endif /* GCC_INSN_CONFIG_H */");
+  puts ("\n#endif /* GCC_INSN_CONFIG_H */");
 
   if (ferror (stdout) || fflush (stdout) || fclose (stdout))
     return FATAL_EXIT_CODE;