From c77cd3d140cbf8fa02a5383c3d1f6afabe7a33c3 Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Tue, 3 Jul 2007 07:53:58 +0200 Subject: cpplib.h (CPP_N_WIDTH_MD, [...]): Add new constants. libcpp/ChangeLog: * include/cpplib.h (CPP_N_WIDTH_MD, CPP_N_MD_W, CPP_N_MD_Q): Add new constants. * expr.c (interpret_float_suffix): Process 'w', 'W', 'q' and 'Q' suffixes. Return CPP_N_MD_W for 'w' or 'W' suffixes and CPP_N_MD_Q for 'q' or 'Q' suffixes. gcc/ChangeLog: * targhooks.h (default_mode_for_suffix): New function declaration. * targhooks.c (default_mode_for_suffix): New default target hook. * target.h (struct c): New structure in the targetm struct. (mode_for_suffix): New target hook as part of struct c. target-def.h (TARGET_C_MODE_FOR_SUFFIX): Define as default_mode_for_suffix. (TARGET_C): New define. * c-lex.c: Include "target.h". (interpret_float): Use targetm.c.mode_for_suffix to determine the mode for a given non-standard suffix. Makefile.in (c-lex.o): Depend on $(TARGET_H). * config/i386/i386.c (ix86_c_mode_for_suffix): New static function. (TARGET_C_MODE_FOR_SUFFIX): Define to ix86_c_mode_for_suffix. * doc/extend.texi (Floating Types): New node. Document __float80 and __float128 types. Document 'w', 'W', 'q' and 'Q' suffixes. testsuite/ChangeLog: * gcc.dg/const-float80.c : New test. * gcc.dg/const-float128.c : New test. * gcc.dg/const-float80-ped.c : New test. * gcc.dg/const-float128-ped.c : New test. From-SVN: r126244 --- libcpp/ChangeLog | 8 ++++++++ libcpp/expr.c | 20 +++++++++++++++++--- libcpp/include/cpplib.h | 4 ++++ 3 files changed, 29 insertions(+), 3 deletions(-) (limited to 'libcpp') diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index 70a9f60..0c11a0f 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,11 @@ +2007-07-03 Uros Bizjak + + * include/cpplib.h (CPP_N_WIDTH_MD, CPP_N_MD_W, CPP_N_MD_Q): + Add new constants. + * expr.c (interpret_float_suffix): Process 'w', 'W', 'q' and 'Q' + suffixes. Return CPP_N_MD_W for 'w' or 'W' suffixes and CPP_N_MD_Q + for 'q' or 'Q' suffixes. + 2007-06-17 Danny Smith 0) + return 0; + w++; + break; + case 'q': case 'Q': + if (d > 0) + return 0; + q++; + break; case 'i': case 'I': case 'j': case 'J': i++; break; case 'd': case 'D': d++; break; @@ -104,7 +116,7 @@ interpret_float_suffix (const uchar *s, size_t len) return 0; } - if (f + l > 1 || i > 1) + if (f + l + w + q > 1 || i > 1) return 0; /* Allow dd, df, dl suffixes for decimal float constants. */ @@ -113,7 +125,9 @@ interpret_float_suffix (const uchar *s, size_t len) return ((i ? CPP_N_IMAGINARY : 0) | (f ? CPP_N_SMALL : - l ? CPP_N_LARGE : CPP_N_MEDIUM) + l ? CPP_N_LARGE : + w ? CPP_N_MD_W : + q ? CPP_N_MD_Q : CPP_N_MEDIUM) | (d ? CPP_N_DFLOAT : 0)); } diff --git a/libcpp/include/cpplib.h b/libcpp/include/cpplib.h index 0edcf65..ee46c4f 100644 --- a/libcpp/include/cpplib.h +++ b/libcpp/include/cpplib.h @@ -744,6 +744,10 @@ struct cpp_num #define CPP_N_MEDIUM 0x0020 /* long, double. */ #define CPP_N_LARGE 0x0040 /* long long, long double. */ +#define CPP_N_WIDTH_MD 0xF0000 /* machine defined. */ +#define CPP_N_MD_W 0x10000 +#define CPP_N_MD_Q 0x20000 + #define CPP_N_RADIX 0x0F00 #define CPP_N_DECIMAL 0x0100 #define CPP_N_HEX 0x0200 -- cgit v1.1