29
29
#endif
30
30
31
31
#if use_builtin (__builtin_add_overflow )
32
+ static inline bool u16_add_overflow (u16_t a , u16_t b , u16_t * result )
33
+ {
34
+ return __builtin_add_overflow (a , b , result );
35
+ }
36
+
32
37
static inline bool u32_add_overflow (u32_t a , u32_t b , u32_t * result )
33
38
{
34
39
return __builtin_add_overflow (a , b , result );
@@ -44,6 +49,15 @@ static inline bool size_add_overflow(size_t a, size_t b, size_t *result)
44
49
return __builtin_add_overflow (a , b , result );
45
50
}
46
51
#else /* !use_builtin(__builtin_add_overflow) */
52
+ static inline bool u16_add_overflow (u16_t a , u16_t b , u16_t * result )
53
+ {
54
+ u16_t c = a + b ;
55
+
56
+ * result = c ;
57
+
58
+ return c < a ;
59
+ }
60
+
47
61
static inline bool u32_add_overflow (u32_t a , u32_t b , u32_t * result )
48
62
{
49
63
u32_t c = a + b ;
@@ -73,6 +87,11 @@ static inline bool size_add_overflow(size_t a, size_t b, size_t *result)
73
87
#endif /* use_builtin(__builtin_add_overflow) */
74
88
75
89
#if use_builtin (__builtin_mul_overflow )
90
+ static inline bool u16_mul_overflow (u16_t a , u16_t b , u16_t * result )
91
+ {
92
+ return __builtin_mul_overflow (a , b , result );
93
+ }
94
+
76
95
static inline bool u32_mul_overflow (u32_t a , u32_t b , u32_t * result )
77
96
{
78
97
return __builtin_mul_overflow (a , b , result );
@@ -88,6 +107,15 @@ static inline bool size_mul_overflow(size_t a, size_t b, size_t *result)
88
107
return __builtin_mul_overflow (a , b , result );
89
108
}
90
109
#else /* !use_builtin(__builtin_mul_overflow) */
110
+ static inline bool u16_mul_overflow (u16_t a , u16_t b , u16_t * result )
111
+ {
112
+ u16_t c = a * b ;
113
+
114
+ * result = c ;
115
+
116
+ return a != 0 && (c / a ) != b ;
117
+ }
118
+
91
119
static inline bool u32_mul_overflow (u32_t a , u32_t b , u32_t * result )
92
120
{
93
121
u32_t c = a * b ;
0 commit comments