src/cx/utils.h

changeset 649
12c2b10b51a9
parent 628
1e2be40f0cb5
child 651
19d1a8422f6e
equal deleted inserted replaced
648:4e115b610b37 649:12c2b10b51a9
56 #if (__GNUC__ >= 5 || defined(__clang__)) && !defined(CX_NO_SZMUL_BUILTIN) 56 #if (__GNUC__ >= 5 || defined(__clang__)) && !defined(CX_NO_SZMUL_BUILTIN)
57 #define CX_SZMUL_BUILTIN 57 #define CX_SZMUL_BUILTIN
58 58
59 #if __WORDSIZE == 32 59 #if __WORDSIZE == 32
60 /** 60 /**
61 * Alias for \c __builtin_umul_overflow.
62 *
63 * Performs a multiplication of size_t values and checks for overflow.
64 *
65 * @param a first operand
66 * @param b second operand
67 * @param result a pointer to a size_t, where the result should
68 * be stored
69 * @return zero, if no overflow occurred and the result is correct, non-zero
70 * otherwise
71 */
72 #define cx_szmul(a, b, result) __builtin_umul_overflow(a, b, result)
73 #else // __WORDSIZE != 32
74 /**
75 * Alias for \c __builtin_umull_overflow. 61 * Alias for \c __builtin_umull_overflow.
76 * 62 *
77 * Performs a multiplication of size_t values and checks for overflow. 63 * Performs a multiplication of size_t values and checks for overflow.
78 * 64 *
79 * @param a first operand 65 * @param a first operand
82 * be stored 68 * be stored
83 * @return zero, if no overflow occurred and the result is correct, non-zero 69 * @return zero, if no overflow occurred and the result is correct, non-zero
84 * otherwise 70 * otherwise
85 */ 71 */
86 #define cx_szmul(a, b, result) __builtin_umull_overflow(a, b, result) 72 #define cx_szmul(a, b, result) __builtin_umull_overflow(a, b, result)
73 #else // __WORDSIZE != 32
74 /**
75 * Alias for \c __builtin_umulll_overflow.
76 *
77 * Performs a multiplication of size_t values and checks for overflow.
78 *
79 * @param a first operand
80 * @param b second operand
81 * @param result a pointer to a size_t, where the result should
82 * be stored
83 * @return zero, if no overflow occurred and the result is correct, non-zero
84 * otherwise
85 */
86 #define cx_szmul(a, b, result) __builtin_umulll_overflow(a, b, result)
87 #endif // __WORDSIZE 87 #endif // __WORDSIZE
88 88
89 #else // no GNUC or clang bultin 89 #else // no GNUC or clang bultin
90 90
91 /** 91 /**

mercurial