Commit 5dcb1af
Changed files (7)
util
util/mathops/i_round_down.h
@@ -0,0 +1,41 @@
+#ifndef NOTLIBC_HEADER_UTIL_MATHOPS_I_ROUND_DOWN_INCLUDED
+#define NOTLIBC_HEADER_UTIL_MATHOPS_I_ROUND_DOWN_INCLUDED
+
+#include "platform/common/types.h"
+#include "../safemath.h"
+
+static inline Status u64_round_down(u64 number, u64 multiple, u64 *out) {
+ if( multiple == 0 ) return S_FAILURE | ERRSRC_ARG_2 | ERR_INVALID_ARGUMENT;
+ *out = number - (number%multiple);
+ return S_SUCCESS;
+}
+
+static inline Status u32_round_down(u32 number, u32 multiple, u32 *out) {
+ if( multiple == 0 ) return S_FAILURE | ERRSRC_ARG_2 | ERR_INVALID_ARGUMENT;
+ *out = number - (number%multiple);
+ return S_SUCCESS;
+}
+
+static inline Status u16_round_down(u16 number, u16 multiple, u16 *out) {
+ if( multiple == 0 ) return S_FAILURE | ERRSRC_ARG_2 | ERR_INVALID_ARGUMENT;
+ *out = number - (number%multiple);
+ return S_SUCCESS;
+}
+
+static inline Status u8_round_down(u8 number, u8 multiple, u8 *out) {
+ if( multiple == 0 ) return S_FAILURE | ERRSRC_ARG_2 | ERR_INVALID_ARGUMENT;
+ *out = number - (number%multiple);
+ return S_SUCCESS;
+}
+
+#if ARCH == ARCH_X86_64
+static inline Status usize_round_down( usize number, usize multiple, usize *out ) {
+ return u64_round_down(number, multiple, out);
+}
+#elif ARCH == ARCH_I386
+static inline Status usize_round_down( usize number, usize multiple, usize *out ) {
+ return u32_round_down(number, multiple, out);
+}
+#endif
+
+#endif
util/mathops/i_round_up.h
@@ -0,0 +1,61 @@
+#ifndef NOTLIBC_HEADER_UTIL_MATHOPS_I_ROUND_UP_INCLUDED
+#define NOTLIBC_HEADER_UTIL_MATHOPS_I_ROUND_UP_INCLUDED
+
+#include "platform/common/types.h"
+#include "../safemath.h"
+
+static inline Status u64_round_up( u64 number, u64 multiple, u64 *out ) {
+ if( multiple == 0 ) return S_FAILURE | ERRSRC_ARG_2 | ERR_INVALID_ARGUMENT;
+ u64 rem = number%multiple;
+ if( rem == 0 ) {
+ *out = number;
+ } else {
+ TRY( u64_add( number, multiple - rem, out ) );
+ }
+ return S_SUCCESS;
+}
+
+static inline Status u32_round_up( u32 number, u32 multiple, u32 *out ) {
+ if( multiple == 0 ) return S_FAILURE | ERRSRC_ARG_2 | ERR_INVALID_ARGUMENT;
+ u32 rem = number%multiple;
+ if( rem == 0 ) {
+ *out = number;
+ } else {
+ TRY( u32_add( number, multiple - rem, out ) );
+ }
+ return S_SUCCESS;
+}
+
+static inline Status u16_round_up( u16 number, u16 multiple, u16 *out ) {
+ if( multiple == 0 ) return S_FAILURE | ERRSRC_ARG_2 | ERR_INVALID_ARGUMENT;
+ u16 rem = number%multiple;
+ if( rem == 0 ) {
+ *out = number;
+ } else {
+ TRY( u16_add( number, multiple - rem, out ) );
+ }
+ return S_SUCCESS;
+}
+
+static inline Status u8_round_up( u8 number, u8 multiple, u8 *out ) {
+ if( multiple == 0 ) return S_FAILURE | ERRSRC_ARG_2 | ERR_INVALID_ARGUMENT;
+ u8 rem = number%multiple;
+ if( rem == 0 ) {
+ *out = number;
+ } else {
+ TRY( u8_add( number, multiple - rem, out ) );
+ }
+ return S_SUCCESS;
+}
+
+#if ARCH == ARCH_X86_64
+static inline Status usize_round_up( usize number, usize multiple, usize *out ) {
+ return u64_round_up(number, multiple, out);
+}
+#elif ARCH == ARCH_I386
+static inline Status usize_round_up( usize number, usize multiple, usize *out ) {
+ return u32_round_up(number, multiple, out);
+}
+#endif
+
+#endif
util/mathops/is_power_of_two.h
@@ -0,0 +1,26 @@
+#ifndef NOTLIBC_HEADER_UTIL_MATHOPS_IS_POWER_OF_TWO_INCLUDED
+#define NOTLIBC_HEADER_UTIL_MATHOPS_IS_POWER_OF_TWO_INCLUDED
+
+#include "platform/common/types.h"
+
+static inline u8 u64_is_power_of_two( u64 num ) {
+ return num && !(num & (num - 1));
+}
+
+static inline u8 u32_is_power_of_two( u32 num ) {
+ return num && !(num & (num - 1));
+}
+
+static inline u8 u16_is_power_of_two( u16 num ) {
+ return num && !(num & (num - 1));
+}
+
+static inline u8 u8_is_power_of_two( u8 num ) {
+ return num && !(num & (num - 1));
+}
+
+static inline u8 usize_is_power_of_two( usize num ) {
+ return num && !(num & (num - 1));
+}
+
+#endif
util/mathops/max.h
@@ -0,0 +1,42 @@
+#ifndef NOTLIBC_HEADER_UTIL_MATHOPS_MIN_INCLUDED
+#define NOTLIBC_HEADER_UTIL_MATHOPS_MIN_INCLUDED
+
+#include "platform/common/types.h"
+
+static inline u64 u64_max( u64 n1, u64 n2 ) {
+ return (n1 >= n2)? n1 : n2;
+}
+
+static inline u32 u32_max( u32 n1, u32 n2 ) {
+ return (n1 >= n2)? n1 : n2;
+}
+
+static inline u16 u16_max( u16 n1, u16 n2 ) {
+ return (n1 >= n2)? n1 : n2;
+}
+
+static inline u8 u8_max( u8 n1, u8 n2 ) {
+ return (n1 >= n2)? n1 : n2;
+}
+
+static inline usize usize_max( usize n1, usize n2 ) {
+ return (n1 >= n2)? n1 : n2;
+}
+
+static inline s64 s64_max( s64 n1, s64 n2 ) {
+ return (n1 >= n2)? n1 : n2;
+}
+
+static inline s32 s32_max( s32 n1, s32 n2 ) {
+ return (n1 >= n2)? n1 : n2;
+}
+
+static inline s16 s16_max( s16 n1, s16 n2 ) {
+ return (n1 >= n2)? n1 : n2;
+}
+
+static inline s8 s8_max( s8 n1, s8 n2 ) {
+ return (n1 >= n2)? n1 : n2;
+}
+
+#endif
util/mathops/min.h
@@ -0,0 +1,42 @@
+#ifndef NOTLIBC_HEADER_UTIL_MATHOPS_MIN_INCLUDED
+#define NOTLIBC_HEADER_UTIL_MATHOPS_MIN_INCLUDED
+
+#include "platform/common/types.h"
+
+static inline u64 u64_min( u64 n1, u64 n2 ) {
+ return (n2 >= n1)? n1 : n2;
+}
+
+static inline u32 u32_min( u32 n1, u32 n2 ) {
+ return (n2 >= n1)? n1 : n2;
+}
+
+static inline u16 u16_min( u16 n1, u16 n2 ) {
+ return (n2 >= n1)? n1 : n2;
+}
+
+static inline u8 u8_min( u8 n1, u8 n2 ) {
+ return (n2 >= n1)? n1 : n2;
+}
+
+static inline usize usize_min( usize n1, usize n2 ) {
+ return (n2 >= n1)? n1 : n2;
+}
+
+static inline s64 s64_min( s64 n1, s64 n2 ) {
+ return (n2 >= n1)? n1 : n2;
+}
+
+static inline s32 s32_min( s32 n1, s32 n2 ) {
+ return (n2 >= n1)? n1 : n2;
+}
+
+static inline s16 s16_min( s16 n1, s16 n2 ) {
+ return (n2 >= n1)? n1 : n2;
+}
+
+static inline s8 s8_min( s8 n1, s8 n2 ) {
+ return (n2 >= n1)? n1 : n2;
+}
+
+#endif
util/mathops.h
@@ -2,113 +2,10 @@
#define NOTLIBC_HEADER_UTIL_MATHOPS_INCLUDED
#include "./safemath.h"
-
-static inline u8 u64_is_power_of_two( u64 num ) {
- return num && !(num & (num - 1));
-}
-
-static inline u8 u32_is_power_of_two( u32 num ) {
- return num && !(num & (num - 1));
-}
-
-static inline u8 u16_is_power_of_two( u16 num ) {
- return num && !(num & (num - 1));
-}
-
-static inline u8 u8_is_power_of_two( u8 num ) {
- return num && !(num & (num - 1));
-}
-
-static inline u8 usize_is_power_of_two( usize num ) {
- return num && !(num & (num - 1));
-}
-
-static inline Status u64_round_up( u64 number, u64 multiple, u64 *out ) {
- if( multiple == 0 ) return S_FAILURE | ERRSRC_ARG_2 | ERR_INVALID_ARGUMENT;
- u64 rem = number%multiple;
- if( rem == 0 ) {
- *out = number;
- } else {
- TRY( u64_add( number, multiple - rem, out ) );
- }
- return S_SUCCESS;
-}
-
-static inline Status u32_round_up( u32 number, u32 multiple, u32 *out ) {
- if( multiple == 0 ) return S_FAILURE | ERRSRC_ARG_2 | ERR_INVALID_ARGUMENT;
- u32 rem = number%multiple;
- if( rem == 0 ) {
- *out = number;
- } else {
- TRY( u32_add( number, multiple - rem, out ) );
- }
- return S_SUCCESS;
-}
-
-static inline Status u16_round_up( u16 number, u16 multiple, u16 *out ) {
- if( multiple == 0 ) return S_FAILURE | ERRSRC_ARG_2 | ERR_INVALID_ARGUMENT;
- u16 rem = number%multiple;
- if( rem == 0 ) {
- *out = number;
- } else {
- TRY( u16_add( number, multiple - rem, out ) );
- }
- return S_SUCCESS;
-}
-
-static inline Status u8_round_up( u8 number, u8 multiple, u8 *out ) {
- if( multiple == 0 ) return S_FAILURE | ERRSRC_ARG_2 | ERR_INVALID_ARGUMENT;
- u8 rem = number%multiple;
- if( rem == 0 ) {
- *out = number;
- } else {
- TRY( u8_add( number, multiple - rem, out ) );
- }
- return S_SUCCESS;
-}
-
-#if ARCH == ARCH_X86_64
-static inline Status usize_round_up( usize number, usize multiple, usize *out ) {
- return u64_round_up(number, multiple, out);
-}
-#elif ARCH == ARCH_I386
-static inline Status usize_round_up( usize number, usize multiple, usize *out ) {
- return u32_round_up(number, multiple, out);
-}
-#endif
-
-static inline Status u64_round_down(u64 number, u64 multiple, u64 *out) {
- if( multiple == 0 ) return S_FAILURE | ERRSRC_ARG_2 | ERR_INVALID_ARGUMENT;
- *out = number - (number%multiple);
- return S_SUCCESS;
-}
-
-static inline Status u32_round_down(u32 number, u32 multiple, u32 *out) {
- if( multiple == 0 ) return S_FAILURE | ERRSRC_ARG_2 | ERR_INVALID_ARGUMENT;
- *out = number - (number%multiple);
- return S_SUCCESS;
-}
-
-static inline Status u16_round_down(u16 number, u16 multiple, u16 *out) {
- if( multiple == 0 ) return S_FAILURE | ERRSRC_ARG_2 | ERR_INVALID_ARGUMENT;
- *out = number - (number%multiple);
- return S_SUCCESS;
-}
-
-static inline Status u8_round_down(u8 number, u8 multiple, u8 *out) {
- if( multiple == 0 ) return S_FAILURE | ERRSRC_ARG_2 | ERR_INVALID_ARGUMENT;
- *out = number - (number%multiple);
- return S_SUCCESS;
-}
-
-#if ARCH == ARCH_X86_64
-static inline Status usize_round_down( usize number, usize multiple, usize *out ) {
- return u64_round_down(number, multiple, out);
-}
-#elif ARCH == ARCH_I386
-static inline Status usize_round_down( usize number, usize multiple, usize *out ) {
- return u32_round_down(number, multiple, out);
-}
-#endif
+#include "./mathops/min.h"
+#include "./mathops/max.h"
+#include "./mathops/is_power_of_two.h"
+#include "./mathops/i_round_up.h"
+#include "./mathops/i_round_down.h"
#endif
util/safemath.h
@@ -16,6 +16,13 @@ static inline Status u8_add(u8 n1, u8 n2, u8 *out);
static inline Status u16_add(u16 n1, u16 n2, u16 *out);
static inline Status u32_add(u32 n1, u32 n2, u32 *out);
static inline Status u64_add(u64 n1, u64 n2, u64 *out);
+static inline Status usize_add(u64 n1, u64 n2, u64 *out) {
+ #if ARCH == ARCH_X86_64
+ return u64_add( n1, n2, out );
+ #elif ARCH == ARCH_I386
+ return u32_add( n1, n2, out );
+ #endif
+}
static inline Status s8_add(s8 n1, s8 n2, s8 *out);
static inline Status s16_add(s16 n1, s16 n2, s16 *out);