OSDN Git Service

2006-10-21 H.J. Lu <hongjiu.lu@intel.com>
[pf3gnuchains/gcc-fork.git] / gcc / machmode.def
index 72b1ec8..ffb675d 100644 (file)
@@ -1,6 +1,6 @@
 /* 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.
@@ -17,8 +17,8 @@ for more details.
 
 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.
@@ -41,17 +41,23 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 
    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
@@ -72,18 +78,22 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
         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);
@@ -95,7 +105,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
         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
@@ -120,6 +130,17 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
        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.  */
@@ -169,35 +190,10 @@ CC_MODE (CC);
 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.  */