OSDN Git Service

* c-common.c: Include <stdlib.h> and <string.h>/<strings.h>.
[pf3gnuchains/gcc-fork.git] / gcc / genconfig.c
index 820e1d8..cc012cb 100644 (file)
@@ -1,7 +1,6 @@
 /* Generate from machine description:
-
    - some #define configuration flags.
-   Copyright (C) 1987, 1991 Free Software Foundation, Inc.
+   Copyright (C) 1987, 1991, 1997 Free Software Foundation, Inc.
 
 This file is part of GNU CC.
 
@@ -17,14 +16,19 @@ GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with GNU CC; see the file COPYING.  If not, write to
-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
 
 
 #include <stdio.h>
-#include "config.h"
+#include "hconfig.h"
 #include "rtl.h"
 #include "obstack.h"
 
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
 static struct obstack obstack;
 struct obstack *rtl_obstack = &obstack;
 
@@ -126,13 +130,24 @@ walk_insn_part (part, recog_p, non_pc_set_src)
       return;
 
     case IF_THEN_ELSE:
-      if (recog_p && non_pc_set_src)
+      /* Only consider this machine as having a conditional move if the
+        two arms of the IF_THEN_ELSE are both MATCH_OPERAND.  Otherwise,
+        we have some specific IF_THEN_ELSE construct (like the doz
+        instruction on the RS/6000) that can't be used in the general
+        context we want it for.  */
+
+      if (recog_p && non_pc_set_src
+         && GET_CODE (XEXP (part, 1)) == MATCH_OPERAND
+         && GET_CODE (XEXP (part, 2)) == MATCH_OPERAND)
        have_cmove_flag = 1;
       break;
 
     case REG: case CONST_INT: case SYMBOL_REF:
     case PC:
       return;
+
+    default:
+      break;
     }
 
   format_ptr = GET_RTX_FORMAT (GET_CODE (part));