| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
| <html> |
| <!-- Copyright (C) 1988-2015 Free Software Foundation, Inc. |
| |
| Permission is granted to copy, distribute and/or modify this document |
| under the terms of the GNU Free Documentation License, Version 1.3 or |
| any later version published by the Free Software Foundation; with the |
| Invariant Sections being "Funding Free Software", the Front-Cover |
| Texts being (a) (see below), and with the Back-Cover Texts being (b) |
| (see below). A copy of the license is included in the section entitled |
| "GNU Free Documentation License". |
| |
| (a) The FSF's Front-Cover Text is: |
| |
| A GNU Manual |
| |
| (b) The FSF's Back-Cover Text is: |
| |
| You have freedom to copy and modify this GNU Manual, like GNU |
| software. Copies published by the Free Software Foundation raise |
| funds for GNU development. --> |
| <!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ --> |
| <head> |
| <title>GNU Compiler Collection (GCC) Internals: Type Layout</title> |
| |
| <meta name="description" content="GNU Compiler Collection (GCC) Internals: Type Layout"> |
| <meta name="keywords" content="GNU Compiler Collection (GCC) Internals: Type Layout"> |
| <meta name="resource-type" content="document"> |
| <meta name="distribution" content="global"> |
| <meta name="Generator" content="makeinfo"> |
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
| <link href="index.html#Top" rel="start" title="Top"> |
| <link href="Option-Index.html#Option-Index" rel="index" title="Option Index"> |
| <link href="index.html#SEC_Contents" rel="contents" title="Table of Contents"> |
| <link href="Target-Macros.html#Target-Macros" rel="up" title="Target Macros"> |
| <link href="Registers.html#Registers" rel="next" title="Registers"> |
| <link href="Storage-Layout.html#Storage-Layout" rel="prev" title="Storage Layout"> |
| <style type="text/css"> |
| <!-- |
| a.summary-letter {text-decoration: none} |
| blockquote.smallquotation {font-size: smaller} |
| div.display {margin-left: 3.2em} |
| div.example {margin-left: 3.2em} |
| div.indentedblock {margin-left: 3.2em} |
| div.lisp {margin-left: 3.2em} |
| div.smalldisplay {margin-left: 3.2em} |
| div.smallexample {margin-left: 3.2em} |
| div.smallindentedblock {margin-left: 3.2em; font-size: smaller} |
| div.smalllisp {margin-left: 3.2em} |
| kbd {font-style:oblique} |
| pre.display {font-family: inherit} |
| pre.format {font-family: inherit} |
| pre.menu-comment {font-family: serif} |
| pre.menu-preformatted {font-family: serif} |
| pre.smalldisplay {font-family: inherit; font-size: smaller} |
| pre.smallexample {font-size: smaller} |
| pre.smallformat {font-family: inherit; font-size: smaller} |
| pre.smalllisp {font-size: smaller} |
| span.nocodebreak {white-space:nowrap} |
| span.nolinebreak {white-space:nowrap} |
| span.roman {font-family:serif; font-weight:normal} |
| span.sansserif {font-family:sans-serif; font-weight:normal} |
| ul.no-bullet {list-style: none} |
| --> |
| </style> |
| |
| |
| </head> |
| |
| <body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000"> |
| <a name="Type-Layout"></a> |
| <div class="header"> |
| <p> |
| Next: <a href="Registers.html#Registers" accesskey="n" rel="next">Registers</a>, Previous: <a href="Storage-Layout.html#Storage-Layout" accesskey="p" rel="prev">Storage Layout</a>, Up: <a href="Target-Macros.html#Target-Macros" accesskey="u" rel="up">Target Macros</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p> |
| </div> |
| <hr> |
| <a name="Layout-of-Source-Language-Data-Types"></a> |
| <h3 class="section">17.6 Layout of Source Language Data Types</h3> |
| |
| <p>These macros define the sizes and other characteristics of the standard |
| basic data types used in programs being compiled. Unlike the macros in |
| the previous section, these apply to specific features of C and related |
| languages, rather than to fundamental aspects of storage layout. |
| </p> |
| <dl> |
| <dt><a name="index-INT_005fTYPE_005fSIZE"></a>Macro: <strong>INT_TYPE_SIZE</strong></dt> |
| <dd><p>A C expression for the size in bits of the type <code>int</code> on the |
| target machine. If you don’t define this, the default is one word. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-SHORT_005fTYPE_005fSIZE"></a>Macro: <strong>SHORT_TYPE_SIZE</strong></dt> |
| <dd><p>A C expression for the size in bits of the type <code>short</code> on the |
| target machine. If you don’t define this, the default is half a word. |
| (If this would be less than one storage unit, it is rounded up to one |
| unit.) |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-LONG_005fTYPE_005fSIZE"></a>Macro: <strong>LONG_TYPE_SIZE</strong></dt> |
| <dd><p>A C expression for the size in bits of the type <code>long</code> on the |
| target machine. If you don’t define this, the default is one word. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-ADA_005fLONG_005fTYPE_005fSIZE"></a>Macro: <strong>ADA_LONG_TYPE_SIZE</strong></dt> |
| <dd><p>On some machines, the size used for the Ada equivalent of the type |
| <code>long</code> by a native Ada compiler differs from that used by C. In |
| that situation, define this macro to be a C expression to be used for |
| the size of that type. If you don’t define this, the default is the |
| value of <code>LONG_TYPE_SIZE</code>. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-LONG_005fLONG_005fTYPE_005fSIZE"></a>Macro: <strong>LONG_LONG_TYPE_SIZE</strong></dt> |
| <dd><p>A C expression for the size in bits of the type <code>long long</code> on the |
| target machine. If you don’t define this, the default is two |
| words. If you want to support GNU Ada on your machine, the value of this |
| macro must be at least 64. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-CHAR_005fTYPE_005fSIZE"></a>Macro: <strong>CHAR_TYPE_SIZE</strong></dt> |
| <dd><p>A C expression for the size in bits of the type <code>char</code> on the |
| target machine. If you don’t define this, the default is |
| <code>BITS_PER_UNIT</code>. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-BOOL_005fTYPE_005fSIZE"></a>Macro: <strong>BOOL_TYPE_SIZE</strong></dt> |
| <dd><p>A C expression for the size in bits of the C++ type <code>bool</code> and |
| C99 type <code>_Bool</code> on the target machine. If you don’t define |
| this, and you probably shouldn’t, the default is <code>CHAR_TYPE_SIZE</code>. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-FLOAT_005fTYPE_005fSIZE"></a>Macro: <strong>FLOAT_TYPE_SIZE</strong></dt> |
| <dd><p>A C expression for the size in bits of the type <code>float</code> on the |
| target machine. If you don’t define this, the default is one word. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-DOUBLE_005fTYPE_005fSIZE"></a>Macro: <strong>DOUBLE_TYPE_SIZE</strong></dt> |
| <dd><p>A C expression for the size in bits of the type <code>double</code> on the |
| target machine. If you don’t define this, the default is two |
| words. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-LONG_005fDOUBLE_005fTYPE_005fSIZE"></a>Macro: <strong>LONG_DOUBLE_TYPE_SIZE</strong></dt> |
| <dd><p>A C expression for the size in bits of the type <code>long double</code> on |
| the target machine. If you don’t define this, the default is two |
| words. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-SHORT_005fFRACT_005fTYPE_005fSIZE"></a>Macro: <strong>SHORT_FRACT_TYPE_SIZE</strong></dt> |
| <dd><p>A C expression for the size in bits of the type <code>short _Fract</code> on |
| the target machine. If you don’t define this, the default is |
| <code>BITS_PER_UNIT</code>. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-FRACT_005fTYPE_005fSIZE"></a>Macro: <strong>FRACT_TYPE_SIZE</strong></dt> |
| <dd><p>A C expression for the size in bits of the type <code>_Fract</code> on |
| the target machine. If you don’t define this, the default is |
| <code>BITS_PER_UNIT * 2</code>. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-LONG_005fFRACT_005fTYPE_005fSIZE"></a>Macro: <strong>LONG_FRACT_TYPE_SIZE</strong></dt> |
| <dd><p>A C expression for the size in bits of the type <code>long _Fract</code> on |
| the target machine. If you don’t define this, the default is |
| <code>BITS_PER_UNIT * 4</code>. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-LONG_005fLONG_005fFRACT_005fTYPE_005fSIZE"></a>Macro: <strong>LONG_LONG_FRACT_TYPE_SIZE</strong></dt> |
| <dd><p>A C expression for the size in bits of the type <code>long long _Fract</code> on |
| the target machine. If you don’t define this, the default is |
| <code>BITS_PER_UNIT * 8</code>. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-SHORT_005fACCUM_005fTYPE_005fSIZE"></a>Macro: <strong>SHORT_ACCUM_TYPE_SIZE</strong></dt> |
| <dd><p>A C expression for the size in bits of the type <code>short _Accum</code> on |
| the target machine. If you don’t define this, the default is |
| <code>BITS_PER_UNIT * 2</code>. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-ACCUM_005fTYPE_005fSIZE"></a>Macro: <strong>ACCUM_TYPE_SIZE</strong></dt> |
| <dd><p>A C expression for the size in bits of the type <code>_Accum</code> on |
| the target machine. If you don’t define this, the default is |
| <code>BITS_PER_UNIT * 4</code>. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-LONG_005fACCUM_005fTYPE_005fSIZE"></a>Macro: <strong>LONG_ACCUM_TYPE_SIZE</strong></dt> |
| <dd><p>A C expression for the size in bits of the type <code>long _Accum</code> on |
| the target machine. If you don’t define this, the default is |
| <code>BITS_PER_UNIT * 8</code>. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-LONG_005fLONG_005fACCUM_005fTYPE_005fSIZE"></a>Macro: <strong>LONG_LONG_ACCUM_TYPE_SIZE</strong></dt> |
| <dd><p>A C expression for the size in bits of the type <code>long long _Accum</code> on |
| the target machine. If you don’t define this, the default is |
| <code>BITS_PER_UNIT * 16</code>. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-LIBGCC2_005fLONG_005fDOUBLE_005fTYPE_005fSIZE"></a>Macro: <strong>LIBGCC2_LONG_DOUBLE_TYPE_SIZE</strong></dt> |
| <dd><p>Define this macro if <code>LONG_DOUBLE_TYPE_SIZE</code> is not constant or |
| if you want routines in <samp>libgcc2.a</samp> for a size other than |
| <code>LONG_DOUBLE_TYPE_SIZE</code>. If you don’t define this, the |
| default is <code>LONG_DOUBLE_TYPE_SIZE</code>. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-LIBGCC2_005fHAS_005fDF_005fMODE"></a>Macro: <strong>LIBGCC2_HAS_DF_MODE</strong></dt> |
| <dd><p>Define this macro if neither <code>DOUBLE_TYPE_SIZE</code> nor |
| <code>LIBGCC2_LONG_DOUBLE_TYPE_SIZE</code> is |
| <code>DFmode</code> but you want <code>DFmode</code> routines in <samp>libgcc2.a</samp> |
| anyway. If you don’t define this and either <code>DOUBLE_TYPE_SIZE</code> |
| or <code>LIBGCC2_LONG_DOUBLE_TYPE_SIZE</code> is 64 then the default is 1, |
| otherwise it is 0. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-LIBGCC2_005fHAS_005fXF_005fMODE"></a>Macro: <strong>LIBGCC2_HAS_XF_MODE</strong></dt> |
| <dd><p>Define this macro if <code>LIBGCC2_LONG_DOUBLE_TYPE_SIZE</code> is not |
| <code>XFmode</code> but you want <code>XFmode</code> routines in <samp>libgcc2.a</samp> |
| anyway. If you don’t define this and <code>LIBGCC2_LONG_DOUBLE_TYPE_SIZE</code> |
| is 80 then the default is 1, otherwise it is 0. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-LIBGCC2_005fHAS_005fTF_005fMODE"></a>Macro: <strong>LIBGCC2_HAS_TF_MODE</strong></dt> |
| <dd><p>Define this macro if <code>LIBGCC2_LONG_DOUBLE_TYPE_SIZE</code> is not |
| <code>TFmode</code> but you want <code>TFmode</code> routines in <samp>libgcc2.a</samp> |
| anyway. If you don’t define this and <code>LIBGCC2_LONG_DOUBLE_TYPE_SIZE</code> |
| is 128 then the default is 1, otherwise it is 0. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-LIBGCC2_005fGNU_005fPREFIX"></a>Macro: <strong>LIBGCC2_GNU_PREFIX</strong></dt> |
| <dd><p>This macro corresponds to the <code>TARGET_LIBFUNC_GNU_PREFIX</code> target |
| hook and should be defined if that hook is overriden to be true. It |
| causes function names in libgcc to be changed to use a <code>__gnu_</code> |
| prefix for their name rather than the default <code>__</code>. A port which |
| uses this macro should also arrange to use <samp>t-gnu-prefix</samp> in |
| the libgcc <samp>config.host</samp>. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-SF_005fSIZE"></a>Macro: <strong>SF_SIZE</strong></dt> |
| <dt><a name="index-DF_005fSIZE"></a>Macro: <strong>DF_SIZE</strong></dt> |
| <dt><a name="index-XF_005fSIZE"></a>Macro: <strong>XF_SIZE</strong></dt> |
| <dt><a name="index-TF_005fSIZE"></a>Macro: <strong>TF_SIZE</strong></dt> |
| <dd><p>Define these macros to be the size in bits of the mantissa of |
| <code>SFmode</code>, <code>DFmode</code>, <code>XFmode</code> and <code>TFmode</code> values, |
| if the defaults in <samp>libgcc2.h</samp> are inappropriate. By default, |
| <code>FLT_MANT_DIG</code> is used for <code>SF_SIZE</code>, <code>LDBL_MANT_DIG</code> |
| for <code>XF_SIZE</code> and <code>TF_SIZE</code>, and <code>DBL_MANT_DIG</code> or |
| <code>LDBL_MANT_DIG</code> for <code>DF_SIZE</code> according to whether |
| <code>DOUBLE_TYPE_SIZE</code> or |
| <code>LIBGCC2_LONG_DOUBLE_TYPE_SIZE</code> is 64. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-TARGET_005fFLT_005fEVAL_005fMETHOD"></a>Macro: <strong>TARGET_FLT_EVAL_METHOD</strong></dt> |
| <dd><p>A C expression for the value for <code>FLT_EVAL_METHOD</code> in <samp>float.h</samp>, |
| assuming, if applicable, that the floating-point control word is in its |
| default state. If you do not define this macro the value of |
| <code>FLT_EVAL_METHOD</code> will be zero. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-WIDEST_005fHARDWARE_005fFP_005fSIZE"></a>Macro: <strong>WIDEST_HARDWARE_FP_SIZE</strong></dt> |
| <dd><p>A C expression for the size in bits of the widest floating-point format |
| supported by the hardware. If you define this macro, you must specify a |
| value less than or equal to the value of <code>LONG_DOUBLE_TYPE_SIZE</code>. |
| If you do not define this macro, the value of <code>LONG_DOUBLE_TYPE_SIZE</code> |
| is the default. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-DEFAULT_005fSIGNED_005fCHAR"></a>Macro: <strong>DEFAULT_SIGNED_CHAR</strong></dt> |
| <dd><p>An expression whose value is 1 or 0, according to whether the type |
| <code>char</code> should be signed or unsigned by default. The user can |
| always override this default with the options <samp>-fsigned-char</samp> |
| and <samp>-funsigned-char</samp>. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-TARGET_005fDEFAULT_005fSHORT_005fENUMS"></a>Target Hook: <em>bool</em> <strong>TARGET_DEFAULT_SHORT_ENUMS</strong> <em>(void)</em></dt> |
| <dd><p>This target hook should return true if the compiler should give an |
| <code>enum</code> type only as many bytes as it takes to represent the range |
| of possible values of that type. It should return false if all |
| <code>enum</code> types should be allocated like <code>int</code>. |
| </p> |
| <p>The default is to return false. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-SIZE_005fTYPE"></a>Macro: <strong>SIZE_TYPE</strong></dt> |
| <dd><p>A C expression for a string describing the name of the data type to use |
| for size values. The typedef name <code>size_t</code> is defined using the |
| contents of the string. |
| </p> |
| <p>The string can contain more than one keyword. If so, separate them with |
| spaces, and write first any length keyword, then <code>unsigned</code> if |
| appropriate, and finally <code>int</code>. The string must exactly match one |
| of the data type names defined in the function |
| <code>c_common_nodes_and_builtins</code> in the file <samp>c-family/c-common.c</samp>. |
| You may not omit <code>int</code> or change the order—that would cause the |
| compiler to crash on startup. |
| </p> |
| <p>If you don’t define this macro, the default is <code>"long unsigned |
| int"</code>. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-SIZETYPE"></a>Macro: <strong>SIZETYPE</strong></dt> |
| <dd><p>GCC defines internal types (<code>sizetype</code>, <code>ssizetype</code>, |
| <code>bitsizetype</code> and <code>sbitsizetype</code>) for expressions |
| dealing with size. This macro is a C expression for a string describing |
| the name of the data type from which the precision of <code>sizetype</code> |
| is extracted. |
| </p> |
| <p>The string has the same restrictions as <code>SIZE_TYPE</code> string. |
| </p> |
| <p>If you don’t define this macro, the default is <code>SIZE_TYPE</code>. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-PTRDIFF_005fTYPE"></a>Macro: <strong>PTRDIFF_TYPE</strong></dt> |
| <dd><p>A C expression for a string describing the name of the data type to use |
| for the result of subtracting two pointers. The typedef name |
| <code>ptrdiff_t</code> is defined using the contents of the string. See |
| <code>SIZE_TYPE</code> above for more information. |
| </p> |
| <p>If you don’t define this macro, the default is <code>"long int"</code>. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-WCHAR_005fTYPE"></a>Macro: <strong>WCHAR_TYPE</strong></dt> |
| <dd><p>A C expression for a string describing the name of the data type to use |
| for wide characters. The typedef name <code>wchar_t</code> is defined using |
| the contents of the string. See <code>SIZE_TYPE</code> above for more |
| information. |
| </p> |
| <p>If you don’t define this macro, the default is <code>"int"</code>. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-WCHAR_005fTYPE_005fSIZE"></a>Macro: <strong>WCHAR_TYPE_SIZE</strong></dt> |
| <dd><p>A C expression for the size in bits of the data type for wide |
| characters. This is used in <code>cpp</code>, which cannot make use of |
| <code>WCHAR_TYPE</code>. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-WINT_005fTYPE"></a>Macro: <strong>WINT_TYPE</strong></dt> |
| <dd><p>A C expression for a string describing the name of the data type to |
| use for wide characters passed to <code>printf</code> and returned from |
| <code>getwc</code>. The typedef name <code>wint_t</code> is defined using the |
| contents of the string. See <code>SIZE_TYPE</code> above for more |
| information. |
| </p> |
| <p>If you don’t define this macro, the default is <code>"unsigned int"</code>. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-INTMAX_005fTYPE"></a>Macro: <strong>INTMAX_TYPE</strong></dt> |
| <dd><p>A C expression for a string describing the name of the data type that |
| can represent any value of any standard or extended signed integer type. |
| The typedef name <code>intmax_t</code> is defined using the contents of the |
| string. See <code>SIZE_TYPE</code> above for more information. |
| </p> |
| <p>If you don’t define this macro, the default is the first of |
| <code>"int"</code>, <code>"long int"</code>, or <code>"long long int"</code> that has as |
| much precision as <code>long long int</code>. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-UINTMAX_005fTYPE"></a>Macro: <strong>UINTMAX_TYPE</strong></dt> |
| <dd><p>A C expression for a string describing the name of the data type that |
| can represent any value of any standard or extended unsigned integer |
| type. The typedef name <code>uintmax_t</code> is defined using the contents |
| of the string. See <code>SIZE_TYPE</code> above for more information. |
| </p> |
| <p>If you don’t define this macro, the default is the first of |
| <code>"unsigned int"</code>, <code>"long unsigned int"</code>, or <code>"long long |
| unsigned int"</code> that has as much precision as <code>long long unsigned |
| int</code>. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-SIG_005fATOMIC_005fTYPE"></a>Macro: <strong>SIG_ATOMIC_TYPE</strong></dt> |
| <dt><a name="index-INT8_005fTYPE"></a>Macro: <strong>INT8_TYPE</strong></dt> |
| <dt><a name="index-INT16_005fTYPE"></a>Macro: <strong>INT16_TYPE</strong></dt> |
| <dt><a name="index-INT32_005fTYPE"></a>Macro: <strong>INT32_TYPE</strong></dt> |
| <dt><a name="index-INT64_005fTYPE"></a>Macro: <strong>INT64_TYPE</strong></dt> |
| <dt><a name="index-UINT8_005fTYPE"></a>Macro: <strong>UINT8_TYPE</strong></dt> |
| <dt><a name="index-UINT16_005fTYPE"></a>Macro: <strong>UINT16_TYPE</strong></dt> |
| <dt><a name="index-UINT32_005fTYPE"></a>Macro: <strong>UINT32_TYPE</strong></dt> |
| <dt><a name="index-UINT64_005fTYPE"></a>Macro: <strong>UINT64_TYPE</strong></dt> |
| <dt><a name="index-INT_005fLEAST8_005fTYPE"></a>Macro: <strong>INT_LEAST8_TYPE</strong></dt> |
| <dt><a name="index-INT_005fLEAST16_005fTYPE"></a>Macro: <strong>INT_LEAST16_TYPE</strong></dt> |
| <dt><a name="index-INT_005fLEAST32_005fTYPE"></a>Macro: <strong>INT_LEAST32_TYPE</strong></dt> |
| <dt><a name="index-INT_005fLEAST64_005fTYPE"></a>Macro: <strong>INT_LEAST64_TYPE</strong></dt> |
| <dt><a name="index-UINT_005fLEAST8_005fTYPE"></a>Macro: <strong>UINT_LEAST8_TYPE</strong></dt> |
| <dt><a name="index-UINT_005fLEAST16_005fTYPE"></a>Macro: <strong>UINT_LEAST16_TYPE</strong></dt> |
| <dt><a name="index-UINT_005fLEAST32_005fTYPE"></a>Macro: <strong>UINT_LEAST32_TYPE</strong></dt> |
| <dt><a name="index-UINT_005fLEAST64_005fTYPE"></a>Macro: <strong>UINT_LEAST64_TYPE</strong></dt> |
| <dt><a name="index-INT_005fFAST8_005fTYPE"></a>Macro: <strong>INT_FAST8_TYPE</strong></dt> |
| <dt><a name="index-INT_005fFAST16_005fTYPE"></a>Macro: <strong>INT_FAST16_TYPE</strong></dt> |
| <dt><a name="index-INT_005fFAST32_005fTYPE"></a>Macro: <strong>INT_FAST32_TYPE</strong></dt> |
| <dt><a name="index-INT_005fFAST64_005fTYPE"></a>Macro: <strong>INT_FAST64_TYPE</strong></dt> |
| <dt><a name="index-UINT_005fFAST8_005fTYPE"></a>Macro: <strong>UINT_FAST8_TYPE</strong></dt> |
| <dt><a name="index-UINT_005fFAST16_005fTYPE"></a>Macro: <strong>UINT_FAST16_TYPE</strong></dt> |
| <dt><a name="index-UINT_005fFAST32_005fTYPE"></a>Macro: <strong>UINT_FAST32_TYPE</strong></dt> |
| <dt><a name="index-UINT_005fFAST64_005fTYPE"></a>Macro: <strong>UINT_FAST64_TYPE</strong></dt> |
| <dt><a name="index-INTPTR_005fTYPE"></a>Macro: <strong>INTPTR_TYPE</strong></dt> |
| <dt><a name="index-UINTPTR_005fTYPE"></a>Macro: <strong>UINTPTR_TYPE</strong></dt> |
| <dd><p>C expressions for the standard types <code>sig_atomic_t</code>, |
| <code>int8_t</code>, <code>int16_t</code>, <code>int32_t</code>, <code>int64_t</code>, |
| <code>uint8_t</code>, <code>uint16_t</code>, <code>uint32_t</code>, <code>uint64_t</code>, |
| <code>int_least8_t</code>, <code>int_least16_t</code>, <code>int_least32_t</code>, |
| <code>int_least64_t</code>, <code>uint_least8_t</code>, <code>uint_least16_t</code>, |
| <code>uint_least32_t</code>, <code>uint_least64_t</code>, <code>int_fast8_t</code>, |
| <code>int_fast16_t</code>, <code>int_fast32_t</code>, <code>int_fast64_t</code>, |
| <code>uint_fast8_t</code>, <code>uint_fast16_t</code>, <code>uint_fast32_t</code>, |
| <code>uint_fast64_t</code>, <code>intptr_t</code>, and <code>uintptr_t</code>. See |
| <code>SIZE_TYPE</code> above for more information. |
| </p> |
| <p>If any of these macros evaluates to a null pointer, the corresponding |
| type is not supported; if GCC is configured to provide |
| <code><stdint.h></code> in such a case, the header provided may not conform |
| to C99, depending on the type in question. The defaults for all of |
| these macros are null pointers. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-TARGET_005fPTRMEMFUNC_005fVBIT_005fLOCATION"></a>Macro: <strong>TARGET_PTRMEMFUNC_VBIT_LOCATION</strong></dt> |
| <dd><p>The C++ compiler represents a pointer-to-member-function with a struct |
| that looks like: |
| </p> |
| <div class="smallexample"> |
| <pre class="smallexample"> struct { |
| union { |
| void (*fn)(); |
| ptrdiff_t vtable_index; |
| }; |
| ptrdiff_t delta; |
| }; |
| </pre></div> |
| |
| <p>The C++ compiler must use one bit to indicate whether the function that |
| will be called through a pointer-to-member-function is virtual. |
| Normally, we assume that the low-order bit of a function pointer must |
| always be zero. Then, by ensuring that the vtable_index is odd, we can |
| distinguish which variant of the union is in use. But, on some |
| platforms function pointers can be odd, and so this doesn’t work. In |
| that case, we use the low-order bit of the <code>delta</code> field, and shift |
| the remainder of the <code>delta</code> field to the left. |
| </p> |
| <p>GCC will automatically make the right selection about where to store |
| this bit using the <code>FUNCTION_BOUNDARY</code> setting for your platform. |
| However, some platforms such as ARM/Thumb have <code>FUNCTION_BOUNDARY</code> |
| set such that functions always start at even addresses, but the lowest |
| bit of pointers to functions indicate whether the function at that |
| address is in ARM or Thumb mode. If this is the case of your |
| architecture, you should define this macro to |
| <code>ptrmemfunc_vbit_in_delta</code>. |
| </p> |
| <p>In general, you should not have to define this macro. On architectures |
| in which function addresses are always even, according to |
| <code>FUNCTION_BOUNDARY</code>, GCC will automatically define this macro to |
| <code>ptrmemfunc_vbit_in_pfn</code>. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-TARGET_005fVTABLE_005fUSES_005fDESCRIPTORS"></a>Macro: <strong>TARGET_VTABLE_USES_DESCRIPTORS</strong></dt> |
| <dd><p>Normally, the C++ compiler uses function pointers in vtables. This |
| macro allows the target to change to use “function descriptors” |
| instead. Function descriptors are found on targets for whom a |
| function pointer is actually a small data structure. Normally the |
| data structure consists of the actual code address plus a data |
| pointer to which the function’s data is relative. |
| </p> |
| <p>If vtables are used, the value of this macro should be the number |
| of words that the function descriptor occupies. |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-TARGET_005fVTABLE_005fENTRY_005fALIGN"></a>Macro: <strong>TARGET_VTABLE_ENTRY_ALIGN</strong></dt> |
| <dd><p>By default, the vtable entries are void pointers, the so the alignment |
| is the same as pointer alignment. The value of this macro specifies |
| the alignment of the vtable entry in bits. It should be defined only |
| when special alignment is necessary. */ |
| </p></dd></dl> |
| |
| <dl> |
| <dt><a name="index-TARGET_005fVTABLE_005fDATA_005fENTRY_005fDISTANCE"></a>Macro: <strong>TARGET_VTABLE_DATA_ENTRY_DISTANCE</strong></dt> |
| <dd><p>There are a few non-descriptor entries in the vtable at offsets below |
| zero. If these entries must be padded (say, to preserve the alignment |
| specified by <code>TARGET_VTABLE_ENTRY_ALIGN</code>), set this to the number |
| of words in each data entry. |
| </p></dd></dl> |
| |
| <hr> |
| <div class="header"> |
| <p> |
| Next: <a href="Registers.html#Registers" accesskey="n" rel="next">Registers</a>, Previous: <a href="Storage-Layout.html#Storage-Layout" accesskey="p" rel="prev">Storage Layout</a>, Up: <a href="Target-Macros.html#Target-Macros" accesskey="u" rel="up">Target Macros</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p> |
| </div> |
| |
| |
| |
| </body> |
| </html> |