diff options
author | Gabriel Dos Reis <gdr@integrable-solutions.net> | 2002-08-27 09:38:05 +0000 |
---|---|---|
committer | Gabriel Dos Reis <gdr@gcc.gnu.org> | 2002-08-27 09:38:05 +0000 |
commit | 35885eab33068a4497dd809704be29ec241baf41 (patch) | |
tree | b643a71ed2bf8c628bac297990e0dd2b52c5eadc /gcc/c-common.c | |
parent | b0c6c224e23387e0e5a21e75098bd68f06c32c2b (diff) | |
download | gcc-35885eab33068a4497dd809704be29ec241baf41.zip gcc-35885eab33068a4497dd809704be29ec241baf41.tar.gz gcc-35885eab33068a4497dd809704be29ec241baf41.tar.bz2 |
c-common.c (cpp_define_data_format): New function.
* c-common.c (cpp_define_data_format): New function.
(cb_register_builtins): Call it.
* doc/cpp.texi (Common Predefined Macros): Document
__TARGET_BITS_ORDER__, __TARGET_BYTES_ORDER__,
__TARGET_INT_WORDS_ORDER__, __TARGET_FLOAT_WORDS_ORDER__,
__TARGET_FLOAT_FORMAT__, __TARGET_USES_VAX_F_FLOAT__,
__TARGET_USES_VAX_D_FLOAT__, __TARGET_USES_VAX_G_FLOAT__,
__TARGET_USES_VAX_H_FLOAT__.
From-SVN: r56597
Diffstat (limited to 'gcc/c-common.c')
-rw-r--r-- | gcc/c-common.c | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/gcc/c-common.c b/gcc/c-common.c index 74224af..9e9e409 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -749,6 +749,7 @@ void builtin_define_std PARAMS ((const char *)); static void builtin_define_with_value PARAMS ((const char *, const char *, int)); static void builtin_define_type_max PARAMS ((const char *, tree, int)); +static void cpp_define_data_format PARAMS ((cpp_reader *)); /* Table of machine-independent attributes common to all C-like languages. */ const struct attribute_spec c_common_attribute_table[] = @@ -4661,6 +4662,96 @@ boolean_increment (code, arg) return val; } +/* Define macros necessary to describe fundamental data type formats. */ +static void +cpp_define_data_format (pfile) + cpp_reader *pfile; +{ + const char *format; + /* Define endianness enumeration values. */ + cpp_define (pfile, "__GCC_LITTLE_ENDIAN__=0"); + cpp_define (pfile, "__GCC_BIG_ENDIAN__=1"); + + /* Define supported floating-point format enumeration values. */ + cpp_define (pfile, "__UNKNOWN_FORMAT__=0"); + cpp_define (pfile, "__IEEE_FORMAT__=1"); + cpp_define (pfile, "__IBM_FORMAT__=2"); + cpp_define (pfile, "__C4X_FORMAT__=3"); + cpp_define (pfile, "__VAX_FORMAT__=4"); + + /* Define target endianness: + - bit order + - byte order + - word order in an integer that spans a multi-word + - word order in a floating-poing that spans a multi-word */ + if (BITS_BIG_ENDIAN) + cpp_define (pfile, "__TARGET_BITS_ORDER__=__GCC_BIG_ENDIAN__"); + else + cpp_define (pfile, "__TARGET_BITS_ORDER__=__GCC_BIG_ENDIAN__"); + if (BYTES_BIG_ENDIAN) + cpp_define (pfile, "__TARGET_BYTES_ORDER__=__GCC_BIG_ENDIAN__"); + else + cpp_define (pfile, "__TARGET_BYTES_ORDER__=__GCC_LITTLE_ENDIAN__"); + /* Define words order in a multi-word integer. */ + if (WORDS_BIG_ENDIAN) + cpp_define (pfile, "__TARGET_INT_WORDS_ORDER__=__GCC_BIG_ENDIAN__"); + else + cpp_define (pfile, "__TARGET_INT_WORDS_ORDER__=__GCC_LITTLE_ENDIAN__"); + /* Define words order in a multi-word floating point. */ + if (FLOAT_WORDS_BIG_ENDIAN) + cpp_define (pfile, "__TARGET_FLOAT_WORDS_ORDER__=__GCC_BIG_ENDIAN__"); + else + cpp_define (pfile, "__TARGET_FLOAT_WORDS_ORDER__=__GCC_LITTLE_ENDIAN__"); + + switch (TARGET_FLOAT_FORMAT) + { + case UNKNOWN_FLOAT_FORMAT: + format = "__UNKNOWN_FORMAT__"; + break; + + case IEEE_FLOAT_FORMAT: + format = "__IEEE_FORMAT__"; + break; + + case VAX_FLOAT_FORMAT: + format = "__VAX_FORMAT__"; + cpp_define (pfile, "__TARGET_USES_VAX_F_FLOAT__=1"); +#ifdef TARGET_G_FLOAT + if (TARGET_G_FLOAT) + { + cpp_define (pfile, "__TARGET_USES_VAX_D_FLOAT__=0"); + cpp_define (pfile, "__TARGET_USES_VAX_G_FLOAT__=1"); + } + else + { + cpp_define (pfile, "__TARGET_USES_VAX_D_FLOAT__=1"); + cpp_define (pfile, "__TARGET_USES_VAX_G_FLOAT__=0"); + } +#endif + cpp_define (pfile, "__TARGET_USES_VAX_H_FLOAT__=1"); + break; + + case IBM_FLOAT_FORMAT: + format = "__IBM_FORMAT__"; + break; + + case C4X_FLOAT_FORMAT: + format = "__C4X_FORMAT__"; + break; + + default: + abort(); + } + if (TARGET_FLOAT_FORMAT != VAX_FLOAT_FORMAT) + { + cpp_define (pfile, "__TARGET_USES_VAX_F_FLOAT__=0"); + cpp_define (pfile, "__TARGET_USES_VAX_D_FLOAT__=0"); + cpp_define (pfile, "__TARGET_USES_VAX_G_FLOAT__=0"); + cpp_define (pfile, "__TARGET_USES_VAX_H_FLOAT__=0"); + } + builtin_define_with_value ("__GCC_FLOAT_FORMAT__", format, 0); +} + /* Hook that registers front end and target-specific built-ins. */ void cb_register_builtins (pfile) @@ -4745,6 +4836,8 @@ cb_register_builtins (pfile) if (!flag_signed_char) cpp_define (pfile, "__CHAR_UNSIGNED__"); + cpp_define_data_format (pfile); + /* Make the choice of ObjC runtime visible to source code. */ if (flag_objc && flag_next_runtime) cpp_define (pfile, "__NEXT_RUNTIME__"); |