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