/* This file contains the definitions and documentation for the
machine modes used in the GNU compiler.
- Copyright (C) 1987, 1992, 1994, 1997, 1998, 2000, 2003
+ Copyright (C) 1987, 1992, 1994, 1997, 1998, 2000, 2003, 2004, 2005
Free Software Foundation, Inc.
This file is part of GCC.
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-02111-1307, USA. */
+Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301, USA. */
/* This file defines all the MACHINE MODES used by GCC.
A CLASS argument must be one of the constants defined in
mode-classes.def, less the leading MODE_ prefix; some statements
- that take CLASS arguments have restructions on which classes are
+ that take CLASS arguments have restrictions on which classes are
acceptable. For instance, INT.
A MODE argument must be the printable name of a machine mode,
without quotation marks or trailing "mode". For instance, SI.
- A BITSIZE, BYTESIZE, or COUNT argument must be a positive integer
+ A PRECISION, BYTESIZE, or COUNT argument must be a positive integer
constant.
A FORMAT argument must be one of the real_mode_format structures
- declared in real.h, or else a literal 0.
+ declared in real.h, or else a literal 0. Do not put a leading &
+ on the argument.
+
+ An EXPR argument must be a syntactically valid C expression.
+ If an EXPR contains commas, you may need to write an extra pair of
+ parentheses around it, so it appears to be a single argument to the
+ statement.
This file defines only those modes which are of use on almost all
machines. Other modes can be defined in the target-specific
declares MODE to be of class INT and BYTESIZE bytes wide.
All of the bits of its representation are significant.
- FRACTIONAL_INT_MODE (MODE, BITSIZE, BYTESIZE);
+ FRACTIONAL_INT_MODE (MODE, PRECISION, BYTESIZE);
declares MODE to be of class INT, BYTESIZE bytes wide in
- storage, but with only BITSIZE significant bits.
+ storage, but with only PRECISION significant bits.
FLOAT_MODE (MODE, BYTESIZE, FORMAT);
declares MODE to be of class FLOAT and BYTESIZE bytes wide,
using floating point format FORMAT.
All of the bits of its representation are significant.
- FRACTIONAL_FLOAT_MODE (MODE, BITSIZE, BYTESIZE, FORMAT);
+ DECIMAL FLOAT_MODE (MODE, BYTESIZE);
+ declares MODE to be of class DECIMAL_FLOAT and BYTESIZE bytes
+ wide. All of the bits of its representation are significant.
+
+ FRACTIONAL_FLOAT_MODE (MODE, PRECISION, BYTESIZE, FORMAT);
declares MODE to be of class FLOAT, BYTESIZE bytes wide in
- storage, but with only BITSIZE significant bits, using
+ storage, but with only PRECISION significant bits, using
floating point format FORMAT.
RESET_FLOAT_FORMAT (MODE, FORMAT);
declares a mode of class PARTIAL_INT with the same size as
MODE (which must be an INT mode). The name of the new mode
is made by prefixing a P to the name MODE. This statement
- may grow a BITSIZE argument in the future.
+ may grow a PRECISION argument in the future.
VECTOR_MODE (CLASS, MODE, COUNT);
Declare a vector mode whose component mode is MODE (of class
error if there is no 'F'. For INT modes, the names are
derived by prefixing a C to the name.
+ ADJUST_BYTESIZE (MODE, EXPR);
+ ADJUST_ALIGNMENT (MODE, EXPR);
+ ADJUST_FLOAT_FORMAT (MODE, EXPR);
+ Arrange for the byte size, alignment, or floating point format
+ of MODE to be adjustable at run time. EXPR will be executed
+ once after processing all command line options, and should
+ evaluate to the desired byte size, alignment, or format.
+
+ Unlike a FORMAT argument, if you are adjusting a float format
+ you must put an & in front of the name of each format structure.
+
Note: If a mode is ever made which is more than 255 bytes wide,
machmode.h and genmodes.c will have to be changed to allocate
more space for the mode_size and mode_alignment arrays. */
COMPLEX_MODES (INT);
COMPLEX_MODES (FLOAT);
-/* Vector modes. */
-VECTOR_MODES (INT, 2); /* V2QI */
-VECTOR_MODES (INT, 4); /* V4QI V2HI */
-VECTOR_MODES (INT, 8); /* V8QI V4HI V2SI */
-VECTOR_MODES (INT, 16); /* V16QI V8HI V4SI V2DI */
-/* VECTOR_MODES (INT, 32); V8SI V4DI */
-/* VECTOR_MODES (INT, 64); V8DI */
-
-VECTOR_MODE (INT, SI, 8)
-VECTOR_MODE (INT, DI, 4);
-VECTOR_MODE (INT, DI, 8);
-
-/* PPC uses this to distinguish between DImode passed in
- float registers and DImode passed in vector registers.
- It would be in rs6000-modes.def but it's referenced in
- c-common.c. FIXME. */
-
-VECTOR_MODE (INT, DI, 1);
-
-VECTOR_MODES (FLOAT, 4); /* V2HF */
-VECTOR_MODES (FLOAT, 8); /* V4HF V2SF */
-VECTOR_MODES (FLOAT, 16); /* V8HF V4SF V2DF */
-/* VECTOR_MODES (FLOAT, 32); V8SF V4DF */
-/* VECTOR_MODES (FLOAT, 64); V16SF V8DF */
-
-VECTOR_MODE (FLOAT, SF, 8);
-VECTOR_MODE (FLOAT, SF, 16);
-VECTOR_MODE (FLOAT, DF, 4);
-VECTOR_MODE (FLOAT, DF, 8);
+/* Decimal floating point modes. */
+DECIMAL_FLOAT_MODE (SD, 4, decimal_single_format);
+DECIMAL_FLOAT_MODE (DD, 8, decimal_double_format);
+DECIMAL_FLOAT_MODE (TD, 16, decimal_quad_format);
/* 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. */