This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Target-dependent modes (1.5/3)


This is a real grab bag.

While attempting to develop patch 2 I discovered that I needed to be
able to specify floating point formats in machmode.def, instead of
real.c.  Then this snowballed a bit, since you can't reference
variables defined in real.c in code linked into the gen* programs, so
insn-modes.c had to be split.  I was thinking of doing this anyway, so
that the fullsize insn-modes.c could include tm.h safely (patch 3 is
going to require that).  

And then I discovered that print-rtl.c had a bunch of gunk in it that
-- in conjunction with i386.h -- caused link errors if it didn't get
the full set of mode tables.  It seemed best just to rip that all out,
and use the normal PRINT_REG macro, which requires including tm_p.h in
print-rtl.h, which I think is safe.

EXTRA_CC_MODES for some reason doesn't reliably get defined anymore;
the only place that uses it is combine.c, which can just check the
macro it actually wants to use, SELECT_CC_MODE.

Several target files have initialization functions that think they
have to special case CC modes because their entries in the mode_class
array aren't initialized yet, which has not been true for some time.

Finally, the i860 back end calls aggregate_value_p with the wrong
number of arguments, which has nothing to do with machine modes except
that it was interfering with testing.  I think it is correct to pass 0
for the second argument here.

Bootstrapping i686-linux.  I would appreciate help testing this patch,
especially on powerpc-apple-darwin and mips-*.  I don't think it's a
very dangerous patch so I may check it in with just some simulator
testing on the affected architectures.  All this code has at least
been compiled.

Also, if a Darwin maintainer could look see if the alternate register
name table in rs6000.c would do for their assembler?  Then it could be
just

#undef TARGET_REGNAMES
#define TARGET_REGNAMES 1

in rs6000/darwin.h, instead of redefining the entire REGISTER_NAMES macro.

zw

        * Makefile.in (BUILD_RTL): Replace $(BUILD_PREFIX)insn-modes.o
        with min-insn-modes.o.
        (STAGESTUFF): Add min-insn-modes.c.
        (print-rtl.o, print-rtl1.o): Depend on $(TM_P_H).
        (insn-modes.o): Depend on $(TM_H) not $(GTM_H); also real.h.
        (min-insn-modes.c, min-insn-modes.o): New rules.
        (s-modes): Also generate min-insn-modes.c.
        ($(BUILD_PREFIX_1)insn-modes.o): Kill.
        * genmodes.c (struct mode_data): Add format field.
        (blank_mode, validate_mode, complete_mode): Update to match.
        (make_scalar_mode): Separate into make_int_mode and make_float_mode.
        (_SCALAR_MODE): Kill.
        (FLOAT_MODE, FRACTIONAL_FLOAT_MODE): Add format argument.
        (emit_insn_modes_c_header): Adjust.
        (emit_min_insn_modes_c_header, emit_real_format_for_mode)
        (emit_min_insn_modes_c): New functions.
        (emit_insn_modes_c): Call emit_real_format_for_mode.
        (main): Add -m option to generate min-insn-modes.c.
        * machmode.h: Update documentation.  Add format argument to
        all uses of FLOAT_MODE.
        * real.c: Don't define real_format_for_mode here.

        * dwarfout.c: Move default definition of PRINT_REG...
        * defaults.h: ...here.
        * print-rtl.c: Include tm_p.h.
        (DEBUG_PRINT_REG, DEBUG_REGISTER_NAMES, debug_reg_names, reg_names):
        Kill.
        (print_rtx): Use PRINT_REG, not DEBUG_PRINT_REG.  But surround
        this entire block with #ifndef GENERATOR_FILE.
        * regclass.c: Unconditionally define reg_names.
        * config/mips/mips.h, config/rs6000/rs6000.h, config/sh/sh.h
        Don't define DEBUG_REGISTER_NAMES.
        * config/rs6000/darwin.h: Don't use DEBUG_REGISTER_NAMES in
        redefinition of REGISTER_NAMES.
        * config/i386/i386.h: Don't define DEBUG_PRINT_REG.

        * combine.c: Change all preprocessor conditionals on
        EXTRA_CC_MODES to use SELECT_CC_MODE instead; rearrange a bit
        for clarity.
        * genopinit.c: Remove mention of EXTRA_CC_MODES in comment.
        * configure.in: Don't define EXTRA_CC_MODES.
        * configure, config.in: Regenerate.
        * doc/tm.texi: Remove documentation of EXTRA_CC_MODES.

        * config/arc/arc.c, config/m32r/m32r.c, config/sparc/sparc.c:
        May assume that GET_MODE_CLASS is accurate for extra CC modes
        at all times.

        * config/i860/i860.h (INIT_CUMULATIVE_ARGS): Pass correct
        number of arguments to aggregate_value_p.

===================================================================
Index: Makefile.in
--- Makefile.in	10 Oct 2003 20:33:04 -0000	1.1169
+++ Makefile.in	11 Oct 2003 08:46:51 -0000
@@ -715,7 +715,7 @@ LDEXP_LIB = @LDEXP_LIB@
 BUILD_LIBS = $(BUILD_LIBIBERTY)
 
 BUILD_RTL = $(BUILD_PREFIX)rtl.o read-rtl.o $(BUILD_PREFIX)bitmap.o \
-		$(BUILD_PREFIX)ggc-none.o $(BUILD_PREFIX)insn-modes.o
+		$(BUILD_PREFIX)ggc-none.o min-insn-modes.o
 BUILD_SUPPORT = gensupport.o insn-conditions.o
 BUILD_EARLY_SUPPORT = gensupport.o dummy-conditions.o
 
@@ -863,7 +863,7 @@ BACKEND = main.o libbackend.a
 STAGESTUFF = *$(objext) insn-flags.h insn-config.h insn-codes.h \
  insn-output.c insn-recog.c insn-emit.c insn-extract.c insn-peep.c \
  insn-attr.h insn-attrtab.c insn-opinit.c insn-constants.h tm-preds.h \
- tree-check.h insn-conditions.c insn-modes.c insn-modes.h \
+ tree-check.h insn-conditions.c min-insn-modes.c insn-modes.c insn-modes.h \
  s-flags s-config s-codes s-mlib s-genrtl s-modes s-gtype gtyp-gen.h \
  s-output s-recog s-emit s-extract s-peep s-check s-conditions \
  s-attr s-attrtab s-opinit s-preds s-constants s-crt0 \
@@ -1519,7 +1519,7 @@ rtl.o : rtl.c $(CONFIG_H) $(SYSTEM_H) co
 	$(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
 
 print-rtl.o : print-rtl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
-    hard-reg-set.h $(BASIC_BLOCK_H) real.h
+    hard-reg-set.h $(BASIC_BLOCK_H) real.h $(TM_P_H)
 rtlanal.o : rtlanal.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) toplev.h $(RTL_H) \
    hard-reg-set.h $(TM_P_H) insn-config.h $(RECOG_H) real.h flags.h
 
@@ -2008,13 +2008,15 @@ s-genrtl: gengenrtl$(build_exeext) $(src
 	$(SHELL) $(srcdir)/move-if-change tmp-genrtl.c genrtl.c
 	$(STAMP) s-genrtl
 
-insn-modes.o : insn-modes.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H) \
-	       $(MACHMODE_H)
-insn-modes.c insn-modes.h : s-modes ; @true
+insn-modes.o : insn-modes.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
+	       $(MACHMODE_H) real.h
+min-insn-modes.c insn-modes.c insn-modes.h : s-modes ; @true
 
 s-modes: genmodes$(build_exeext) $(srcdir)/move-if-change
 	$(RUN_GEN) ./genmodes$(build_exeext) -h > tmp-modes.h
 	$(SHELL) $(srcdir)/move-if-change tmp-modes.h insn-modes.h
+	$(RUN_GEN) ./genmodes$(build_exeext) -m > tmp-min-modes.c
+	$(SHELL) $(srcdir)/move-if-change tmp-min-modes.c min-insn-modes.c
 	$(RUN_GEN) ./genmodes$(build_exeext) > tmp-modes.c
 	$(SHELL) $(srcdir)/move-if-change tmp-modes.c insn-modes.c
 	$(STAMP) s-modes
@@ -2259,7 +2261,7 @@ $(BUILD_PREFIX_1)rtl.o: $(srcdir)/rtl.c 
 	$(CC_FOR_BUILD) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) $(BUILD_PREFIX)rtl.c $(OUTPUT_OPTION)
 
 print-rtl1.o: $(srcdir)/print-rtl.c $(BCONFIG_H) coretypes.h $(GTM_H) \
-  $(RTL_H) $(TREE_H) hard-reg-set.h $(BASIC_BLOCK_H)
+  $(RTL_H) $(TREE_H) hard-reg-set.h $(BASIC_BLOCK_H) $(TM_P_H)
 	rm -f print-rtl1.c
 	sed -e 's/config[.]h/bconfig.h/' $(srcdir)/print-rtl.c > print-rtl1.c
 	$(CC_FOR_BUILD) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) print-rtl1.c $(OUTPUT_OPTION)
@@ -2288,11 +2290,9 @@ $(BUILD_PREFIX_1)ggc-none.o: ggc-none.c 
 	sed -e 's/config[.]h/bconfig.h/' $(srcdir)/ggc-none.c > $(BUILD_PREFIX)ggc-none.c
 	$(CC_FOR_BUILD) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) $(BUILD_PREFIX)ggc-none.c $(OUTPUT_OPTION)
 
-$(BUILD_PREFIX_1)insn-modes.o: insn-modes.c $(BCONFIG_H) $(SYSTEM_H) \
-			       coretypes.h $(GTM_H) $(MACHMODE_H)
-	rm -f $(BUILD_PREFIX)insn-modes.c
-	sed -e 's/config[.]h/bconfig.h/' $(srcdir)/insn-modes.c > $(BUILD_PREFIX)insn-modes.c
-	$(CC_FOR_BUILD) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) $(BUILD_PREFIX)insn-modes.c $(OUTPUT_OPTION)
+min-insn-modes.o: insn-modes.c $(BCONFIG_H) $(SYSTEM_H) $(MACHMODE_H)
+	$(CC_FOR_BUILD) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) \
+	    min-insn-modes.c $(OUTPUT_OPTION)
 
 #
 # Remake internationalization support.
===================================================================
Index: combine.c
--- combine.c	10 Oct 2003 19:02:51 -0000	1.391
+++ combine.c	11 Oct 2003 08:46:53 -0000
@@ -1893,7 +1893,7 @@ try_combine (rtx i3, rtx i2, rtx i1, int
       && XEXP (SET_SRC (PATTERN (i3)), 1) == const0_rtx
       && rtx_equal_p (XEXP (SET_SRC (PATTERN (i3)), 0), i2dest))
     {
-#ifdef EXTRA_CC_MODES
+#ifdef SELECT_CC_MODE
       rtx *cc_use;
       enum machine_mode compare_mode;
 #endif
@@ -1903,7 +1903,7 @@ try_combine (rtx i3, rtx i2, rtx i1, int
 
       i2_is_used = 1;
 
-#ifdef EXTRA_CC_MODES
+#ifdef SELECT_CC_MODE
       /* See if a COMPARE with the operand we substituted in should be done
 	 with the mode that is currently being used.  If not, do the same
 	 processing we do in `subst' for a SET; namely, if the destination
@@ -5048,13 +5048,12 @@ simplify_set (rtx x)
       /* Simplify our comparison, if possible.  */
       new_code = simplify_comparison (old_code, &op0, &op1);
 
-#ifdef EXTRA_CC_MODES
+#ifdef SELECT_CC_MODE
       /* If this machine has CC modes other than CCmode, check to see if we
 	 need to use a different CC mode here.  */
       compare_mode = SELECT_CC_MODE (new_code, op0, op1);
-#endif /* EXTRA_CC_MODES */
 
-#if !defined (HAVE_cc0) && defined (EXTRA_CC_MODES)
+#ifndef HAVE_cc0
       /* If the mode changed, we have to change SET_DEST, the mode in the
 	 compare, and the mode in the place SET_DEST is used.  If SET_DEST is
 	 a hard register, just build new versions with the proper mode.  If it
@@ -5078,7 +5077,8 @@ simplify_set (rtx x)
 	      dest = new_dest;
 	    }
 	}
-#endif
+#endif  /* cc0 */
+#endif  /* SELECT_CC_MODE */
 
       /* If the code changed, we have to build a new comparison in
 	 undobuf.other_insn.  */
===================================================================
Index: configure.in
--- configure.in	10 Oct 2003 06:03:08 -0000	1.737
+++ configure.in	11 Oct 2003 08:46:54 -0000
@@ -1102,9 +1102,6 @@ if test -n "$extra_modes" && test -f $sr
   AC_DEFINE_UNQUOTED(EXTRA_MODES_FILE, "config/$extra_modes",
   [Define to the name of a file containing a list of extra machine modes
    for this architecture.])
-  AC_DEFINE(EXTRA_CC_MODES, 1,
-  [Define if the target architecture needs extra machine modes to represent
-   the results of comparisons.])
 fi
 
 # auto-host.h is the file containing items generated by autoconf and is
===================================================================
Index: defaults.h
--- defaults.h	7 Oct 2003 19:48:18 -0000	1.116
+++ defaults.h	11 Oct 2003 08:46:54 -0000
@@ -683,4 +683,10 @@ You Lose!  You must define PREFERRED_DEB
 #define STACK_POINTER_OFFSET    0
 #endif
 
+/* How to print out a register name.  */
+#ifndef PRINT_REG
+#define PRINT_REG(RTX, CODE, FILE) \
+  fprintf ((FILE), "%s", reg_names[REGNO (RTX)])
+#endif
+
 #endif  /* ! GCC_DEFAULTS_H */
===================================================================
Index: dwarfout.c
--- dwarfout.c	22 Sep 2003 05:09:12 -0000	1.137
+++ dwarfout.c	11 Oct 2003 08:46:55 -0000
@@ -597,12 +597,6 @@ Software Foundation, 59 Temple Place - S
 #define ASM_COMMENT_START ";#"
 #endif
 
-/* How to print out a register name.  */
-#ifndef PRINT_REG
-#define PRINT_REG(RTX, CODE, FILE) \
-  fprintf ((FILE), "%s", reg_names[REGNO (RTX)])
-#endif
-
 /* Define a macro which returns nonzero for any tagged type which is
    used (directly or indirectly) in the specification of either some
    function's return type or some formal parameter of some function.
===================================================================
Index: genmodes.c
--- genmodes.c	11 Oct 2003 07:22:22 -0000	1.2
+++ genmodes.c	11 Oct 2003 08:46:55 -0000
@@ -59,6 +59,7 @@ struct mode_data
   unsigned int bytesize;	/* storage size in addressable units */
   unsigned int ncomponents;	/* number of subunits */
   unsigned int alignment;	/* mode alignment */
+  const char *format;		/* floating point format - MODE_FLOAT only */
 
   struct mode_data *component;	/* mode of components */
   struct mode_data *wider;	/* next wider mode */
@@ -74,7 +75,7 @@ static struct mode_data *void_mode;
 static const struct mode_data blank_mode = {
   0, "<unknown>", MAX_MODE_CLASS,
   -1, -1, -1, -1,
-  0, 0,
+  0, 0, 0,
   "<unknown>", 0
 };
 
@@ -180,12 +181,14 @@ validate_mode (struct mode_data *m,
 	       enum requirement r_bitsize,
 	       enum requirement r_bytesize,
 	       enum requirement r_component,
-	       enum requirement r_ncomponents)
+	       enum requirement r_ncomponents,
+	       enum requirement r_format)
 {
   validate_field (m, bitsize);
   validate_field (m, bytesize);
   validate_field (m, component);
   validate_field (m, ncomponents);
+  validate_field (m, format);
 }
 #undef validate_field
 #undef validate_field_
@@ -215,7 +218,7 @@ complete_mode (struct mode_data *m)
       if (!strcmp (m->name, "VOID"))
 	void_mode = m;
 
-      validate_mode (m, UNSET, UNSET, UNSET, UNSET);
+      validate_mode (m, UNSET, UNSET, UNSET, UNSET, UNSET);
 
       m->bitsize = 0;
       m->bytesize = 0;
@@ -226,7 +229,7 @@ complete_mode (struct mode_data *m)
     case MODE_CC:
       /* Again, nothing more need be said.  For historical reasons,
 	 the size of a CC mode is four units.  */
-      validate_mode (m, UNSET, UNSET, UNSET, UNSET);
+      validate_mode (m, UNSET, UNSET, UNSET, UNSET, UNSET);
 
       m->bytesize = 4;
       m->ncomponents = 0;
@@ -236,8 +239,10 @@ complete_mode (struct mode_data *m)
     case MODE_INT:
     case MODE_FLOAT:
       /* A scalar mode must have a byte size, may have a bit size,
-	 and must not have components.  */
-      validate_mode (m, OPTIONAL, SET, UNSET, UNSET);
+	 and must not have components.   A float mode must have a
+         format.  */
+      validate_mode (m, OPTIONAL, SET, UNSET, UNSET,
+		     m->class == MODE_FLOAT ? SET : UNSET);
 
       m->ncomponents = 0;
       m->component = 0;
@@ -247,7 +252,7 @@ complete_mode (struct mode_data *m)
       /* A partial integer mode uses ->component to say what the
 	 corresponding full-size integer mode is, and may also
 	 specify a bit size.  */
-      validate_mode (m, OPTIONAL, UNSET, SET, UNSET);
+      validate_mode (m, OPTIONAL, UNSET, SET, UNSET, UNSET);
 
       m->bytesize = m->component->bytesize;
 
@@ -258,7 +263,7 @@ complete_mode (struct mode_data *m)
     case MODE_COMPLEX_INT:
     case MODE_COMPLEX_FLOAT:
       /* Complex modes should have a component indicated, but no more.  */
-      validate_mode (m, UNSET, UNSET, SET, UNSET);
+      validate_mode (m, UNSET, UNSET, SET, UNSET, UNSET);
       m->ncomponents = 2;
       if (m->component->bitsize != (unsigned int)-1)
 	m->bitsize = 2 * m->component->bitsize;
@@ -268,7 +273,7 @@ complete_mode (struct mode_data *m)
     case MODE_VECTOR_INT:
     case MODE_VECTOR_FLOAT:
       /* Vector modes should have a component and a number of components.  */
-      validate_mode (m, UNSET, UNSET, SET, SET);
+      validate_mode (m, UNSET, UNSET, SET, SET, UNSET);
       if (m->component->bitsize != (unsigned int)-1)
 	m->bitsize = m->ncomponents * m->component->bitsize;
       m->bytesize = m->ncomponents * m->component->bytesize;
@@ -412,22 +417,34 @@ make_special_mode (enum mode_class class
   new_mode (class, name, file, line);
 }
 
-#define _SCALAR_MODE(C, N, B, Y) \
-  make_scalar_mode (MODE_##C, #N, B, Y, __FILE__, __LINE__)
+#define INT_MODE(N, Y) FRACTIONAL_INT_MODE (N, -1, Y)
+#define FRACTIONAL_INT_MODE(N, B, Y) \
+  make_int_mode (#N, B, Y, __FILE__, __LINE__)
 
-#define INT_MODE(N, Y)                 _SCALAR_MODE (INT, N, -1, Y)
-#define FRACTIONAL_INT_MODE(N, B, Y)   _SCALAR_MODE (INT, N, B, Y)
-#define FLOAT_MODE(N, Y)               _SCALAR_MODE (FLOAT, N, -1, Y)
-#define FRACTIONAL_FLOAT_MODE(N, B, Y) _SCALAR_MODE (FLOAT, N, B, Y)
+static void
+make_int_mode (const char *name,
+	       unsigned int bitsize, unsigned int bytesize,
+	       const char *file, unsigned int line)
+{
+  struct mode_data *m = new_mode (MODE_INT, name, file, line);
+  m->bytesize = bytesize;
+  m->bitsize = bitsize;
+}
+
+#define FLOAT_MODE(N, Y, F)             FRACTIONAL_FLOAT_MODE (N, -1, Y, F)
+#define FRACTIONAL_FLOAT_MODE(N, B, Y, F) \
+  make_float_mode (#N, B, Y, #F, __FILE__, __LINE__)
 
 static void
-make_scalar_mode (enum mode_class class, const char *name,
-		  unsigned int bitsize, unsigned int bytesize,
-		  const char *file, unsigned int line)
+make_float_mode (const char *name,
+		 unsigned int bitsize, unsigned int bytesize,
+		 const char *format,
+		 const char *file, unsigned int line)
 {
-  struct mode_data *m = new_mode (class, name, file, line);
+  struct mode_data *m = new_mode (MODE_FLOAT, name, file, line);
   m->bytesize = bytesize;
   m->bitsize = bitsize;
+  m->format = format;
 }
 
 /* Partial integer modes are specified by relation to a full integer mode.
@@ -680,12 +697,26 @@ emit_insn_modes_c_header (void)
   puts ("\
    by genmodes.  */\n\
 \n\
-#define GENERATOR_FILE /* This inhibits insn-flags.h and\n\
-                          insn-constants.h, which don't exist yet.  */\n\
 #include \"config.h\"\n\
 #include \"system.h\"\n\
 #include \"coretypes.h\"\n\
 #include \"tm.h\"\n\
+#include \"machmode.h\"\n\
+#include \"real.h\"");
+}
+
+static void
+emit_min_insn_modes_c_header (void)
+{
+  printf ("/* Generated automatically from machmode.def%s%s\n",
+	   HAVE_EXTRA_MODES ? " and " : "",
+	   EXTRA_MODES_FILE);
+
+  puts ("\
+   by genmodes.  */\n\
+\n\
+#include \"bconfig.h\"\n\
+#include \"system.h\"\n\
 #include \"machmode.h\"");
 }
 
@@ -857,6 +888,25 @@ emit_class_narrowest_mode (void)
 }
 
 static void
+emit_real_format_for_mode (void)
+{
+  struct mode_data *m;
+
+  /* This will produce a table which is not constant, but points to
+     entities that are constant, which is what we want.  */
+  print_decl ("struct real_format *\n ", "real_format_for_mode",
+	      "MAX_MODE_FLOAT - MIN_MODE_FLOAT + 1");
+
+  for (m = known_modes[MODE_FLOAT]; m; m = m->next)
+    if (!strcmp (m->format, "0"))
+      tagged_printf ("%s", m->format, m->name);
+    else
+      tagged_printf ("&%s", m->format, m->name);
+
+  print_closer ();
+}
+
+static void
 emit_insn_modes_c (void)
 {
   emit_insn_modes_c_header ();
@@ -870,22 +920,35 @@ emit_insn_modes_c (void)
   emit_mode_inner ();
   emit_mode_base_align ();
   emit_class_narrowest_mode ();
+  emit_real_format_for_mode ();
+}
+
+static void
+emit_min_insn_modes_c (void)
+{
+  emit_min_insn_modes_c_header ();
+  emit_mode_name ();
+  emit_mode_class ();
+  emit_mode_wider ();
+  emit_class_narrowest_mode ();
 }
 
 /* Master control.  */
 int
 main(int argc, char **argv)
 {
-  bool gen_header;
+  bool gen_header = false, gen_min = false;
   progname = argv[0];
 
   if (argc == 1)
-    gen_header = false;
+    ;
   else if (argc == 2 && !strcmp (argv[1], "-h"))
     gen_header = true;
+  else if (argc == 2 && !strcmp (argv[1], "-m"))
+    gen_min = true;
   else
     {
-      error ("usage: %s [-h] > file", progname);
+      error ("usage: %s [-h|-m] > file", progname);
       return FATAL_EXIT_CODE;
     }
 
@@ -899,6 +962,8 @@ main(int argc, char **argv)
 
   if (gen_header)
     emit_insn_modes_h ();
+  else if (gen_min)
+    emit_min_insn_modes_c ();
   else
     emit_insn_modes_c ();
 
===================================================================
Index: genopinit.c
--- genopinit.c	8 Oct 2003 08:01:50 -0000	1.63
+++ genopinit.c	11 Oct 2003 08:46:55 -0000
@@ -230,7 +230,7 @@ gen_insn (rtx insn)
 	      case 'b':
 		/* This loop will stop at the first prefix match, so
                    look through the modes in reverse order, in case
-                   EXTRA_CC_MODES was used and CC is a prefix of the
+                   there are extra CC modes and CC is a prefix of the
                    CC modes (as it should be).  */
 		for (i = (MAX_MACHINE_MODE) - 1; i >= 0; i--)
 		  {
===================================================================
Index: machmode.def
--- machmode.def	10 Oct 2003 20:33:05 -0000	1.24
+++ machmode.def	11 Oct 2003 08:46:55 -0000
@@ -50,6 +50,9 @@ Software Foundation, 59 Temple Place - S
    A BITSIZE, BYTESIZE, or COUNT argument must be a positive integer
    constant.
 
+   A FORMAT argument must be one of the real_mode_format structures
+   declared in real.h, or else a literal 0.
+
    Order matters in this file in so far as statements which refer to
    other modes must appear after the modes they refer to.  However,
    statements which do not refer to other modes may appear in any
@@ -69,13 +72,15 @@ Software Foundation, 59 Temple Place - S
         declares MODE to be of class INT, BYTESIZE bytes wide in
 	storage, but with only BITSIZE significant bits.
 
-     FLOAT_MODE (MODE, BYTESIZE);
-        declares MODE to be of class FLOAT and BYTESIZE bytes wide.
+     FLOAT_MODE (MODE, BYTESIZE, FORMAT);
+        declares MODE to be of class FLOAT and BYTESIZE bytes wide,
+	using floating point format FORMAT.
 	All of the bits of its representation are significant.
 
-     FRACTIONAL_FLOAT_MODE (MODE, BITSIZE, BYTESIZE);
+     FRACTIONAL_FLOAT_MODE (MODE, BITSIZE, BYTESIZE, FORMAT);
         declares MODE to be of class FLOAT, BYTESIZE bytes wide in
-	storage, but with only BITSIZE significant bits.
+	storage, but with only BITSIZE significant bits, using
+	floating point format FORMAT.
 
      PARTIAL_INT_MODE (MODE);
         declares a mode of class PARTIAL_INT with the same size as
@@ -106,10 +111,6 @@ Software Foundation, 59 Temple Place - S
 	error if there is no 'F'.  For INT modes, the names are
 	derived by prefixing a C to the name.
 
-     BITS_PER_UNIT (COUNT);
-        Sets the number of bits in a machine byte (least addressable
-	unit).  If this statement does not appear, the default is 8.
-
    Note: If a mode is ever made which is more than 255 bytes wide,
    machmode.h and genmodes.c will have to be changed to allocate
    more space for the mode_size and mode_alignment arrays.  */
@@ -141,14 +142,21 @@ PARTIAL_INT_MODE (HI);
 PARTIAL_INT_MODE (SI);
 PARTIAL_INT_MODE (DI);
 
-/* Basic floating point modes.  */
-FLOAT_MODE (QF, 1);	/* C4x single precision */
-FLOAT_MODE (HF, 2);	/* C4x double precision */
-FLOAT_MODE (TQF, 3);	/* MIL-STD-1750a */
-FLOAT_MODE (SF, 4);
-FLOAT_MODE (DF, 8);
-FLOAT_MODE (XF, 12);	/* IEEE extended (80-bit) */
-FLOAT_MODE (TF, 16);
+/* Basic floating point modes.
+
+   These are the IEEE mappings.  They can be overridden at runtime
+   (in OVERRIDE_OPTIONS).  */
+
+FLOAT_MODE (QF,  1, 0);
+FLOAT_MODE (HF,  2, 0);
+FLOAT_MODE (TQF, 3, 0);	/* MIL-STD-1750a */
+FLOAT_MODE (SF,  4, ieee_single_format);
+FLOAT_MODE (DF,  8, ieee_double_format);
+FLOAT_MODE (XF, 12, 0);  /* would be ieee_extended_format, but
+			    there are several possibilities of
+			    roughly equal commonness; choose one in
+			    OVERRIDE_OPTIONS.  */
+FLOAT_MODE (TF, 16, ieee_quad_format);
 
 /* Basic CC modes.  */
 CC_MODE (CC);
===================================================================
Index: print-rtl.c
--- print-rtl.c	8 Jul 2003 00:35:42 -0000	1.101
+++ print-rtl.c	11 Oct 2003 08:46:55 -0000
@@ -34,23 +34,7 @@ Software Foundation, 59 Temple Place - S
 #include "flags.h"
 #include "hard-reg-set.h"
 #include "basic-block.h"
-
-/* How to print out a register name.
-   We don't use PRINT_REG because some definitions of PRINT_REG
-   don't work here.  */
-#ifndef DEBUG_PRINT_REG
-#define DEBUG_PRINT_REG(RTX, CODE, FILE) \
-  fprintf ((FILE), "%d %s", REGNO (RTX), reg_names[REGNO (RTX)])
-#endif
-
-/* Array containing all of the register names */
-
-#ifdef DEBUG_REGISTER_NAMES
-static const char * const debug_reg_names[] = DEBUG_REGISTER_NAMES;
-#define reg_names debug_reg_names
-#else
-const char * reg_names[] = REGISTER_NAMES;
-#endif
+#include "tm_p.h"
 
 static FILE *outfile;
 
@@ -398,10 +382,11 @@ print_rtx (rtx in_rtx)
 	    int value = XINT (in_rtx, i);
 	    const char *name;
 
+#ifndef GENERATOR_FILE
 	    if (GET_CODE (in_rtx) == REG && value < FIRST_PSEUDO_REGISTER)
 	      {
 		fputc (' ', outfile);
-		DEBUG_PRINT_REG (in_rtx, 0, outfile);
+		PRINT_REG (in_rtx, 0, outfile);
 	      }
 	    else if (GET_CODE (in_rtx) == REG
 		     && value <= LAST_VIRTUAL_REGISTER)
@@ -420,7 +405,9 @@ print_rtx (rtx in_rtx)
 		  fprintf (outfile, " %d virtual-reg-%d", value,
 			   value-FIRST_VIRTUAL_REGISTER);
 	      }
-	    else if (flag_dump_unnumbered
+	    else
+#endif
+	      if (flag_dump_unnumbered
 		     && (is_insn || GET_CODE (in_rtx) == NOTE))
 	      fputc ('#', outfile);
 	    else
===================================================================
Index: real.c
--- real.c	6 Oct 2003 22:47:17 -0000	1.128
+++ real.c	11 Oct 2003 08:46:55 -0000
@@ -4416,24 +4416,6 @@ const struct real_format real_internal_f
     true
   };
 
-/* Set up default mode to format mapping for IEEE.  Everyone else has
-   to set these values in OVERRIDE_OPTIONS.  */
-
-const struct real_format *real_format_for_mode[TFmode - QFmode + 1] =
-{
-  NULL,				/* QFmode */
-  NULL,				/* HFmode */
-  NULL,				/* TQFmode */
-  &ieee_single_format,		/* SFmode */
-  &ieee_double_format,		/* DFmode */
-
-  /* We explicitly don't handle XFmode.  There are two formats,
-     pretty much equally common.  Choose one in OVERRIDE_OPTIONS.  */
-  NULL,				/* XFmode */
-  &ieee_quad_format		/* TFmode */
-};
-
-
 /* Calculate the square root of X in mode MODE, and store the result
    in R.  Return TRUE if the operation does not raise an exception.
    For details see "High Precision Division and Square Root",
===================================================================
Index: regclass.c
--- regclass.c	14 Aug 2003 01:47:30 -0000	1.178
+++ regclass.c	11 Oct 2003 08:46:55 -0000
@@ -179,12 +179,9 @@ enum reg_class reg_class_subunion[N_REG_
 
 enum reg_class reg_class_superunion[N_REG_CLASSES][N_REG_CLASSES];
 
-/* Array containing all of the register names.  Unless
-   DEBUG_REGISTER_NAMES is defined, use the copy in print-rtl.c.  */
+/* Array containing all of the register names.  */
 
-#ifdef DEBUG_REGISTER_NAMES
 const char * reg_names[] = REGISTER_NAMES;
-#endif
 
 /* For each hard register, the widest mode object that it can contain.
    This will be a MODE_INT mode if the register can hold integers.  Otherwise
===================================================================
Index: config/arc/arc.c
--- config/arc/arc.c	27 Sep 2003 04:48:13 -0000	1.43
+++ config/arc/arc.c	11 Oct 2003 08:46:56 -0000
@@ -320,13 +320,10 @@ arc_init_reg_tables ()
 	    arc_mode_class[i] = 0;
 	  break;
 	case MODE_CC:
+	  arc_mode_class[i] = 1 << (int) C_MODE;
+	  break;
 	default:
-	  /* mode_class hasn't been initialized yet for EXTRA_CC_MODES, so
-	     we must explicitly check for them here.  */
-	  if (i == (int) CCmode || i == (int) CCZNmode || i == (int) CCZNCmode)
-	    arc_mode_class[i] = 1 << (int) C_MODE;
-	  else
-	    arc_mode_class[i] = 0;
+	  arc_mode_class[i] = 0;
 	  break;
 	}
     }
===================================================================
Index: config/i386/i386.h
--- config/i386/i386.h	26 Sep 2003 20:25:59 -0000	1.354
+++ config/i386/i386.h	11 Oct 2003 08:46:56 -0000
@@ -2917,70 +2917,6 @@ do {						\
     goto FAIL;					\
 } while (0);
 
-/* Print the name of a register for based on its machine mode and number.
-   This macro is used to print debugging output.
-   This macro is different from PRINT_REG in that it may be used in
-   programs that are not linked with aux-output.o.  */
-
-#define DEBUG_PRINT_REG(X, CODE, FILE)			\
-  do { static const char * const hi_name[] = HI_REGISTER_NAMES;	\
-       static const char * const qi_name[] = QI_REGISTER_NAMES;	\
-       fprintf ((FILE), "%d ", REGNO (X));		\
-       if (REGNO (X) == FLAGS_REG)			\
-	 { fputs ("flags", (FILE)); break; }		\
-       if (REGNO (X) == DIRFLAG_REG)			\
-	 { fputs ("dirflag", (FILE)); break; }		\
-       if (REGNO (X) == FPSR_REG)			\
-	 { fputs ("fpsr", (FILE)); break; }		\
-       if (REGNO (X) == ARG_POINTER_REGNUM)		\
-	 { fputs ("argp", (FILE)); break; }		\
-       if (REGNO (X) == FRAME_POINTER_REGNUM)		\
-	 { fputs ("frame", (FILE)); break; }		\
-       if (STACK_TOP_P (X))				\
-	 { fputs ("st(0)", (FILE)); break; }		\
-       if (FP_REG_P (X))				\
-	 { fputs (hi_name[REGNO(X)], (FILE)); break; }	\
-       if (REX_INT_REG_P (X))				\
-	 {						\
-	   switch (GET_MODE_SIZE (GET_MODE (X)))	\
-	     {						\
-	     default:					\
-	     case 8:					\
-	       fprintf ((FILE), "r%i", REGNO (X)	\
-			- FIRST_REX_INT_REG + 8);	\
-	       break;					\
-	     case 4:					\
-	       fprintf ((FILE), "r%id", REGNO (X)	\
-			- FIRST_REX_INT_REG + 8);	\
-	       break;					\
-	     case 2:					\
-	       fprintf ((FILE), "r%iw", REGNO (X)	\
-			- FIRST_REX_INT_REG + 8);	\
-	       break;					\
-	     case 1:					\
-	       fprintf ((FILE), "r%ib", REGNO (X)	\
-			- FIRST_REX_INT_REG + 8);	\
-	       break;					\
-	     }						\
-	   break;					\
-	 }						\
-       switch (GET_MODE_SIZE (GET_MODE (X)))		\
-	 {						\
-	 case 8:					\
-	   fputs ("r", (FILE));				\
-	   fputs (hi_name[REGNO (X)], (FILE));		\
-	   break;					\
-	 default:					\
-	   fputs ("e", (FILE));				\
-	 case 2:					\
-	   fputs (hi_name[REGNO (X)], (FILE));		\
-	   break;					\
-	 case 1:					\
-	   fputs (qi_name[REGNO (X)], (FILE));		\
-	   break;					\
-	 }						\
-     } while (0)
-
 /* a letter which is not needed by the normal asm syntax, which
    we can use for operand syntax in the extended asm */
 
===================================================================
Index: config/i860/i860.h
--- config/i860/i860.h	2 Oct 2003 00:44:21 -0000	1.37
+++ config/i860/i860.h	11 Oct 2003 08:46:57 -0000
@@ -465,7 +465,7 @@ struct cumulative_args { int ints, float
    invisible first argument.  */
 
 #define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT)	\
- ((CUM).ints = ((FNTYPE) != 0 && aggregate_value_p (TREE_TYPE ((FNTYPE))) \
+ ((CUM).ints = ((FNTYPE) != 0 && aggregate_value_p (TREE_TYPE ((FNTYPE)), 0) \
 		? 4 : 0),			\
   (CUM).floats = 0)
 
===================================================================
Index: config/m32r/m32r.c
--- config/m32r/m32r.c	27 Sep 2003 04:48:19 -0000	1.71
+++ config/m32r/m32r.c	11 Oct 2003 08:46:57 -0000
@@ -249,13 +249,10 @@ init_reg_tables ()
 	    m32r_mode_class[i] = 0;
 	  break;
 	case MODE_CC:
+	  m32r_mode_class[i] = 1 << (int) C_MODE;
+	  break;
 	default:
-	  /* mode_class hasn't been initialized yet for EXTRA_CC_MODES, so
-	     we must explicitly check for them here.  */
-	  if (i == (int) CCmode)
-	    m32r_mode_class[i] = 1 << (int) C_MODE;
-	  else
-	    m32r_mode_class[i] = 0;
+	  m32r_mode_class[i] = 0;
 	  break;
 	}
     }
===================================================================
Index: config/mips/mips.h
--- config/mips/mips.h	8 Oct 2003 08:26:10 -0000	1.297
+++ config/mips/mips.h	11 Oct 2003 08:46:57 -0000
@@ -3029,34 +3029,6 @@ typedef struct mips_args {
   &mips_reg_names[175][0]						\
 }
 
-/* print-rtl.c can't use REGISTER_NAMES, since it depends on mips.c.
-   So define this for it.  */
-#define DEBUG_REGISTER_NAMES						\
-{									\
-  "$0",   "at",   "v0",   "v1",   "a0",   "a1",   "a2",   "a3",		\
-  "t0",   "t1",   "t2",   "t3",   "t4",   "t5",   "t6",   "t7",		\
-  "s0",   "s1",   "s2",   "s3",   "s4",   "s5",   "s6",   "s7",		\
-  "t8",   "t9",   "k0",   "k1",   "gp",   "sp",   "$fp",  "ra",		\
-  "$f0",  "$f1",  "$f2",  "$f3",  "$f4",  "$f5",  "$f6",  "$f7",	\
-  "$f8",  "$f9",  "$f10", "$f11", "$f12", "$f13", "$f14", "$f15",	\
-  "$f16", "$f17", "$f18", "$f19", "$f20", "$f21", "$f22", "$f23",	\
-  "$f24", "$f25", "$f26", "$f27", "$f28", "$f29", "$f30", "$f31",	\
-  "hi",   "lo",   "",     "$fcc0","$fcc1","$fcc2","$fcc3","$fcc4",	\
-  "$fcc5","$fcc6","$fcc7","$rap", "",     "",     "",     "",		\
-  "$c0r0", "$c0r1", "$c0r2", "$c0r3", "$c0r4", "$c0r5", "$c0r6", "$c0r7",\
-  "$c0r8", "$c0r9", "$c0r10","$c0r11","$c0r12","$c0r13","$c0r14","$c0r15",\
-  "$c0r16","$c0r17","$c0r18","$c0r19","$c0r20","$c0r21","$c0r22","$c0r23",\
-  "$c0r24","$c0r25","$c0r26","$c0r27","$c0r28","$c0r29","$c0r30","$c0r31",\
-  "$c2r0", "$c2r1", "$c2r2", "$c2r3", "$c2r4", "$c2r5", "$c2r6", "$c2r7",\
-  "$c2r8", "$c2r9", "$c2r10","$c2r11","$c2r12","$c2r13","$c2r14","$c2r15",\
-  "$c2r16","$c2r17","$c2r18","$c2r19","$c2r20","$c2r21","$c2r22","$c2r23",\
-  "$c2r24","$c2r25","$c2r26","$c2r27","$c2r28","$c2r29","$c2r30","$c2r31",\
-  "$c3r0", "$c3r1", "$c3r2", "$c3r3", "$c3r4", "$c3r5", "$c3r6", "$c3r7",\
-  "$c3r8", "$c3r9", "$c3r10","$c3r11","$c3r12","$c3r13","$c3r14","$c3r15",\
-  "$c3r16","$c3r17","$c3r18","$c3r19","$c3r20","$c3r21","$c3r22","$c3r23",\
-  "$c3r24","$c3r25","$c3r26","$c3r27","$c3r28","$c3r29","$c3r30","$c3r31"\
-}
-
 /* If defined, a C initializer for an array of structures
    containing a name and a register number.  This macro defines
    additional names for hard registers, thus allowing the `asm'
===================================================================
Index: config/rs6000/darwin.h
--- config/rs6000/darwin.h	6 Sep 2003 04:07:18 -0000	1.41
+++ config/rs6000/darwin.h	11 Oct 2003 08:46:58 -0000
@@ -141,11 +141,29 @@ do {									\
 #undef	FP_SAVE_INLINE
 #define FP_SAVE_INLINE(FIRST_REG) ((FIRST_REG) < 64)
 
-/* Always use the "debug" register names, they're what the assembler
-   wants to see.  */
-
+/* The assembler wants the alternate register names, but without
+   leading percent sign.  */
 #undef REGISTER_NAMES
-#define REGISTER_NAMES DEBUG_REGISTER_NAMES
+#define REGISTER_NAMES							\
+{									\
+     "r0",  "r1",  "r2",  "r3",  "r4",  "r5",  "r6",  "r7",		\
+     "r8",  "r9", "r10", "r11", "r12", "r13", "r14", "r15",		\
+    "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",		\
+    "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",		\
+     "f0",  "f1",  "f2",  "f3",  "f4",  "f5",  "f6",  "f7",		\
+     "f8",  "f9", "f10", "f11", "f12", "f13", "f14", "f15",		\
+    "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",		\
+    "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",		\
+     "mq",  "lr", "ctr",  "ap",						\
+    "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7",		\
+    "xer",								\
+     "v0",  "v1",  "v2",  "v3",  "v4",  "v5",  "v6",  "v7",             \
+     "v8",  "v9", "v10", "v11", "v12", "v13", "v14", "v15",             \
+    "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23",             \
+    "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31",             \
+    "vrsave", "vscr",							\
+    "spe_acc", "spefscr"                                                \
+}
 
 /* This outputs NAME to FILE.  */
 
===================================================================
Index: config/rs6000/rs6000.h
--- config/rs6000/rs6000.h	9 Oct 2003 09:08:37 -0000	1.289
+++ config/rs6000/rs6000.h	11 Oct 2003 08:46:58 -0000
@@ -2550,31 +2550,6 @@ extern char rs6000_reg_names[][8];	/* re
   &rs6000_reg_names[112][0],	/* spefscr */				\
 }
 
-/* print-rtl can't handle the above REGISTER_NAMES, so define the
-   following for it.  Switch to use the alternate names since
-   they are more mnemonic.  */
-
-#define DEBUG_REGISTER_NAMES						\
-{									\
-     "r0",  "r1",  "r2",  "r3",  "r4",  "r5",  "r6",  "r7",		\
-     "r8",  "r9", "r10", "r11", "r12", "r13", "r14", "r15",		\
-    "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",		\
-    "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",		\
-     "f0",  "f1",  "f2",  "f3",  "f4",  "f5",  "f6",  "f7",		\
-     "f8",  "f9", "f10", "f11", "f12", "f13", "f14", "f15",		\
-    "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",		\
-    "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",		\
-     "mq",  "lr", "ctr",  "ap",						\
-    "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7",		\
-    "xer",								\
-     "v0",  "v1",  "v2",  "v3",  "v4",  "v5",  "v6",  "v7",             \
-     "v8",  "v9", "v10", "v11", "v12", "v13", "v14", "v15",             \
-    "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23",             \
-    "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31",             \
-    "vrsave", "vscr",							\
-    "spe_acc", "spefscr"                                                \
-}
-
 /* Table of additional register names to use in user input.  */
 
 #define ADDITIONAL_REGISTER_NAMES \
===================================================================
Index: config/sh/sh.h
--- config/sh/sh.h	10 Oct 2003 21:28:55 -0000	1.224
+++ config/sh/sh.h	11 Oct 2003 08:46:58 -0000
@@ -743,8 +743,6 @@ extern char sh_register_names[][MAX_REGI
   "rap"									\
 }
 
-#define DEBUG_REGISTER_NAMES SH_REGISTER_NAMES_INITIALIZER
-
 #define REGNAMES_ARR_INDEX_1(index) \
   (sh_register_names[index])
 #define REGNAMES_ARR_INDEX_2(index) \
===================================================================
Index: config/sparc/sparc.c
--- config/sparc/sparc.c	7 Oct 2003 02:23:42 -0000	1.263
+++ config/sparc/sparc.c	11 Oct 2003 08:46:59 -0000
@@ -3954,16 +3954,13 @@ sparc_init_modes (void)
 	    sparc_mode_class[i] = 0;
 	  break;
 	case MODE_CC:
-	default:
-	  /* mode_class hasn't been initialized yet for EXTRA_CC_MODES, so
-	     we must explicitly check for them here.  */
 	  if (i == (int) CCFPmode || i == (int) CCFPEmode)
 	    sparc_mode_class[i] = 1 << (int) CCFP_MODE;
-	  else if (i == (int) CCmode || i == (int) CC_NOOVmode
-		   || i == (int) CCXmode || i == (int) CCX_NOOVmode)
-	    sparc_mode_class[i] = 1 << (int) CC_MODE;
 	  else
-	    sparc_mode_class[i] = 0;
+	    sparc_mode_class[i] = 1 << (int) CC_MODE;
+	  break;
+	default:
+	  sparc_mode_class[i] = 0;
 	  break;
 	}
     }
===================================================================
Index: doc/tm.texi
--- doc/tm.texi	10 Oct 2003 21:28:56 -0000	1.261
+++ doc/tm.texi	11 Oct 2003 08:47:01 -0000
@@ -5052,31 +5052,6 @@ that looks at an attribute (@pxref{Insn 
 two places, the @file{md} file and in @code{NOTICE_UPDATE_CC}.
 @end defmac
 
-@defmac EXTRA_CC_MODES
-Condition codes are represented in registers by machine modes of class
-@code{MODE_CC}.  By default, there is just one mode, @code{CCmode}, with
-this class.  If you need more such modes, create a file named
-@file{@var{machine}-modes.def} in your @file{config/@var{machine}}
-directory (@pxref{Back End, , Anatomy of a Target Back End}), containing
-a list of these modes.  Each entry in the list should be a call to the
-macro @code{CC}.  This macro takes one argument, which is the name of
-the mode: it should begin with @samp{CC}.  Do not put quotation marks
-around the name, or include the trailing @samp{mode}; these are
-automatically added.  There should not be anything else in the file
-except comments.
-
-A sample @file{@var{machine}-modes.def} file might look like this:
-
-@smallexample
-CC (CC_NOOV)   /* @r{Comparison only valid if there was no overflow.} */
-CC (CCFP)      /* @r{Floating point comparison that cannot trap.} */
-CC (CCFPE)     /* @r{Floating point comparison that may trap.} */
-@end smallexample
-
-When you create this file, the macro @code{EXTRA_CC_MODES} is
-automatically defined by @command{configure}, with value @samp{1}.
-@end defmac
-
 @defmac SELECT_CC_MODE (@var{op}, @var{x}, @var{y})
 Returns a mode from class @code{MODE_CC} to be used when comparison
 operation code @var{op} is applied to rtx @var{x} and @var{y}.  For
@@ -5093,7 +5068,8 @@ definition)
       ? CC_NOOVmode : CCmode))
 @end smallexample
 
-You need not define this macro if @code{EXTRA_CC_MODES} is not defined.
+You should define this macro if and only if you define extra CC modes
+in @file{@var{machine}-modes.def}.
 @end defmac
 
 @defmac CANONICALIZE_COMPARISON (@var{code}, @var{op0}, @var{op1})

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]