From d5c91ae739b73c8df6d6f77414c7fed49d54b508 Mon Sep 17 00:00:00 2001 From: John Wellbelove Date: Fri, 18 Mar 2022 15:10:21 +0000 Subject: [PATCH] Removed builtin mem macros Not always constexpr compatible for all types --- include/etl/algorithm.h | 568 +++--------------- .../etl/profiles/determine_builtin_support.h | 50 -- 2 files changed, 81 insertions(+), 537 deletions(-) diff --git a/include/etl/algorithm.h b/include/etl/algorithm.h index 58a2c01d..383bebe1 100644 --- a/include/etl/algorithm.h +++ b/include/etl/algorithm.h @@ -59,10 +59,20 @@ namespace etl { // Declare prototypes of the ETL's sort functions template - ETL_CONSTEXPR14 void shell_sort(TIterator first, TIterator last); +#if ETL_USING_STD_NAMESPACE + ETL_CONSTEXPR20 +#else + ETL_CONSTEXPR14 +#endif + void shell_sort(TIterator first, TIterator last); template - ETL_CONSTEXPR14 void shell_sort(TIterator first, TIterator last, TCompare compare); +#if ETL_USING_STD_NAMESPACE + ETL_CONSTEXPR20 +#else + ETL_CONSTEXPR14 +#endif + void shell_sort(TIterator first, TIterator last, TCompare compare); template ETL_CONSTEXPR14 void insertion_sort(TIterator first, TIterator last); @@ -78,8 +88,13 @@ namespace etl { //*************************************************************************** // iter_swap + //*************************************************************************** template +#if ETL_USING_STD_NAMESPACE + ETL_CONSTEXPR20 +#else ETL_CONSTEXPR14 +#endif void iter_swap(TIterator1 a, TIterator2 b) { using ETL_OR_STD::swap; // Allow ADL @@ -88,8 +103,13 @@ namespace etl //*************************************************************************** // swap_ranges + //*************************************************************************** template +#if ETL_USING_STD_NAMESPACE + ETL_CONSTEXPR20 +#else ETL_CONSTEXPR14 +#endif TIterator2 swap_ranges(T1terator1 first1, T1terator1 last1, TIterator2 first2) @@ -106,103 +126,39 @@ namespace etl //*************************************************************************** // copy -#if ETL_USING_STL && ETL_CPP20_SUPPORTED - // Use the STL constexpr implementation. + //*************************************************************************** +#if ETL_USING_STL && ETL_CPP20_SUPPORTED + // Use the STL implementation if using STL and C++20. template constexpr TIterator2 copy(TIterator1 sb, TIterator1 se, TIterator2 db) { return std::copy(sb, se, db); } -#elif ETL_USING_STL && !ETL_FORCE_CONSTEXPR_ALGORITHMS - // Use the STL implementation, if not forcing constexpr. - template - TIterator2 copy(TIterator1 sb, TIterator1 se, TIterator2 db) - { - return std::copy(sb, se, db); - } #else - // Non-pointer or not trivially copyable + // Non-pointer or not trivially copyable or not using builtin memcpy. template - ETL_CONSTEXPR14 - typename etl::enable_if::type - copy(TIterator1 sb, TIterator1 se, TIterator2 db) + ETL_CONSTEXPR14 TIterator2 copy(TIterator1 sb, TIterator1 se, TIterator2 db) { while (sb != se) { - *db++ = *sb++; + *db = *sb; + ++db; + ++sb; } return db; } - - // Pointer and trivially copyable -#if ETL_USING_BUILTIN_MEMCPY - template - ETL_CONSTEXPR14 - typename etl::enable_if::type - copy(TIterator1 sb, TIterator1 se, TIterator2 db) - { - typedef typename etl::iterator_traits::value_type value_t; - typedef typename etl::iterator_traits::difference_type difference_t; - - difference_t count = (se - sb); - - return TIterator2(__builtin_memcpy(db, sb, sizeof(value_t) * count)) + count; - } -#elif ETL_FORCE_CONSTEXPR_ALGORITHMS - template - ETL_CONSTEXPR14 - typename etl::enable_if::type - copy(TIterator1 sb, TIterator1 se, TIterator2 db) - { - while (sb != se) - { - *db++ = *sb++; - } - - return db; - } -#else - template - typename etl::enable_if::type - copy(TIterator1 sb, TIterator1 se, TIterator2 db) - { - typedef typename etl::iterator_traits::value_type value_t; - typedef typename etl::iterator_traits::difference_type difference_t; - - difference_t count = (se - sb); - - return TIterator2(memcpy(db, sb, sizeof(value_t) * count)) + count; - } -#endif #endif //*************************************************************************** // reverse_copy + //*************************************************************************** #if ETL_USING_STL && ETL_CPP20_SUPPORTED template constexpr TIterator2 reverse_copy(TIterator1 sb, TIterator1 se, TIterator2 db) { return std::reverse_copy(sb, se, db); } -#elif ETL_USING_STL && !ETL_FORCE_CONSTEXPR_ALGORITHMS - template - TIterator2 reverse_copy(TIterator1 sb, TIterator1 se, TIterator2 db) - { - return std::reverse_copy(sb, se, db); - } #else template ETL_CONSTEXPR14 @@ -220,6 +176,7 @@ namespace etl //*************************************************************************** // copy_n + //*************************************************************************** #if ETL_USING_STL && ETL_CPP20_SUPPORTED // Use the STL implementation template @@ -227,22 +184,10 @@ namespace etl { return std::copy_n(sb, count, db); } -#elif ETL_USING_STL && ETL_CPP11_SUPPORTED && !ETL_FORCE_CONSTEXPR_ALGORITHMS - // Use the STL implementation - template - TIterator2 copy_n(TIterator1 sb, TSize count, TIterator2 db) - { - return std::copy_n(sb, count, db); - } #else - // Non-pointer + // Non-pointer or not trivially copyable or not using builtin memcpy. template - ETL_CONSTEXPR14 - typename etl::enable_if::type - copy_n(TIterator1 sb, TSize count, TIterator2 db) + ETL_CONSTEXPR14 TIterator2 copy_n(TIterator1 sb, TSize count, TIterator2 db) { while (count != 0) { @@ -254,78 +199,20 @@ namespace etl return db; } - - // Pointer -#if ETL_USING_BUILTIN_MEMCPY - template - ETL_CONSTEXPR14 - typename etl::enable_if::type - copy_n(TIterator1 sb, TSize count, TIterator2 db) - { - typedef typename etl::iterator_traits::value_type value_t; - - return TIterator2(__builtin_memcpy(db, sb, sizeof(value_t) * count)) + count; - } -#elif ETL_FORCE_CONSTEXPR_ALGORITHMS - template - ETL_CONSTEXPR14 - typename etl::enable_if::type - copy_n(TIterator1 sb, TSize count, TIterator2 db) - { - while (count != 0) - { - *db = *sb; - ++db; - ++sb; - --count; - } - - return db; - } -#else - template - typename etl::enable_if::type - copy_n(TIterator1 sb, TSize count, TIterator2 db) - { - typedef typename etl::iterator_traits::value_type value_t; - - return TIterator2(memcpy(db, sb, sizeof(value_t) * count)) + count; - } -#endif #endif //*************************************************************************** // copy_backward + //*************************************************************************** #if ETL_USING_STL && ETL_CPP20_SUPPORTED template constexpr TIterator2 copy_backward(TIterator1 sb, TIterator1 se, TIterator2 de) { return std::copy_backward(sb, se, de); } -#elif ETL_USING_STL && !ETL_FORCE_CONSTEXPR_ALGORITHMS - template - TIterator2 copy_backward(TIterator1 sb, TIterator1 se, TIterator2 de) - { - return std::copy_backward(sb, se, de); - } #else - // Non-pointer template - ETL_CONSTEXPR14 - typename etl::enable_if::type - copy_backward(TIterator1 sb, TIterator1 se, TIterator2 de) + ETL_CONSTEXPR14 TIterator2 copy_backward(TIterator1 sb, TIterator1 se, TIterator2 de) { while (se != sb) { @@ -334,79 +221,21 @@ namespace etl return de; } - - // Pointer -#if ETL_USING_BUILTIN_MEMMOVE - template - ETL_CONSTEXPR14 - typename etl::enable_if::type - copy_backward(TIterator1 sb, TIterator1 se, TIterator2 de) - { - typedef typename etl::iterator_traits::value_type value_t; - - const size_t length = (se - sb); - - return TIterator2(__builtin_memmove(de - length, sb, sizeof(value_t) * length)); - } -#elif ETL_FORCE_CONSTEXPR_ALGORITHMS - template - ETL_CONSTEXPR14 - typename etl::enable_if::type - copy_backward(TIterator1 sb, TIterator1 se, TIterator2 de) - { - while (se != sb) - { - *(--de) = *(--se); - } - - return de; - } -#else - template - typename etl::enable_if::type - copy_backward(TIterator1 sb, TIterator1 se, TIterator2 de) - { - typedef typename etl::iterator_traits::value_type value_t; - - const size_t length = (se - sb); - - return TIterator2(memmove(de - length, sb, sizeof(value_t) * length)); - } -#endif #endif //*************************************************************************** // move + //*************************************************************************** #if ETL_USING_STL && ETL_CPP20_SUPPORTED template constexpr TIterator2 move(TIterator1 sb, TIterator1 se, TIterator2 db) { return std::move(sb, se, db); } -#elif ETL_USING_STL && ETL_CPP11_SUPPORTED && !ETL_FORCE_CONSTEXPR_ALGORITHMS - template - TIterator2 move(TIterator1 sb, TIterator1 se, TIterator2 db) - { - return std::move(sb, se, db); - } -#else + #else // non-pointer or not trivially copyable template - ETL_CONSTEXPR14 - typename etl::enable_if::type - move(TIterator1 sb, TIterator1 se, TIterator2 db) + ETL_CONSTEXPR14 TIterator2 move(TIterator1 sb, TIterator1 se, TIterator2 db) { while (sb != se) { @@ -417,85 +246,21 @@ namespace etl return db; } - -#if ETL_USING_BUILTIN_MEMMOVE - // pointer and trivially copyable - template - ETL_CONSTEXPR14 - typename etl::enable_if::type - move(TIterator1 sb, TIterator1 se, TIterator2 db) - { - typedef typename etl::iterator_traits::value_type value_t; - typedef typename etl::iterator_traits::difference_type difference_t; - - difference_t count = (se - sb); - - return TIterator2(__builtin_memmove(db, sb, sizeof(value_t) * count)) + count; - } -#elif ETL_FORCE_CONSTEXPR_ALGORITHMS - template - ETL_CONSTEXPR14 - typename etl::enable_if::type - move(TIterator1 sb, TIterator1 se, TIterator2 db) - { - while (sb != se) - { - *db = etl::move(*sb); - ++db; - ++sb; - } - - return db; - } -#else - // pointer and trivially copyable - template - typename etl::enable_if::type - move(TIterator1 sb, TIterator1 se, TIterator2 db) - { - typedef typename etl::iterator_traits::value_type value_t; - typedef typename etl::iterator_traits::difference_type difference_t; - - difference_t count = (se - sb); - - return TIterator2(memmove(db, sb, sizeof(value_t) * count)) + count; - } -#endif #endif //*************************************************************************** // move_backward + //*************************************************************************** #if ETL_USING_STL && ETL_CPP20_SUPPORTED template - ETL_CONSTEXPR20 - TIterator2 move_backward(TIterator1 sb, TIterator1 se, TIterator2 de) - { - return std::move_backward(sb, se, de); - } -#elif ETL_USING_STL && ETL_CPP11_SUPPORTED && !ETL_FORCE_CONSTEXPR_ALGORITHMS - template - TIterator2 move_backward(TIterator1 sb, TIterator1 se, TIterator2 de) + constexpr TIterator2 move_backward(TIterator1 sb, TIterator1 se, TIterator2 de) { return std::move_backward(sb, se, de); } #else // non-pointer or not trivially copyable template - ETL_CONSTEXPR14 - typename etl::enable_if::type - move_backward(TIterator1 sb, TIterator1 se, TIterator2 de) + ETL_CONSTEXPR14 TIterator2 move_backward(TIterator1 sb, TIterator1 se, TIterator2 de) { while (sb != se) { @@ -504,70 +269,18 @@ namespace etl return de; } - -#if ETL_USING_BUILTIN_MEMMOVE - // pointer and trivially copyable - template - ETL_CONSTEXPR14 - typename etl::enable_if::type - move_backward(TIterator1 sb, TIterator1 se, TIterator2 de) - { - typedef typename etl::iterator_traits::value_type value_t; - typedef typename etl::iterator_traits::difference_type difference_t; - - difference_t count = (se - sb); - TIterator2 db = de - count; - - return TIterator2(__builtin_memmove(db, sb, sizeof(value_t) * count)) + count; - } -#elif ETL_FORCE_CONSTEXPR_ALGORITHMS - // pointer and trivially copyable - template - ETL_CONSTEXPR14 - typename etl::enable_if::type - move_backward(TIterator1 sb, TIterator1 se, TIterator2 de) - { - while (sb != se) - { - *(--de) = etl::move(*(--se)); - } - - return de; - } -#else - // pointer and trivially copyable - template - typename etl::enable_if::type - move_backward(TIterator1 sb, TIterator1 se, TIterator2 de) - { - typedef typename etl::iterator_traits::value_type value_t; - typedef typename etl::iterator_traits::difference_type difference_t; - - difference_t count = (se - sb); - TIterator2 db = de - count; - - return TIterator2(memmove(db, sb, sizeof(value_t) * count)) + count; - } -#endif #endif //*************************************************************************** // reverse + //*************************************************************************** // Pointers template - ETL_CONSTEXPR14 typename etl::enable_if::value, void>::type reverse(TIterator b, TIterator e) { + typedef typename etl::iterator_traits::value_type value_type; + if (b != e) { while (b < --e) @@ -580,7 +293,6 @@ namespace etl // Non-pointers template - ETL_CONSTEXPR14 typename etl::enable_if::value, void>::type reverse(TIterator b, TIterator e) { @@ -592,6 +304,7 @@ namespace etl //*************************************************************************** // lower_bound + //*************************************************************************** template ETL_NODISCARD ETL_CONSTEXPR14 @@ -634,6 +347,7 @@ namespace etl //*************************************************************************** // upper_bound + //*************************************************************************** template ETL_NODISCARD ETL_CONSTEXPR14 @@ -676,6 +390,7 @@ namespace etl //*************************************************************************** // equal_range + //*************************************************************************** template ETL_NODISCARD ETL_CONSTEXPR14 @@ -697,6 +412,7 @@ namespace etl //*************************************************************************** // find_if + //*************************************************************************** template ETL_NODISCARD ETL_CONSTEXPR14 @@ -717,6 +433,7 @@ namespace etl //*************************************************************************** // find + //*************************************************************************** template ETL_NODISCARD ETL_CONSTEXPR14 @@ -737,78 +454,37 @@ namespace etl //*************************************************************************** // fill + //*************************************************************************** #if ETL_USING_STL && ETL_CPP20_SUPPORTED template constexpr void fill(TIterator first, TIterator last, const TValue& value) { std::fill(first, last, value); } -#elif ETL_USING_STL && !ETL_FORCE_CONSTEXPR_ALGORITHMS - template - void fill(TIterator first, TIterator last, const TValue& value) - { - std::fill(first, last, value); - } #else template - ETL_CONSTEXPR14 - typename etl::enable_if::type - fill(TIterator first, TIterator last, const TValue& value) + ETL_CONSTEXPR14 void fill(TIterator first, TIterator last, const TValue& value) { while (first != last) { - *first++ = value; + *first = value; + ++first; } } - -#if ETL_USING_BUILTIN_MEMSET - template - ETL_CONSTEXPR14 - typename etl::enable_if::type - fill(TIterator first, TIterator last, const TValue& value) - { - __builtin_memset(first, value, last - first); - } -#elif ETL_FORCE_CONSTEXPR_ALGORITHMS - template - ETL_CONSTEXPR14 - typename etl::enable_if::type - fill(TIterator first, TIterator last, const TValue& value) - { - while (first != last) - { - *first++ = value; - } - } -#else - template - typename etl::enable_if::type - fill(TIterator first, TIterator last, const TValue& value) - { - memset(first, value, last - first); - } -#endif #endif //*************************************************************************** // fill_n + //*************************************************************************** #if ETL_USING_STL && ETL_CPP20_SUPPORTED template constexpr TIterator fill_n(TIterator first, TSize count, const TValue& value) { return std::fill_n(first, count, value); } -#elif ETL_USING_STL && !ETL_FORCE_CONSTEXPR_ALGORITHMS - template - TIterator fill_n(TIterator first, TSize count, const TValue& value) - { - return std::fill_n(first, count, value); - } #else template - ETL_CONSTEXPR14 - typename etl::enable_if::type - fill_n(TIterator first, TSize count, const TValue& value) + ETL_CONSTEXPR14 TIterator fill_n(TIterator first, TSize count, const TValue& value) { while (count != 0) { @@ -818,41 +494,11 @@ namespace etl return first; } - -#if ETL_USING_BUILTIN_MEMSET - template - ETL_CONSTEXPR14 - typename etl::enable_if::type - fill_n(TIterator first, TSize count, const TValue& value) - { - return TIterator(__builtin_memset(first, value, count)); - } -#elif ETL_FORCE_CONSTEXPR_ALGORITHMS - template - ETL_CONSTEXPR14 - typename etl::enable_if::type - fill_n(TIterator first, TSize count, const TValue& value) - { - while (count != 0) - { - *first++ = value; - --count; - } - - return first; - } -#else - template - typename etl::enable_if::type - fill_n(TIterator first, TSize count, const TValue& value) - { - return TIterator(memset(first, value, count)); - } -#endif #endif //*************************************************************************** // count + //*************************************************************************** template ETL_NODISCARD ETL_CONSTEXPR14 @@ -875,6 +521,7 @@ namespace etl //*************************************************************************** // count_if + //*************************************************************************** template ETL_NODISCARD ETL_CONSTEXPR14 @@ -898,6 +545,7 @@ namespace etl //*************************************************************************** // equal + //*************************************************************************** #if ETL_USING_STL && ETL_CPP20_SUPPORTED template [[nodiscard]] @@ -914,28 +562,12 @@ namespace etl { return std::equal(first1, last1, first2, predicate); } -#elif ETL_USING_STL && !ETL_FORCE_CONSTEXPR_ALGORITHMS - template - bool equal(TIterator1 first1, TIterator1 last1, TIterator2 first2) - { - return std::equal(first1, last1, first2); - } - - template - bool equal(TIterator1 first1, TIterator1 last1, TIterator2 first2, TPredicate predicate) - { - return std::equal(first1, last1, first2, predicate); - } #else // Not pointer types or not trivially copyable. template ETL_NODISCARD ETL_CONSTEXPR14 - typename etl::enable_if::type - equal(TIterator1 first1, TIterator1 last1, TIterator2 first2) + bool equal(TIterator1 first1, TIterator1 last1, TIterator2 first2) { while (first1 != last1) { @@ -951,62 +583,6 @@ namespace etl return true; } -#if ETL_USING_BUILTIN_MEMCMP - // Using builtins. - // Pointer types and trivially copyable. - template - ETL_NODISCARD - ETL_CONSTEXPR14 - typename etl::enable_if::type - equal(TIterator1 first1, TIterator1 last1, TIterator2 first2) - { - typedef typename etl::iterator_traits::value_type value_t; - - return (__builtin_memcmp(first1, first2, sizeof(value_t) * (last1 - first1)) == 0); - } -#elif ETL_FORCE_CONSTEXPR_ALGORITHMS - // Forced constexpr. - template - ETL_NODISCARD - ETL_CONSTEXPR14 - typename etl::enable_if::type - equal(TIterator1 first1, TIterator1 last1, TIterator2 first2) - { - while (first1 != last1) - { - if (*first1 != *first2) - { - return false; - } - - ++first1; - ++first2; - } - - return true; - } -#else - // Pointer types and trivially copyable. - template - ETL_NODISCARD - typename etl::enable_if::type - equal(TIterator1 first1, TIterator1 last1, TIterator2 first2) - { - typedef typename etl::iterator_traits::value_type value_t; - - return (memcmp(first1, first2, sizeof(value_t) * (last1 - first1)) == 0); - } -#endif - // Predicate template ETL_NODISCARD @@ -1070,6 +646,7 @@ namespace etl //*************************************************************************** // lexicographical_compare + //*************************************************************************** template ETL_NODISCARD ETL_CONSTEXPR14 @@ -1096,7 +673,6 @@ namespace etl return (first1 == last1) && (first2 != last2); } - //*************************************************************************** // lexicographical_compare template ETL_NODISCARD @@ -1111,6 +687,7 @@ namespace etl //*************************************************************************** // min + //*************************************************************************** template ETL_NODISCARD ETL_CONSTEXPR @@ -1131,6 +708,7 @@ namespace etl //*************************************************************************** // max + //*************************************************************************** template ETL_NODISCARD ETL_CONSTEXPR @@ -1151,6 +729,7 @@ namespace etl //*************************************************************************** // for_each + //*************************************************************************** template ETL_CONSTEXPR14 TUnaryOperation for_each(TIterator first, TIterator last, TUnaryOperation unary_operation) @@ -1166,6 +745,7 @@ namespace etl //*************************************************************************** // transform + //*************************************************************************** template ETL_CONSTEXPR14 TIteratorOut transform(TIteratorIn first1, TIteratorIn last1, TIteratorOut d_first, TUnaryOperation unary_operation) @@ -1199,6 +779,7 @@ namespace etl //*************************************************************************** // replace + //*************************************************************************** template ETL_CONSTEXPR14 void replace(TIterator first, TIterator last, const T& old_value, const T& new_value) { @@ -1215,6 +796,7 @@ namespace etl //*************************************************************************** // replace_if + //*************************************************************************** template ETL_CONSTEXPR14 void replace_if(TIterator first, TIterator last, TPredicate predicate, const T& new_value) { @@ -1231,6 +813,7 @@ namespace etl //*************************************************************************** // Heap + //*************************************************************************** namespace private_heap { // Push Heap Helper @@ -1419,6 +1002,7 @@ namespace etl //*************************************************************************** // Search + //*************************************************************************** template ETL_NODISCARD ETL_CONSTEXPR14 @@ -1467,6 +1051,7 @@ namespace etl //*************************************************************************** // Rotate + //*************************************************************************** namespace private_algorithm { //********************************* @@ -1560,6 +1145,7 @@ namespace etl //*************************************************************************** // find_end + //*************************************************************************** // Predicate template ETL_NODISCARD @@ -3035,7 +2621,11 @@ namespace etl ///\ingroup algorithm //*************************************************************************** template +#if ETL_USING_STD_NAMESPACE + ETL_CONSTEXPR20 +#else ETL_CONSTEXPR14 +#endif void shell_sort(TIterator first, TIterator last, TCompare compare) { if (first == last) @@ -3073,7 +2663,11 @@ namespace etl ///\ingroup algorithm //*************************************************************************** template +#if ETL_USING_STD_NAMESPACE + ETL_CONSTEXPR20 +#else ETL_CONSTEXPR14 +#endif void shell_sort(TIterator first, TIterator last) { etl::shell_sort(first, last, etl::less::value_type>()); @@ -3152,7 +2746,7 @@ namespace etl ///\ingroup algorithm //*************************************************************************** template - ETL_CONSTEXPR14 + ETL_CONSTEXPR20 void selection_sort(TIterator first, TIterator last, TCompare compare) { TIterator min; @@ -3184,7 +2778,7 @@ namespace etl ///\ingroup algorithm //*************************************************************************** template - ETL_CONSTEXPR14 + ETL_CONSTEXPR20 void selection_sort(TIterator first, TIterator last) { selection_sort(first, last, etl::less::value_type>()); diff --git a/include/etl/profiles/determine_builtin_support.h b/include/etl/profiles/determine_builtin_support.h index afaddc7b..d811abc9 100644 --- a/include/etl/profiles/determine_builtin_support.h +++ b/include/etl/profiles/determine_builtin_support.h @@ -31,24 +31,6 @@ SOFTWARE. #ifndef ETL_DETERMINE_BUILTIN_SUPPORT_H_INCLUDED #define ETL_DETERMINE_BUILTIN_SUPPORT_H_INCLUDED -#if defined(ETL_USE_MEM_BUILTINS) // Set all of them to be true if not already defined - #if !defined(ETL_USING_BUILTIN_MEMCMP) - #define ETL_USING_BUILTIN_MEMCMP 1 - #endif - - #if !defined(ETL_USING_BUILTIN_MEMCPY) - #define ETL_USING_BUILTIN_MEMCPY 1 - #endif - - #if !defined(ETL_USING_BUILTIN_MEMMOVE) - #define ETL_USING_BUILTIN_MEMMOVE 1 - #endif - - #if !defined(ETL_USING_BUILTIN_MEMSET) - #define ETL_USING_BUILTIN_MEMSET 1 - #endif -#endif - #if defined(ETL_USE_TYPE_TRAITS_BUILTINS) // Set all of them to be true if not already defined #if !defined(ETL_USING_BUILTIN_IS_ASSIGNABLE) #define ETL_USING_BUILTIN_IS_ASSIGNABLE 1 @@ -72,22 +54,6 @@ SOFTWARE. #endif #if defined(__has_builtin) // Use __has_builtin to check for existence of builtin functions? - #if !defined(ETL_USING_BUILTIN_MEMCMP) - #define ETL_USING_BUILTIN_MEMCMP __has_builtin(__builtin_memcmp) - #endif - - #if !defined(ETL_USING_BUILTIN_MEMCPY) - #define ETL_USING_BUILTIN_MEMCPY __has_builtin(__builtin_memcpy) - #endif - - #if !defined(ETL_USING_BUILTIN_MEMMOVE) - #define ETL_USING_BUILTIN_MEMMOVE __has_builtin(__builtin_memmove) - #endif - - #if !defined(ETL_USING_BUILTIN_MEMSET) - #define ETL_USING_BUILTIN_MEMSET __has_builtin(__builtin_memset) - #endif - #if !defined(ETL_USING_BUILTIN_IS_ASSIGNABLE) #define ETL_USING_BUILTIN_IS_ASSIGNABLE __has_builtin(__is_assignable) #endif @@ -110,22 +76,6 @@ SOFTWARE. #endif // The default. Set to 0, if not already set. -#if !defined(ETL_USING_BUILTIN_MEMCMP) - #define ETL_USING_BUILTIN_MEMCMP 0 -#endif - -#if !defined(ETL_USING_BUILTIN_MEMCPY) - #define ETL_USING_BUILTIN_MEMCPY 0 -#endif - -#if !defined(ETL_USING_BUILTIN_MEMMOVE) - #define ETL_USING_BUILTIN_MEMMOVE 0 -#endif - -#if !defined(ETL_USING_BUILTIN_MEMSET) - #define ETL_USING_BUILTIN_MEMSET 0 -#endif - #if !defined(ETL_USING_BUILTIN_IS_ASSIGNABLE) #define ETL_USING_BUILTIN_IS_ASSIGNABLE 0 #endif