summaryrefslogtreecommitdiff
path: root/libstdc++-v3/src/c++11/limits.cc
diff options
context:
space:
mode:
authorDJ Delorie <dj@redhat.com>2014-10-14 15:44:36 -0400
committerDJ Delorie <dj@gcc.gnu.org>2014-10-14 15:44:36 -0400
commit78a7c3172fe2e6cd959abb8bfc69f6b0dc747d49 (patch)
treee12f293c8d0e0b83e0dc6b0b250a64fb5d4bcd50 /libstdc++-v3/src/c++11/limits.cc
parentdf3e34938d9b38a0906a8ebf491f8b73bda5346d (diff)
downloadgcc-78a7c3172fe2e6cd959abb8bfc69f6b0dc747d49.tar.gz
machmode.h (int_n_data_t): New.
* machmode.h (int_n_data_t): New. (int_n_enabled_p): New. (int_n_data): New. * tree.c (int_n_enabled_p): New. (int_n_trees): New. (make_or_reuse_type): Check for all __intN types, not just __int128. (build_common_tree_nodes): Likewise. Also fill in integer_typs[] entries. * tree.h (int128_integer_type_node): Remove. (int128_unsigned_type_node): Remove. (int_n_trees_t): New. (int_n_enabled_p): New. (int_n_trees): New. * toplev.c (standard_type_bitsize): New. (do_compile): Check which __intN types are enabled for the current run. * builtin-types.def (BT_INT128): Remove. (BT_UINT128): Remove. * machmode.def: Add macro to create __int128 for all targets. * stor-layout.c (mode_for_size): Support __intN types. (smallest_mode_for_size): Likewise. (initialize_sizetypes): Support __intN types. * genmodes.c (struct mode_data): Add int_n field. (blank_mode): Likewise. (INT_N): New. (make_int_n): New. (emit_insn_modes_h): Count __intN entries and define NUM_INT_N_ENTS. (emit_mode_int_n): New. (emit_insn_modes_c): Call it. * gimple.c (gimple_signed_or_unsigned_type): Check for all __intN types, not just __int128. * tree-core.h (integer_type_kind): Remove __int128-specific entries, reserve spots for __intN entries. libstdc++-v3/ * src/c++11/limits.cc: Add support for __intN types. * include/std/type_traits: Likewise. * include/std/limits: Likewise. * include/c_std/cstdlib: Likewise. * include/bits/cpp_type_traits.h: Likewise. * include/c_global/cstdlib: Likewise. c-family/ * c-pretty-print.c (pp_c_integer_constant): Check for all __intN types, not just __int128. * c-cppbuiltin.c (c_cpp_builtins): Add builtins for all __intN types, not just __int128. (cpp_atomic_builtins): Round pointer sizes up. (type_suffix): Use type precision, not specific types. * c-common.c (c_common_reswords): Remove __int128 special case. (c_common_type_for_size): Check for all __intN types, not just __int128. (c_common_type_for_mode): Likewise. (c_common_signed_or_unsigned_type): Likewise. (c_build_bitfield_integer_type): Likewise. (c_common_nodes_and_builtins): Likewise. (keyword_begins_type_specifier): Likewise. * c-common.h (rid): Remove RID_INT128 and add RID_INT_N_* for all __intN variants. c/ * c-parser.c (c_parse_init): Add RID entries for each __intN. (c_token_starts_typename): Check all __intN, not just __int128. (c_token_starts_declspecs): Likewise. (c_parser_declspecs): Likewise. (c_parser_attribute_any_word): Likewise. (c_parser_objc_selector): Likewise. * c-tree.h (c_typespec_keyword): cts_int128 -> cts_int_n. (struct c_declspecs): Add int_n_idx field to record *which* __intN is specified. * c-decl.c (declspecs_add_type): Check for all __intN, not just __int128. (finish_declspecs): Likewise. testsuite/ * g++.dg/abi/mangle64.C: New. cp/ * typeck.c (cp_common_type): Check for all __intN types, not just __int128. * decl.c (grokdeclarator): Likewise. * rtti.c (emit_support_tinfos): Check for all __intN types, not just __int128. * parser.c (cp_lexer_next_token_is_decl_specifier_keyword): Check for all __intN types, not just __int128. (cp_parser_simple_type_specifier): Likewise. * mangle.c (integer_type_codes): Remove int128-specific codes. * cp-tree.h (cp_decl_specifier_seq): Add int_n_idx to store which __intN was specified. * lex.c (init_reswords): Reserve all __intN keywords. lto/ * lto-lang.c (lto_build_c_type_nodes): Check intN types for size-type as well. (lto_init): Initialize all intN types, not just int128. From-SVN: r216220
Diffstat (limited to 'libstdc++-v3/src/c++11/limits.cc')
-rw-r--r--libstdc++-v3/src/c++11/limits.cc108
1 files changed, 60 insertions, 48 deletions
diff --git a/libstdc++-v3/src/c++11/limits.cc b/libstdc++-v3/src/c++11/limits.cc
index 73335e7dc2b..5cb2b0edf0f 100644
--- a/libstdc++-v3/src/c++11/limits.cc
+++ b/libstdc++-v3/src/c++11/limits.cc
@@ -388,54 +388,66 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
const bool numeric_limits<unsigned long long>::tinyness_before;
const float_round_style numeric_limits<unsigned long long>::round_style;
-#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128)
- const bool numeric_limits<__int128>::is_specialized;
- const int numeric_limits<__int128>::digits;
- const int numeric_limits<__int128>::digits10;
- const int numeric_limits<__int128>::max_digits10;
- const bool numeric_limits<__int128>::is_signed;
- const bool numeric_limits<__int128>::is_integer;
- const bool numeric_limits<__int128>::is_exact;
- const int numeric_limits<__int128>::radix;
- const int numeric_limits<__int128>::min_exponent;
- const int numeric_limits<__int128>::min_exponent10;
- const int numeric_limits<__int128>::max_exponent;
- const int numeric_limits<__int128>::max_exponent10;
- const bool numeric_limits<__int128>::has_infinity;
- const bool numeric_limits<__int128>::has_quiet_NaN;
- const bool numeric_limits<__int128>::has_signaling_NaN;
- const float_denorm_style numeric_limits<__int128>::has_denorm;
- const bool numeric_limits<__int128>::has_denorm_loss;
- const bool numeric_limits<__int128>::is_iec559;
- const bool numeric_limits<__int128>::is_bounded;
- const bool numeric_limits<__int128>::is_modulo;
- const bool numeric_limits<__int128>::traps;
- const bool numeric_limits<__int128>::tinyness_before;
- const float_round_style numeric_limits<__int128>::round_style;
-
- const bool numeric_limits<unsigned __int128>::is_specialized;
- const int numeric_limits<unsigned __int128>::digits;
- const int numeric_limits<unsigned __int128>::digits10;
- const int numeric_limits<unsigned __int128>::max_digits10;
- const bool numeric_limits<unsigned __int128>::is_signed;
- const bool numeric_limits<unsigned __int128>::is_integer;
- const bool numeric_limits<unsigned __int128>::is_exact;
- const int numeric_limits<unsigned __int128>::radix;
- const int numeric_limits<unsigned __int128>::min_exponent;
- const int numeric_limits<unsigned __int128>::min_exponent10;
- const int numeric_limits<unsigned __int128>::max_exponent;
- const int numeric_limits<unsigned __int128>::max_exponent10;
- const bool numeric_limits<unsigned __int128>::has_infinity;
- const bool numeric_limits<unsigned __int128>::has_quiet_NaN;
- const bool numeric_limits<unsigned __int128>::has_signaling_NaN;
- const float_denorm_style numeric_limits<unsigned __int128>::has_denorm;
- const bool numeric_limits<unsigned __int128>::has_denorm_loss;
- const bool numeric_limits<unsigned __int128>::is_iec559;
- const bool numeric_limits<unsigned __int128>::is_bounded;
- const bool numeric_limits<unsigned __int128>::is_modulo;
- const bool numeric_limits<unsigned __int128>::traps;
- const bool numeric_limits<unsigned __int128>::tinyness_before;
- const float_round_style numeric_limits<unsigned __int128>::round_style;
+#define INT_N(__INT_N_TYPE) \
+ const bool numeric_limits<__INT_N_TYPE>::is_specialized; \
+ const int numeric_limits<__INT_N_TYPE>::digits; \
+ const int numeric_limits<__INT_N_TYPE>::digits10; \
+ const int numeric_limits<__INT_N_TYPE>::max_digits10; \
+ const bool numeric_limits<__INT_N_TYPE>::is_signed; \
+ const bool numeric_limits<__INT_N_TYPE>::is_integer; \
+ const bool numeric_limits<__INT_N_TYPE>::is_exact; \
+ const int numeric_limits<__INT_N_TYPE>::radix; \
+ const int numeric_limits<__INT_N_TYPE>::min_exponent; \
+ const int numeric_limits<__INT_N_TYPE>::min_exponent10; \
+ const int numeric_limits<__INT_N_TYPE>::max_exponent; \
+ const int numeric_limits<__INT_N_TYPE>::max_exponent10; \
+ const bool numeric_limits<__INT_N_TYPE>::has_infinity; \
+ const bool numeric_limits<__INT_N_TYPE>::has_quiet_NaN; \
+ const bool numeric_limits<__INT_N_TYPE>::has_signaling_NaN; \
+ const float_denorm_style numeric_limits<__INT_N_TYPE>::has_denorm; \
+ const bool numeric_limits<__INT_N_TYPE>::has_denorm_loss; \
+ const bool numeric_limits<__INT_N_TYPE>::is_iec559; \
+ const bool numeric_limits<__INT_N_TYPE>::is_bounded; \
+ const bool numeric_limits<__INT_N_TYPE>::is_modulo; \
+ const bool numeric_limits<__INT_N_TYPE>::traps; \
+ const bool numeric_limits<__INT_N_TYPE>::tinyness_before; \
+ const float_round_style numeric_limits<__INT_N_TYPE>::round_style; \
+ \
+ const bool numeric_limits<unsigned __INT_N_TYPE>::is_specialized; \
+ const int numeric_limits<unsigned __INT_N_TYPE>::digits; \
+ const int numeric_limits<unsigned __INT_N_TYPE>::digits10; \
+ const int numeric_limits<unsigned __INT_N_TYPE>::max_digits10; \
+ const bool numeric_limits<unsigned __INT_N_TYPE>::is_signed; \
+ const bool numeric_limits<unsigned __INT_N_TYPE>::is_integer; \
+ const bool numeric_limits<unsigned __INT_N_TYPE>::is_exact; \
+ const int numeric_limits<unsigned __INT_N_TYPE>::radix; \
+ const int numeric_limits<unsigned __INT_N_TYPE>::min_exponent; \
+ const int numeric_limits<unsigned __INT_N_TYPE>::min_exponent10; \
+ const int numeric_limits<unsigned __INT_N_TYPE>::max_exponent; \
+ const int numeric_limits<unsigned __INT_N_TYPE>::max_exponent10; \
+ const bool numeric_limits<unsigned __INT_N_TYPE>::has_infinity; \
+ const bool numeric_limits<unsigned __INT_N_TYPE>::has_quiet_NaN; \
+ const bool numeric_limits<unsigned __INT_N_TYPE>::has_signaling_NaN; \
+ const float_denorm_style numeric_limits<unsigned __INT_N_TYPE>::has_denorm; \
+ const bool numeric_limits<unsigned __INT_N_TYPE>::has_denorm_loss; \
+ const bool numeric_limits<unsigned __INT_N_TYPE>::is_iec559; \
+ const bool numeric_limits<unsigned __INT_N_TYPE>::is_bounded; \
+ const bool numeric_limits<unsigned __INT_N_TYPE>::is_modulo; \
+ const bool numeric_limits<unsigned __INT_N_TYPE>::traps; \
+ const bool numeric_limits<unsigned __INT_N_TYPE>::tinyness_before; \
+ const float_round_style numeric_limits<unsigned __INT_N_TYPE>::round_style;
+
+#ifdef __GLIBCXX_TYPE_INT_N_0
+ INT_N (__GLIBCXX_TYPE_INT_N_0)
+#endif
+#ifdef __GLIBCXX_TYPE_INT_N_1
+ INT_N (__GLIBCXX_TYPE_INT_N_1)
+#endif
+#ifdef __GLIBCXX_TYPE_INT_N_2
+ INT_N (__GLIBCXX_TYPE_INT_N_2)
+#endif
+#ifdef __GLIBCXX_TYPE_INT_N_3
+ INT_N (__GLIBCXX_TYPE_INT_N_3)
#endif
// float