forked from Mirrors/tinycc
Delete a = (a > = 0)? A: -a; \
parent
0199123dd7
commit
3d608d4b54
|
@ -533,21 +533,22 @@ unsigned long long __fixunssfdi (float a1)
|
||||||
register union float_long fl1;
|
register union float_long fl1;
|
||||||
register int exp;
|
register int exp;
|
||||||
register unsigned long l;
|
register unsigned long l;
|
||||||
|
int s;
|
||||||
fl1.f = a1;
|
fl1.f = a1;
|
||||||
|
|
||||||
if (fl1.l == 0)
|
if (fl1.l == 0)
|
||||||
return (0);
|
return 0;
|
||||||
|
|
||||||
exp = EXP (fl1.l) - EXCESS - 24;
|
exp = EXP (fl1.l) - EXCESS - 24;
|
||||||
|
|
||||||
l = MANT(fl1.l);
|
l = MANT(fl1.l);
|
||||||
if (exp >= 41)
|
s = SIGN(fl1.l)? -1: 1;
|
||||||
return (unsigned long long)-1;
|
if (exp >= 64)
|
||||||
|
return (unsigned long long)-1;
|
||||||
else if (exp >= 0)
|
else if (exp >= 0)
|
||||||
return (unsigned long long)l << exp;
|
return ((unsigned long long)l << exp)*s;
|
||||||
else if (exp >= -23)
|
else if (exp >= -23)
|
||||||
return l >> -exp;
|
return (l >> -exp)*s;
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -557,22 +558,22 @@ unsigned long long __fixunsdfdi (double a1)
|
||||||
register union double_long dl1;
|
register union double_long dl1;
|
||||||
register int exp;
|
register int exp;
|
||||||
register unsigned long long l;
|
register unsigned long long l;
|
||||||
|
int s;
|
||||||
dl1.d = a1;
|
dl1.d = a1;
|
||||||
|
|
||||||
if (dl1.ll == 0)
|
if (dl1.ll == 0)
|
||||||
return (0);
|
return (0);
|
||||||
|
|
||||||
exp = EXPD (dl1) - EXCESSD - 53;
|
exp = EXPD (dl1) - EXCESSD - 53;
|
||||||
|
|
||||||
l = MANTD_LL(dl1);
|
l = MANTD_LL(dl1);
|
||||||
|
s = SIGND(dl1)? -1: 1;
|
||||||
if (exp >= 12)
|
if (exp >= 64)
|
||||||
return (unsigned long long)-1;
|
return (unsigned long long)-1;
|
||||||
else if (exp >= 0)
|
else if (exp >= 0)
|
||||||
return l << exp;
|
return (l << exp)*s;
|
||||||
else if (exp >= -52)
|
else if (exp >= -52)
|
||||||
return l >> -exp;
|
return (l >> -exp)*s;
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -582,20 +583,22 @@ unsigned long long __fixunsxfdi (long double a1)
|
||||||
register union ldouble_long dl1;
|
register union ldouble_long dl1;
|
||||||
register int exp;
|
register int exp;
|
||||||
register unsigned long long l;
|
register unsigned long long l;
|
||||||
|
int s;
|
||||||
dl1.ld = a1;
|
dl1.ld = a1;
|
||||||
|
|
||||||
if (dl1.l.lower == 0 && dl1.l.upper == 0)
|
if (dl1.l.lower == 0 && dl1.l.upper == 0)
|
||||||
return (0);
|
return (0);
|
||||||
|
|
||||||
exp = EXPLD (dl1) - EXCESSLD - 64;
|
exp = EXPLD (dl1) - EXCESSLD - 64;
|
||||||
|
s = SIGNLD(dl1)? -1: 1;
|
||||||
l = dl1.l.lower;
|
l = dl1.l.lower;
|
||||||
|
|
||||||
if (exp > 0)
|
if (exp >= 64)
|
||||||
return (unsigned long long)-1;
|
return (unsigned long long)-1;
|
||||||
else if (exp >= -63)
|
else if (exp >= 0)
|
||||||
return l >> -exp;
|
return ((unsigned long long)l << exp)*s;
|
||||||
|
else if (exp >= -64)
|
||||||
|
return (l >> -exp)*s;
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -637,7 +640,7 @@ extern void abort(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
enum __va_arg_type {
|
enum __va_arg_type {
|
||||||
__va_gen_reg, __va_float_reg, __va_stack
|
__va_gen_reg, __va_float_reg, __va_ld_reg, __va_stack
|
||||||
};
|
};
|
||||||
|
|
||||||
//This should be in sync with the declaration on our include/stdarg.h
|
//This should be in sync with the declaration on our include/stdarg.h
|
||||||
|
|
|
@ -1729,7 +1729,6 @@ void prefix ## fcast(type a)\
|
||||||
printf("ftof: %f %f %Lf\n", fa, da, la);\
|
printf("ftof: %f %f %Lf\n", fa, da, la);\
|
||||||
ia = (int)a;\
|
ia = (int)a;\
|
||||||
llia = (long long)a;\
|
llia = (long long)a;\
|
||||||
a = (a >= 0) ? a : -a;\
|
|
||||||
ua = (unsigned int)a;\
|
ua = (unsigned int)a;\
|
||||||
llua = (unsigned long long)a;\
|
llua = (unsigned long long)a;\
|
||||||
printf("ftoi: %d %u %lld %llu\n", ia, ua, llia, llua);\
|
printf("ftoi: %d %u %lld %llu\n", ia, ua, llia, llua);\
|
||||||
|
@ -1759,6 +1758,18 @@ void prefix ## call(void)\
|
||||||
printf("strto%s: %f\n", #prefix, (double)strto ## prefix("1.2", NULL));\
|
printf("strto%s: %f\n", #prefix, (double)strto ## prefix("1.2", NULL));\
|
||||||
}\
|
}\
|
||||||
\
|
\
|
||||||
|
void prefix ## calc(type x, type y)\
|
||||||
|
{\
|
||||||
|
x=x*x;y=y*y;\
|
||||||
|
printf("%d, %d\n", (int)x, (int)y);\
|
||||||
|
x=x-y;y=y-x;\
|
||||||
|
printf("%d, %d\n", (int)x, (int)y);\
|
||||||
|
x=x/y;y=y/x;\
|
||||||
|
printf("%d, %d\n", (int)x, (int)y);\
|
||||||
|
x=x+x;y=y+y;\
|
||||||
|
printf("%d, %d\n", (int)x, (int)y);\
|
||||||
|
}\
|
||||||
|
\
|
||||||
void prefix ## signed_zeros(void) \
|
void prefix ## signed_zeros(void) \
|
||||||
{\
|
{\
|
||||||
type x = 0.0, y = -0.0, n, p;\
|
type x = 0.0, y = -0.0, n, p;\
|
||||||
|
@ -1781,7 +1792,7 @@ void prefix ## signed_zeros(void) \
|
||||||
1.0 / x != 1.0 / p);\
|
1.0 / x != 1.0 / p);\
|
||||||
else\
|
else\
|
||||||
printf ("x != +y; this is wrong!\n");\
|
printf ("x != +y; this is wrong!\n");\
|
||||||
p = -y;\
|
p = -y;\
|
||||||
if (x == p)\
|
if (x == p)\
|
||||||
printf ("Test 1.0 / x != 1.0 / -y returns %d (should be 0).\n",\
|
printf ("Test 1.0 / x != 1.0 / -y returns %d (should be 0).\n",\
|
||||||
1.0 / x != 1.0 / p);\
|
1.0 / x != 1.0 / p);\
|
||||||
|
@ -1797,6 +1808,7 @@ void prefix ## test(void)\
|
||||||
prefix ## fcast(234.6);\
|
prefix ## fcast(234.6);\
|
||||||
prefix ## fcast(-2334.6);\
|
prefix ## fcast(-2334.6);\
|
||||||
prefix ## call();\
|
prefix ## call();\
|
||||||
|
prefix ## calc(1, 1.0000000000000001);\
|
||||||
prefix ## signed_zeros();\
|
prefix ## signed_zeros();\
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2623,7 +2635,6 @@ int constant_p_var;
|
||||||
|
|
||||||
void builtin_test(void)
|
void builtin_test(void)
|
||||||
{
|
{
|
||||||
#if GCC_MAJOR >= 3
|
|
||||||
COMPAT_TYPE(int, int);
|
COMPAT_TYPE(int, int);
|
||||||
COMPAT_TYPE(int, unsigned int);
|
COMPAT_TYPE(int, unsigned int);
|
||||||
COMPAT_TYPE(int, char);
|
COMPAT_TYPE(int, char);
|
||||||
|
@ -2633,9 +2644,9 @@ void builtin_test(void)
|
||||||
COMPAT_TYPE(int *, void *);
|
COMPAT_TYPE(int *, void *);
|
||||||
COMPAT_TYPE(int *, const int *);
|
COMPAT_TYPE(int *, const int *);
|
||||||
COMPAT_TYPE(char *, unsigned char *);
|
COMPAT_TYPE(char *, unsigned char *);
|
||||||
|
COMPAT_TYPE(char, unsigned char);
|
||||||
/* space is needed because tcc preprocessor introduces a space between each token */
|
/* space is needed because tcc preprocessor introduces a space between each token */
|
||||||
COMPAT_TYPE(char * *, void *);
|
COMPAT_TYPE(char **, void *);
|
||||||
#endif
|
|
||||||
printf("res = %d\n", __builtin_constant_p(1));
|
printf("res = %d\n", __builtin_constant_p(1));
|
||||||
printf("res = %d\n", __builtin_constant_p(1 + 2));
|
printf("res = %d\n", __builtin_constant_p(1 + 2));
|
||||||
printf("res = %d\n", __builtin_constant_p(&constant_p_var));
|
printf("res = %d\n", __builtin_constant_p(&constant_p_var));
|
||||||
|
|
Loading…
Reference in New Issue