aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgrischka <grischka>2009-07-18 22:07:17 +0200
committergrischka <grischka>2009-07-18 22:07:17 +0200
commit9fda4f4248f24ee3e9feb9204bd1ef035c4859da (patch)
treec422add7403f40e0fbb8725238b4ed85cb3c644e
parent97738d1ae99035695599e5ddec2f0cd5931101d5 (diff)
downloadtinycc-9fda4f4248f24ee3e9feb9204bd1ef035c4859da.tar.gz
tinycc-9fda4f4248f24ee3e9feb9204bd1ef035c4859da.tar.bz2
win32: treat long double as double
-rw-r--r--tccgen.c6
-rw-r--r--tccpp.c10
2 files changed, 16 insertions, 0 deletions
diff --git a/tccgen.c b/tccgen.c
index 0ff7ac3..65db0ac 100644
--- a/tccgen.c
+++ b/tccgen.c
@@ -2527,7 +2527,9 @@ static int parse_btype(CType *type, AttributeDef *ad)
case TOK_LONG:
next();
if ((t & VT_BTYPE) == VT_DOUBLE) {
+#ifndef TCC_TARGET_PE
t = (t & ~VT_BTYPE) | VT_LDOUBLE;
+#endif
} else if ((t & VT_BTYPE) == VT_LONG) {
t = (t & ~VT_BTYPE) | VT_LLONG;
} else {
@@ -2544,7 +2546,11 @@ static int parse_btype(CType *type, AttributeDef *ad)
case TOK_DOUBLE:
next();
if ((t & VT_BTYPE) == VT_LONG) {
+#ifdef TCC_TARGET_PE
+ t = (t & ~VT_BTYPE) | VT_DOUBLE;
+#else
t = (t & ~VT_BTYPE) | VT_LDOUBLE;
+#endif
} else {
u = VT_DOUBLE;
goto basic_type1;
diff --git a/tccpp.c b/tccpp.c
index 505ba52..25b6cbb 100644
--- a/tccpp.c
+++ b/tccpp.c
@@ -1743,9 +1743,14 @@ void parse_number(const char *p)
tokc.f = (float)d;
} else if (t == 'L') {
ch = *p++;
+#ifdef TCC_TARGET_PE
+ tok = TOK_CDOUBLE;
+ tokc.d = d;
+#else
tok = TOK_CLDOUBLE;
/* XXX: not large enough */
tokc.ld = (long double)d;
+#endif
} else {
tok = TOK_CDOUBLE;
tokc.d = d;
@@ -1794,8 +1799,13 @@ void parse_number(const char *p)
tokc.f = strtof(token_buf, NULL);
} else if (t == 'L') {
ch = *p++;
+#ifdef TCC_TARGET_PE
+ tok = TOK_CDOUBLE;
+ tokc.d = strtod(token_buf, NULL);
+#else
tok = TOK_CLDOUBLE;
tokc.ld = strtold(token_buf, NULL);
+#endif
} else {
tok = TOK_CDOUBLE;
tokc.d = strtod(token_buf, NULL);