Suport LDOUBLE_SIZE == 16 environment.
This commit is contained in:
parent
ba8c95a98d
commit
1e776b29d3
1 changed files with 15 additions and 3 deletions
18
tcc.c
18
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[0];
|
||||||
str[len++] = cv->tab[1];
|
str[len++] = cv->tab[1];
|
||||||
str[len++] = cv->tab[2];
|
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
|
#elif LDOUBLE_SIZE != 8
|
||||||
#error add long double size support
|
#error add long double size support
|
||||||
#endif
|
#endif
|
||||||
|
@ -2584,7 +2590,13 @@ static void tok_str_add_tok(TokenString *s)
|
||||||
tok_str_add2(s, tok, &tokc);
|
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) \
|
#define LDOUBLE_GET(p, cv) \
|
||||||
cv.tab[0] = p[0]; \
|
cv.tab[0] = p[0]; \
|
||||||
cv.tab[1] = p[1]; \
|
cv.tab[1] = p[1]; \
|
||||||
|
@ -4967,9 +4979,9 @@ int gv(int rc)
|
||||||
offset = (data_section->data_offset + align - 1) & -align;
|
offset = (data_section->data_offset + align - 1) & -align;
|
||||||
data_section->data_offset = offset;
|
data_section->data_offset = offset;
|
||||||
/* XXX: not portable yet */
|
/* XXX: not portable yet */
|
||||||
#ifdef __i386__
|
#if defined(__i386__) || defined(__x86_64__)
|
||||||
/* Zero pad x87 tenbyte long doubles */
|
/* Zero pad x87 tenbyte long doubles */
|
||||||
if (size == 12)
|
if (size == LDOUBLE_SIZE)
|
||||||
vtop->c.tab[2] &= 0xffff;
|
vtop->c.tab[2] &= 0xffff;
|
||||||
#endif
|
#endif
|
||||||
ptr = section_ptr_add(data_section, size);
|
ptr = section_ptr_add(data_section, size);
|
||||||
|
|
Loading…
Reference in a new issue