diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2007-07-03 07:53:58 +0200 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2007-07-03 07:53:58 +0200 |
commit | c77cd3d140cbf8fa02a5383c3d1f6afabe7a33c3 (patch) | |
tree | e606116f129427fd27bb72ba8a7b9932d86c2880 /libcpp/expr.c | |
parent | 1ed50f7194d46aa97af8072b0da2bcd68f906488 (diff) | |
download | gcc-c77cd3d140cbf8fa02a5383c3d1f6afabe7a33c3.zip gcc-c77cd3d140cbf8fa02a5383c3d1f6afabe7a33c3.tar.gz gcc-c77cd3d140cbf8fa02a5383c3d1f6afabe7a33c3.tar.bz2 |
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
Diffstat (limited to 'libcpp/expr.c')
-rw-r--r-- | libcpp/expr.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/libcpp/expr.c b/libcpp/expr.c index 59de8ef9..f20d50c 100644 --- a/libcpp/expr.c +++ b/libcpp/expr.c @@ -82,7 +82,9 @@ static void check_promotion (cpp_reader *, const struct op *); static unsigned int interpret_float_suffix (const uchar *s, size_t len) { - size_t f = 0, l = 0, i = 0, d = 0; + size_t f, l, w, q, i, d; + + f = l = w = q = i = d = 0; while (len--) switch (s[len]) @@ -97,6 +99,16 @@ interpret_float_suffix (const uchar *s, size_t len) return 0; l++; break; + case 'w': case 'W': + if (d > 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)); } |