From 9fda4f4248f24ee3e9feb9204bd1ef035c4859da Mon Sep 17 00:00:00 2001
From: grischka <grischka>
Date: Sat, 18 Jul 2009 22:07:17 +0200
Subject: [PATCH] win32: treat long double as double

---
 tccgen.c |  6 ++++++
 tccpp.c  | 10 ++++++++++
 2 files changed, 16 insertions(+)

diff --git a/tccgen.c b/tccgen.c
index 0ff7ac3f..65db0ac8 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 505ba524..25b6cbbf 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);