diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 21 | ||||
-rw-r--r-- | gcc/config/arc/arc.h | 3 | ||||
-rw-r--r-- | gcc/config/bfin/bfin.h | 3 | ||||
-rw-r--r-- | gcc/config/i386/i386-modes.def | 5 | ||||
-rw-r--r-- | gcc/config/lm32/lm32.h | 1 | ||||
-rw-r--r-- | gcc/config/m32c/m32c.h | 1 | ||||
-rw-r--r-- | gcc/config/microblaze/microblaze.h | 1 | ||||
-rw-r--r-- | gcc/config/picochip/picochip.h | 2 | ||||
-rw-r--r-- | gcc/config/spu/spu.h | 2 | ||||
-rw-r--r-- | gcc/defaults.h | 4 | ||||
-rw-r--r-- | gcc/doc/rtl.texi | 17 | ||||
-rw-r--r-- | gcc/doc/tm.texi | 5 | ||||
-rw-r--r-- | gcc/doc/tm.texi.in | 5 | ||||
-rw-r--r-- | gcc/genmodes.c | 45 | ||||
-rw-r--r-- | gcc/mkconfig.sh | 3 |
15 files changed, 78 insertions, 40 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3ee682b..a238cac 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,24 @@ +2013-12-13 Kenneth Zadeck <zadeck@naturalbridge.com> + + * config/arc/arc.h (BITS_PER_UNIT): Removed. + * config/bfin/bfin.h (BITS_PER_UNIT): Removed. + * config/lm32/lm32.h (BITS_PER_UNIT): Removed. + * config/m32c/m32c.h (BITS_PER_UNIT): Removed. + * config/microblaze/microblaze.h (BITS_PER_UNIT): Removed. + * config/picochip/picochip.h (BITS_PER_UNIT): Removed. + * config/spu/spu.h (BITS_PER_UNIT): Removed. + * defaults.h (BITS_PER_UNIT): Removed. + * config/i386/i386-modes.def (MAX_BITSIZE_MODE_ANY_INT): New. + * doc/rtl (BITS_PER_UNIT): Moved from tm.texi. + (MAX_BITSIZE_MODE_ANY_INT): Updated. + * doc/tm.texi (BITS_PER_UNIT): Removed. + * doc/tm.texi.in (BITS_PER_UNIT): Removed. + * genmodes.c (bits_per_unit, max_bitsize_mode_any_int): New. + (create_modes): Added code to set bits_per_unit and + max_bitsize_mode_any_int. + (emit_max_int): Changed code generation. + * mkconfig.sh: Added insn-modes.h. + 2013-12-13 Jeff Law <law@redhat.com> PR tree-optimization/45685 diff --git a/gcc/config/arc/arc.h b/gcc/config/arc/arc.h index cc49c55..88102f0 100644 --- a/gcc/config/arc/arc.h +++ b/gcc/config/arc/arc.h @@ -303,9 +303,6 @@ along with GCC; see the file COPYING3. If not see numbered. */ #define WORDS_BIG_ENDIAN (TARGET_BIG_ENDIAN) -/* Number of bits in an addressable storage unit. */ -#define BITS_PER_UNIT 8 - /* Width in bits of a "word", which is the contents of a machine register. Note that this is not necessarily the width of data type `int'; if using 16-bit ints on a 68000, this would still be 32. diff --git a/gcc/config/bfin/bfin.h b/gcc/config/bfin/bfin.h index cc17506..85ab0b0 100644 --- a/gcc/config/bfin/bfin.h +++ b/gcc/config/bfin/bfin.h @@ -859,9 +859,6 @@ typedef struct { /* Define this if most significant word of a multiword number is numbered. */ #define WORDS_BIG_ENDIAN 0 -/* number of bits in an addressable storage unit */ -#define BITS_PER_UNIT 8 - /* Width in bits of a "word", which is the contents of a machine register. Note that this is not necessarily the width of data type `int'; if using 16-bit ints on a 68000, this would still be 32. diff --git a/gcc/config/i386/i386-modes.def b/gcc/config/i386/i386-modes.def index e0b8fc8..57d08fb 100644 --- a/gcc/config/i386/i386-modes.def +++ b/gcc/config/i386/i386-modes.def @@ -90,5 +90,10 @@ VECTOR_MODE (INT, QI, 2); /* V2QI */ INT_MODE (OI, 32); INT_MODE (XI, 64); +/* Keep the OI and XI modes from confusing the compiler into thinking + that these modes could actually be used for computation. They are + only holders for vectors during data movement. */ +#define MAX_BITSIZE_MODE_ANY_INT (128) + /* The symbol Pmode stands for one of the above machine modes (usually SImode). The tm.h file specifies which one. It is not a distinct mode. */ diff --git a/gcc/config/lm32/lm32.h b/gcc/config/lm32/lm32.h index d19adea..edb96b7 100644 --- a/gcc/config/lm32/lm32.h +++ b/gcc/config/lm32/lm32.h @@ -73,7 +73,6 @@ #define BYTES_BIG_ENDIAN 1 #define WORDS_BIG_ENDIAN 1 -#define BITS_PER_UNIT 8 #define BITS_PER_WORD 32 #define UNITS_PER_WORD 4 diff --git a/gcc/config/m32c/m32c.h b/gcc/config/m32c/m32c.h index 3ceb093..b7b5aa4 100644 --- a/gcc/config/m32c/m32c.h +++ b/gcc/config/m32c/m32c.h @@ -140,7 +140,6 @@ machine_function; matches "int". Pointers are 16 bits for R8C/M16C (when TARGET_A16 is true) and 24 bits for M32CM/M32C (when TARGET_A24 is true), but 24-bit pointers are stored in 32-bit words. */ -#define BITS_PER_UNIT 8 #define UNITS_PER_WORD 2 #define POINTER_SIZE (TARGET_A16 ? 16 : 32) #define POINTERS_EXTEND_UNSIGNED 1 diff --git a/gcc/config/microblaze/microblaze.h b/gcc/config/microblaze/microblaze.h index eb8e45c..dcca4ac 100644 --- a/gcc/config/microblaze/microblaze.h +++ b/gcc/config/microblaze/microblaze.h @@ -193,7 +193,6 @@ extern enum pipeline_type microblaze_pipe; #define BITS_BIG_ENDIAN 0 #define BYTES_BIG_ENDIAN (TARGET_LITTLE_ENDIAN == 0) #define WORDS_BIG_ENDIAN (BYTES_BIG_ENDIAN) -#define BITS_PER_UNIT 8 #define BITS_PER_WORD 32 #define UNITS_PER_WORD 4 #define MIN_UNITS_PER_WORD 4 diff --git a/gcc/config/picochip/picochip.h b/gcc/config/picochip/picochip.h index 13414c6c..3621f3d 100644 --- a/gcc/config/picochip/picochip.h +++ b/gcc/config/picochip/picochip.h @@ -92,8 +92,6 @@ extern enum picochip_dfa_type picochip_schedule_type; #define BYTES_BIG_ENDIAN 0 #define WORDS_BIG_ENDIAN 0 -#define BITS_PER_UNIT 8 - #define BITS_PER_WORD 16 #define UNITS_PER_WORD (BITS_PER_WORD / BITS_PER_UNIT) diff --git a/gcc/config/spu/spu.h b/gcc/config/spu/spu.h index 64a2ba0..ad4405a 100644 --- a/gcc/config/spu/spu.h +++ b/gcc/config/spu/spu.h @@ -54,8 +54,6 @@ extern GTY(()) int spu_tune; #define WORDS_BIG_ENDIAN 1 -#define BITS_PER_UNIT 8 - /* GCC uses word_mode in many places, assuming that it is the fastest integer mode. That is not the case for SPU though. We can't use 32 here because (of some reason I can't remember.) */ diff --git a/gcc/defaults.h b/gcc/defaults.h index 37e8a08..1d12aef 100644 --- a/gcc/defaults.h +++ b/gcc/defaults.h @@ -471,10 +471,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see your target, you should override these values by defining the appropriate symbols in your tm.h file. */ -#ifndef BITS_PER_UNIT -#define BITS_PER_UNIT 8 -#endif - #ifndef BITS_PER_WORD #define BITS_PER_WORD (BITS_PER_UNIT * UNITS_PER_WORD) #endif diff --git a/gcc/doc/rtl.texi b/gcc/doc/rtl.texi index 84c0444..15290f2 100644 --- a/gcc/doc/rtl.texi +++ b/gcc/doc/rtl.texi @@ -1462,14 +1462,25 @@ Returns the number of units contained in a mode, i.e., Returns the narrowest mode in mode class @var{c}. @end table -The following 4 variables are defined on every target. They can be +The following 3 variables are defined on every target. They can be used to allocate buffers that are guaranteed to be large enough to -hold any value that can be represented on the target. +hold any value that can be represented on the target. The first two +can be overridden by defining them in the target's mode.def file, +however, the value must be a constant that can determined very early +in the compilation process. The third symbol cannot be overridden. @table @code +@findex BITS_PER_UNIT +@item BITS_PER_UNIT +The number of bits in an addressable storage unit (byte). If you do +not define this, the default is 8. + @findex MAX_BITSIZE_MODE_ANY_INT @item MAX_BITSIZE_MODE_ANY_INT -The maximum of MAX_BITSIZE_MODE_INT and MAX_BITSIZE_MODE_PARTIAL_INT. +The maximum bitsize of any mode that is used in integer math. This +should be overridden by the target if it uses large integers as +containers for larger vectors but otherwise never uses the contents to +compute integer values. @findex MAX_BITSIZE_MODE_ANY_MODE @item MAX_BITSIZE_MODE_ANY_MODE diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index c4ecd99..8abb3ef 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -879,11 +879,6 @@ You need not define this macro if the ordering is the same as for multi-word integers. @end defmac -@defmac BITS_PER_UNIT -Define this macro to be the number of bits in an addressable storage -unit (byte). If you do not define this macro the default is 8. -@end defmac - @defmac BITS_PER_WORD Number of bits in a word. If you do not define this macro, the default is @code{BITS_PER_UNIT * UNITS_PER_WORD}. diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in index 7e459eb..deedb41 100644 --- a/gcc/doc/tm.texi.in +++ b/gcc/doc/tm.texi.in @@ -853,11 +853,6 @@ You need not define this macro if the ordering is the same as for multi-word integers. @end defmac -@defmac BITS_PER_UNIT -Define this macro to be the number of bits in an addressable storage -unit (byte). If you do not define this macro the default is 8. -@end defmac - @defmac BITS_PER_WORD Number of bits in a word. If you do not define this macro, the default is @code{BITS_PER_UNIT * UNITS_PER_WORD}. diff --git a/gcc/genmodes.c b/gcc/genmodes.c index 3c1ce0e..641623d 100644 --- a/gcc/genmodes.c +++ b/gcc/genmodes.c @@ -711,10 +711,27 @@ make_vector_mode (enum mode_class bclass, #define ADJUST_IBIT(M, X) _ADD_ADJUST (ibit, M, X, ACCUM, UACCUM) #define ADJUST_FBIT(M, X) _ADD_ADJUST (fbit, M, X, FRACT, UACCUM) +static int bits_per_unit; +static int max_bitsize_mode_any_int; + static void create_modes (void) { #include "machmode.def" + + /* So put the default value unless the target needs a non standard + value. */ +#ifdef BITS_PER_UNIT + bits_per_unit = BITS_PER_UNIT; +#else + bits_per_unit = 8; +#endif + +#ifdef MAX_BITSIZE_MODE_ANY_INT + max_bitsize_mode_any_int = MAX_BITSIZE_MODE_ANY_INT; +#else + max_bitsize_mode_any_int = 0; +#endif } /* Processing. */ @@ -860,16 +877,24 @@ emit_max_int (void) int j; puts (""); - for (max = 1, i = modes[MODE_INT]; i; i = i->next) - if (max < i->bytesize) - max = i->bytesize; - mmax = max; - for (max = 1, i = modes[MODE_PARTIAL_INT]; i; i = i->next) - if (max < i->bytesize) - max = i->bytesize; - if (max > mmax) - mmax = max; - printf ("#define MAX_BITSIZE_MODE_ANY_INT %d*BITS_PER_UNIT\n", mmax); + + printf ("#define BITS_PER_UNIT (%d)\n", bits_per_unit); + + if (max_bitsize_mode_any_int == 0) + { + for (max = 1, i = modes[MODE_INT]; i; i = i->next) + if (max < i->bytesize) + max = i->bytesize; + mmax = max; + for (max = 1, i = modes[MODE_PARTIAL_INT]; i; i = i->next) + if (max < i->bytesize) + max = i->bytesize; + if (max > mmax) + mmax = max; + printf ("#define MAX_BITSIZE_MODE_ANY_INT %d*BITS_PER_UNIT\n", mmax); + } + else + printf ("#define MAX_BITSIZE_MODE_ANY_INT %d\n", max_bitsize_mode_any_int); mmax = 0; for (j = 0; j < MAX_MODE_CLASS; j++) diff --git a/gcc/mkconfig.sh b/gcc/mkconfig.sh index 29fdfc7..a5b116d 100644 --- a/gcc/mkconfig.sh +++ b/gcc/mkconfig.sh @@ -97,6 +97,9 @@ case $output in #if defined IN_GCC && !defined GENERATOR_FILE && !defined USED_FOR_TARGET # include "insn-flags.h" #endif +#if defined IN_GCC && !defined GENERATOR_FILE +# include "insn-modes.h" +#endif EOF ;; esac |