History

Delete a = (a > = 0)? A: -a; \

jiang committed 12 years ago

Commit 3d608d41 parent 01991232 files · +40 −26Browse files

Unified · Split

2 files
  1. lib/libtcc1.c +24 −21
  2. tests/tcctest.c +16 −5
lib/libtcc1.c+24−21
@@ -533,21 +533,22 @@ unsigned long long __fixunssfdi (float a1) · 532 unmodified lines
533 register union float_long fl1;533 register union float_long fl1;
534 register int exp;534 register int exp;
535 register unsigned long l;535 register unsigned long l;
536 536 int s;
537 fl1.f = a1;537 fl1.f = a1;
538 538
539 if (fl1.l == 0)539 if (fl1.l == 0)
540 return (0);540 return 0;
541 541
542 exp = EXP (fl1.l) - EXCESS - 24;542 exp = EXP (fl1.l) - EXCESS - 24;
543 543
544 l = MANT(fl1.l);544 l = MANT(fl1.l);
545 if (exp >= 41)545 s = SIGN(fl1.l)? -1: 1;
546 return (unsigned long long)-1;546 if (exp >= 64)
547 return (unsigned long long)-1;
547 else if (exp >= 0)548 else if (exp >= 0)
548 return (unsigned long long)l << exp;549 return ((unsigned long long)l << exp)*s;
549 else if (exp >= -23)550 else if (exp >= -23)
550 return l >> -exp;551 return (l >> -exp)*s;
551 else552 else
552 return 0;553 return 0;
553}554}
@@ -557,22 +558,22 @@ unsigned long long __fixunsdfdi (double a1) · 3 unmodified lines
557 register union double_long dl1;558 register union double_long dl1;
558 register int exp;559 register int exp;
559 register unsigned long long l;560 register unsigned long long l;
560 561 int s;
561 dl1.d = a1;562 dl1.d = a1;
562 563
563 if (dl1.ll == 0)564 if (dl1.ll == 0)
564 return (0);565 return (0);
565 566
566 exp = EXPD (dl1) - EXCESSD - 53;567 exp = EXPD (dl1) - EXCESSD - 53;
567 568
568 l = MANTD_LL(dl1);569 l = MANTD_LL(dl1);
569 570 s = SIGND(dl1)? -1: 1;
570 if (exp >= 12)571 if (exp >= 64)
571 return (unsigned long long)-1;572 return (unsigned long long)-1;
572 else if (exp >= 0)573 else if (exp >= 0)
573 return l << exp;574 return (l << exp)*s;
574 else if (exp >= -52)575 else if (exp >= -52)
575 return l >> -exp;576 return (l >> -exp)*s;
576 else577 else
577 return 0;578 return 0;
578}579}
@@ -582,20 +583,22 @@ unsigned long long __fixunsxfdi (long double a1) · 3 unmodified lines
582 register union ldouble_long dl1;583 register union ldouble_long dl1;
583 register int exp;584 register int exp;
584 register unsigned long long l;585 register unsigned long long l;
585 586 int s;
586 dl1.ld = a1;587 dl1.ld = a1;
587 588
588 if (dl1.l.lower == 0 && dl1.l.upper == 0)589 if (dl1.l.lower == 0 && dl1.l.upper == 0)
589 return (0);590 return (0);
590 591
591 exp = EXPLD (dl1) - EXCESSLD - 64;592 exp = EXPLD (dl1) - EXCESSLD - 64;
592 593 s = SIGNLD(dl1)? -1: 1;
593 l = dl1.l.lower;594 l = dl1.l.lower;
594 595
595 if (exp > 0)596 if (exp >= 64)
596 return (unsigned long long)-1;597 return (unsigned long long)-1;
597 else if (exp >= -63) 598 else if (exp >= 0)
598 return l >> -exp;599 return ((unsigned long long)l << exp)*s;
600 else if (exp >= -64)
601 return (l >> -exp)*s;
599 else602 else
600 return 0;603 return 0;
601}604}
@@ -637,7 +640,7 @@ extern void abort(void); · 35 unmodified lines
637#endif640#endif
638 641
639enum __va_arg_type {642enum __va_arg_type {
640 __va_gen_reg, __va_float_reg, __va_stack643 __va_gen_reg, __va_float_reg, __va_ld_reg, __va_stack
641};644};
642 645
643//This should be in sync with the declaration on our include/stdarg.h646//This should be in sync with the declaration on our include/stdarg.h
tests/tcctest.c+16−5
@@ -1729,7 +1729,6 @@ void prefix ## fcast(type a)\ · 1728 unmodified lines
1729 printf("ftof: %f %f %Lf\n", fa, da, la);\1729 printf("ftof: %f %f %Lf\n", fa, da, la);\
1730 ia = (int)a;\1730 ia = (int)a;\
1731 llia = (long long)a;\1731 llia = (long long)a;\
1732 a = (a >= 0) ? a : -a;\
1733 ua = (unsigned int)a;\1732 ua = (unsigned int)a;\
1734 llua = (unsigned long long)a;\1733 llua = (unsigned long long)a;\
1735 printf("ftoi: %d %u %lld %llu\n", ia, ua, llia, llua);\1734 printf("ftoi: %d %u %lld %llu\n", ia, ua, llia, llua);\
@@ -1759,6 +1758,18 @@ void prefix ## call(void)\ · 23 unmodified lines
1759 printf("strto%s: %f\n", #prefix, (double)strto ## prefix("1.2", NULL));\1758 printf("strto%s: %f\n", #prefix, (double)strto ## prefix("1.2", NULL));\
1760}\1759}\
1761\1760\
1761void prefix ## calc(type x, type y)\
1762{\
1763 x=x*x;y=y*y;\
1764 printf("%d, %d\n", (int)x, (int)y);\
1765 x=x-y;y=y-x;\
1766 printf("%d, %d\n", (int)x, (int)y);\
1767 x=x/y;y=y/x;\
1768 printf("%d, %d\n", (int)x, (int)y);\
1769 x=x+x;y=y+y;\
1770 printf("%d, %d\n", (int)x, (int)y);\
1771}\
1772\
1762void prefix ## signed_zeros(void) \1773void prefix ## signed_zeros(void) \
1763{\1774{\
1764 type x = 0.0, y = -0.0, n, p;\1775 type x = 0.0, y = -0.0, n, p;\
@@ -1781,7 +1792,7 @@ void prefix ## signed_zeros(void) \ · 16 unmodified lines
1781 1.0 / x != 1.0 / p);\1792 1.0 / x != 1.0 / p);\
1782 else\1793 else\
1783 printf ("x != +y; this is wrong!\n");\1794 printf ("x != +y; this is wrong!\n");\
1784 p = -y;\1795 p = -y;\
1785 if (x == p)\1796 if (x == p)\
1786 printf ("Test 1.0 / x != 1.0 / -y returns %d (should be 0).\n",\1797 printf ("Test 1.0 / x != 1.0 / -y returns %d (should be 0).\n",\
1787 1.0 / x != 1.0 / p);\1798 1.0 / x != 1.0 / p);\
@@ -1797,6 +1808,7 @@ void prefix ## test(void)\ · 9 unmodified lines
1797 prefix ## fcast(234.6);\1808 prefix ## fcast(234.6);\
1798 prefix ## fcast(-2334.6);\1809 prefix ## fcast(-2334.6);\
1799 prefix ## call();\1810 prefix ## call();\
1811 prefix ## calc(1, 1.0000000000000001);\
1800 prefix ## signed_zeros();\1812 prefix ## signed_zeros();\
1801}1813}
1802 1814
@@ -2623,7 +2635,6 @@ int constant_p_var; · 820 unmodified lines
2623 2635
2624void builtin_test(void)2636void builtin_test(void)
2625{2637{
2626#if GCC_MAJOR >= 3
2627 COMPAT_TYPE(int, int);2638 COMPAT_TYPE(int, int);
2628 COMPAT_TYPE(int, unsigned int);2639 COMPAT_TYPE(int, unsigned int);
2629 COMPAT_TYPE(int, char);2640 COMPAT_TYPE(int, char);
@@ -2633,9 +2644,9 @@ void builtin_test(void) · 3 unmodified lines
2633 COMPAT_TYPE(int *, void *);2644 COMPAT_TYPE(int *, void *);
2634 COMPAT_TYPE(int *, const int *);2645 COMPAT_TYPE(int *, const int *);
2635 COMPAT_TYPE(char *, unsigned char *);2646 COMPAT_TYPE(char *, unsigned char *);
2647 COMPAT_TYPE(char, unsigned char);
2636/* space is needed because tcc preprocessor introduces a space between each token */2648/* space is needed because tcc preprocessor introduces a space between each token */
2637 COMPAT_TYPE(char * *, void *); 2649 COMPAT_TYPE(char **, void *);
2638#endif
2639 printf("res = %d\n", __builtin_constant_p(1));2650 printf("res = %d\n", __builtin_constant_p(1));
2640 printf("res = %d\n", __builtin_constant_p(1 + 2));2651 printf("res = %d\n", __builtin_constant_p(1 + 2));
2641 printf("res = %d\n", __builtin_constant_p(&constant_p_var));2652 printf("res = %d\n", __builtin_constant_p(&constant_p_var));

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t