machmode.def: Add BImode.

* 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
This commit is contained in:
Richard Henderson 2000-09-18 10:55:38 -07:00
parent 42d5d0f171
commit a191f0ee83
5 changed files with 121 additions and 84 deletions

View 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> 2000-09-18 Bernd Schmidt <bernds@redhat.co.uk>
* reload1.c (forget_old_reloads_1): If a hard reg is stored, clear * 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 * configure.in: Define _GNU_SOURCE only when using the GNU C
Library. Library.
* configure: Regenerated. * configure: Regenerated.
* config.in: Regenerated. * config.in: Regenerated.
2000-09-17 Mark Mitchell <mark@codesourcery.com> 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> 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. declarations.
* rtl.h (enum libcall_type): New. * rtl.h (enum libcall_type): New.
(emit_library_call, emit_library_call_value): Change fn_type arg to (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 * calls.c: Likewise for the function definitions. Several callers
throughout changed to use the new enumeration appropriately. throughout changed to use the new enumeration appropriately.
(emit_library_call_value_1): Likewise. Put back code to make libcall (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. enumeration values.
2000-09-16 Mark Mitchell <mark@codesourcery.com> 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> 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> 2000-09-12 Jim Wilson <wilson@cygnus.com>

View File

@ -4347,13 +4347,16 @@ combine_simplify_rtx (x, op0_mode, last, in_dest)
if (STORE_FLAG_VALUE == 1 if (STORE_FLAG_VALUE == 1
&& new_code == NE && GET_MODE_CLASS (mode) == MODE_INT && 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, return gen_lowpart_for_combine (mode,
expand_compound_operation (op0)); expand_compound_operation (op0));
else if (STORE_FLAG_VALUE == 1 else if (STORE_FLAG_VALUE == 1
&& new_code == NE && GET_MODE_CLASS (mode) == MODE_INT && new_code == NE && GET_MODE_CLASS (mode) == MODE_INT
&& op1 == const0_rtx && op1 == const0_rtx
&& mode == GET_MODE (op0)
&& (num_sign_bit_copies (op0, mode) && (num_sign_bit_copies (op0, mode)
== GET_MODE_BITSIZE (mode))) == GET_MODE_BITSIZE (mode)))
{ {
@ -4365,6 +4368,7 @@ combine_simplify_rtx (x, op0_mode, last, in_dest)
else if (STORE_FLAG_VALUE == 1 else if (STORE_FLAG_VALUE == 1
&& new_code == EQ && GET_MODE_CLASS (mode) == MODE_INT && new_code == EQ && GET_MODE_CLASS (mode) == MODE_INT
&& op1 == const0_rtx && op1 == const0_rtx
&& mode == GET_MODE (op0)
&& nonzero_bits (op0, mode) == 1) && nonzero_bits (op0, mode) == 1)
{ {
op0 = expand_compound_operation (op0); op0 = expand_compound_operation (op0);
@ -4376,6 +4380,7 @@ combine_simplify_rtx (x, op0_mode, last, in_dest)
else if (STORE_FLAG_VALUE == 1 else if (STORE_FLAG_VALUE == 1
&& new_code == EQ && GET_MODE_CLASS (mode) == MODE_INT && new_code == EQ && GET_MODE_CLASS (mode) == MODE_INT
&& op1 == const0_rtx && op1 == const0_rtx
&& mode == GET_MODE (op0)
&& (num_sign_bit_copies (op0, mode) && (num_sign_bit_copies (op0, mode)
== GET_MODE_BITSIZE (mode))) == GET_MODE_BITSIZE (mode)))
{ {
@ -4396,6 +4401,7 @@ combine_simplify_rtx (x, op0_mode, last, in_dest)
else if (STORE_FLAG_VALUE == -1 else if (STORE_FLAG_VALUE == -1
&& new_code == NE && GET_MODE_CLASS (mode) == MODE_INT && new_code == NE && GET_MODE_CLASS (mode) == MODE_INT
&& op1 == const0_rtx && op1 == const0_rtx
&& mode == GET_MODE (op0)
&& nonzero_bits (op0, mode) == 1) && nonzero_bits (op0, mode) == 1)
{ {
op0 = expand_compound_operation (op0); op0 = expand_compound_operation (op0);
@ -4406,6 +4412,7 @@ combine_simplify_rtx (x, op0_mode, last, in_dest)
else if (STORE_FLAG_VALUE == -1 else if (STORE_FLAG_VALUE == -1
&& new_code == EQ && GET_MODE_CLASS (mode) == MODE_INT && new_code == EQ && GET_MODE_CLASS (mode) == MODE_INT
&& op1 == const0_rtx && op1 == const0_rtx
&& mode == GET_MODE (op0)
&& (num_sign_bit_copies (op0, mode) && (num_sign_bit_copies (op0, mode)
== GET_MODE_BITSIZE (mode))) == GET_MODE_BITSIZE (mode)))
{ {
@ -4418,6 +4425,7 @@ combine_simplify_rtx (x, op0_mode, last, in_dest)
else if (STORE_FLAG_VALUE == -1 else if (STORE_FLAG_VALUE == -1
&& new_code == EQ && GET_MODE_CLASS (mode) == MODE_INT && new_code == EQ && GET_MODE_CLASS (mode) == MODE_INT
&& op1 == const0_rtx && op1 == const0_rtx
&& mode == GET_MODE (op0)
&& nonzero_bits (op0, mode) == 1) && nonzero_bits (op0, mode) == 1)
{ {
op0 = expand_compound_operation (op0); op0 = expand_compound_operation (op0);

View File

@ -48,98 +48,100 @@ Boston, MA 02111-1307, USA. */
MODE_VECTOR_INT, MODE_VECTOR_FLOAT - vector MODE_VECTOR_INT, MODE_VECTOR_FLOAT - vector
MODE_RANDOM - anything else 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. It is zero when the size is meaningless or not determined.
A byte's size is determined by BITS_PER_UNIT in tm.h. A byte's size is determined by BITS_PER_UNIT in tm.h.
Sixth arg is the relative size of subunits of the object.
Fifth arg is the relative size of subunits of the object.
It is same as the fourth argument except for complexes, It is same as the fourth argument except for complexes,
since they are really made of two equal size subunits. 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. */ 0 if there is none. */
/* VOIDmode is used when no mode needs to be specified, /* VOIDmode is used when no mode needs to be specified,
as for example on CONST_INT RTL expressions. */ as for example on CONST_INT RTL expressions. */
DEF_MACHMODE (VOIDmode, "VOID", MODE_RANDOM, 0, 0, VOIDmode) DEF_MACHMODE (VOIDmode, "VOID", MODE_RANDOM, 0, 0, 0, VOIDmode)
DEF_MACHMODE (PQImode, "PQI", MODE_PARTIAL_INT, 1, 1, PHImode) DEF_MACHMODE (BImode, "BI", MODE_INT, 1, 1, 1, QImode)
DEF_MACHMODE (QImode, "QI", MODE_INT, 1, 1, HImode) /* int types */ DEF_MACHMODE (QImode, "QI", MODE_INT, 8, 1, 1, HImode)
DEF_MACHMODE (PHImode, "PHI", MODE_PARTIAL_INT, 2, 2, PSImode) DEF_MACHMODE (HImode, "HI", MODE_INT, 16, 2, 2, SImode)
DEF_MACHMODE (HImode, "HI", MODE_INT, 2, 2, SImode) DEF_MACHMODE (SImode, "SI", MODE_INT, 32, 4, 4, DImode)
/* Pointers on some machines use this type to distinguish them from ints. DEF_MACHMODE (DImode, "DI", MODE_INT, 64, 8, 8, TImode)
Useful if a pointer is 4 bytes but has some bits that are not significant, DEF_MACHMODE (TImode, "TI", MODE_INT, 128, 16, 16, OImode)
so it is really not quite as wide as an integer. */ DEF_MACHMODE (OImode, "OI", MODE_INT, 256, 32, 32, VOIDmode)
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) /* Pointers on some machines use these types to distinguish them from
DEF_MACHMODE (HFmode, "HF", MODE_FLOAT, 2, 2, TQFmode) ints. Useful if a pointer is 4 bytes but has some bits that are
DEF_MACHMODE (TQFmode, "TQF", MODE_FLOAT, 3, 3, SFmode) /* MIL-STD-1750A */ not significant, so it is really not quite as wide as an integer. */
DEF_MACHMODE (SFmode, "SF", MODE_FLOAT, 4, 4, DFmode) DEF_MACHMODE (PQImode, "PQI", MODE_PARTIAL_INT, 8, 1, 1, PHImode)
DEF_MACHMODE (DFmode, "DF", MODE_FLOAT, 8, 8, XFmode) DEF_MACHMODE (PHImode, "PHI", MODE_PARTIAL_INT, 16, 2, 2, PSImode)
DEF_MACHMODE (XFmode, "XF", MODE_FLOAT, 12, 12, TFmode) /* IEEE extended */ DEF_MACHMODE (PSImode, "PSI", MODE_PARTIAL_INT, 32, 4, 4, PDImode)
DEF_MACHMODE (TFmode, "TF", MODE_FLOAT, 16, 16, VOIDmode) 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. */ /* Complex modes. */
DEF_MACHMODE (QCmode, "QC", MODE_COMPLEX_FLOAT, 2, 1, HCmode) DEF_MACHMODE (QCmode, "QC", MODE_COMPLEX_FLOAT, 16, 2, 1, HCmode)
DEF_MACHMODE (HCmode, "HC", MODE_COMPLEX_FLOAT, 4, 2, SCmode) DEF_MACHMODE (HCmode, "HC", MODE_COMPLEX_FLOAT, 32, 4, 2, SCmode)
DEF_MACHMODE (SCmode, "SC", MODE_COMPLEX_FLOAT, 8, 4, DCmode) DEF_MACHMODE (SCmode, "SC", MODE_COMPLEX_FLOAT, 64, 8, 4, DCmode)
DEF_MACHMODE (DCmode, "DC", MODE_COMPLEX_FLOAT, 16, 8, XCmode) DEF_MACHMODE (DCmode, "DC", MODE_COMPLEX_FLOAT, 128, 16, 8, XCmode)
DEF_MACHMODE (XCmode, "XC", MODE_COMPLEX_FLOAT, 24, 12, TCmode) DEF_MACHMODE (XCmode, "XC", MODE_COMPLEX_FLOAT, 192, 24, 12, TCmode)
DEF_MACHMODE (TCmode, "TC", MODE_COMPLEX_FLOAT, 32, 16, VOIDmode) DEF_MACHMODE (TCmode, "TC", MODE_COMPLEX_FLOAT, 256, 32, 16, VOIDmode)
DEF_MACHMODE (CQImode, "CQI", MODE_COMPLEX_INT, 2, 1, CHImode) DEF_MACHMODE (CQImode, "CQI", MODE_COMPLEX_INT, 16, 2, 1, CHImode)
DEF_MACHMODE (CHImode, "CHI", MODE_COMPLEX_INT, 4, 2, CSImode) DEF_MACHMODE (CHImode, "CHI", MODE_COMPLEX_INT, 32, 4, 2, CSImode)
DEF_MACHMODE (CSImode, "CSI", MODE_COMPLEX_INT, 8, 4, CDImode) DEF_MACHMODE (CSImode, "CSI", MODE_COMPLEX_INT, 64, 8, 4, CDImode)
DEF_MACHMODE (CDImode, "CDI", MODE_COMPLEX_INT, 16, 8, CTImode) DEF_MACHMODE (CDImode, "CDI", MODE_COMPLEX_INT, 128, 16, 8, CTImode)
DEF_MACHMODE (CTImode, "CTI", MODE_COMPLEX_INT, 32, 16, COImode) DEF_MACHMODE (CTImode, "CTI", MODE_COMPLEX_INT, 256, 32, 16, COImode)
DEF_MACHMODE (COImode, "COI", MODE_COMPLEX_INT, 64, 32, VOIDmode) DEF_MACHMODE (COImode, "COI", MODE_COMPLEX_INT, 512, 64, 32, VOIDmode)
/* Vector modes. */ /* Vector modes. */
/* There are no V1xx vector modes. These are equivalent to normal non-vector /* There are no V1xx vector modes. These are equivalent to normal
modes. */ scalar modes. */
DEF_MACHMODE (V2QImode, "V2QI", MODE_VECTOR_INT, 2, 1, VOIDmode) DEF_MACHMODE (V2QImode, "V2QI", MODE_VECTOR_INT, 16, 2, 1, VOIDmode)
DEF_MACHMODE (V2HImode, "V2HI", MODE_VECTOR_INT, 4, 2, VOIDmode) DEF_MACHMODE (V2HImode, "V2HI", MODE_VECTOR_INT, 32, 4, 2, VOIDmode)
DEF_MACHMODE (V2SImode, "V2SI", MODE_VECTOR_INT, 8, 4, VOIDmode) DEF_MACHMODE (V2SImode, "V2SI", MODE_VECTOR_INT, 64, 8, 4, VOIDmode)
DEF_MACHMODE (V2DImode, "V2DI", MODE_VECTOR_INT, 16, 8, VOIDmode) DEF_MACHMODE (V2DImode, "V2DI", MODE_VECTOR_INT, 128, 16, 8, VOIDmode)
DEF_MACHMODE (V4QImode, "V4QI", MODE_VECTOR_INT, 4, 1, VOIDmode) DEF_MACHMODE (V4QImode, "V4QI", MODE_VECTOR_INT, 32, 4, 1, VOIDmode)
DEF_MACHMODE (V4HImode, "V4HI", MODE_VECTOR_INT, 8, 2, VOIDmode) DEF_MACHMODE (V4HImode, "V4HI", MODE_VECTOR_INT, 64, 8, 2, VOIDmode)
DEF_MACHMODE (V4SImode, "V4SI", MODE_VECTOR_INT, 16, 4, VOIDmode) DEF_MACHMODE (V4SImode, "V4SI", MODE_VECTOR_INT, 128, 16, 4, VOIDmode)
DEF_MACHMODE (V4DImode, "V4DI", MODE_VECTOR_INT, 32, 8, VOIDmode) DEF_MACHMODE (V4DImode, "V4DI", MODE_VECTOR_INT, 256, 32, 8, VOIDmode)
DEF_MACHMODE (V8QImode, "V8QI", MODE_VECTOR_INT, 8, 1, VOIDmode) DEF_MACHMODE (V8QImode, "V8QI", MODE_VECTOR_INT, 64, 8, 1, VOIDmode)
DEF_MACHMODE (V8HImode, "V8HI", MODE_VECTOR_INT, 16, 2, VOIDmode) DEF_MACHMODE (V8HImode, "V8HI", MODE_VECTOR_INT, 128, 16, 2, VOIDmode)
DEF_MACHMODE (V8SImode, "V8SI", MODE_VECTOR_INT, 32, 4, VOIDmode) DEF_MACHMODE (V8SImode, "V8SI", MODE_VECTOR_INT, 256, 32, 4, VOIDmode)
DEF_MACHMODE (V8DImode, "V8DI", MODE_VECTOR_INT, 64, 8, VOIDmode) DEF_MACHMODE (V8DImode, "V8DI", MODE_VECTOR_INT, 512, 64, 8, VOIDmode)
DEF_MACHMODE (V2SFmode, "V2SF", MODE_VECTOR_FLOAT, 8, 4, VOIDmode) DEF_MACHMODE (V2SFmode, "V2SF", MODE_VECTOR_FLOAT, 64, 8, 4, VOIDmode)
DEF_MACHMODE (V2DFmode, "V2DF", MODE_VECTOR_FLOAT, 16, 8, VOIDmode) DEF_MACHMODE (V2DFmode, "V2DF", MODE_VECTOR_FLOAT, 128, 16, 8, VOIDmode)
DEF_MACHMODE (V4SFmode, "V4SF", MODE_VECTOR_FLOAT, 16, 4, VOIDmode) DEF_MACHMODE (V4SFmode, "V4SF", MODE_VECTOR_FLOAT, 128, 16, 4, VOIDmode)
DEF_MACHMODE (V4DFmode, "V4DF", MODE_VECTOR_FLOAT, 32, 8, VOIDmode) DEF_MACHMODE (V4DFmode, "V4DF", MODE_VECTOR_FLOAT, 256, 32, 8, VOIDmode)
DEF_MACHMODE (V8SFmode, "V8SF", MODE_VECTOR_FLOAT, 32, 4, VOIDmode) DEF_MACHMODE (V8SFmode, "V8SF", MODE_VECTOR_FLOAT, 256, 32, 4, VOIDmode)
DEF_MACHMODE (V8DFmode, "V8DF", MODE_VECTOR_FLOAT, 64, 8, VOIDmode) DEF_MACHMODE (V8DFmode, "V8DF", MODE_VECTOR_FLOAT, 512, 64, 8, VOIDmode)
/* BLKmode is used for structures, arrays, etc. /* BLKmode is used for structures, arrays, etc.
that fit no more specific mode. */ 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 /* The modes for representing the condition codes come last. CCmode
always defined. Additional modes for the condition code can be specified is always defined. Additional modes for the condition code can be
in the EXTRA_CC_MODES macro. specified in the EXTRA_CC_MODES macro. All MODE_CC modes are the
All MODE_CC modes are the same width as SImode and have VOIDmode as their same width as SImode and have VOIDmode as their next wider mode. */
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") CC (CCmode, "CC")

View File

@ -24,7 +24,7 @@ Boston, MA 02111-1307, USA. */
/* Make an enum class that gives all the machine modes. */ /* 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 { enum machine_mode {
#include "machmode.def" #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. */ /* 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 #ifdef HOST_WIDE_INT

View File

@ -128,7 +128,7 @@ const char * const rtx_name[] = {
/* Indexed by machine mode, gives the name of that machine mode. /* Indexed by machine mode, gives the name of that machine mode.
This name does not include the letters "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] = { const char * const mode_name[(int) MAX_MACHINE_MODE + 1] = {
#include "machmode.def" #include "machmode.def"
@ -139,10 +139,9 @@ const char * const mode_name[(int) MAX_MACHINE_MODE + 1] = {
#undef DEF_MACHMODE #undef DEF_MACHMODE
/* Indexed by machine mode, gives the length of the mode, in bytes. /* Indexed by machine mode, gives the class mode for GET_MODE_CLASS. */
GET_MODE_CLASS uses this. */
#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] = { const enum mode_class mode_class[(int) MAX_MACHINE_MODE] = {
#include "machmode.def" #include "machmode.def"
@ -150,10 +149,21 @@ const enum mode_class mode_class[(int) MAX_MACHINE_MODE] = {
#undef DEF_MACHMODE #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. /* Indexed by machine mode, gives the length of the mode, in bytes.
GET_MODE_SIZE uses this. */ 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] = { const unsigned int mode_size[(int) MAX_MACHINE_MODE] = {
#include "machmode.def" #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. /* Indexed by machine mode, gives the length of the mode's subunit.
GET_MODE_UNIT_SIZE uses this. */ 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] = { const unsigned int mode_unit_size[(int) MAX_MACHINE_MODE] = {
#include "machmode.def" /* machine modes are documented here */ #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 (QI -> HI -> SI -> DI, etc.) Widening multiply instructions
use this. */ use this. */
#define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER) \ #define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, SIZE, UNIT, WIDER) \
(unsigned char) WIDER, (unsigned char) WIDER,
const unsigned char mode_wider_mode[(int) MAX_MACHINE_MODE] = { 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 #undef DEF_MACHMODE
#define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER) \ #define DEF_MACHMODE(SYM, NAME, CLASS, BITSIZE, 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, ((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. */ /* 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. /* 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 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] = { const enum machine_mode class_narrowest_mode[(int) MAX_MODE_CLASS] = {
/* MODE_RANDOM */ VOIDmode, /* MODE_RANDOM */ VOIDmode,