aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorKenneth Zadeck <zadeck@naturalbridge.com>2013-12-13 16:38:53 +0000
committerKenneth Zadeck <zadeck@gcc.gnu.org>2013-12-13 16:38:53 +0000
commit8fd05f4d87084929be12624d3f21000ef593d2c3 (patch)
tree974155cc0ff2cb4d9b49bd4bd46084ad9e23ce18 /gcc
parent62c6e26e3326d13b47fba3b4375b261a8431d422 (diff)
downloadgcc-8fd05f4d87084929be12624d3f21000ef593d2c3.zip
gcc-8fd05f4d87084929be12624d3f21000ef593d2c3.tar.gz
gcc-8fd05f4d87084929be12624d3f21000ef593d2c3.tar.bz2
arc.h (BITS_PER_UNIT): Removed.
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. From-SVN: r205964
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog21
-rw-r--r--gcc/config/arc/arc.h3
-rw-r--r--gcc/config/bfin/bfin.h3
-rw-r--r--gcc/config/i386/i386-modes.def5
-rw-r--r--gcc/config/lm32/lm32.h1
-rw-r--r--gcc/config/m32c/m32c.h1
-rw-r--r--gcc/config/microblaze/microblaze.h1
-rw-r--r--gcc/config/picochip/picochip.h2
-rw-r--r--gcc/config/spu/spu.h2
-rw-r--r--gcc/defaults.h4
-rw-r--r--gcc/doc/rtl.texi17
-rw-r--r--gcc/doc/tm.texi5
-rw-r--r--gcc/doc/tm.texi.in5
-rw-r--r--gcc/genmodes.c45
-rw-r--r--gcc/mkconfig.sh3
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