machmode.def: Add BImode.
authorRichard Henderson <rth@gcc.gnu.org>
Mon, 18 Sep 2000 17:55:38 +0000 (10:55 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Mon, 18 Sep 2000 17:55:38 +0000 (10:55 -0700)
        * machmode.def: Add BImode.  Add a column for bitsize.
        * machmode.h (DEF_MACHMODE): Adjust for extra column.
        (GET_MODE_BITSIZE): Use it.
        * rtl.c (DEF_MACHMODE): Adjust for extra column.
        (mode_bitsize): New.
        (mode_mask_array): Use bitsize.
        * combine.c (combine_simplify_rtx): Require inner and outer
        modes to match on nonzero_bits optimizations.

From-SVN: r36501

gcc/ChangeLog
gcc/combine.c
gcc/machmode.def
gcc/machmode.h
gcc/rtl.c

index 2a26741ead240b1f295c6a2fec0feeeeeee726e6..403109833e762c7b917da6da3808c3a6cc6aeb04 100644 (file)
@@ -1,3 +1,14 @@
+2000-09-18  Richard Henderson  <rth@cygnus.com>
+
+       * machmode.def: Add BImode.  Add a column for bitsize.
+       * machmode.h (DEF_MACHMODE): Adjust for extra column.
+       (GET_MODE_BITSIZE): Use it.
+       * rtl.c (DEF_MACHMODE): Adjust for extra column.
+       (mode_bitsize): New.
+       (mode_mask_array): Use bitsize.
+       * combine.c (combine_simplify_rtx): Require inner and outer
+       modes to match on nonzero_bits optimizations.
+
 2000-09-18  Bernd Schmidt  <bernds@redhat.co.uk>
 
        * reload1.c (forget_old_reloads_1): If a hard reg is stored, clear
@@ -86,8 +97,8 @@
 
        * configure.in: Define _GNU_SOURCE only when using the GNU C
        Library.
-        * configure: Regenerated.
-        * config.in: Regenerated.
+       * configure: Regenerated.
+       * config.in: Regenerated.
 
 2000-09-17  Mark Mitchell  <mark@codesourcery.com>
 
@@ -141,15 +152,15 @@ Sun Sep 17 10:46:17 2000  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
 
 2000-09-17  Bernd Schmidt  <bernds@redhat.co.uk>
 
-        * expr.h (emit_library_call, emit_library_call_value): Delete
+       * expr.h (emit_library_call, emit_library_call_value): Delete
        declarations.
        * rtl.h (enum libcall_type): New.
        (emit_library_call, emit_library_call_value): Change fn_type arg to
-        be of type enum libcall_type.
+       be of type enum libcall_type.
        * calls.c: Likewise for the function definitions.  Several callers
        throughout changed to use the new enumeration appropriately.
        (emit_library_call_value_1): Likewise.  Put back code to make libcall
-        blocks of equal form, but only use it for the two new higher
+       blocks of equal form, but only use it for the two new higher
        enumeration values.
 
 2000-09-16  Mark Mitchell  <mark@codesourcery.com>
@@ -611,7 +622,7 @@ Wed Sep 13 02:31:23 EDT 2000  John Wehle  (john@feith.com)
 
 2000-09-13  Michael Hayes  <mhayes@cygnus.com>
 
-        * loop.c (note_set_pseudo_multiple_uses): Correct.
+       * loop.c (note_set_pseudo_multiple_uses): Correct.
 
 2000-09-12  Jim Wilson  <wilson@cygnus.com>
 
index 478aab2b2a30d166626567c913864703cd7055e8..be73be30d7cc0848649f002651211354c90b12bd 100644 (file)
@@ -4347,13 +4347,16 @@ combine_simplify_rtx (x, op0_mode, last, in_dest)
 
          if (STORE_FLAG_VALUE == 1
              && new_code == NE && GET_MODE_CLASS (mode) == MODE_INT
-             && op1 == const0_rtx && nonzero_bits (op0, mode) == 1)
+             && op1 == const0_rtx
+             && mode == GET_MODE (op0)
+             && nonzero_bits (op0, mode) == 1)
            return gen_lowpart_for_combine (mode,
                                            expand_compound_operation (op0));
 
          else if (STORE_FLAG_VALUE == 1
                   && new_code == NE && GET_MODE_CLASS (mode) == MODE_INT
                   && op1 == const0_rtx
+                  && mode == GET_MODE (op0)
                   && (num_sign_bit_copies (op0, mode)
                       == GET_MODE_BITSIZE (mode)))
            {
@@ -4365,6 +4368,7 @@ combine_simplify_rtx (x, op0_mode, last, in_dest)
          else if (STORE_FLAG_VALUE == 1
                   && new_code == EQ && GET_MODE_CLASS (mode) == MODE_INT
                   && op1 == const0_rtx
+                  && mode == GET_MODE (op0)
                   && nonzero_bits (op0, mode) == 1)
            {
              op0 = expand_compound_operation (op0);
@@ -4376,6 +4380,7 @@ combine_simplify_rtx (x, op0_mode, last, in_dest)
          else if (STORE_FLAG_VALUE == 1
                   && new_code == EQ && GET_MODE_CLASS (mode) == MODE_INT
                   && op1 == const0_rtx
+                  && mode == GET_MODE (op0)
                   && (num_sign_bit_copies (op0, mode)
                       == GET_MODE_BITSIZE (mode)))
            {
@@ -4396,6 +4401,7 @@ combine_simplify_rtx (x, op0_mode, last, in_dest)
          else if (STORE_FLAG_VALUE == -1
                   && new_code == NE && GET_MODE_CLASS (mode) == MODE_INT
                   && op1 == const0_rtx
+                  && mode == GET_MODE (op0)
                   && nonzero_bits (op0, mode) == 1)
            {
              op0 = expand_compound_operation (op0);
@@ -4406,6 +4412,7 @@ combine_simplify_rtx (x, op0_mode, last, in_dest)
          else if (STORE_FLAG_VALUE == -1
                   && new_code == EQ && GET_MODE_CLASS (mode) == MODE_INT
                   && op1 == const0_rtx
+                  && mode == GET_MODE (op0)
                   && (num_sign_bit_copies (op0, mode)
                       == GET_MODE_BITSIZE (mode)))
            {
@@ -4418,6 +4425,7 @@ combine_simplify_rtx (x, op0_mode, last, in_dest)
          else if (STORE_FLAG_VALUE == -1
                   && new_code == EQ && GET_MODE_CLASS (mode) == MODE_INT
                   && op1 == const0_rtx
+                  && mode == GET_MODE (op0)
                   && nonzero_bits (op0, mode) == 1)
            {
              op0 = expand_compound_operation (op0);
index 2cd93eea38760166fcd1c8305930f3992b694b25..4df4da771cc68388c45dfda95c3b84bb08388335 100644 (file)
@@ -48,98 +48,100 @@ Boston, MA 02111-1307, USA.  */
    MODE_VECTOR_INT, MODE_VECTOR_FLOAT - vector
    MODE_RANDOM - anything else
 
-   Fourth argument is the relative size of the object, in bytes.
+   Fourth argument is the relative size of the object, in bits,
+   so we can have modes smaller than 1 byte.
+
+   Fifth argument is the relative size of the object, in bytes.
    It is zero when the size is meaningless or not determined.
    A byte's size is determined by BITS_PER_UNIT in tm.h. 
 
-
-   Fifth arg is the relative size of subunits of the object.
+   Sixth arg is the relative size of subunits of the object.
    It is same as the fourth argument except for complexes,
    since they are really made of two equal size subunits.
 
-   Sixth arg is next wider natural mode of the same class.
+   Seventh arg is next wider natural mode of the same class.
    0 if there is none.  */
 
 /* VOIDmode is used when no mode needs to be specified,
    as for example on CONST_INT RTL expressions.  */
-DEF_MACHMODE (VOIDmode, "VOID", MODE_RANDOM, 0, 0, VOIDmode)
-
-DEF_MACHMODE (PQImode, "PQI", MODE_PARTIAL_INT, 1, 1, PHImode)
-DEF_MACHMODE (QImode, "QI", MODE_INT, 1, 1, HImode)            /* int types */
-DEF_MACHMODE (PHImode, "PHI", MODE_PARTIAL_INT, 2, 2, PSImode)
-DEF_MACHMODE (HImode, "HI", MODE_INT, 2, 2, SImode)
-/* Pointers on some machines use this type to distinguish them from ints.
-   Useful if a pointer is 4 bytes but has some bits that are not significant,
-   so it is really not quite as wide as an integer.  */
-DEF_MACHMODE (PSImode, "PSI", MODE_PARTIAL_INT, 4, 4, PDImode)
-DEF_MACHMODE (SImode, "SI", MODE_INT, 4, 4, DImode)
-DEF_MACHMODE (PDImode, "PDI", MODE_PARTIAL_INT, 8, 8, VOIDmode)
-DEF_MACHMODE (DImode, "DI", MODE_INT, 8, 8, TImode)
-DEF_MACHMODE (TImode, "TI", MODE_INT, 16, 16, OImode)
-DEF_MACHMODE (OImode, "OI", MODE_INT, 32, 32, VOIDmode)
-
-DEF_MACHMODE (QFmode, "QF", MODE_FLOAT, 1, 1, HFmode)
-DEF_MACHMODE (HFmode, "HF", MODE_FLOAT, 2, 2, TQFmode)
-DEF_MACHMODE (TQFmode, "TQF", MODE_FLOAT, 3, 3, SFmode)  /* MIL-STD-1750A */
-DEF_MACHMODE (SFmode, "SF", MODE_FLOAT, 4, 4, DFmode)
-DEF_MACHMODE (DFmode, "DF", MODE_FLOAT, 8, 8, XFmode)
-DEF_MACHMODE (XFmode, "XF", MODE_FLOAT, 12, 12, TFmode)   /* IEEE extended */
-DEF_MACHMODE (TFmode, "TF", MODE_FLOAT, 16, 16, VOIDmode)
+DEF_MACHMODE (VOIDmode, "VOID", MODE_RANDOM, 0, 0, 0, VOIDmode)
+
+DEF_MACHMODE (BImode, "BI", MODE_INT, 1, 1, 1, QImode)
+DEF_MACHMODE (QImode, "QI", MODE_INT, 8, 1, 1, HImode)
+DEF_MACHMODE (HImode, "HI", MODE_INT, 16, 2, 2, SImode)
+DEF_MACHMODE (SImode, "SI", MODE_INT, 32, 4, 4, DImode)
+DEF_MACHMODE (DImode, "DI", MODE_INT, 64, 8, 8, TImode)
+DEF_MACHMODE (TImode, "TI", MODE_INT, 128, 16, 16, OImode)
+DEF_MACHMODE (OImode, "OI", MODE_INT, 256, 32, 32, VOIDmode)
+
+/* Pointers on some machines use these types to distinguish them from
+   ints.  Useful if a pointer is 4 bytes but has some bits that are
+   not significant, so it is really not quite as wide as an integer.  */
+DEF_MACHMODE (PQImode, "PQI", MODE_PARTIAL_INT, 8, 1, 1, PHImode)
+DEF_MACHMODE (PHImode, "PHI", MODE_PARTIAL_INT, 16, 2, 2, PSImode)
+DEF_MACHMODE (PSImode, "PSI", MODE_PARTIAL_INT, 32, 4, 4, PDImode)
+DEF_MACHMODE (PDImode, "PDI", MODE_PARTIAL_INT, 64, 8, 8, VOIDmode)
+
+DEF_MACHMODE (QFmode, "QF", MODE_FLOAT, 8, 1, 1, HFmode)
+DEF_MACHMODE (HFmode, "HF", MODE_FLOAT, 16, 2, 2, TQFmode)
+DEF_MACHMODE (TQFmode, "TQF", MODE_FLOAT, 24, 3, 3, SFmode) /* MIL-STD-1750A */
+DEF_MACHMODE (SFmode, "SF", MODE_FLOAT, 32, 4, 4, DFmode)
+DEF_MACHMODE (DFmode, "DF", MODE_FLOAT, 64, 8, 8, XFmode)
+DEF_MACHMODE (XFmode, "XF", MODE_FLOAT, 96, 12, 12, TFmode) /* IEEE extended */
+DEF_MACHMODE (TFmode, "TF", MODE_FLOAT, 128, 16, 16, VOIDmode)
 
 /* Complex modes.  */
-DEF_MACHMODE (QCmode, "QC", MODE_COMPLEX_FLOAT, 2, 1, HCmode)
-DEF_MACHMODE (HCmode, "HC", MODE_COMPLEX_FLOAT, 4, 2, SCmode)
-DEF_MACHMODE (SCmode, "SC", MODE_COMPLEX_FLOAT, 8, 4, DCmode)
-DEF_MACHMODE (DCmode, "DC", MODE_COMPLEX_FLOAT, 16, 8, XCmode)
-DEF_MACHMODE (XCmode, "XC", MODE_COMPLEX_FLOAT, 24, 12, TCmode)
-DEF_MACHMODE (TCmode, "TC", MODE_COMPLEX_FLOAT, 32, 16, VOIDmode)
-
-DEF_MACHMODE (CQImode, "CQI", MODE_COMPLEX_INT, 2, 1, CHImode)
-DEF_MACHMODE (CHImode, "CHI", MODE_COMPLEX_INT, 4, 2, CSImode)
-DEF_MACHMODE (CSImode, "CSI", MODE_COMPLEX_INT, 8, 4, CDImode)
-DEF_MACHMODE (CDImode, "CDI", MODE_COMPLEX_INT, 16, 8, CTImode)
-DEF_MACHMODE (CTImode, "CTI", MODE_COMPLEX_INT, 32, 16, COImode)
-DEF_MACHMODE (COImode, "COI", MODE_COMPLEX_INT, 64, 32, VOIDmode)
+DEF_MACHMODE (QCmode, "QC", MODE_COMPLEX_FLOAT, 16, 2, 1, HCmode)
+DEF_MACHMODE (HCmode, "HC", MODE_COMPLEX_FLOAT, 32, 4, 2, SCmode)
+DEF_MACHMODE (SCmode, "SC", MODE_COMPLEX_FLOAT, 64, 8, 4, DCmode)
+DEF_MACHMODE (DCmode, "DC", MODE_COMPLEX_FLOAT, 128, 16, 8, XCmode)
+DEF_MACHMODE (XCmode, "XC", MODE_COMPLEX_FLOAT, 192, 24, 12, TCmode)
+DEF_MACHMODE (TCmode, "TC", MODE_COMPLEX_FLOAT, 256, 32, 16, VOIDmode)
+
+DEF_MACHMODE (CQImode, "CQI", MODE_COMPLEX_INT, 16, 2, 1, CHImode)
+DEF_MACHMODE (CHImode, "CHI", MODE_COMPLEX_INT, 32, 4, 2, CSImode)
+DEF_MACHMODE (CSImode, "CSI", MODE_COMPLEX_INT, 64, 8, 4, CDImode)
+DEF_MACHMODE (CDImode, "CDI", MODE_COMPLEX_INT, 128, 16, 8, CTImode)
+DEF_MACHMODE (CTImode, "CTI", MODE_COMPLEX_INT, 256, 32, 16, COImode)
+DEF_MACHMODE (COImode, "COI", MODE_COMPLEX_INT, 512, 64, 32, VOIDmode)
 
 /* Vector modes.  */
-/* There are no V1xx vector modes.  These are equivalent to normal non-vector
-   modes.  */
-DEF_MACHMODE (V2QImode, "V2QI", MODE_VECTOR_INT, 2, 1, VOIDmode)
-DEF_MACHMODE (V2HImode, "V2HI", MODE_VECTOR_INT, 4, 2, VOIDmode)
-DEF_MACHMODE (V2SImode, "V2SI", MODE_VECTOR_INT, 8, 4, VOIDmode)
-DEF_MACHMODE (V2DImode, "V2DI", MODE_VECTOR_INT, 16, 8, VOIDmode)
+/* There are no V1xx vector modes.  These are equivalent to normal
+   scalar modes.  */
+DEF_MACHMODE (V2QImode, "V2QI", MODE_VECTOR_INT, 16, 2, 1, VOIDmode)
+DEF_MACHMODE (V2HImode, "V2HI", MODE_VECTOR_INT, 32, 4, 2, VOIDmode)
+DEF_MACHMODE (V2SImode, "V2SI", MODE_VECTOR_INT, 64, 8, 4, VOIDmode)
+DEF_MACHMODE (V2DImode, "V2DI", MODE_VECTOR_INT, 128, 16, 8, VOIDmode)
 
-DEF_MACHMODE (V4QImode, "V4QI", MODE_VECTOR_INT, 4, 1, VOIDmode)
-DEF_MACHMODE (V4HImode, "V4HI", MODE_VECTOR_INT, 8, 2, VOIDmode)
-DEF_MACHMODE (V4SImode, "V4SI", MODE_VECTOR_INT, 16, 4, VOIDmode)
-DEF_MACHMODE (V4DImode, "V4DI", MODE_VECTOR_INT, 32, 8, VOIDmode)
+DEF_MACHMODE (V4QImode, "V4QI", MODE_VECTOR_INT, 32, 4, 1, VOIDmode)
+DEF_MACHMODE (V4HImode, "V4HI", MODE_VECTOR_INT, 64, 8, 2, VOIDmode)
+DEF_MACHMODE (V4SImode, "V4SI", MODE_VECTOR_INT, 128, 16, 4, VOIDmode)
+DEF_MACHMODE (V4DImode, "V4DI", MODE_VECTOR_INT, 256, 32, 8, VOIDmode)
 
-DEF_MACHMODE (V8QImode, "V8QI", MODE_VECTOR_INT, 8, 1, VOIDmode)
-DEF_MACHMODE (V8HImode, "V8HI", MODE_VECTOR_INT, 16, 2, VOIDmode)
-DEF_MACHMODE (V8SImode, "V8SI", MODE_VECTOR_INT, 32, 4, VOIDmode)
-DEF_MACHMODE (V8DImode, "V8DI", MODE_VECTOR_INT, 64, 8, VOIDmode)
+DEF_MACHMODE (V8QImode, "V8QI", MODE_VECTOR_INT, 64, 8, 1, VOIDmode)
+DEF_MACHMODE (V8HImode, "V8HI", MODE_VECTOR_INT, 128, 16, 2, VOIDmode)
+DEF_MACHMODE (V8SImode, "V8SI", MODE_VECTOR_INT, 256, 32, 4, VOIDmode)
+DEF_MACHMODE (V8DImode, "V8DI", MODE_VECTOR_INT, 512, 64, 8, VOIDmode)
 
-DEF_MACHMODE (V2SFmode, "V2SF", MODE_VECTOR_FLOAT, 8, 4, VOIDmode)
-DEF_MACHMODE (V2DFmode, "V2DF", MODE_VECTOR_FLOAT, 16, 8, VOIDmode)
+DEF_MACHMODE (V2SFmode, "V2SF", MODE_VECTOR_FLOAT, 64, 8, 4, VOIDmode)
+DEF_MACHMODE (V2DFmode, "V2DF", MODE_VECTOR_FLOAT, 128, 16, 8, VOIDmode)
 
-DEF_MACHMODE (V4SFmode, "V4SF", MODE_VECTOR_FLOAT, 16, 4, VOIDmode)
-DEF_MACHMODE (V4DFmode, "V4DF", MODE_VECTOR_FLOAT, 32, 8, VOIDmode)
+DEF_MACHMODE (V4SFmode, "V4SF", MODE_VECTOR_FLOAT, 128, 16, 4, VOIDmode)
+DEF_MACHMODE (V4DFmode, "V4DF", MODE_VECTOR_FLOAT, 256, 32, 8, VOIDmode)
 
-DEF_MACHMODE (V8SFmode, "V8SF", MODE_VECTOR_FLOAT, 32, 4, VOIDmode)
-DEF_MACHMODE (V8DFmode, "V8DF", MODE_VECTOR_FLOAT, 64, 8, VOIDmode)
+DEF_MACHMODE (V8SFmode, "V8SF", MODE_VECTOR_FLOAT, 256, 32, 4, VOIDmode)
+DEF_MACHMODE (V8DFmode, "V8DF", MODE_VECTOR_FLOAT, 512, 64, 8, VOIDmode)
 
 /* BLKmode is used for structures, arrays, etc.
    that fit no more specific mode.  */
-DEF_MACHMODE (BLKmode, "BLK", MODE_RANDOM, 0, 0, VOIDmode)
+DEF_MACHMODE (BLKmode, "BLK", MODE_RANDOM, 0, 0, 0, VOIDmode)
 
-/* The modes for representing the condition codes come last.  CCmode is
-   always defined.  Additional modes for the condition code can be specified
-   in the EXTRA_CC_MODES macro.
-   All MODE_CC modes are the same width as SImode and have VOIDmode as their
-   next wider mode.
-*/
+/* The modes for representing the condition codes come last.  CCmode
+   is always defined.  Additional modes for the condition code can be
+   specified in the EXTRA_CC_MODES macro.  All MODE_CC modes are the
+   same width as SImode and have VOIDmode as their next wider mode.  */
 
-#define CC(E, M)  DEF_MACHMODE (E, M, MODE_CC, 4, 4, VOIDmode)
+#define CC(E, M)  DEF_MACHMODE (E, M, MODE_CC, 32, 4, 4, VOIDmode)
 
 CC (CCmode, "CC")
 
index f5a3ab9681652cc4f3871624e5b84d3d180ac475..e565cb70d21b90271737c80cf02b150657d0fee5 100644 (file)
@@ -24,7 +24,7 @@ Boston, MA 02111-1307, USA.  */
 
 /* Make an enum class that gives all the machine modes.  */
 
-#define DEF_MACHMODE(SYM, NAME, TYPE, SIZE, UNIT, WIDER)  SYM,
+#define DEF_MACHMODE(SYM, NAME, TYPE, BITSIZE, SIZE, UNIT, WIDER)  SYM,
 
 enum machine_mode {
 #include "machmode.def"
@@ -93,7 +93,8 @@ extern const unsigned int mode_unit_size[];
 
 /* Get the size in bits of an object of mode MODE.  */
 
-#define GET_MODE_BITSIZE(MODE)  (BITS_PER_UNIT * mode_size[(int) (MODE)])
+extern const unsigned int mode_bitsize[];
+#define GET_MODE_BITSIZE(MODE)  (mode_bitsize[(int) (MODE)])
 
 #ifdef HOST_WIDE_INT
 
index 482a53bade2c3aec46ee3658478f195d01e15a1c..aba68823f822b2b47be802a12e825295eb525216 100644 (file)
--- a/gcc/rtl.c
+++ b/gcc/rtl.c
@@ -128,7 +128,7 @@ const char * const rtx_name[] = {
 /* Indexed by machine mode, gives the name of that machine mode.
    This name does not include the letters "mode".  */
 
-#define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  NAME,
+#define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER)  NAME,
 
 const char * const mode_name[(int) MAX_MACHINE_MODE + 1] = {
 #include "machmode.def"
@@ -139,10 +139,9 @@ const char * const mode_name[(int) MAX_MACHINE_MODE + 1] = {
 
 #undef DEF_MACHMODE
 
-/* Indexed by machine mode, gives the length of the mode, in bytes.
-   GET_MODE_CLASS uses this.  */
+/* Indexed by machine mode, gives the class mode for GET_MODE_CLASS.  */
 
-#define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  CLASS,
+#define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER)  CLASS,
 
 const enum mode_class mode_class[(int) MAX_MACHINE_MODE] = {
 #include "machmode.def"
@@ -150,10 +149,21 @@ const enum mode_class mode_class[(int) MAX_MACHINE_MODE] = {
 
 #undef DEF_MACHMODE
 
+/* Indexed by machine mode, gives the length of the mode, in bits.
+   GET_MODE_BITSIZE uses this.  */
+
+#define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER)  BITSIZE,
+
+const unsigned int mode_bitsize[(int) MAX_MACHINE_MODE] = {
+#include "machmode.def"
+};
+
+#undef DEF_MACHMODE
+
 /* Indexed by machine mode, gives the length of the mode, in bytes.
    GET_MODE_SIZE uses this.  */
 
-#define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  SIZE,
+#define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER)  SIZE,
 
 const unsigned int mode_size[(int) MAX_MACHINE_MODE] = {
 #include "machmode.def"
@@ -164,7 +174,7 @@ const unsigned int mode_size[(int) MAX_MACHINE_MODE] = {
 /* Indexed by machine mode, gives the length of the mode's subunit.
    GET_MODE_UNIT_SIZE uses this.  */
 
-#define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  UNIT,
+#define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER)  UNIT,
 
 const unsigned int mode_unit_size[(int) MAX_MACHINE_MODE] = {
 #include "machmode.def"                /* machine modes are documented here */
@@ -176,7 +186,7 @@ const unsigned int mode_unit_size[(int) MAX_MACHINE_MODE] = {
    (QI -> HI -> SI -> DI, etc.)  Widening multiply instructions
    use this.  */
 
-#define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  \
+#define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER)  \
   (unsigned char) WIDER,
 
 const unsigned char mode_wider_mode[(int) MAX_MACHINE_MODE] = {
@@ -185,8 +195,8 @@ const unsigned char mode_wider_mode[(int) MAX_MACHINE_MODE] = {
 
 #undef DEF_MACHMODE
 
-#define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  \
-  ((SIZE) * BITS_PER_UNIT >= HOST_BITS_PER_WIDE_INT) ? ~(unsigned HOST_WIDE_INT)0 : ((unsigned HOST_WIDE_INT) 1 << (SIZE) * BITS_PER_UNIT) - 1,
+#define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER)  \
+  ((BITSIZE) >= HOST_BITS_PER_WIDE_INT) ? ~(unsigned HOST_WIDE_INT)0 : ((unsigned HOST_WIDE_INT) 1 << (BITSIZE)) - 1,
 
 /* Indexed by machine mode, gives mask of significant bits in mode.  */
 
@@ -196,7 +206,12 @@ const unsigned HOST_WIDE_INT mode_mask_array[(int) MAX_MACHINE_MODE] = {
 
 /* Indexed by mode class, gives the narrowest mode for each class.
    The Q modes are always of width 1 (2 for complex) - it is impossible
-   for any mode to be narrower.  */
+   for any mode to be narrower.
+
+   Note that we use QImode instead of BImode for MODE_INT, since
+   otherwise the middle end will try to use it for bitfields in
+   structures and the like, which we do not want.  Only the target
+   md file should generate BImode widgets.  */
 
 const enum machine_mode class_narrowest_mode[(int) MAX_MODE_CLASS] = {
     /* MODE_RANDOM */          VOIDmode,
This page took 0.102131 seconds and 5 git commands to generate.