aboutsummaryrefslogtreecommitdiffstats
path: root/libj2.h
diff options
context:
space:
mode:
Diffstat (limited to 'libj2.h')
-rw-r--r--libj2.h62
1 files changed, 62 insertions, 0 deletions
diff --git a/libj2.h b/libj2.h
new file mode 100644
index 0000000..0c3d882
--- /dev/null
+++ b/libj2.h
@@ -0,0 +1,62 @@
+/* See LICENSE file for copyright and license details. */
+#ifndef LIBJ2_H
+#define LIBJ2_H
+
+#include <limits.h>
+#include <stdint.h>
+#include <stdarg.h>
+
+#if 1
+# if defined(__GNUC__)
+# define LIBJ2_USE_GCC_INTRINSIC_FUNCTIONS_
+# endif
+#endif
+
+
+/**
+ * The number of bits in an `uintmax_t`
+ */
+#define LIBJ2_JU_BIT ((unsigned)CHAR_BIT * (unsigned)sizeof(uintmax_t))
+
+/**
+ * The number of bits in an `struct libj2_j2u`
+ */
+#define LIBJ2_J2U_BIT (2U * LIBJ2_JU_BIT)
+
+
+/**
+ * Unsigned double-maximum precision integer
+ *
+ * If `uintmax_t` is a 64-bit type, this `struct` is a 128-bit type
+ */
+struct libj2_j2u {
+ /**
+ * Most significant half
+ */
+ uintmax_t high;
+
+ /**
+ * Least significant half
+ */
+ uintmax_t low;
+};
+
+
+#include "libj2/constants.h"
+#include "libj2/signum.h"
+#include "libj2/constructors.h"
+#include "libj2/unsigned-comparsion.h"
+#include "libj2/bitwise-logic.h"
+#include "libj2/bit-shifting.h"
+#include "libj2/sign-shifting.h"
+#include "libj2/addition.h"
+#include "libj2/subtraction.h"
+#include "libj2/multiplication.h"
+#include "libj2/division.h"
+
+
+#if defined(LIBJ2_USE_GCC_INTRINSIC_FUNCTIONS_)
+# undef LIBJ2_USE_GCC_INTRINSIC_FUNCTIONS_
+#endif
+
+#endif