Changeset: 4ccd5e119227 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4ccd5e119227
Modified Files:
        configure.ag
        gdk/gdk_calc.c
        gdk/gdk_calc_private.h
Branch: default
Log Message:

Use GNUC builtin functions to add, subtract and multiply with overflow check.
Newer CLANG apparently also has these functions, but not on the versions
we use on mac-mini and freebsd.


diffs (truncated from 1795 to 300 lines):

diff --git a/configure.ag b/configure.ag
--- a/configure.ag
+++ b/configure.ag
@@ -2792,6 +2792,14 @@ AC_CHECK_FUNCS([\
        ])
 LIBS="$save_LIBS"
 
+AC_MSG_CHECKING([__builtin_add_overflow])
+AC_LINK_IFELSE(
+       [AC_LANG_PROGRAM([[]], [[int a, b, c; __builtin_add_overflow(a, b, 
&c);]])],
+       [AC_DEFINE([HAVE___BUILTIN_ADD_OVERFLOW], 1,
+               [Define if you have the `__builtin_{add,sub,mul}_overflow' 
functions.])
+        AC_MSG_RESULT(yes)],
+       [AC_MSG_RESULT(no)])
+
 asctime_r3=yes
 AC_MSG_CHECKING([asctime_r3])
 AC_LINK_IFELSE(
diff --git a/gdk/gdk_calc.c b/gdk/gdk_calc.c
--- a/gdk/gdk_calc.c
+++ b/gdk/gdk_calc.c
@@ -1298,7 +1298,7 @@ BATcalcmax_no_nil(BAT *b1, BAT *b2, BAT 
                return BUN_NONE;                                \
        } while (0)
 
-#define ADD_3TYPE(TYPE1, TYPE2, TYPE3)                                 \
+#define ADD_3TYPE(TYPE1, TYPE2, TYPE3, IF)                             \
 static BUN                                                             \
 add_##TYPE1##_##TYPE2##_##TYPE3(const TYPE1 *lft, int incr1,           \
                                const TYPE2 *rgt, int incr2,            \
@@ -1319,18 +1319,18 @@ add_##TYPE1##_##TYPE2##_##TYPE3(const TY
                        dst[k] = TYPE3##_nil;                           \
                        nils++;                                         \
                } else {                                                \
-                       ADD_WITH_CHECK(TYPE1, lft[i],                   \
-                                      TYPE2, rgt[j],                   \
-                                      TYPE3, dst[k],                   \
-                                      max,                             \
-                                      ON_OVERFLOW(TYPE1, TYPE2, "+")); \
+                       ADD##IF##_WITH_CHECK(TYPE1, lft[i],             \
+                                            TYPE2, rgt[j],             \
+                                            TYPE3, dst[k],             \
+                                            max,                       \
+                                            ON_OVERFLOW(TYPE1, TYPE2, "+")); \
                }                                                       \
        }                                                               \
        CANDLOOP(dst, k, TYPE3##_nil, end, cnt);                        \
        return nils;                                                    \
 }
 
-#define ADD_3TYPE_enlarge(TYPE1, TYPE2, TYPE3)                         \
+#define ADD_3TYPE_enlarge(TYPE1, TYPE2, TYPE3, IF)                     \
 static BUN                                                             \
 add_##TYPE1##_##TYPE2##_##TYPE3(const TYPE1 *lft, int incr1,           \
                                const TYPE2 *rgt, int incr2,            \
@@ -1352,11 +1352,11 @@ add_##TYPE1##_##TYPE2##_##TYPE3(const TY
                                dst[k] = TYPE3##_nil;                   \
                                nils++;                                 \
                        } else {                                        \
-                               ADD_WITH_CHECK(TYPE1, lft[i],           \
-                                              TYPE2, rgt[j],           \
-                                              TYPE3, dst[k],           \
-                                              max,                     \
-                                              ON_OVERFLOW(TYPE1, TYPE2, "+")); 
\
+                               ADD##IF##_WITH_CHECK(TYPE1, lft[i],     \
+                                                    TYPE2, rgt[j],     \
+                                                    TYPE3, dst[k],     \
+                                                    max,               \
+                                                    ON_OVERFLOW(TYPE1, TYPE2, 
"+")); \
                        }                                               \
                }                                                       \
        } else {                                                        \
@@ -1375,242 +1375,242 @@ add_##TYPE1##_##TYPE2##_##TYPE3(const TY
        return nils;                                                    \
 }
 
-ADD_3TYPE(bte, bte, bte)
-ADD_3TYPE_enlarge(bte, bte, sht)
-#ifdef FULL_IMPLEMENTATION
-ADD_3TYPE_enlarge(bte, bte, int)
-ADD_3TYPE_enlarge(bte, bte, lng)
-#ifdef HAVE_HGE
-ADD_3TYPE_enlarge(bte, bte, hge)
-#endif
-ADD_3TYPE_enlarge(bte, bte, flt)
-ADD_3TYPE_enlarge(bte, bte, dbl)
-#endif
-ADD_3TYPE(bte, sht, sht)
-ADD_3TYPE_enlarge(bte, sht, int)
-#ifdef FULL_IMPLEMENTATION
-ADD_3TYPE_enlarge(bte, sht, lng)
-#ifdef HAVE_HGE
-ADD_3TYPE_enlarge(bte, sht, hge)
-#endif
-ADD_3TYPE_enlarge(bte, sht, flt)
-ADD_3TYPE_enlarge(bte, sht, dbl)
-#endif
-ADD_3TYPE(bte, int, int)
-ADD_3TYPE_enlarge(bte, int, lng)
-#ifdef FULL_IMPLEMENTATION
-#ifdef HAVE_HGE
-ADD_3TYPE_enlarge(bte, int, hge)
-#endif
-ADD_3TYPE_enlarge(bte, int, flt)
-ADD_3TYPE_enlarge(bte, int, dbl)
-#endif
-ADD_3TYPE(bte, lng, lng)
-#ifdef HAVE_HGE
-ADD_3TYPE_enlarge(bte, lng, hge)
-#endif
-#ifdef FULL_IMPLEMENTATION
-ADD_3TYPE_enlarge(bte, lng, flt)
-ADD_3TYPE_enlarge(bte, lng, dbl)
-#endif
-#ifdef HAVE_HGE
-ADD_3TYPE(bte, hge, hge)
-#ifdef FULL_IMPLEMENTATION
-ADD_3TYPE_enlarge(bte, hge, flt)
-ADD_3TYPE_enlarge(bte, hge, dbl)
-#endif
-#endif
-ADD_3TYPE(bte, flt, flt)
-ADD_3TYPE_enlarge(bte, flt, dbl)
-ADD_3TYPE(bte, dbl, dbl)
-ADD_3TYPE(sht, bte, sht)
-ADD_3TYPE_enlarge(sht, bte, int)
-#ifdef FULL_IMPLEMENTATION
-ADD_3TYPE_enlarge(sht, bte, lng)
-#ifdef HAVE_HGE
-ADD_3TYPE_enlarge(sht, bte, hge)
-#endif
-ADD_3TYPE_enlarge(sht, bte, flt)
-ADD_3TYPE_enlarge(sht, bte, dbl)
-#endif
-ADD_3TYPE(sht, sht, sht)
-ADD_3TYPE_enlarge(sht, sht, int)
-#ifdef FULL_IMPLEMENTATION
-ADD_3TYPE_enlarge(sht, sht, lng)
-#ifdef HAVE_HGE
-ADD_3TYPE_enlarge(sht, sht, hge)
-#endif
-ADD_3TYPE_enlarge(sht, sht, flt)
-ADD_3TYPE_enlarge(sht, sht, dbl)
-#endif
-ADD_3TYPE(sht, int, int)
-ADD_3TYPE_enlarge(sht, int, lng)
-#ifdef FULL_IMPLEMENTATION
-#ifdef HAVE_HGE
-ADD_3TYPE_enlarge(sht, int, hge)
-#endif
-ADD_3TYPE_enlarge(sht, int, flt)
-ADD_3TYPE_enlarge(sht, int, dbl)
-#endif
-ADD_3TYPE(sht, lng, lng)
-#ifdef HAVE_HGE
-ADD_3TYPE_enlarge(sht, lng, hge)
-#endif
-#ifdef FULL_IMPLEMENTATION
-ADD_3TYPE_enlarge(sht, lng, flt)
-ADD_3TYPE_enlarge(sht, lng, dbl)
-#endif
-#ifdef HAVE_HGE
-ADD_3TYPE(sht, hge, hge)
-#ifdef FULL_IMPLEMENTATION
-ADD_3TYPE_enlarge(sht, hge, flt)
-ADD_3TYPE_enlarge(sht, hge, dbl)
-#endif
-#endif
-ADD_3TYPE(sht, flt, flt)
-ADD_3TYPE_enlarge(sht, flt, dbl)
-ADD_3TYPE(sht, dbl, dbl)
-ADD_3TYPE(int, bte, int)
-ADD_3TYPE_enlarge(int, bte, lng)
-#ifdef FULL_IMPLEMENTATION
-#ifdef HAVE_HGE
-ADD_3TYPE_enlarge(int, bte, hge)
-#endif
-ADD_3TYPE_enlarge(int, bte, flt)
-ADD_3TYPE_enlarge(int, bte, dbl)
-#endif
-ADD_3TYPE(int, sht, int)
-ADD_3TYPE_enlarge(int, sht, lng)
-#ifdef FULL_IMPLEMENTATION
-#ifdef HAVE_HGE
-ADD_3TYPE_enlarge(int, sht, hge)
-#endif
-ADD_3TYPE_enlarge(int, sht, flt)
-ADD_3TYPE_enlarge(int, sht, dbl)
-#endif
-ADD_3TYPE(int, int, int)
-ADD_3TYPE_enlarge(int, int, lng)
-#ifdef FULL_IMPLEMENTATION
-#ifdef HAVE_HGE
-ADD_3TYPE_enlarge(int, int, hge)
-#endif
-ADD_3TYPE_enlarge(int, int, flt)
-ADD_3TYPE_enlarge(int, int, dbl)
-#endif
-ADD_3TYPE(int, lng, lng)
-#ifdef HAVE_HGE
-ADD_3TYPE_enlarge(int, lng, hge)
-#endif
-#ifdef FULL_IMPLEMENTATION
-ADD_3TYPE_enlarge(int, lng, flt)
-ADD_3TYPE_enlarge(int, lng, dbl)
-#endif
-#ifdef HAVE_HGE
-ADD_3TYPE(int, hge, hge)
-#ifdef FULL_IMPLEMENTATION
-ADD_3TYPE_enlarge(int, hge, flt)
-ADD_3TYPE_enlarge(int, hge, dbl)
-#endif
-#endif
-ADD_3TYPE(int, flt, flt)
-ADD_3TYPE_enlarge(int, flt, dbl)
-ADD_3TYPE(int, dbl, dbl)
-ADD_3TYPE(lng, bte, lng)
-#ifdef HAVE_HGE
-ADD_3TYPE_enlarge(lng, bte, hge)
-#endif
-#ifdef FULL_IMPLEMENTATION
-ADD_3TYPE_enlarge(lng, bte, flt)
-ADD_3TYPE_enlarge(lng, bte, dbl)
-#endif
-ADD_3TYPE(lng, sht, lng)
-#ifdef HAVE_HGE
-ADD_3TYPE_enlarge(lng, sht, hge)
-#endif
-#ifdef FULL_IMPLEMENTATION
-ADD_3TYPE_enlarge(lng, sht, flt)
-ADD_3TYPE_enlarge(lng, sht, dbl)
-#endif
-ADD_3TYPE(lng, int, lng)
-#ifdef HAVE_HGE
-ADD_3TYPE_enlarge(lng, int, hge)
-#endif
-#ifdef FULL_IMPLEMENTATION
-ADD_3TYPE_enlarge(lng, int, flt)
-ADD_3TYPE_enlarge(lng, int, dbl)
-#endif
-ADD_3TYPE(lng, lng, lng)
-#ifdef HAVE_HGE
-ADD_3TYPE_enlarge(lng, lng, hge)
-#endif
-#ifdef FULL_IMPLEMENTATION
-ADD_3TYPE_enlarge(lng, lng, flt)
-ADD_3TYPE_enlarge(lng, lng, dbl)
-#endif
-#ifdef HAVE_HGE
-ADD_3TYPE(lng, hge, hge)
-#ifdef FULL_IMPLEMENTATION
-ADD_3TYPE_enlarge(lng, hge, flt)
-ADD_3TYPE_enlarge(lng, hge, dbl)
-#endif
-#endif
-ADD_3TYPE(lng, flt, flt)
-ADD_3TYPE_enlarge(lng, flt, dbl)
-ADD_3TYPE(lng, dbl, dbl)
-#ifdef HAVE_HGE
-ADD_3TYPE(hge, bte, hge)
-#ifdef FULL_IMPLEMENTATION
-ADD_3TYPE_enlarge(hge, bte, flt)
-ADD_3TYPE_enlarge(hge, bte, dbl)
-#endif
-ADD_3TYPE(hge, sht, hge)
-#ifdef FULL_IMPLEMENTATION
-ADD_3TYPE_enlarge(hge, sht, flt)
-ADD_3TYPE_enlarge(hge, sht, dbl)
-#endif
-ADD_3TYPE(hge, int, hge)
-#ifdef FULL_IMPLEMENTATION
-ADD_3TYPE_enlarge(hge, int, flt)
-ADD_3TYPE_enlarge(hge, int, dbl)
-#endif
-ADD_3TYPE(hge, lng, hge)
-#ifdef FULL_IMPLEMENTATION
-ADD_3TYPE_enlarge(hge, lng, flt)
-ADD_3TYPE_enlarge(hge, lng, dbl)
-#endif
-ADD_3TYPE(hge, hge, hge)
-#ifdef FULL_IMPLEMENTATION
-ADD_3TYPE_enlarge(hge, hge, flt)
-ADD_3TYPE_enlarge(hge, hge, dbl)
-#endif
-ADD_3TYPE(hge, flt, flt)
-ADD_3TYPE_enlarge(hge, flt, dbl)
-ADD_3TYPE(hge, dbl, dbl)
-#endif
-ADD_3TYPE(flt, bte, flt)
-ADD_3TYPE_enlarge(flt, bte, dbl)
-ADD_3TYPE(flt, sht, flt)
-ADD_3TYPE_enlarge(flt, sht, dbl)
-ADD_3TYPE(flt, int, flt)
-ADD_3TYPE_enlarge(flt, int, dbl)
-ADD_3TYPE(flt, lng, flt)
-ADD_3TYPE_enlarge(flt, lng, dbl)
-#ifdef HAVE_HGE
-ADD_3TYPE(flt, hge, flt)
-ADD_3TYPE_enlarge(flt, hge, dbl)
-#endif
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to