aboutsummaryrefslogtreecommitdiff
path: root/tcc.c
diff options
context:
space:
mode:
authorShinichiro Hamaji <shinichiro.hamaji _at_ gmail.com>2008-12-02 01:29:45 +0900
committergrischka <grischka>2008-12-02 02:26:40 +0100
commit1e776b29d3f46db33325d031570d16970ea72c48 (patch)
tree2bcea58f824992ab04a4f4f4f2861d5d0f6bddf3 /tcc.c
parentba8c95a98dec32e6a4a3f67691fecc89c0f7d09d (diff)
downloadtinycc-1e776b29d3f46db33325d031570d16970ea72c48.tar.gz
tinycc-1e776b29d3f46db33325d031570d16970ea72c48.tar.bz2
Suport LDOUBLE_SIZE == 16 environment.
Diffstat (limited to 'tcc.c')
-rw-r--r--tcc.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/tcc.c b/tcc.c
index 13da161..afb1343 100644
--- a/tcc.c
+++ b/tcc.c
@@ -2560,6 +2560,12 @@ static void tok_str_add2(TokenString *s, int t, CValue *cv)
str[len++] = cv->tab[0];
str[len++] = cv->tab[1];
str[len++] = cv->tab[2];
+#elif LDOUBLE_SIZE == 16
+ case TOK_CLDOUBLE:
+ str[len++] = cv->tab[0];
+ str[len++] = cv->tab[1];
+ str[len++] = cv->tab[2];
+ str[len++] = cv->tab[3];
#elif LDOUBLE_SIZE != 8
#error add long double size support
#endif
@@ -2584,7 +2590,13 @@ static void tok_str_add_tok(TokenString *s)
tok_str_add2(s, tok, &tokc);
}
-#if LDOUBLE_SIZE == 12
+#if LDOUBLE_SIZE == 16
+#define LDOUBLE_GET(p, cv) \
+ cv.tab[0] = p[0]; \
+ cv.tab[1] = p[1]; \
+ cv.tab[2] = p[2]; \
+ cv.tab[3] = p[3];
+#elif LDOUBLE_SIZE == 12
#define LDOUBLE_GET(p, cv) \
cv.tab[0] = p[0]; \
cv.tab[1] = p[1]; \
@@ -4967,9 +4979,9 @@ int gv(int rc)
offset = (data_section->data_offset + align - 1) & -align;
data_section->data_offset = offset;
/* XXX: not portable yet */
-#ifdef __i386__
+#if defined(__i386__) || defined(__x86_64__)
/* Zero pad x87 tenbyte long doubles */
- if (size == 12)
+ if (size == LDOUBLE_SIZE)
vtop->c.tab[2] &= 0xffff;
#endif
ptr = section_ptr_add(data_section, size);