X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fmachmode.h;h=230d8b0596a97474da0737bf1673808d00708a3d;hb=6c8211620e8fea84514b515f7bd4371988789a2b;hp=6521faf26b9d5b79112ef955c87c967537354597;hpb=8586815817b1d1dd8a803d7d070c517018549289;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/machmode.h b/gcc/machmode.h index 6521faf26b9..230d8b0596a 100644 --- a/gcc/machmode.h +++ b/gcc/machmode.h @@ -1,5 +1,6 @@ /* Machine mode definitions for GNU C-Compiler; included by rtl.h and tree.h. - Copyright (C) 1991, 93, 94, 96, 98, 99, 2000 Free Software Foundation, Inc. + Copyright (C) 1991, 1993, 1994, 1996, 1998, 1999, 2000, 2001 + Free Software Foundation, Inc. This file is part of GNU CC. @@ -23,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" @@ -41,7 +42,9 @@ extern const char * const mode_name[]; #define GET_MODE_NAME(MODE) (mode_name[(int) (MODE)]) enum mode_class { MODE_RANDOM, MODE_INT, MODE_FLOAT, MODE_PARTIAL_INT, MODE_CC, - MODE_COMPLEX_INT, MODE_COMPLEX_FLOAT, MAX_MODE_CLASS}; + MODE_COMPLEX_INT, MODE_COMPLEX_FLOAT, + MODE_VECTOR_INT, MODE_VECTOR_FLOAT, + MAX_MODE_CLASS}; /* Get the general kind of object that mode MODE represents (integer, floating, complex, etc.) */ @@ -53,26 +56,33 @@ extern const enum mode_class mode_class[]; #define INTEGRAL_MODE_P(MODE) \ (GET_MODE_CLASS (MODE) == MODE_INT \ || GET_MODE_CLASS (MODE) == MODE_PARTIAL_INT \ - || GET_MODE_CLASS (MODE) == MODE_COMPLEX_INT) + || GET_MODE_CLASS (MODE) == MODE_COMPLEX_INT \ + || GET_MODE_CLASS (MODE) == MODE_VECTOR_INT) /* Nonzero if MODE is a floating-point mode. */ #define FLOAT_MODE_P(MODE) \ (GET_MODE_CLASS (MODE) == MODE_FLOAT \ - || GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT) + || GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT \ + || GET_MODE_CLASS (MODE) == MODE_VECTOR_FLOAT) /* Nonzero if MODE is a complex mode. */ #define COMPLEX_MODE_P(MODE) \ (GET_MODE_CLASS (MODE) == MODE_COMPLEX_INT \ || GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT) +/* Nonzero if MODE is a vector mode. */ +#define VECTOR_MODE_P(MODE) \ + (GET_MODE_CLASS (MODE) == MODE_VECTOR_INT \ + || GET_MODE_CLASS (MODE) == MODE_VECTOR_FLOAT) + /* Get the size in bytes of an object of mode MODE. */ -extern const int mode_size[]; +extern const unsigned int mode_size[]; #define GET_MODE_SIZE(MODE) (mode_size[(int) (MODE)]) /* Get the size in bytes of the basic parts of an object of mode MODE. */ -extern const int mode_unit_size[]; +extern const unsigned int mode_unit_size[]; #define GET_MODE_UNIT_SIZE(MODE) (mode_unit_size[(int) (MODE)]) /* Get the number of units in the object. */ @@ -83,9 +93,12 @@ extern const 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)]) + +#endif /* not HAVE_MACHINE_MODES */ -#ifdef HOST_WIDE_INT +#if defined HOST_WIDE_INT && ! defined GET_MODE_MASK /* Get a bitmask containing 1 for all bits in a word that fit within mode MODE. */ @@ -94,7 +107,10 @@ extern const unsigned HOST_WIDE_INT mode_mask_array[]; #define GET_MODE_MASK(MODE) mode_mask_array[(int) (MODE)] -#endif /* HOST_WIDE_INT */ +#endif /* defined (HOST_WIDE_INT) && ! defined GET_MODE_MASK */ + +#if ! defined GET_MODE_WIDER_MODE || ! defined GET_MODE_ALIGNMENT \ + || ! defined GET_CLASS_NARROWEST_MODE /* Get the next wider natural mode (eg, QI -> HI -> SI -> DI -> TI). */ @@ -105,12 +121,13 @@ extern const unsigned char mode_wider_mode[]; If LIMIT is nonzero, then don't use modes bigger than MAX_FIXED_MODE_SIZE. The value is BLKmode if no other mode is found. */ -extern enum machine_mode mode_for_size PARAMS ((unsigned int, enum mode_class, int)); +extern enum machine_mode mode_for_size PARAMS ((unsigned int, + enum mode_class, int)); /* Similar, but find the smallest mode for a given width. */ -extern enum machine_mode smallest_mode_for_size PARAMS ((unsigned int, - enum mode_class)); +extern enum machine_mode smallest_mode_for_size + PARAMS ((unsigned int, enum mode_class)); /* Return an integer mode of the exact same size as the input mode, @@ -120,13 +137,14 @@ extern enum machine_mode int_mode_for_mode PARAMS ((enum machine_mode)); /* Find the best mode to use to access a bit field. */ -extern enum machine_mode get_best_mode PARAMS ((int, int, int, enum machine_mode, int)); +extern enum machine_mode get_best_mode PARAMS ((int, int, unsigned int, + enum machine_mode, int)); /* Determine alignment, 1<=result<=BIGGEST_ALIGNMENT. */ -#define GET_MODE_ALIGNMENT(MODE) \ - MIN (BIGGEST_ALIGNMENT, \ - MAX (1, (GET_MODE_UNIT_SIZE (MODE) * BITS_PER_UNIT))) +extern unsigned get_mode_alignment PARAMS ((enum machine_mode)); + +#define GET_MODE_ALIGNMENT(MODE) get_mode_alignment (MODE) /* For each class, get the narrowest mode in that class. */ @@ -140,4 +158,5 @@ extern enum machine_mode byte_mode; extern enum machine_mode word_mode; extern enum machine_mode ptr_mode; -#endif /* not HAVE_MACHINE_MODES */ +#endif /* ! defined GET_MODE_WIDER_MODE || ! defined GET_MODE_ALIGNMENT + || ! defined GET_CLASS_NARROWEST_MODE */