diff --git a/tcc.c b/tcc.c index 13da161c..afb1343d 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);