aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--Makefile3
-rw-r--r--libj2.76
-rw-r--r--libj2_cfs_j2u.351
-rw-r--r--libj2_cfs_j2u.c1
l---------libj2_cfs_j2u_to_j2u.31
-rw-r--r--libj2_cfs_j2u_to_j2u.c1
-rw-r--r--libj2_clo_j2u.353
-rw-r--r--libj2_clo_j2u.c1
-rw-r--r--libj2_cls_j2u.351
-rw-r--r--libj2_cls_j2u.c1
l---------libj2_cls_j2u_to_j2u.31
-rw-r--r--libj2_cls_j2u_to_j2u.c1
-rw-r--r--libj2_clz_j2u.353
-rw-r--r--libj2_clz_j2u.c1
-rw-r--r--libj2_co_j2u.341
-rw-r--r--libj2_co_j2u.c1
-rw-r--r--libj2_cto_j2u.353
-rw-r--r--libj2_cto_j2u.c1
-rw-r--r--libj2_ctz_j2u.353
-rw-r--r--libj2_ctz_j2u.c1
-rw-r--r--libj2_cz_j2u.341
-rw-r--r--libj2_cz_j2u.c1
-rw-r--r--libj2_ffc_j2u.352
-rw-r--r--libj2_ffc_j2u.c1
-rw-r--r--libj2_ffs_j2u.352
-rw-r--r--libj2_ffs_j2u.c1
-rw-r--r--libj2_flc_j2u.352
-rw-r--r--libj2_flc_j2u.c1
-rw-r--r--libj2_fls_j2u.352
-rw-r--r--libj2_fls_j2u.c1
-rw-r--r--libj2_j2i_cmp_j2i.365
-rw-r--r--libj2_j2i_cmp_j2i.c1
l---------libj2_j2i_cmp_j2u.31
-rw-r--r--libj2_j2i_cmp_j2u.c1
l---------libj2_j2i_cmp_ji.31
-rw-r--r--libj2_j2i_cmp_ji.c1
l---------libj2_j2i_cmp_ju.31
-rw-r--r--libj2_j2i_cmp_ju.c1
-rw-r--r--libj2_j2i_eq_j2i.353
-rw-r--r--libj2_j2i_eq_j2i.c1
l---------libj2_j2i_eq_j2u.31
-rw-r--r--libj2_j2i_eq_j2u.c1
l---------libj2_j2i_eq_ji.31
-rw-r--r--libj2_j2i_eq_ji.c1
l---------libj2_j2i_eq_ju.31
-rw-r--r--libj2_j2i_eq_ju.c1
-rw-r--r--libj2_j2i_ge_j2i.353
-rw-r--r--libj2_j2i_ge_j2i.c1
l---------libj2_j2i_ge_j2u.31
-rw-r--r--libj2_j2i_ge_j2u.c1
l---------libj2_j2i_ge_ji.31
-rw-r--r--libj2_j2i_ge_ji.c1
l---------libj2_j2i_ge_ju.31
-rw-r--r--libj2_j2i_ge_ju.c1
-rw-r--r--libj2_j2i_gt_j2i.353
-rw-r--r--libj2_j2i_gt_j2i.c1
l---------libj2_j2i_gt_j2u.31
-rw-r--r--libj2_j2i_gt_j2u.c1
l---------libj2_j2i_gt_ji.31
-rw-r--r--libj2_j2i_gt_ji.c1
l---------libj2_j2i_gt_ju.31
-rw-r--r--libj2_j2i_gt_ju.c1
-rw-r--r--libj2_j2i_le_j2i.353
-rw-r--r--libj2_j2i_le_j2i.c1
l---------libj2_j2i_le_j2u.31
-rw-r--r--libj2_j2i_le_j2u.c1
l---------libj2_j2i_le_ji.31
-rw-r--r--libj2_j2i_le_ji.c1
l---------libj2_j2i_le_ju.31
-rw-r--r--libj2_j2i_le_ju.c1
-rw-r--r--libj2_j2i_lt_j2i.353
-rw-r--r--libj2_j2i_lt_j2i.c1
l---------libj2_j2i_lt_j2u.31
-rw-r--r--libj2_j2i_lt_j2u.c1
l---------libj2_j2i_lt_ji.31
-rw-r--r--libj2_j2i_lt_ji.c1
l---------libj2_j2i_lt_ju.31
-rw-r--r--libj2_j2i_lt_ju.c1
-rw-r--r--libj2_j2i_mul_j2i.c274
-rw-r--r--libj2_j2i_ne_j2i.353
-rw-r--r--libj2_j2i_ne_j2i.c1
l---------libj2_j2i_ne_j2u.31
-rw-r--r--libj2_j2i_ne_j2u.c1
l---------libj2_j2i_ne_ji.31
-rw-r--r--libj2_j2i_ne_ji.c1
l---------libj2_j2i_ne_ju.31
-rw-r--r--libj2_j2i_ne_ju.c1
-rw-r--r--libj2_j2i_sub_j2i.c12
-rw-r--r--libj2_j2i_sub_ji.c12
l---------libj2_j2u_cmp_j2i.31
-rw-r--r--libj2_j2u_cmp_j2i.c1
l---------libj2_j2u_cmp_j2u.31
-rw-r--r--libj2_j2u_cmp_j2u.c1
l---------libj2_j2u_cmp_ji.31
-rw-r--r--libj2_j2u_cmp_ji.c1
l---------libj2_j2u_cmp_ju.31
-rw-r--r--libj2_j2u_cmp_ju.c1
l---------libj2_j2u_eq_j2i.31
-rw-r--r--libj2_j2u_eq_j2i.c1
l---------libj2_j2u_eq_j2u.31
-rw-r--r--libj2_j2u_eq_j2u.c1
l---------libj2_j2u_eq_ji.31
-rw-r--r--libj2_j2u_eq_ji.c1
l---------libj2_j2u_eq_ju.31
-rw-r--r--libj2_j2u_eq_ju.c1
l---------libj2_j2u_ge_j2i.31
-rw-r--r--libj2_j2u_ge_j2i.c1
l---------libj2_j2u_ge_j2u.31
-rw-r--r--libj2_j2u_ge_j2u.c1
l---------libj2_j2u_ge_ji.31
-rw-r--r--libj2_j2u_ge_ji.c1
l---------libj2_j2u_ge_ju.31
-rw-r--r--libj2_j2u_ge_ju.c1
l---------libj2_j2u_gt_j2i.31
-rw-r--r--libj2_j2u_gt_j2i.c1
l---------libj2_j2u_gt_j2u.31
-rw-r--r--libj2_j2u_gt_j2u.c1
l---------libj2_j2u_gt_ji.31
-rw-r--r--libj2_j2u_gt_ji.c1
l---------libj2_j2u_gt_ju.31
-rw-r--r--libj2_j2u_gt_ju.c1
l---------libj2_j2u_le_j2i.31
-rw-r--r--libj2_j2u_le_j2i.c1
l---------libj2_j2u_le_j2u.31
-rw-r--r--libj2_j2u_le_j2u.c1
l---------libj2_j2u_le_ji.31
-rw-r--r--libj2_j2u_le_ji.c1
l---------libj2_j2u_le_ju.31
-rw-r--r--libj2_j2u_le_ju.c1
l---------libj2_j2u_lt_j2i.31
-rw-r--r--libj2_j2u_lt_j2i.c1
l---------libj2_j2u_lt_j2u.31
-rw-r--r--libj2_j2u_lt_j2u.c1
l---------libj2_j2u_lt_ji.31
-rw-r--r--libj2_j2u_lt_ji.c1
l---------libj2_j2u_lt_ju.31
-rw-r--r--libj2_j2u_lt_ju.c1
l---------libj2_j2u_ne_j2i.31
-rw-r--r--libj2_j2u_ne_j2i.c1
l---------libj2_j2u_ne_j2u.31
-rw-r--r--libj2_j2u_ne_j2u.c1
l---------libj2_j2u_ne_ji.31
-rw-r--r--libj2_j2u_ne_ji.c1
l---------libj2_j2u_ne_ju.31
-rw-r--r--libj2_j2u_ne_ju.c1
l---------libj2_ji_cmp_j2i.31
-rw-r--r--libj2_ji_cmp_j2i.c1
l---------libj2_ji_cmp_j2u.31
-rw-r--r--libj2_ji_cmp_j2u.c1
l---------libj2_ji_eq_j2i.31
-rw-r--r--libj2_ji_eq_j2i.c1
l---------libj2_ji_eq_j2u.31
-rw-r--r--libj2_ji_eq_j2u.c1
l---------libj2_ji_ge_j2i.31
-rw-r--r--libj2_ji_ge_j2i.c1
l---------libj2_ji_ge_j2u.31
-rw-r--r--libj2_ji_ge_j2u.c1
l---------libj2_ji_gt_j2i.31
-rw-r--r--libj2_ji_gt_j2i.c1
l---------libj2_ji_gt_j2u.31
-rw-r--r--libj2_ji_gt_j2u.c1
l---------libj2_ji_le_j2i.31
-rw-r--r--libj2_ji_le_j2i.c1
l---------libj2_ji_le_j2u.31
-rw-r--r--libj2_ji_le_j2u.c1
l---------libj2_ji_lt_j2i.31
-rw-r--r--libj2_ji_lt_j2i.c1
l---------libj2_ji_lt_j2u.31
-rw-r--r--libj2_ji_lt_j2u.c1
l---------libj2_ji_ne_j2i.31
-rw-r--r--libj2_ji_ne_j2i.c1
l---------libj2_ji_ne_j2u.31
-rw-r--r--libj2_ji_ne_j2u.c1
l---------libj2_ju_cmp_j2i.31
-rw-r--r--libj2_ju_cmp_j2i.c1
l---------libj2_ju_cmp_j2u.31
-rw-r--r--libj2_ju_cmp_j2u.c1
l---------libj2_ju_eq_j2i.31
-rw-r--r--libj2_ju_eq_j2i.c1
l---------libj2_ju_eq_j2u.31
-rw-r--r--libj2_ju_eq_j2u.c1
l---------libj2_ju_ge_j2i.31
-rw-r--r--libj2_ju_ge_j2i.c1
l---------libj2_ju_ge_j2u.31
-rw-r--r--libj2_ju_ge_j2u.c1
l---------libj2_ju_gt_j2i.31
-rw-r--r--libj2_ju_gt_j2i.c1
l---------libj2_ju_gt_j2u.31
-rw-r--r--libj2_ju_gt_j2u.c1
l---------libj2_ju_le_j2i.31
-rw-r--r--libj2_ju_le_j2i.c1
l---------libj2_ju_le_j2u.31
-rw-r--r--libj2_ju_le_j2u.c1
l---------libj2_ju_lt_j2i.31
-rw-r--r--libj2_ju_lt_j2i.c1
l---------libj2_ju_lt_j2u.31
-rw-r--r--libj2_ju_lt_j2u.c1
l---------libj2_ju_ne_j2i.31
-rw-r--r--libj2_ju_ne_j2i.c1
l---------libj2_ju_ne_j2u.31
-rw-r--r--libj2_ju_ne_j2u.c1
-rw-r--r--libj2_kfs_j2u.352
-rw-r--r--libj2_kfs_j2u.c1
l---------libj2_kfs_j2u_to_j2u.31
-rw-r--r--libj2_kfs_j2u_to_j2u.c1
-rw-r--r--libj2_kls_j2u.352
-rw-r--r--libj2_kls_j2u.c1
l---------libj2_kls_j2u_to_j2u.31
-rw-r--r--libj2_kls_j2u_to_j2u.c1
-rw-r--r--libj2_parity_j2u.342
-rw-r--r--libj2_parity_j2u.c1
-rw-r--r--libj2_sfc_j2u.351
-rw-r--r--libj2_sfc_j2u.c1
l---------libj2_sfc_j2u_to_j2u.31
-rw-r--r--libj2_sfc_j2u_to_j2u.c1
-rw-r--r--libj2_slc_j2u.351
-rw-r--r--libj2_slc_j2u.c1
l---------libj2_slc_j2u_to_j2u.31
-rw-r--r--libj2_slc_j2u_to_j2u.c1
219 files changed, 1619 insertions, 113 deletions
diff --git a/Makefile b/Makefile
index 6969060..61ce8d9 100644
--- a/Makefile
+++ b/Makefile
@@ -554,7 +554,8 @@ MAN3 =\
LIBJ2_POSITIVE_OVERFLOW_UNKNOWN.3\
LIBJ2_POSITIVE_OVERFLOW.3\
LIBJ2_NEGATIVE_OVERFLOW_UNKNOWN.3\
- LIBJ2_NEGATIVE_OVERFLOW.3
+ LIBJ2_NEGATIVE_OVERFLOW.3\
+ $(OBJ:.o=.3)
all: libj2.a libj2.$(LIBEXT) $(TEST)
diff --git a/libj2.7 b/libj2.7
index 7275a69..eb793f7 100644
--- a/libj2.7
+++ b/libj2.7
@@ -293,7 +293,7 @@ Check whether a value is positive.
.BR libj2_j2i_is_negative (3)
Check whether a value is negative.
.TP
-.BR ibj2_sgn_j2i (3),
+.BR libj2_sgn_j2i (3),
.TQ
.BR libj2_sgn_j2u (3)
Perform three-way comparision against the value zero (get the
@@ -856,7 +856,7 @@ Calculate the difference between two values.
.BR libj2_j2u_rsub_ju (3)
Calculate the difference between two values. These functions
swap the position of the two operands.
-.TQ
+.TP
.BR libj2_j2i_sub_j2i_overflow (3),
.TQ
.BR libj2_j2i_sub_j2i_to_j2i_overflow (3),
@@ -880,7 +880,7 @@ swap the position of the two operands.
.BR libj2_ju_sub_ju_to_j2u_overflow (3)
Calculate the difference between two values, and detect
overflow.
-.TQ
+.TP
.BR libj2_j2i_rsub_j2i_overflow (3),
.TQ
.BR libj2_j2i_rsub_ji_overflow (3),
diff --git a/libj2_cfs_j2u.3 b/libj2_cfs_j2u.3
new file mode 100644
index 0000000..ee31cac
--- /dev/null
+++ b/libj2_cfs_j2u.3
@@ -0,0 +1,51 @@
+.TH LIBJ2_CFS_J2U 3 LIBJ2
+.SH NAME
+libj2_cfs_j2u \- Clear first set bit
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+void \fBlibj2_cfs_j2u\fP(struct libj2_j2u *\fIa\fP);
+void \fBlibj2_cfs_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, struct libj2_j2u *\fIr\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_cfs_j2u ()
+function clears the first (least significant)
+set bit in
+.I a
+(no modification if all bits are cleared).
+.PP
+The
+.BR libj2_cfs_j2u_to_j2u ()
+function performs the same action as
+.BR libj2_cfs_j2u ()
+but instead of modifying
+.IR a ,
+the result is stored in
+.IR r .
+.PP
+The arguments are assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+None.
+
+.SH ERRORS
+The
+.BR libj2_cfs_j2u ()
+and
+.BR libj2_cfs_j2u_to_j2u ()
+functions cannot fail.
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_cls_j2u (3),
+.BR libj2_ffs_j2u (3),
+.BR libj2_kfs_j2u (3),
+.BR libj2_sfc_j2u (3)
diff --git a/libj2_cfs_j2u.c b/libj2_cfs_j2u.c
index c2434e0..7a7793f 100644
--- a/libj2_cfs_j2u.c
+++ b/libj2_cfs_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_cfs_j2u(struct libj2_j2u *a);
-/* TODO Add man page */
#else
diff --git a/libj2_cfs_j2u_to_j2u.3 b/libj2_cfs_j2u_to_j2u.3
new file mode 120000
index 0000000..6e0d9f9
--- /dev/null
+++ b/libj2_cfs_j2u_to_j2u.3
@@ -0,0 +1 @@
+libj2_cfs_j2u.3 \ No newline at end of file
diff --git a/libj2_cfs_j2u_to_j2u.c b/libj2_cfs_j2u_to_j2u.c
index 2e0a11e..7b79314 100644
--- a/libj2_cfs_j2u_to_j2u.c
+++ b/libj2_cfs_j2u_to_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_cfs_j2u_to_j2u(const struct libj2_j2u *a, struct libj2_j2u *res);
-/* TODO Add man page */
#else
diff --git a/libj2_clo_j2u.3 b/libj2_clo_j2u.3
new file mode 100644
index 0000000..50362ff
--- /dev/null
+++ b/libj2_clo_j2u.3
@@ -0,0 +1,53 @@
+.TH LIBJ2_CLO_J2U 3 LIBJ2
+.SH NAME
+libj2_clo_j2u \- Count leading ones
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+unsigned \fBlibj2_clo_j2u\fP(const struct libj2_j2u *\fIa\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_clo_j2u ()
+function returns the number of leading set bits in
+.IR a .
+.PP
+In the case that all bits in
+.I a
+are set, all of them are counted as leading.
+.PP
+.I a
+is assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+The
+.BR libj2_clo_j2u ()
+function returns the number of set bits that
+are more significant than the most significant
+cleared bits in
+.IR a ,
+or the total number of bits in
+.I a
+if all its bits are set.
+
+.SH ERRORS
+The
+.BR libj2_clo_j2u ()
+function cannot fail.
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_clz_j2u (3),
+.BR libj2_cto_j2u (3),
+.BR libj2_co_j2u (3),
+.BR libj2_fls_j2u (3),
+.BR libj2_kls_j2u (3),
+.BR libj2_cls_j2u (3),
+.BR libj2_slc_j2u (3)
diff --git a/libj2_clo_j2u.c b/libj2_clo_j2u.c
index 8fa0d03..970f449 100644
--- a/libj2_clo_j2u.c
+++ b/libj2_clo_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline unsigned libj2_clo_j2u(const struct libj2_j2u *a);
-/* TODO Add man page */
#else
diff --git a/libj2_cls_j2u.3 b/libj2_cls_j2u.3
new file mode 100644
index 0000000..464a16a
--- /dev/null
+++ b/libj2_cls_j2u.3
@@ -0,0 +1,51 @@
+.TH LIBJ2_CLS_J2U 3 LIBJ2
+.SH NAME
+libj2_cls_j2u \- Clear last set bit
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+void \fBlibj2_cls_j2u\fP(struct libj2_j2u *\fIa\fP);
+void \fBlibj2_cls_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, struct libj2_j2u *\fIr\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_cls_j2u ()
+function clears the last (most significant)
+set bit in
+.I a
+(no modification if all bits are cleared).
+.PP
+The
+.BR libj2_cls_j2u_to_j2u ()
+function performs the same action as
+.BR libj2_cls_j2u ()
+but instead of modifying
+.IR a ,
+the result is stored in
+.IR r .
+.PP
+The arguments are assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+None.
+
+.SH ERRORS
+The
+.BR libj2_cls_j2u ()
+and
+.BR libj2_cls_j2u_to_j2u ()
+functions cannot fail.
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_cfs_j2u (3),
+.BR libj2_fls_j2u (3),
+.BR libj2_kls_j2u (3),
+.BR libj2_slc_j2u (3)
diff --git a/libj2_cls_j2u.c b/libj2_cls_j2u.c
index 78d5033..56aa707 100644
--- a/libj2_cls_j2u.c
+++ b/libj2_cls_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_cls_j2u(struct libj2_j2u *a);
-/* TODO Add man page */
#else
diff --git a/libj2_cls_j2u_to_j2u.3 b/libj2_cls_j2u_to_j2u.3
new file mode 120000
index 0000000..c29c72e
--- /dev/null
+++ b/libj2_cls_j2u_to_j2u.3
@@ -0,0 +1 @@
+libj2_cls_j2u.3 \ No newline at end of file
diff --git a/libj2_cls_j2u_to_j2u.c b/libj2_cls_j2u_to_j2u.c
index 2a8eca9..fda326d 100644
--- a/libj2_cls_j2u_to_j2u.c
+++ b/libj2_cls_j2u_to_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_cls_j2u_to_j2u(const struct libj2_j2u *a, struct libj2_j2u *res);
-/* TODO Add man page */
#else
diff --git a/libj2_clz_j2u.3 b/libj2_clz_j2u.3
new file mode 100644
index 0000000..765c442
--- /dev/null
+++ b/libj2_clz_j2u.3
@@ -0,0 +1,53 @@
+.TH LIBJ2_CLZ_J2U 3 LIBJ2
+.SH NAME
+libj2_clz_j2u \- Count leading zeroes
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+unsigned \fBlibj2_clz_j2u\fP(const struct libj2_j2u *\fIa\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_clz_j2u ()
+function returns the number of leading cleared bits in
+.IR a .
+.PP
+In the case that all bits in
+.I a
+are cleared, all of them are counted as leading.
+.PP
+.I a
+is assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+The
+.BR libj2_clz_j2u ()
+function returns the number of cleared bits that
+are more significant than the most significant
+set bits in
+.IR a ,
+or the total number of bits in
+.I a
+if all its bits are cleared.
+
+.SH ERRORS
+The
+.BR libj2_clz_j2u ()
+function cannot fail.
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_clo_j2u (3),
+.BR libj2_ctz_j2u (3),
+.BR libj2_cz_j2u (3),
+.BR libj2_flc_j2u (3),
+.BR libj2_kls_j2u (3),
+.BR libj2_cls_j2u (3),
+.BR libj2_slc_j2u (3)
diff --git a/libj2_clz_j2u.c b/libj2_clz_j2u.c
index 5e6f1f4..7409aaf 100644
--- a/libj2_clz_j2u.c
+++ b/libj2_clz_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline unsigned libj2_clz_j2u(const struct libj2_j2u *a);
-/* TODO Add man page */
#else
diff --git a/libj2_co_j2u.3 b/libj2_co_j2u.3
new file mode 100644
index 0000000..afa7913
--- /dev/null
+++ b/libj2_co_j2u.3
@@ -0,0 +1,41 @@
+.TH LIBJ2_CO_J2U 3 LIBJ2
+.SH NAME
+libj2_co_j2u \- Count ones
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+unsigned \fBlibj2_co_j2u\fP(const struct libj2_j2u *\fIa\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_co_j2u ()
+function returns the number of set bits in
+.IR a .
+.PP
+.I a
+is assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+The
+.BR libj2_co_j2u ()
+function returns the number of set bits in
+.IR a .
+
+.SH ERRORS
+The
+.BR libj2_co_j2u ()
+function cannot fail.
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_cz_j2u (3),
+.BR libj2_parity_j2u (3),
+.BR libj2_clo_j2u (3),
+.BR libj2_cto_j2u (3)
diff --git a/libj2_co_j2u.c b/libj2_co_j2u.c
index 6b1988a..72de832 100644
--- a/libj2_co_j2u.c
+++ b/libj2_co_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline unsigned libj2_co_j2u(const struct libj2_j2u *a);
-/* TODO Add man page */
#else
diff --git a/libj2_cto_j2u.3 b/libj2_cto_j2u.3
new file mode 100644
index 0000000..49acfb4
--- /dev/null
+++ b/libj2_cto_j2u.3
@@ -0,0 +1,53 @@
+.TH LIBJ2_CTO_J2U 3 LIBJ2
+.SH NAME
+libj2_cto_j2u \- Count trailing ones
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+unsigned \fBlibj2_cto_j2u\fP(const struct libj2_j2u *\fIa\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_cto_j2u ()
+function returns the number of trailing set bits in
+.IR a .
+.PP
+In the case that all bits in
+.I a
+are set, all of them are counted as trailing.
+.PP
+.I a
+is assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+The
+.BR libj2_cto_j2u ()
+function returns the number of set bits that
+are less significant than the least significant
+cleared bits in
+.IR a ,
+or the total number of bits in
+.I a
+if all its bits are set.
+
+.SH ERRORS
+The
+.BR libj2_cto_j2u ()
+function cannot fail.
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_ctz_j2u (3),
+.BR libj2_clo_j2u (3),
+.BR libj2_co_j2u (3),
+.BR libj2_ffs_j2u (3),
+.BR libj2_kfs_j2u (3),
+.BR libj2_cfs_j2u (3),
+.BR libj2_sfc_j2u (3)
diff --git a/libj2_cto_j2u.c b/libj2_cto_j2u.c
index 17ea8b6..729bded 100644
--- a/libj2_cto_j2u.c
+++ b/libj2_cto_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline unsigned libj2_cto_j2u(const struct libj2_j2u *a);
-/* TODO Add man page */
#else
diff --git a/libj2_ctz_j2u.3 b/libj2_ctz_j2u.3
new file mode 100644
index 0000000..997fbc2
--- /dev/null
+++ b/libj2_ctz_j2u.3
@@ -0,0 +1,53 @@
+.TH LIBJ2_CTZ_J2U 3 LIBJ2
+.SH NAME
+libj2_ctz_j2u \- Count trailing zeroes
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+unsigned \fBlibj2_ctz_j2u\fP(const struct libj2_j2u *\fIa\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_ctz_j2u ()
+function returns the number of trailing cleared bits in
+.IR a .
+.PP
+In the case that all bits in
+.I a
+are cleared, all of them are counted as trailing.
+.PP
+.I a
+is assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+The
+.BR libj2_ctz_j2u ()
+function returns the number of cleared bits that
+are less significant than the least significant
+set bits in
+.IR a ,
+or the total number of bits in
+.I a
+if all its bits are cleared.
+
+.SH ERRORS
+The
+.BR libj2_ctz_j2u ()
+function cannot fail.
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_cto_j2u (3),
+.BR libj2_clz_j2u (3),
+.BR libj2_cz_j2u (3),
+.BR libj2_ffc_j2u (3),
+.BR libj2_kfs_j2u (3),
+.BR libj2_cfs_j2u (3),
+.BR libj2_sfc_j2u (3)
diff --git a/libj2_ctz_j2u.c b/libj2_ctz_j2u.c
index 3c4ff87..2f41433 100644
--- a/libj2_ctz_j2u.c
+++ b/libj2_ctz_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline unsigned libj2_ctz_j2u(const struct libj2_j2u *a);
-/* TODO Add man page */
#else
diff --git a/libj2_cz_j2u.3 b/libj2_cz_j2u.3
new file mode 100644
index 0000000..1c95b54
--- /dev/null
+++ b/libj2_cz_j2u.3
@@ -0,0 +1,41 @@
+.TH LIBJ2_CZ_J2U 3 LIBJ2
+.SH NAME
+libj2_cz_j2u \- Count zeroes
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+unsigned \fBlibj2_cz_j2u\fP(const struct libj2_j2u *\fIa\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_cz_j2u ()
+function returns the number of cleared bits in
+.IR a .
+.PP
+.I a
+is assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+The
+.BR libj2_cz_j2u ()
+function returns the number of cleared bits in
+.IR a .
+
+.SH ERRORS
+The
+.BR libj2_cz_j2u ()
+function cannot fail.
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_co_j2u (3),
+.BR libj2_parity_j2u (3),
+.BR libj2_clz_j2u (3),
+.BR libj2_ctz_j2u (3)
diff --git a/libj2_cz_j2u.c b/libj2_cz_j2u.c
index 60da659..dfabf74 100644
--- a/libj2_cz_j2u.c
+++ b/libj2_cz_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline unsigned libj2_cz_j2u(const struct libj2_j2u *a);
-/* TODO Add man page */
#else
diff --git a/libj2_ffc_j2u.3 b/libj2_ffc_j2u.3
new file mode 100644
index 0000000..acc2b7a
--- /dev/null
+++ b/libj2_ffc_j2u.3
@@ -0,0 +1,52 @@
+.TH LIBJ2_FFC_J2U 3 LIBJ2
+.SH NAME
+libj2_ffc_j2u \- Find first cleared bit
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+unsigned \fBlibj2_ffc_j2u\fP(const struct libj2_j2u *\fIa\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_ffc_j2u ()
+function returns the index of the least
+significant cleared bit in
+.IR a ,
+where the index is counted from 1,
+and from the the least significant bit.
+.PP
+In the case that no bit in
+.I a
+is cleared, 0 is returned.
+.PP
+.I a
+is assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+The
+.BR libj2_ffc_j2u ()
+function returns the one-based index of
+the first cleared bit in
+.IR a ,
+or 0 if no bit is cleared.
+
+.SH ERRORS
+The
+.BR libj2_ffc_j2u ()
+function cannot fail.
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_ffs_j2u (3),
+.BR libj2_flc_j2u (3),
+.BR libj2_cto_j2u (3),
+.BR libj2_kfs_j2u (3),
+.BR libj2_cfs_j2u (3),
+.BR libj2_sfc_j2u (3)
diff --git a/libj2_ffc_j2u.c b/libj2_ffc_j2u.c
index 5d2c481..b31c3a0 100644
--- a/libj2_ffc_j2u.c
+++ b/libj2_ffc_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline unsigned libj2_ffc_j2u(const struct libj2_j2u *a);
-/* TODO Add man page */
#else
diff --git a/libj2_ffs_j2u.3 b/libj2_ffs_j2u.3
new file mode 100644
index 0000000..f064f32
--- /dev/null
+++ b/libj2_ffs_j2u.3
@@ -0,0 +1,52 @@
+.TH LIBJ2_FFS_J2U 3 LIBJ2
+.SH NAME
+libj2_ffs_j2u \- Find first set bit
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+unsigned \fBlibj2_ffs_j2u\fP(const struct libj2_j2u *\fIa\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_ffs_j2u ()
+function returns the index of the least
+significant set bit in
+.IR a ,
+where the index is counted from 1,
+and from the the least significant bit.
+.PP
+In the case that no bit in
+.I a
+is set, 0 is returned.
+.PP
+.I a
+is assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+The
+.BR libj2_ffs_j2u ()
+function returns the one-based index of
+the first set bit in
+.IR a ,
+or 0 if no bit is set.
+
+.SH ERRORS
+The
+.BR libj2_ffs_j2u ()
+function cannot fail.
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_ffc_j2u (3),
+.BR libj2_fls_j2u (3),
+.BR libj2_ctz_j2u (3),
+.BR libj2_kfs_j2u (3),
+.BR libj2_cfs_j2u (3),
+.BR libj2_sfc_j2u (3)
diff --git a/libj2_ffs_j2u.c b/libj2_ffs_j2u.c
index 59b5996..c496973 100644
--- a/libj2_ffs_j2u.c
+++ b/libj2_ffs_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline unsigned libj2_ffs_j2u(const struct libj2_j2u *a);
-/* TODO Add man page */
#else
diff --git a/libj2_flc_j2u.3 b/libj2_flc_j2u.3
new file mode 100644
index 0000000..3968746
--- /dev/null
+++ b/libj2_flc_j2u.3
@@ -0,0 +1,52 @@
+.TH LIBJ2_FLC_J2U 3 LIBJ2
+.SH NAME
+libj2_flc_j2u \- Find last cleared bit
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+unsigned \fBlibj2_flc_j2u\fP(const struct libj2_j2u *\fIa\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_flc_j2u ()
+function returns the index of the most
+significant cleared bit in
+.IR a ,
+where the index is counted from 1,
+and from the the least significant bit.
+.PP
+In the case that no bit in
+.I a
+is cleared, 0 is returned.
+.PP
+.I a
+is assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+The
+.BR libj2_flc_j2u ()
+function returns the one-based index of
+the last cleared bit in
+.IR a ,
+or 0 if no bit is set.
+
+.SH ERRORS
+The
+.BR libj2_flc_j2u ()
+function cannot fail.
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_fls_j2u (3),
+.BR libj2_ffc_j2u (3),
+.BR libj2_clo_j2u (3),
+.BR libj2_kls_j2u (3),
+.BR libj2_cls_j2u (3),
+.BR libj2_slc_j2u (3)
diff --git a/libj2_flc_j2u.c b/libj2_flc_j2u.c
index 905c350..8401cf3 100644
--- a/libj2_flc_j2u.c
+++ b/libj2_flc_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline unsigned libj2_flc_j2u(const struct libj2_j2u *a);
-/* TODO Add man page */
#else
diff --git a/libj2_fls_j2u.3 b/libj2_fls_j2u.3
new file mode 100644
index 0000000..9b63423
--- /dev/null
+++ b/libj2_fls_j2u.3
@@ -0,0 +1,52 @@
+.TH LIBJ2_FLS_J2U 3 LIBJ2
+.SH NAME
+libj2_fls_j2u \- Find last set bit
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+unsigned \fBlibj2_fls_j2u\fP(const struct libj2_j2u *\fIa\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_fls_j2u ()
+function returns the index of the most
+significant set bit in
+.IR a ,
+where the index is counted from 1,
+and from the the least significant bit.
+.PP
+In the case that no bit in
+.I a
+is set, 0 is returned.
+.PP
+.I a
+is assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+The
+.BR libj2_fls_j2u ()
+function returns the one-based index of
+the last set bit in
+.IR a ,
+or 0 if no bit is set.
+
+.SH ERRORS
+The
+.BR libj2_fls_j2u ()
+function cannot fail.
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_flc_j2u (3),
+.BR libj2_ffs_j2u (3),
+.BR libj2_clz_j2u (3),
+.BR libj2_kls_j2u (3),
+.BR libj2_cls_j2u (3),
+.BR libj2_slc_j2u (3)
diff --git a/libj2_fls_j2u.c b/libj2_fls_j2u.c
index fe2d439..333e85b 100644
--- a/libj2_fls_j2u.c
+++ b/libj2_fls_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline unsigned libj2_fls_j2u(const struct libj2_j2u *a);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_cmp_j2i.3 b/libj2_j2i_cmp_j2i.3
new file mode 100644
index 0000000..2230fd0
--- /dev/null
+++ b/libj2_j2i_cmp_j2i.3
@@ -0,0 +1,65 @@
+.TH LIBJ2_J2I_CMP_J2I 3 LIBJ2
+.SH NAME
+libj2_j2i_cmp_j2i \- Compare two values
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+int \fBlibj2_j2i_cmp_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2i_cmp_ji\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP);
+int \fBlibj2_ji_cmp_j2i\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2i_cmp_j2u\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2u *\fIb\fP);
+int \fBlibj2_j2i_cmp_ju\fP(const struct libj2_j2i *\fIa\fP, uintmax_t \fIb\fP);
+int \fBlibj2_ji_cmp_j2u\fP(intmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
+int \fBlibj2_j2u_cmp_j2i\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2u_cmp_ji\fP(const struct libj2_j2u *\fIa\fP, intmax_t \fIb\fP);
+int \fBlibj2_ju_cmp_j2i\fP(uintmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2u_cmp_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP);
+int \fBlibj2_j2u_cmp_ju\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
+int \fBlibj2_ju_cmp_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The above listed functions return compare the of
+.I a
+to the value of
+.IR b ,
+and return the signum of the difference
+between
+.I a
+and
+.IR b .
+.PP
+The arguments are assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+The functions return -1 if
+.I a
+is less than
+.IR b ,
++1 if
+.I a
+is greater than
+.IR b ,
+and 0 if
+.I a
+and
+.I b
+are equals.
+
+.SH ERRORS
+The functions cannot fail.
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_j2i_eq_j2i (3),
+.BR libj2_j2i_ne_j2i (3),
+.BR libj2_j2i_lt_j2i (3),
+.BR libj2_j2i_le_j2i (3),
+.BR libj2_j2i_gt_j2i (3),
+.BR libj2_j2i_ge_j2i (3)
diff --git a/libj2_j2i_cmp_j2i.c b/libj2_j2i_cmp_j2i.c
index 7c750c3..bc26e62 100644
--- a/libj2_j2i_cmp_j2i.c
+++ b/libj2_j2i_cmp_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_cmp_j2i(const struct libj2_j2i *a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_cmp_j2u.3 b/libj2_j2i_cmp_j2u.3
new file mode 120000
index 0000000..3e9997a
--- /dev/null
+++ b/libj2_j2i_cmp_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_cmp_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_cmp_j2u.c b/libj2_j2i_cmp_j2u.c
index d8071a7..6199b4c 100644
--- a/libj2_j2i_cmp_j2u.c
+++ b/libj2_j2i_cmp_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_cmp_j2u(const struct libj2_j2i *a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_cmp_ji.3 b/libj2_j2i_cmp_ji.3
new file mode 120000
index 0000000..3e9997a
--- /dev/null
+++ b/libj2_j2i_cmp_ji.3
@@ -0,0 +1 @@
+libj2_j2i_cmp_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_cmp_ji.c b/libj2_j2i_cmp_ji.c
index 371b382..f447daf 100644
--- a/libj2_j2i_cmp_ji.c
+++ b/libj2_j2i_cmp_ji.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_cmp_ji(const struct libj2_j2i *a, intmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_cmp_ju.3 b/libj2_j2i_cmp_ju.3
new file mode 120000
index 0000000..3e9997a
--- /dev/null
+++ b/libj2_j2i_cmp_ju.3
@@ -0,0 +1 @@
+libj2_j2i_cmp_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_cmp_ju.c b/libj2_j2i_cmp_ju.c
index aa29cb8..77ee9ca 100644
--- a/libj2_j2i_cmp_ju.c
+++ b/libj2_j2i_cmp_ju.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_cmp_ju(const struct libj2_j2i *a, uintmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_eq_j2i.3 b/libj2_j2i_eq_j2i.3
new file mode 100644
index 0000000..e6aaacf
--- /dev/null
+++ b/libj2_j2i_eq_j2i.3
@@ -0,0 +1,53 @@
+.TH LIBJ2_J2I_EQ_J2I 3 LIBJ2
+.SH NAME
+libj2_j2i_eq_j2i \- Check two values for equality
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+int \fBlibj2_j2i_eq_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2i_eq_ji\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP);
+int \fBlibj2_ji_eq_j2i\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2i_eq_j2u\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2u *\fIb\fP);
+int \fBlibj2_j2i_eq_ju\fP(const struct libj2_j2i *\fIa\fP, uintmax_t \fIb\fP);
+int \fBlibj2_ji_eq_j2u\fP(intmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
+int \fBlibj2_j2u_eq_j2i\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2u_eq_ji\fP(const struct libj2_j2u *\fIa\fP, intmax_t \fIb\fP);
+int \fBlibj2_ju_eq_j2i\fP(uintmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2u_eq_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP);
+int \fBlibj2_j2u_eq_ju\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
+int \fBlibj2_ju_eq_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The above listed function checks whether
+the value
+.I a
+is equal to the value of
+.IR b .
+.PP
+The arguments are assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+The functions return 1 if
+.I a
+is equal to
+.IR b ,
+and 0 otherwise.
+
+.SH ERRORS
+The functions cannot fail.
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_j2i_cmp_j2i (3),
+.BR libj2_j2i_ne_j2i (3),
+.BR libj2_j2i_lt_j2i (3),
+.BR libj2_j2i_le_j2i (3),
+.BR libj2_j2i_gt_j2i (3),
+.BR libj2_j2i_ge_j2i (3)
diff --git a/libj2_j2i_eq_j2i.c b/libj2_j2i_eq_j2i.c
index e73e91c..66c4aa7 100644
--- a/libj2_j2i_eq_j2i.c
+++ b/libj2_j2i_eq_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_eq_j2i(const struct libj2_j2i *a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_eq_j2u.3 b/libj2_j2i_eq_j2u.3
new file mode 120000
index 0000000..8b297dd
--- /dev/null
+++ b/libj2_j2i_eq_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_eq_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_eq_j2u.c b/libj2_j2i_eq_j2u.c
index d4ab711..2617e9f 100644
--- a/libj2_j2i_eq_j2u.c
+++ b/libj2_j2i_eq_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_eq_j2u(const struct libj2_j2i *a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_eq_ji.3 b/libj2_j2i_eq_ji.3
new file mode 120000
index 0000000..8b297dd
--- /dev/null
+++ b/libj2_j2i_eq_ji.3
@@ -0,0 +1 @@
+libj2_j2i_eq_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_eq_ji.c b/libj2_j2i_eq_ji.c
index b22cad8..2b77a37 100644
--- a/libj2_j2i_eq_ji.c
+++ b/libj2_j2i_eq_ji.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_eq_ji(const struct libj2_j2i *a, intmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_eq_ju.3 b/libj2_j2i_eq_ju.3
new file mode 120000
index 0000000..8b297dd
--- /dev/null
+++ b/libj2_j2i_eq_ju.3
@@ -0,0 +1 @@
+libj2_j2i_eq_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_eq_ju.c b/libj2_j2i_eq_ju.c
index 8f3c119..00a7877 100644
--- a/libj2_j2i_eq_ju.c
+++ b/libj2_j2i_eq_ju.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_eq_ju(const struct libj2_j2i *a, uintmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_ge_j2i.3 b/libj2_j2i_ge_j2i.3
new file mode 100644
index 0000000..d6e03b3
--- /dev/null
+++ b/libj2_j2i_ge_j2i.3
@@ -0,0 +1,53 @@
+.TH LIBJ2_J2I_GE_J2I 3 LIBJ2
+.SH NAME
+libj2_j2i_ge_j2i \- Check value greater than or equal to another value
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+int \fBlibj2_j2i_ge_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2i_ge_ji\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP);
+int \fBlibj2_ji_ge_j2i\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2i_ge_j2u\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2u *\fIb\fP);
+int \fBlibj2_j2i_ge_ju\fP(const struct libj2_j2i *\fIa\fP, uintmax_t \fIb\fP);
+int \fBlibj2_ji_ge_j2u\fP(intmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
+int \fBlibj2_j2u_ge_j2i\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2u_ge_ji\fP(const struct libj2_j2u *\fIa\fP, intmax_t \fIb\fP);
+int \fBlibj2_ju_ge_j2i\fP(uintmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2u_ge_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP);
+int \fBlibj2_j2u_ge_ju\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
+int \fBlibj2_ju_ge_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The above listed function checks whether
+the value
+.I a
+is greater than or equal to the value of
+.IR b .
+.PP
+The arguments are assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+The functions return 1 if
+.I a
+is greater than or equal to
+.IR b ,
+and 0 otherwise.
+
+.SH ERRORS
+The functions cannot fail.
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_j2i_cmp_j2i (3),
+.BR libj2_j2i_eq_j2i (3),
+.BR libj2_j2i_ne_j2i (3),
+.BR libj2_j2i_lt_j2i (3),
+.BR libj2_j2i_le_j2i (3),
+.BR libj2_j2i_gt_j2i (3)
diff --git a/libj2_j2i_ge_j2i.c b/libj2_j2i_ge_j2i.c
index cff7aef..c5c3fa8 100644
--- a/libj2_j2i_ge_j2i.c
+++ b/libj2_j2i_ge_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_ge_j2i(const struct libj2_j2i *a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_ge_j2u.3 b/libj2_j2i_ge_j2u.3
new file mode 120000
index 0000000..e67e404
--- /dev/null
+++ b/libj2_j2i_ge_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_ge_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_ge_j2u.c b/libj2_j2i_ge_j2u.c
index b582faf..1c2d94c 100644
--- a/libj2_j2i_ge_j2u.c
+++ b/libj2_j2i_ge_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_ge_j2u(const struct libj2_j2i *a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_ge_ji.3 b/libj2_j2i_ge_ji.3
new file mode 120000
index 0000000..e67e404
--- /dev/null
+++ b/libj2_j2i_ge_ji.3
@@ -0,0 +1 @@
+libj2_j2i_ge_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_ge_ji.c b/libj2_j2i_ge_ji.c
index b74f642..ba3b007 100644
--- a/libj2_j2i_ge_ji.c
+++ b/libj2_j2i_ge_ji.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_ge_ji(const struct libj2_j2i *a, intmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_ge_ju.3 b/libj2_j2i_ge_ju.3
new file mode 120000
index 0000000..e67e404
--- /dev/null
+++ b/libj2_j2i_ge_ju.3
@@ -0,0 +1 @@
+libj2_j2i_ge_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_ge_ju.c b/libj2_j2i_ge_ju.c
index 8b07a01..e2335bb 100644
--- a/libj2_j2i_ge_ju.c
+++ b/libj2_j2i_ge_ju.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_ge_ju(const struct libj2_j2i *a, uintmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_gt_j2i.3 b/libj2_j2i_gt_j2i.3
new file mode 100644
index 0000000..9af2511
--- /dev/null
+++ b/libj2_j2i_gt_j2i.3
@@ -0,0 +1,53 @@
+.TH LIBJ2_J2I_GT_J2I 3 LIBJ2
+.SH NAME
+libj2_j2i_gt_j2i \- Check value greater than another value
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+int \fBlibj2_j2i_gt_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2i_gt_ji\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP);
+int \fBlibj2_ji_gt_j2i\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2i_gt_j2u\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2u *\fIb\fP);
+int \fBlibj2_j2i_gt_ju\fP(const struct libj2_j2i *\fIa\fP, uintmax_t \fIb\fP);
+int \fBlibj2_ji_gt_j2u\fP(intmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
+int \fBlibj2_j2u_gt_j2i\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2u_gt_ji\fP(const struct libj2_j2u *\fIa\fP, intmax_t \fIb\fP);
+int \fBlibj2_ju_gt_j2i\fP(uintmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2u_gt_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP);
+int \fBlibj2_j2u_gt_ju\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
+int \fBlibj2_ju_gt_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The above listed function checks whether
+the value
+.I a
+is greater than the value of
+.IR b .
+.PP
+The arguments are assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+The functions return 1 if
+.I a
+is greater than
+.IR b ,
+and 0 otherwise.
+
+.SH ERRORS
+The functions cannot fail.
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_j2i_cmp_j2i (3),
+.BR libj2_j2i_eq_j2i (3),
+.BR libj2_j2i_ne_j2i (3),
+.BR libj2_j2i_lt_j2i (3),
+.BR libj2_j2i_le_j2i (3),
+.BR libj2_j2i_ge_j2i (3)
diff --git a/libj2_j2i_gt_j2i.c b/libj2_j2i_gt_j2i.c
index 4d3f68c..5667477 100644
--- a/libj2_j2i_gt_j2i.c
+++ b/libj2_j2i_gt_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_gt_j2i(const struct libj2_j2i *a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_gt_j2u.3 b/libj2_j2i_gt_j2u.3
new file mode 120000
index 0000000..2f99f07
--- /dev/null
+++ b/libj2_j2i_gt_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_gt_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_gt_j2u.c b/libj2_j2i_gt_j2u.c
index de3282e..4915ae7 100644
--- a/libj2_j2i_gt_j2u.c
+++ b/libj2_j2i_gt_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_gt_j2u(const struct libj2_j2i *a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_gt_ji.3 b/libj2_j2i_gt_ji.3
new file mode 120000
index 0000000..2f99f07
--- /dev/null
+++ b/libj2_j2i_gt_ji.3
@@ -0,0 +1 @@
+libj2_j2i_gt_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_gt_ji.c b/libj2_j2i_gt_ji.c
index f43b2cf..0836d3d 100644
--- a/libj2_j2i_gt_ji.c
+++ b/libj2_j2i_gt_ji.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_gt_ji(const struct libj2_j2i *a, intmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_gt_ju.3 b/libj2_j2i_gt_ju.3
new file mode 120000
index 0000000..2f99f07
--- /dev/null
+++ b/libj2_j2i_gt_ju.3
@@ -0,0 +1 @@
+libj2_j2i_gt_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_gt_ju.c b/libj2_j2i_gt_ju.c
index 89975e2..e452bd8 100644
--- a/libj2_j2i_gt_ju.c
+++ b/libj2_j2i_gt_ju.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_gt_ju(const struct libj2_j2i *a, uintmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_le_j2i.3 b/libj2_j2i_le_j2i.3
new file mode 100644
index 0000000..4c309ea
--- /dev/null
+++ b/libj2_j2i_le_j2i.3
@@ -0,0 +1,53 @@
+.TH LIBJ2_J2I_LE_J2I 3 LIBJ2
+.SH NAME
+libj2_j2i_le_j2i \- Check value less than or equal to another value
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+int \fBlibj2_j2i_le_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2i_le_ji\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP);
+int \fBlibj2_ji_le_j2i\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2i_le_j2u\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2u *\fIb\fP);
+int \fBlibj2_j2i_le_ju\fP(const struct libj2_j2i *\fIa\fP, uintmax_t \fIb\fP);
+int \fBlibj2_ji_le_j2u\fP(intmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
+int \fBlibj2_j2u_le_j2i\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2u_le_ji\fP(const struct libj2_j2u *\fIa\fP, intmax_t \fIb\fP);
+int \fBlibj2_ju_le_j2i\fP(uintmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2u_le_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP);
+int \fBlibj2_j2u_le_ju\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
+int \fBlibj2_ju_le_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The above listed function checks whether
+the value
+.I a
+is less than or equal to the value of
+.IR b .
+.PP
+The arguments are assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+The functions return 1 if
+.I a
+is less than or equal to
+.IR b ,
+and 0 otherwise.
+
+.SH ERRORS
+The functions cannot fail.
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_j2i_cmp_j2i (3),
+.BR libj2_j2i_eq_j2i (3),
+.BR libj2_j2i_ne_j2i (3),
+.BR libj2_j2i_lt_j2i (3),
+.BR libj2_j2i_gt_j2i (3),
+.BR libj2_j2i_ge_j2i (3)
diff --git a/libj2_j2i_le_j2i.c b/libj2_j2i_le_j2i.c
index 3569d7a..6eab5b4 100644
--- a/libj2_j2i_le_j2i.c
+++ b/libj2_j2i_le_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_le_j2i(const struct libj2_j2i *a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_le_j2u.3 b/libj2_j2i_le_j2u.3
new file mode 120000
index 0000000..98e4335
--- /dev/null
+++ b/libj2_j2i_le_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_le_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_le_j2u.c b/libj2_j2i_le_j2u.c
index f29aa40..7a41ed4 100644
--- a/libj2_j2i_le_j2u.c
+++ b/libj2_j2i_le_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_le_j2u(const struct libj2_j2i *a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_le_ji.3 b/libj2_j2i_le_ji.3
new file mode 120000
index 0000000..98e4335
--- /dev/null
+++ b/libj2_j2i_le_ji.3
@@ -0,0 +1 @@
+libj2_j2i_le_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_le_ji.c b/libj2_j2i_le_ji.c
index 1ccd14b..ecd202c 100644
--- a/libj2_j2i_le_ji.c
+++ b/libj2_j2i_le_ji.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_le_ji(const struct libj2_j2i *a, intmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_le_ju.3 b/libj2_j2i_le_ju.3
new file mode 120000
index 0000000..98e4335
--- /dev/null
+++ b/libj2_j2i_le_ju.3
@@ -0,0 +1 @@
+libj2_j2i_le_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_le_ju.c b/libj2_j2i_le_ju.c
index 10e77ad..51bdbd6 100644
--- a/libj2_j2i_le_ju.c
+++ b/libj2_j2i_le_ju.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_le_ju(const struct libj2_j2i *a, uintmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_lt_j2i.3 b/libj2_j2i_lt_j2i.3
new file mode 100644
index 0000000..cdb7265
--- /dev/null
+++ b/libj2_j2i_lt_j2i.3
@@ -0,0 +1,53 @@
+.TH LIBJ2_J2I_LT_J2I 3 LIBJ2
+.SH NAME
+libj2_j2i_lt_j2i \- Check value less than another value
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+int \fBlibj2_j2i_lt_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2i_lt_ji\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP);
+int \fBlibj2_ji_lt_j2i\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2i_lt_j2u\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2u *\fIb\fP);
+int \fBlibj2_j2i_lt_ju\fP(const struct libj2_j2i *\fIa\fP, uintmax_t \fIb\fP);
+int \fBlibj2_ji_lt_j2u\fP(intmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
+int \fBlibj2_j2u_lt_j2i\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2u_lt_ji\fP(const struct libj2_j2u *\fIa\fP, intmax_t \fIb\fP);
+int \fBlibj2_ju_lt_j2i\fP(uintmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2u_lt_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP);
+int \fBlibj2_j2u_lt_ju\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
+int \fBlibj2_ju_lt_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The above listed function checks whether
+the value
+.I a
+is less than the value of
+.IR b .
+.PP
+The arguments are assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+The functions return 1 if
+.I a
+is less than
+.IR b ,
+and 0 otherwise.
+
+.SH ERRORS
+The functions cannot fail.
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_j2i_cmp_j2i (3),
+.BR libj2_j2i_eq_j2i (3),
+.BR libj2_j2i_ne_j2i (3),
+.BR libj2_j2i_le_j2i (3),
+.BR libj2_j2i_gt_j2i (3),
+.BR libj2_j2i_ge_j2i (3)
diff --git a/libj2_j2i_lt_j2i.c b/libj2_j2i_lt_j2i.c
index 7da3b21..63fa0d4 100644
--- a/libj2_j2i_lt_j2i.c
+++ b/libj2_j2i_lt_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_lt_j2i(const struct libj2_j2i *a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_lt_j2u.3 b/libj2_j2i_lt_j2u.3
new file mode 120000
index 0000000..3bfb749
--- /dev/null
+++ b/libj2_j2i_lt_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_lt_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_lt_j2u.c b/libj2_j2i_lt_j2u.c
index 7cc4f25..d99d05f 100644
--- a/libj2_j2i_lt_j2u.c
+++ b/libj2_j2i_lt_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_lt_j2u(const struct libj2_j2i *a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_lt_ji.3 b/libj2_j2i_lt_ji.3
new file mode 120000
index 0000000..3bfb749
--- /dev/null
+++ b/libj2_j2i_lt_ji.3
@@ -0,0 +1 @@
+libj2_j2i_lt_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_lt_ji.c b/libj2_j2i_lt_ji.c
index d2ae65b..a4e5441 100644
--- a/libj2_j2i_lt_ji.c
+++ b/libj2_j2i_lt_ji.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_lt_ji(const struct libj2_j2i *a, intmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_lt_ju.3 b/libj2_j2i_lt_ju.3
new file mode 120000
index 0000000..3bfb749
--- /dev/null
+++ b/libj2_j2i_lt_ju.3
@@ -0,0 +1 @@
+libj2_j2i_lt_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_lt_ju.c b/libj2_j2i_lt_ju.c
index 71fdb93..9aa1a01 100644
--- a/libj2_j2i_lt_ju.c
+++ b/libj2_j2i_lt_ju.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_lt_ju(const struct libj2_j2i *a, uintmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_mul_j2i.c b/libj2_j2i_mul_j2i.c
index 4794843..51b3dc6 100644
--- a/libj2_j2i_mul_j2i.c
+++ b/libj2_j2i_mul_j2i.c
@@ -8,7 +8,277 @@ extern inline void libj2_j2i_mul_j2i(struct libj2_j2i *a, const struct libj2_j2i
#else
-CONST int main(void) { return 0; }
-/* TODO test libj2_j2i_mul_j2i, libj2_j2i_mul_j2i_to_j2i_overflow_p_quick, libj2_j2i_mul_j2i_to_j2i_overflow_p, libj2_j2i_mul_j2i_to_j2i_overflow, libj2_j2i_mul_j2i_overflow_p_quick, libj2_j2i_mul_j2i_overflow_p, libj2_j2i_mul_j2i_overflow */
+#define CONST_ARG (const struct libj2_j2i *)
+
+
+static uintmax_t
+random_ju(void)
+{
+ size_t n = LIBJ2_JU_BIT;
+ uintmax_t r = 0;
+ while (n--)
+ if (rand() < rand())
+ r |= (uintmax_t)1 << n;
+ return r;
+}
+
+
+static int
+refmul(const struct libj2_j2i *a, const struct libj2_j2i *b, struct libj2_j2i *r)
+{
+ int overflow, neg = libj2_j2i_is_negative(a) ^ libj2_j2i_is_negative(b);
+ struct libj2_j2u ulimit, u, v, w;
+ struct libj2_j2i ilimit;
+
+ libj2_abs_j2i_to_j2u(a, &u);
+ libj2_abs_j2i_to_j2u(b, &v);
+ overflow = libj2_j2u_mul_j2u_to_j2u_overflow(&u, &v, &w);
+ libj2_j2u_to_j2i(&w, r);
+ if (neg)
+ libj2_j2i_min(&ilimit);
+ else
+ libj2_j2i_max(&ilimit);
+ libj2_abs_j2i_to_j2u(&ilimit, &ulimit);
+ if (libj2_j2u_gt_j2u(&w, &ulimit))
+ overflow = 1;
+ if (neg)
+ libj2_minus_j2i(r);
+
+ return neg ? -overflow : +overflow;
+}
+
+
+static int
+check_double(uintmax_t a_high, uintmax_t a_low, struct libj2_j2i *r_out)
+{
+ struct libj2_j2i a = {.high = a_high, .low = a_low}, a_saved = a;
+ struct libj2_j2i r, expected;
+ int expected_overflow, r_set;
+ enum libj2_overflow overflow;
+
+ expected_overflow = refmul(&a, &a, &expected);
+ EXPECT(libj2_j2i_eq_j2i(&a, &a_saved));
+ EXPECT(expected_overflow >= 0);
+
+ r = (struct libj2_j2i){111, 222};
+ EXPECT(libj2_j2i_mul_j2i_to_j2i_overflow(CONST_ARG &a, CONST_ARG &a, &r) == expected_overflow);
+ EXPECT(libj2_j2i_eq_j2i(&a, &a_saved));
+ EXPECT(libj2_j2i_eq_j2i(&r, &expected));
+
+ r = a;
+ EXPECT(libj2_j2i_mul_j2i_to_j2i_overflow(CONST_ARG &r, CONST_ARG &r, &r) == expected_overflow);
+ EXPECT(libj2_j2i_eq_j2i(&r, &expected));
+
+ r = a;
+ EXPECT(libj2_j2i_mul_j2i_overflow(&r, CONST_ARG &r) == expected_overflow);
+ EXPECT(libj2_j2i_eq_j2i(&r, &expected));
+
+ r = (struct libj2_j2i){111, 222};
+ libj2_j2i_mul_j2i_to_j2i(CONST_ARG &a, CONST_ARG &a, &r);
+ EXPECT(libj2_j2i_eq_j2i(&a, &a_saved));
+ EXPECT(libj2_j2i_eq_j2i(&r, &expected));
+
+ r = a;
+ libj2_j2i_mul_j2i_to_j2i(CONST_ARG &r, CONST_ARG &r, &r);
+ EXPECT(libj2_j2i_eq_j2i(&r, &expected));
+
+ r = a;
+ libj2_j2i_mul_j2i(&r, CONST_ARG &r);
+ EXPECT(libj2_j2i_eq_j2i(&r, &expected));
+
+ EXPECT(libj2_j2i_mul_j2i_overflow_p(CONST_ARG &a, CONST_ARG &a) == expected_overflow);
+ EXPECT(libj2_j2i_eq_j2i(&a, &a_saved));
+
+ r = (struct libj2_j2i){111, 222};
+ r_set = 999;
+ EXPECT(libj2_j2i_mul_j2i_to_j2i_overflow_p(CONST_ARG &a, CONST_ARG &a, &r, &r_set) == expected_overflow);
+ EXPECT(libj2_j2i_eq_j2i(&a, &a_saved));
+ EXPECT(libj2_j2i_eq_j2i(&r, &expected));
+ EXPECT(r_set == 0 || r_set == 1);
+ EXPECT(libj2_j2i_eq_j2i(&r, r_set ? &expected : &(struct libj2_j2i){111, 222}));
+
+ r = a;
+ r_set = 999;
+ EXPECT(libj2_j2i_mul_j2i_to_j2i_overflow_p(CONST_ARG &r, CONST_ARG &r, &r, &r_set) == expected_overflow);
+ EXPECT(libj2_j2i_eq_j2i(&r, &expected));
+ EXPECT(r_set == 0 || r_set == 1);
+ EXPECT(libj2_j2i_eq_j2i(&r, r_set ? &expected : &a_saved));
+
+ overflow = libj2_j2i_mul_j2i_overflow_p_quick(CONST_ARG &a, CONST_ARG &a);
+ EXPECT(libj2_j2i_eq_j2i(&a, &a_saved));
+ EXPECT(overflow == LIBJ2_POSITIVE_OVERFLOW_UNKNOWN || (int)overflow == expected_overflow);
+
+ *r_out = expected;
+ return expected_overflow;
+}
+
+
+static void
+check(uintmax_t a_high, uintmax_t a_low, uintmax_t b_high, uintmax_t b_low)
+{
+ struct libj2_j2i a = {.high = a_high, .low = a_low}, a_saved = a;
+ struct libj2_j2i b = {.high = b_high, .low = b_low}, b_saved = b;
+ struct libj2_j2i r, expected;
+ int expected_overflow, r_set;
+ enum libj2_overflow overflow;
+
+ expected_overflow = refmul(&a, &b, &expected);
+ EXPECT(libj2_j2i_eq_j2i(&a, &a_saved));
+ EXPECT(libj2_j2i_eq_j2i(&b, &b_saved));
+
+ if (a_high == b_high && a_low == b_low) {
+ r = (struct libj2_j2i){111, 222};
+ EXPECT(check_double(a_high, a_low, &r) == expected_overflow);
+ EXPECT(libj2_j2i_eq_j2i(&r, &expected));
+ }
+
+ r = (struct libj2_j2i){111, 222};
+ EXPECT(libj2_j2i_mul_j2i_to_j2i_overflow(CONST_ARG &a, CONST_ARG &b, &r) == expected_overflow);
+ EXPECT(libj2_j2i_eq_j2i(&a, &a_saved));
+ EXPECT(libj2_j2i_eq_j2i(&b, &b_saved));
+ EXPECT(libj2_j2i_eq_j2i(&r, &expected));
+
+ r = (struct libj2_j2i){111, 222};
+ libj2_j2i_mul_j2i_to_j2i(CONST_ARG &a, CONST_ARG &b, &r);
+ EXPECT(libj2_j2i_eq_j2i(&a, &a_saved));
+ EXPECT(libj2_j2i_eq_j2i(&b, &b_saved));
+ EXPECT(libj2_j2i_eq_j2i(&r, &expected));
+
+ r = a;
+ EXPECT(libj2_j2i_mul_j2i_to_j2i_overflow(CONST_ARG &r, CONST_ARG &b, &r) == expected_overflow);
+ EXPECT(libj2_j2i_eq_j2i(&b, &b_saved));
+ EXPECT(libj2_j2i_eq_j2i(&r, &expected));
+
+ r = a;
+ libj2_j2i_mul_j2i_to_j2i(CONST_ARG &r, CONST_ARG &b, &r);
+ EXPECT(libj2_j2i_eq_j2i(&b, &b_saved));
+ EXPECT(libj2_j2i_eq_j2i(&r, &expected));
+
+ r = b;
+ EXPECT(libj2_j2i_mul_j2i_to_j2i_overflow(CONST_ARG &a, CONST_ARG &r, &r) == expected_overflow);
+ EXPECT(libj2_j2i_eq_j2i(&a, &a_saved));
+ EXPECT(libj2_j2i_eq_j2i(&r, &expected));
+
+ r = b;
+ libj2_j2i_mul_j2i_to_j2i(CONST_ARG &a, CONST_ARG &r, &r);
+ EXPECT(libj2_j2i_eq_j2i(&a, &a_saved));
+ EXPECT(libj2_j2i_eq_j2i(&r, &expected));
+
+ r = a;
+ EXPECT(libj2_j2i_mul_j2i_overflow(&r, CONST_ARG &b) == expected_overflow);
+ EXPECT(libj2_j2i_eq_j2i(&b, &b_saved));
+ EXPECT(libj2_j2i_eq_j2i(&r, &expected));
+
+ r = a;
+ libj2_j2i_mul_j2i(&r, CONST_ARG &b);
+ EXPECT(libj2_j2i_eq_j2i(&b, &b_saved));
+ EXPECT(libj2_j2i_eq_j2i(&r, &expected));
+
+ EXPECT(libj2_j2i_mul_j2i_overflow_p(CONST_ARG &a, CONST_ARG &b) == expected_overflow);
+ EXPECT(libj2_j2i_eq_j2i(&a, &a_saved));
+ EXPECT(libj2_j2i_eq_j2i(&b, &b_saved));
+
+ r = (struct libj2_j2i){111, 222};
+ r_set = 999;
+ EXPECT(libj2_j2i_mul_j2i_to_j2i_overflow_p(CONST_ARG &a, CONST_ARG &b, &r, &r_set) == expected_overflow);
+ EXPECT(libj2_j2i_eq_j2i(&a, &a_saved));
+ EXPECT(libj2_j2i_eq_j2i(&b, &b_saved));
+ EXPECT(r_set == 0 || r_set == 1);
+ EXPECT(libj2_j2i_eq_j2i(&r, r_set ? &expected : &(struct libj2_j2i){111, 222}));
+
+ r = a;
+ r_set = 999;
+ EXPECT(libj2_j2i_mul_j2i_to_j2i_overflow_p(CONST_ARG &r, CONST_ARG &b, &r, &r_set) == expected_overflow);
+ EXPECT(libj2_j2i_eq_j2i(&b, &b_saved));
+ EXPECT(r_set == 0 || r_set == 1);
+ EXPECT(libj2_j2i_eq_j2i(&r, r_set ? &expected : &a_saved));
+
+ r = b;
+ r_set = 999;
+ EXPECT(libj2_j2i_mul_j2i_to_j2i_overflow_p(CONST_ARG &a, CONST_ARG &r, &r, &r_set) == expected_overflow);
+ EXPECT(libj2_j2i_eq_j2i(&a, &a_saved));
+ EXPECT(r_set == 0 || r_set == 1);
+ EXPECT(libj2_j2i_eq_j2i(&r, r_set ? &expected : &b_saved));
+
+ overflow = libj2_j2i_mul_j2i_overflow_p_quick(CONST_ARG &a, CONST_ARG &b);
+ EXPECT(libj2_j2i_eq_j2i(&a, &a_saved));
+ EXPECT(libj2_j2i_eq_j2i(&b, &b_saved));
+ if (libj2_j2i_is_zero(&a) || libj2_j2i_is_zero(&b))
+ EXPECT(overflow == LIBJ2_NO_OVERFLOW);
+ if (overflow == LIBJ2_POSITIVE_OVERFLOW_UNKNOWN) {
+ EXPECT(expected_overflow >= 0);
+ EXPECT(libj2_sgn_j2i(&a) == libj2_sgn_j2i(&b));
+ } else if (overflow == LIBJ2_NEGATIVE_OVERFLOW_UNKNOWN) {
+ EXPECT(expected_overflow <= 0);
+ EXPECT(libj2_sgn_j2i(&a) == -libj2_sgn_j2i(&b));
+ } else {
+ EXPECT((int)overflow == expected_overflow);
+ }
+}
+
+
+int
+main(void)
+{
+ uintmax_t a, b, c, d, max, min, umax, vs[12];
+ unsigned i, ii, iii, iv, k, j;
+
+ srand((unsigned)time(NULL));
+
+ umax = UINTMAX_MAX;
+ max = umax >> 1;
+ min = ~max;
+
+ vs[0] = 0U;
+ vs[1] = 1U;
+ vs[2] = 2U;
+ vs[3] = umax - 0U;
+ vs[4] = umax - 1U;
+ vs[5] = umax - 2U;
+ vs[6] = max - 0U;
+ vs[7] = max - 1U;
+ vs[8] = max - 2U;
+ vs[9] = min + 0U;
+ vs[10] = min + 1U;
+ vs[11] = min + 2U;
+
+ for (j = 0; j < 32U; j++) {
+ for (k = 0; k < 16U; k++) {
+ a = random_ju() >> 1;
+ b = random_ju() >> 1;
+ c = random_ju() >> 1;
+ d = random_ju() >> 1;
+ if (k & 1U) a = ~a;
+ if (k & 2U) b = ~b;
+ if (k & 4U) c = ~c;
+ if (k & 8U) d = ~d;
+ check(a, b, c, d);
+ for (i = 0; k < 8U && i < 12U; i++) {
+ check(vs[i], a, b, c);
+ check(a, vs[i], b, c);
+ check(a, b, vs[i], c);
+ check(a, b, c, vs[i]);
+ for (ii = 0; k < 4U && ii < 12U; ii++) {
+ check(vs[i], vs[ii], a, b);
+ check(vs[i], a, vs[ii], b);
+ check(vs[i], a, b, vs[ii]);
+ check(a, vs[i], vs[ii], b);
+ check(a, vs[i], b, vs[ii]);
+ check(a, b, vs[i], vs[ii]);
+ for (iii = 0; k < 2U && iii < 12U; iii++) {
+ check(vs[i], vs[ii], vs[iii], a);
+ check(vs[i], vs[ii], a, vs[iii]);
+ check(vs[i], a, vs[ii], vs[iii]);
+ check(a, vs[i], vs[ii], vs[iii]);
+ for (iv = 0; !j && k < 1U && iv < 12U; iv++)
+ check(vs[i], vs[ii], vs[iii], vs[iv]);
+ }
+ }
+ }
+ }
+ }
+
+ return 0;
+}
#endif
diff --git a/libj2_j2i_ne_j2i.3 b/libj2_j2i_ne_j2i.3
new file mode 100644
index 0000000..bf58b50
--- /dev/null
+++ b/libj2_j2i_ne_j2i.3
@@ -0,0 +1,53 @@
+.TH LIBJ2_J2I_NE_J2I 3 LIBJ2
+.SH NAME
+libj2_j2i_ne_j2i \- Check two values for inequality
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+int \fBlibj2_j2i_ne_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2i_ne_ji\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP);
+int \fBlibj2_ji_ne_j2i\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2i_ne_j2u\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2u *\fIb\fP);
+int \fBlibj2_j2i_ne_ju\fP(const struct libj2_j2i *\fIa\fP, uintmax_t \fIb\fP);
+int \fBlibj2_ji_ne_j2u\fP(intmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
+int \fBlibj2_j2u_ne_j2i\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2u_ne_ji\fP(const struct libj2_j2u *\fIa\fP, intmax_t \fIb\fP);
+int \fBlibj2_ju_ne_j2i\fP(uintmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2u_ne_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP);
+int \fBlibj2_j2u_ne_ju\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
+int \fBlibj2_ju_ne_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The above listed function checks whether
+the value
+.I a
+is different from the value of
+.IR b .
+.PP
+The arguments are assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+The functions return 0 if
+.I a
+is equal to
+.IR b ,
+and 1 otherwise.
+
+.SH ERRORS
+The functions cannot fail.
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_j2i_cmp_j2i (3),
+.BR libj2_j2i_eq_j2i (3),
+.BR libj2_j2i_lt_j2i (3),
+.BR libj2_j2i_le_j2i (3),
+.BR libj2_j2i_gt_j2i (3),
+.BR libj2_j2i_ge_j2i (3)
diff --git a/libj2_j2i_ne_j2i.c b/libj2_j2i_ne_j2i.c
index 887d4eb..ec503e7 100644
--- a/libj2_j2i_ne_j2i.c
+++ b/libj2_j2i_ne_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_ne_j2i(const struct libj2_j2i *a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_ne_j2u.3 b/libj2_j2i_ne_j2u.3
new file mode 120000
index 0000000..f9c58c2
--- /dev/null
+++ b/libj2_j2i_ne_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_ne_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_ne_j2u.c b/libj2_j2i_ne_j2u.c
index a9ae130..6a2b7c6 100644
--- a/libj2_j2i_ne_j2u.c
+++ b/libj2_j2i_ne_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_ne_j2u(const struct libj2_j2i *a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_ne_ji.3 b/libj2_j2i_ne_ji.3
new file mode 120000
index 0000000..f9c58c2
--- /dev/null
+++ b/libj2_j2i_ne_ji.3
@@ -0,0 +1 @@
+libj2_j2i_ne_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_ne_ji.c b/libj2_j2i_ne_ji.c
index 95e330d..499f406 100644
--- a/libj2_j2i_ne_ji.c
+++ b/libj2_j2i_ne_ji.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_ne_ji(const struct libj2_j2i *a, intmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_ne_ju.3 b/libj2_j2i_ne_ju.3
new file mode 120000
index 0000000..f9c58c2
--- /dev/null
+++ b/libj2_j2i_ne_ju.3
@@ -0,0 +1 @@
+libj2_j2i_ne_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_ne_ju.c b/libj2_j2i_ne_ju.c
index bb055ef..b90f964 100644
--- a/libj2_j2i_ne_ju.c
+++ b/libj2_j2i_ne_ju.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_ne_ju(const struct libj2_j2i *a, uintmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_sub_j2i.c b/libj2_j2i_sub_j2i.c
index d26c290..92a344a 100644
--- a/libj2_j2i_sub_j2i.c
+++ b/libj2_j2i_sub_j2i.c
@@ -43,19 +43,31 @@ validate(uintmax_t a_high, uintmax_t a_low, uintmax_t b_high, uintmax_t b_low, u
overflow = 0;
libj2_minus_j2u(&a);
libj2_j2u_add_j2u_to_j2u_overflow(&a, &b, (void *)&r);
+ EXPECT(libj2_j2i_gt_j2i(&r, (const void *)&a));
} else if (a_neg) {
overflow = -libj2_j2u_add_j2u_to_j2u_overflow(&a, &b, (void *)&r);
+ EXPECT(overflow == 0 || overflow == -1);
libj2_minus_j2i(&r);
if (!libj2_j2i_is_negative(&r))
overflow = -1;
+ else if (overflow)
+ EXPECT(libj2_j2i_gt_j2i(&r, (const void *)&a));
+ if (!overflow)
+ EXPECT(libj2_j2i_le_j2i(&r, (const void *)&a));
} else if (b_neg) {
overflow = +libj2_j2u_add_j2u_to_j2u_overflow(&a, &b, (void *)&r);
+ EXPECT(overflow == 0 || overflow == +1);
if (!libj2_j2i_is_positive(&r))
overflow = +1;
+ else if (overflow)
+ EXPECT(libj2_j2i_lt_j2i(&r, (const void *)&a));
+ if (!overflow)
+ EXPECT(libj2_j2i_gt_j2i(&r, (const void *)&a));
} else {
overflow = 0;
libj2_minus_j2u(&b);
libj2_j2u_add_j2u_to_j2u(&a, &b, (void *)&r);
+ EXPECT(libj2_j2i_le_j2u(&r, &a));
}
EXPECT(r.high == r_high);
diff --git a/libj2_j2i_sub_ji.c b/libj2_j2i_sub_ji.c
index b65d6ae..27bf013 100644
--- a/libj2_j2i_sub_ji.c
+++ b/libj2_j2i_sub_ji.c
@@ -43,19 +43,31 @@ validate(uintmax_t a_high, uintmax_t a_low, uintmax_t b_high, uintmax_t b_low, u
overflow = 0;
libj2_minus_j2u(&a);
libj2_j2u_add_j2u_to_j2u_overflow(&a, &b, (void *)&r);
+ EXPECT(libj2_j2i_gt_j2i(&r, (const void *)&a));
} else if (a_neg) {
overflow = -libj2_j2u_add_j2u_to_j2u_overflow(&a, &b, (void *)&r);
+ EXPECT(overflow == 0 || overflow == -1);
libj2_minus_j2i(&r);
if (!libj2_j2i_is_negative(&r))
overflow = -1;
+ else if (overflow)
+ EXPECT(libj2_j2i_gt_j2i(&r, (const void *)&a));
+ if (!overflow)
+ EXPECT(libj2_j2i_le_j2i(&r, (const void *)&a));
} else if (b_neg) {
overflow = +libj2_j2u_add_j2u_to_j2u_overflow(&a, &b, (void *)&r);
+ EXPECT(overflow == 0 || overflow == +1);
if (!libj2_j2i_is_positive(&r))
overflow = +1;
+ else if (overflow)
+ EXPECT(libj2_j2i_lt_j2i(&r, (const void *)&a));
+ if (!overflow)
+ EXPECT(libj2_j2i_gt_j2i(&r, (const void *)&a));
} else {
overflow = 0;
libj2_minus_j2u(&b);
libj2_j2u_add_j2u_to_j2u(&a, &b, (void *)&r);
+ EXPECT(libj2_j2i_le_j2u(&r, &a));
}
EXPECT(r.high == r_high);
diff --git a/libj2_j2u_cmp_j2i.3 b/libj2_j2u_cmp_j2i.3
new file mode 120000
index 0000000..3e9997a
--- /dev/null
+++ b/libj2_j2u_cmp_j2i.3
@@ -0,0 +1 @@
+libj2_j2i_cmp_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_cmp_j2i.c b/libj2_j2u_cmp_j2i.c
index 2ba1475..10c4d65 100644
--- a/libj2_j2u_cmp_j2i.c
+++ b/libj2_j2u_cmp_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_cmp_j2i(const struct libj2_j2u *a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_cmp_j2u.3 b/libj2_j2u_cmp_j2u.3
new file mode 120000
index 0000000..3e9997a
--- /dev/null
+++ b/libj2_j2u_cmp_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_cmp_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_cmp_j2u.c b/libj2_j2u_cmp_j2u.c
index d096c33..ab780be 100644
--- a/libj2_j2u_cmp_j2u.c
+++ b/libj2_j2u_cmp_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_cmp_j2u(const struct libj2_j2u *a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_cmp_ji.3 b/libj2_j2u_cmp_ji.3
new file mode 120000
index 0000000..3e9997a
--- /dev/null
+++ b/libj2_j2u_cmp_ji.3
@@ -0,0 +1 @@
+libj2_j2i_cmp_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_cmp_ji.c b/libj2_j2u_cmp_ji.c
index e851830..c8afe64 100644
--- a/libj2_j2u_cmp_ji.c
+++ b/libj2_j2u_cmp_ji.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_cmp_ji(const struct libj2_j2u *a, intmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_cmp_ju.3 b/libj2_j2u_cmp_ju.3
new file mode 120000
index 0000000..3e9997a
--- /dev/null
+++ b/libj2_j2u_cmp_ju.3
@@ -0,0 +1 @@
+libj2_j2i_cmp_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_cmp_ju.c b/libj2_j2u_cmp_ju.c
index d64d5ce..5832408 100644
--- a/libj2_j2u_cmp_ju.c
+++ b/libj2_j2u_cmp_ju.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_cmp_ju(const struct libj2_j2u *a, uintmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_eq_j2i.3 b/libj2_j2u_eq_j2i.3
new file mode 120000
index 0000000..8b297dd
--- /dev/null
+++ b/libj2_j2u_eq_j2i.3
@@ -0,0 +1 @@
+libj2_j2i_eq_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_eq_j2i.c b/libj2_j2u_eq_j2i.c
index 95369c2..92e2106 100644
--- a/libj2_j2u_eq_j2i.c
+++ b/libj2_j2u_eq_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_eq_j2i(const struct libj2_j2u *a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_eq_j2u.3 b/libj2_j2u_eq_j2u.3
new file mode 120000
index 0000000..8b297dd
--- /dev/null
+++ b/libj2_j2u_eq_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_eq_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_eq_j2u.c b/libj2_j2u_eq_j2u.c
index 847f942..f527c18 100644
--- a/libj2_j2u_eq_j2u.c
+++ b/libj2_j2u_eq_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_eq_j2u(const struct libj2_j2u *a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_eq_ji.3 b/libj2_j2u_eq_ji.3
new file mode 120000
index 0000000..8b297dd
--- /dev/null
+++ b/libj2_j2u_eq_ji.3
@@ -0,0 +1 @@
+libj2_j2i_eq_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_eq_ji.c b/libj2_j2u_eq_ji.c
index 4a794ee..ebb1484 100644
--- a/libj2_j2u_eq_ji.c
+++ b/libj2_j2u_eq_ji.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_eq_ji(const struct libj2_j2u *a, intmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_eq_ju.3 b/libj2_j2u_eq_ju.3
new file mode 120000
index 0000000..8b297dd
--- /dev/null
+++ b/libj2_j2u_eq_ju.3
@@ -0,0 +1 @@
+libj2_j2i_eq_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_eq_ju.c b/libj2_j2u_eq_ju.c
index 9012baa..e45a885 100644
--- a/libj2_j2u_eq_ju.c
+++ b/libj2_j2u_eq_ju.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_eq_ju(const struct libj2_j2u *a, uintmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_ge_j2i.3 b/libj2_j2u_ge_j2i.3
new file mode 120000
index 0000000..e67e404
--- /dev/null
+++ b/libj2_j2u_ge_j2i.3
@@ -0,0 +1 @@
+libj2_j2i_ge_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_ge_j2i.c b/libj2_j2u_ge_j2i.c
index adcaee9..bb9f313 100644
--- a/libj2_j2u_ge_j2i.c
+++ b/libj2_j2u_ge_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_ge_j2i(const struct libj2_j2u *a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_ge_j2u.3 b/libj2_j2u_ge_j2u.3
new file mode 120000
index 0000000..e67e404
--- /dev/null
+++ b/libj2_j2u_ge_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_ge_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_ge_j2u.c b/libj2_j2u_ge_j2u.c
index 031b7dd..534a34a 100644
--- a/libj2_j2u_ge_j2u.c
+++ b/libj2_j2u_ge_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_ge_j2u(const struct libj2_j2u *a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_ge_ji.3 b/libj2_j2u_ge_ji.3
new file mode 120000
index 0000000..e67e404
--- /dev/null
+++ b/libj2_j2u_ge_ji.3
@@ -0,0 +1 @@
+libj2_j2i_ge_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_ge_ji.c b/libj2_j2u_ge_ji.c
index aef8ee7..f463a27 100644
--- a/libj2_j2u_ge_ji.c
+++ b/libj2_j2u_ge_ji.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_ge_ji(const struct libj2_j2u *a, intmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_ge_ju.3 b/libj2_j2u_ge_ju.3
new file mode 120000
index 0000000..e67e404
--- /dev/null
+++ b/libj2_j2u_ge_ju.3
@@ -0,0 +1 @@
+libj2_j2i_ge_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_ge_ju.c b/libj2_j2u_ge_ju.c
index a348fa6..8acdd04 100644
--- a/libj2_j2u_ge_ju.c
+++ b/libj2_j2u_ge_ju.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_ge_ju(const struct libj2_j2u *a, uintmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_gt_j2i.3 b/libj2_j2u_gt_j2i.3
new file mode 120000
index 0000000..2f99f07
--- /dev/null
+++ b/libj2_j2u_gt_j2i.3
@@ -0,0 +1 @@
+libj2_j2i_gt_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_gt_j2i.c b/libj2_j2u_gt_j2i.c
index 757f71b..01d9b39 100644
--- a/libj2_j2u_gt_j2i.c
+++ b/libj2_j2u_gt_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_gt_j2i(const struct libj2_j2u *a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_gt_j2u.3 b/libj2_j2u_gt_j2u.3
new file mode 120000
index 0000000..2f99f07
--- /dev/null
+++ b/libj2_j2u_gt_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_gt_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_gt_j2u.c b/libj2_j2u_gt_j2u.c
index bd4da14..7647b1a 100644
--- a/libj2_j2u_gt_j2u.c
+++ b/libj2_j2u_gt_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_gt_j2u(const struct libj2_j2u *a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_gt_ji.3 b/libj2_j2u_gt_ji.3
new file mode 120000
index 0000000..2f99f07
--- /dev/null
+++ b/libj2_j2u_gt_ji.3
@@ -0,0 +1 @@
+libj2_j2i_gt_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_gt_ji.c b/libj2_j2u_gt_ji.c
index a3ae3ec..62beb9b 100644
--- a/libj2_j2u_gt_ji.c
+++ b/libj2_j2u_gt_ji.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_gt_ji(const struct libj2_j2u *a, intmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_gt_ju.3 b/libj2_j2u_gt_ju.3
new file mode 120000
index 0000000..2f99f07
--- /dev/null
+++ b/libj2_j2u_gt_ju.3
@@ -0,0 +1 @@
+libj2_j2i_gt_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_gt_ju.c b/libj2_j2u_gt_ju.c
index e7947d0..a750754 100644
--- a/libj2_j2u_gt_ju.c
+++ b/libj2_j2u_gt_ju.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_gt_ju(const struct libj2_j2u *a, uintmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_le_j2i.3 b/libj2_j2u_le_j2i.3
new file mode 120000
index 0000000..98e4335
--- /dev/null
+++ b/libj2_j2u_le_j2i.3
@@ -0,0 +1 @@
+libj2_j2i_le_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_le_j2i.c b/libj2_j2u_le_j2i.c
index 8bfb213..bf202a5 100644
--- a/libj2_j2u_le_j2i.c
+++ b/libj2_j2u_le_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_le_j2i(const struct libj2_j2u *a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_le_j2u.3 b/libj2_j2u_le_j2u.3
new file mode 120000
index 0000000..98e4335
--- /dev/null
+++ b/libj2_j2u_le_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_le_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_le_j2u.c b/libj2_j2u_le_j2u.c
index 9403271..87b3dfa 100644
--- a/libj2_j2u_le_j2u.c
+++ b/libj2_j2u_le_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_le_j2u(const struct libj2_j2u *a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_le_ji.3 b/libj2_j2u_le_ji.3
new file mode 120000
index 0000000..98e4335
--- /dev/null
+++ b/libj2_j2u_le_ji.3
@@ -0,0 +1 @@
+libj2_j2i_le_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_le_ji.c b/libj2_j2u_le_ji.c
index 96546e1..e78a2f2 100644
--- a/libj2_j2u_le_ji.c
+++ b/libj2_j2u_le_ji.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_le_ji(const struct libj2_j2u *a, intmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_le_ju.3 b/libj2_j2u_le_ju.3
new file mode 120000
index 0000000..98e4335
--- /dev/null
+++ b/libj2_j2u_le_ju.3
@@ -0,0 +1 @@
+libj2_j2i_le_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_le_ju.c b/libj2_j2u_le_ju.c
index a55bfff..b614ac4 100644
--- a/libj2_j2u_le_ju.c
+++ b/libj2_j2u_le_ju.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_le_ju(const struct libj2_j2u *a, uintmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_lt_j2i.3 b/libj2_j2u_lt_j2i.3
new file mode 120000
index 0000000..3bfb749
--- /dev/null
+++ b/libj2_j2u_lt_j2i.3
@@ -0,0 +1 @@
+libj2_j2i_lt_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_lt_j2i.c b/libj2_j2u_lt_j2i.c
index 0fcf201..3711e55 100644
--- a/libj2_j2u_lt_j2i.c
+++ b/libj2_j2u_lt_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_lt_j2i(const struct libj2_j2u *a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_lt_j2u.3 b/libj2_j2u_lt_j2u.3
new file mode 120000
index 0000000..3bfb749
--- /dev/null
+++ b/libj2_j2u_lt_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_lt_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_lt_j2u.c b/libj2_j2u_lt_j2u.c
index 3dddb5e..4c1304b 100644
--- a/libj2_j2u_lt_j2u.c
+++ b/libj2_j2u_lt_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_lt_j2u(const struct libj2_j2u *a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_lt_ji.3 b/libj2_j2u_lt_ji.3
new file mode 120000
index 0000000..3bfb749
--- /dev/null
+++ b/libj2_j2u_lt_ji.3
@@ -0,0 +1 @@
+libj2_j2i_lt_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_lt_ji.c b/libj2_j2u_lt_ji.c
index b4b4f64..38eb435 100644
--- a/libj2_j2u_lt_ji.c
+++ b/libj2_j2u_lt_ji.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_lt_ji(const struct libj2_j2u *a, intmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_lt_ju.3 b/libj2_j2u_lt_ju.3
new file mode 120000
index 0000000..3bfb749
--- /dev/null
+++ b/libj2_j2u_lt_ju.3
@@ -0,0 +1 @@
+libj2_j2i_lt_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_lt_ju.c b/libj2_j2u_lt_ju.c
index e467f58..02c5566 100644
--- a/libj2_j2u_lt_ju.c
+++ b/libj2_j2u_lt_ju.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_lt_ju(const struct libj2_j2u *a, uintmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_ne_j2i.3 b/libj2_j2u_ne_j2i.3
new file mode 120000
index 0000000..f9c58c2
--- /dev/null
+++ b/libj2_j2u_ne_j2i.3
@@ -0,0 +1 @@
+libj2_j2i_ne_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_ne_j2i.c b/libj2_j2u_ne_j2i.c
index 462862e..8894e83 100644
--- a/libj2_j2u_ne_j2i.c
+++ b/libj2_j2u_ne_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_ne_j2i(const struct libj2_j2u *a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_ne_j2u.3 b/libj2_j2u_ne_j2u.3
new file mode 120000
index 0000000..f9c58c2
--- /dev/null
+++ b/libj2_j2u_ne_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_ne_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_ne_j2u.c b/libj2_j2u_ne_j2u.c
index 539d481..6a6d125 100644
--- a/libj2_j2u_ne_j2u.c
+++ b/libj2_j2u_ne_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_ne_j2u(const struct libj2_j2u *a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_ne_ji.3 b/libj2_j2u_ne_ji.3
new file mode 120000
index 0000000..f9c58c2
--- /dev/null
+++ b/libj2_j2u_ne_ji.3
@@ -0,0 +1 @@
+libj2_j2i_ne_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_ne_ji.c b/libj2_j2u_ne_ji.c
index 3b56e07..09b1308 100644
--- a/libj2_j2u_ne_ji.c
+++ b/libj2_j2u_ne_ji.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_ne_ji(const struct libj2_j2u *a, intmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_ne_ju.3 b/libj2_j2u_ne_ju.3
new file mode 120000
index 0000000..f9c58c2
--- /dev/null
+++ b/libj2_j2u_ne_ju.3
@@ -0,0 +1 @@
+libj2_j2i_ne_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_ne_ju.c b/libj2_j2u_ne_ju.c
index 128f3f6..30cc88f 100644
--- a/libj2_j2u_ne_ju.c
+++ b/libj2_j2u_ne_ju.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_ne_ju(const struct libj2_j2u *a, uintmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_ji_cmp_j2i.3 b/libj2_ji_cmp_j2i.3
new file mode 120000
index 0000000..3e9997a
--- /dev/null
+++ b/libj2_ji_cmp_j2i.3
@@ -0,0 +1 @@
+libj2_j2i_cmp_j2i.3 \ No newline at end of file
diff --git a/libj2_ji_cmp_j2i.c b/libj2_ji_cmp_j2i.c
index ff006b1..93ca067 100644
--- a/libj2_ji_cmp_j2i.c
+++ b/libj2_ji_cmp_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ji_cmp_j2i(intmax_t a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ji_cmp_j2u.3 b/libj2_ji_cmp_j2u.3
new file mode 120000
index 0000000..3e9997a
--- /dev/null
+++ b/libj2_ji_cmp_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_cmp_j2i.3 \ No newline at end of file
diff --git a/libj2_ji_cmp_j2u.c b/libj2_ji_cmp_j2u.c
index 11a8d0d..052c6c1 100644
--- a/libj2_ji_cmp_j2u.c
+++ b/libj2_ji_cmp_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ji_cmp_j2u(intmax_t a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ji_eq_j2i.3 b/libj2_ji_eq_j2i.3
new file mode 120000
index 0000000..8b297dd
--- /dev/null
+++ b/libj2_ji_eq_j2i.3
@@ -0,0 +1 @@
+libj2_j2i_eq_j2i.3 \ No newline at end of file
diff --git a/libj2_ji_eq_j2i.c b/libj2_ji_eq_j2i.c
index 4c7d0b1..e5f270f 100644
--- a/libj2_ji_eq_j2i.c
+++ b/libj2_ji_eq_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ji_eq_j2i(intmax_t a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ji_eq_j2u.3 b/libj2_ji_eq_j2u.3
new file mode 120000
index 0000000..8b297dd
--- /dev/null
+++ b/libj2_ji_eq_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_eq_j2i.3 \ No newline at end of file
diff --git a/libj2_ji_eq_j2u.c b/libj2_ji_eq_j2u.c
index e38bed3..ebc4598 100644
--- a/libj2_ji_eq_j2u.c
+++ b/libj2_ji_eq_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ji_eq_j2u(intmax_t a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ji_ge_j2i.3 b/libj2_ji_ge_j2i.3
new file mode 120000
index 0000000..e67e404
--- /dev/null
+++ b/libj2_ji_ge_j2i.3
@@ -0,0 +1 @@
+libj2_j2i_ge_j2i.3 \ No newline at end of file
diff --git a/libj2_ji_ge_j2i.c b/libj2_ji_ge_j2i.c
index b2d2104..c3797bd 100644
--- a/libj2_ji_ge_j2i.c
+++ b/libj2_ji_ge_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ji_ge_j2i(intmax_t a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ji_ge_j2u.3 b/libj2_ji_ge_j2u.3
new file mode 120000
index 0000000..e67e404
--- /dev/null
+++ b/libj2_ji_ge_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_ge_j2i.3 \ No newline at end of file
diff --git a/libj2_ji_ge_j2u.c b/libj2_ji_ge_j2u.c
index e4d38c5..4a8399b 100644
--- a/libj2_ji_ge_j2u.c
+++ b/libj2_ji_ge_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ji_ge_j2u(intmax_t a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ji_gt_j2i.3 b/libj2_ji_gt_j2i.3
new file mode 120000
index 0000000..2f99f07
--- /dev/null
+++ b/libj2_ji_gt_j2i.3
@@ -0,0 +1 @@
+libj2_j2i_gt_j2i.3 \ No newline at end of file
diff --git a/libj2_ji_gt_j2i.c b/libj2_ji_gt_j2i.c
index 2b982ca..19ec236 100644
--- a/libj2_ji_gt_j2i.c
+++ b/libj2_ji_gt_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ji_gt_j2i(intmax_t a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ji_gt_j2u.3 b/libj2_ji_gt_j2u.3
new file mode 120000
index 0000000..2f99f07
--- /dev/null
+++ b/libj2_ji_gt_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_gt_j2i.3 \ No newline at end of file
diff --git a/libj2_ji_gt_j2u.c b/libj2_ji_gt_j2u.c
index 6ed0474..b5c572a 100644
--- a/libj2_ji_gt_j2u.c
+++ b/libj2_ji_gt_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ji_gt_j2u(intmax_t a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ji_le_j2i.3 b/libj2_ji_le_j2i.3
new file mode 120000
index 0000000..98e4335
--- /dev/null
+++ b/libj2_ji_le_j2i.3
@@ -0,0 +1 @@
+libj2_j2i_le_j2i.3 \ No newline at end of file
diff --git a/libj2_ji_le_j2i.c b/libj2_ji_le_j2i.c
index 653b6f8..43efec0 100644
--- a/libj2_ji_le_j2i.c
+++ b/libj2_ji_le_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ji_le_j2i(intmax_t a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ji_le_j2u.3 b/libj2_ji_le_j2u.3
new file mode 120000
index 0000000..98e4335
--- /dev/null
+++ b/libj2_ji_le_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_le_j2i.3 \ No newline at end of file
diff --git a/libj2_ji_le_j2u.c b/libj2_ji_le_j2u.c
index f765f80..c0d5ec1 100644
--- a/libj2_ji_le_j2u.c
+++ b/libj2_ji_le_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ji_le_j2u(intmax_t a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ji_lt_j2i.3 b/libj2_ji_lt_j2i.3
new file mode 120000
index 0000000..3bfb749
--- /dev/null
+++ b/libj2_ji_lt_j2i.3
@@ -0,0 +1 @@
+libj2_j2i_lt_j2i.3 \ No newline at end of file
diff --git a/libj2_ji_lt_j2i.c b/libj2_ji_lt_j2i.c
index 2a4397b..4709d8e 100644
--- a/libj2_ji_lt_j2i.c
+++ b/libj2_ji_lt_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ji_lt_j2i(intmax_t a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ji_lt_j2u.3 b/libj2_ji_lt_j2u.3
new file mode 120000
index 0000000..3bfb749
--- /dev/null
+++ b/libj2_ji_lt_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_lt_j2i.3 \ No newline at end of file
diff --git a/libj2_ji_lt_j2u.c b/libj2_ji_lt_j2u.c
index 0a6096d..f874bf5 100644
--- a/libj2_ji_lt_j2u.c
+++ b/libj2_ji_lt_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ji_lt_j2u(intmax_t a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ji_ne_j2i.3 b/libj2_ji_ne_j2i.3
new file mode 120000
index 0000000..f9c58c2
--- /dev/null
+++ b/libj2_ji_ne_j2i.3
@@ -0,0 +1 @@
+libj2_j2i_ne_j2i.3 \ No newline at end of file
diff --git a/libj2_ji_ne_j2i.c b/libj2_ji_ne_j2i.c
index 88087a4..fccd668 100644
--- a/libj2_ji_ne_j2i.c
+++ b/libj2_ji_ne_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ji_ne_j2i(intmax_t a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ji_ne_j2u.3 b/libj2_ji_ne_j2u.3
new file mode 120000
index 0000000..f9c58c2
--- /dev/null
+++ b/libj2_ji_ne_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_ne_j2i.3 \ No newline at end of file
diff --git a/libj2_ji_ne_j2u.c b/libj2_ji_ne_j2u.c
index 4591c92..6391e7d 100644
--- a/libj2_ji_ne_j2u.c
+++ b/libj2_ji_ne_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ji_ne_j2u(intmax_t a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ju_cmp_j2i.3 b/libj2_ju_cmp_j2i.3
new file mode 120000
index 0000000..3e9997a
--- /dev/null
+++ b/libj2_ju_cmp_j2i.3
@@ -0,0 +1 @@
+libj2_j2i_cmp_j2i.3 \ No newline at end of file
diff --git a/libj2_ju_cmp_j2i.c b/libj2_ju_cmp_j2i.c
index 4ffbadf..93ba66d 100644
--- a/libj2_ju_cmp_j2i.c
+++ b/libj2_ju_cmp_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ju_cmp_j2i(uintmax_t a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ju_cmp_j2u.3 b/libj2_ju_cmp_j2u.3
new file mode 120000
index 0000000..3e9997a
--- /dev/null
+++ b/libj2_ju_cmp_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_cmp_j2i.3 \ No newline at end of file
diff --git a/libj2_ju_cmp_j2u.c b/libj2_ju_cmp_j2u.c
index e97d9be..57f1be0 100644
--- a/libj2_ju_cmp_j2u.c
+++ b/libj2_ju_cmp_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ju_cmp_j2u(uintmax_t a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ju_eq_j2i.3 b/libj2_ju_eq_j2i.3
new file mode 120000
index 0000000..8b297dd
--- /dev/null
+++ b/libj2_ju_eq_j2i.3
@@ -0,0 +1 @@
+libj2_j2i_eq_j2i.3 \ No newline at end of file
diff --git a/libj2_ju_eq_j2i.c b/libj2_ju_eq_j2i.c
index 4adfc55..bcdbf61 100644
--- a/libj2_ju_eq_j2i.c
+++ b/libj2_ju_eq_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ju_eq_j2i(uintmax_t a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ju_eq_j2u.3 b/libj2_ju_eq_j2u.3
new file mode 120000
index 0000000..8b297dd
--- /dev/null
+++ b/libj2_ju_eq_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_eq_j2i.3 \ No newline at end of file
diff --git a/libj2_ju_eq_j2u.c b/libj2_ju_eq_j2u.c
index c13e1b0..aa4e9f9 100644
--- a/libj2_ju_eq_j2u.c
+++ b/libj2_ju_eq_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ju_eq_j2u(uintmax_t a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ju_ge_j2i.3 b/libj2_ju_ge_j2i.3
new file mode 120000
index 0000000..e67e404
--- /dev/null
+++ b/libj2_ju_ge_j2i.3
@@ -0,0 +1 @@
+libj2_j2i_ge_j2i.3 \ No newline at end of file
diff --git a/libj2_ju_ge_j2i.c b/libj2_ju_ge_j2i.c
index 25e2d95..c14eb3a 100644
--- a/libj2_ju_ge_j2i.c
+++ b/libj2_ju_ge_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ju_ge_j2i(uintmax_t a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ju_ge_j2u.3 b/libj2_ju_ge_j2u.3
new file mode 120000
index 0000000..e67e404
--- /dev/null
+++ b/libj2_ju_ge_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_ge_j2i.3 \ No newline at end of file
diff --git a/libj2_ju_ge_j2u.c b/libj2_ju_ge_j2u.c
index 0787166..7e82611 100644
--- a/libj2_ju_ge_j2u.c
+++ b/libj2_ju_ge_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ju_ge_j2u(uintmax_t a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ju_gt_j2i.3 b/libj2_ju_gt_j2i.3
new file mode 120000
index 0000000..2f99f07
--- /dev/null
+++ b/libj2_ju_gt_j2i.3
@@ -0,0 +1 @@
+libj2_j2i_gt_j2i.3 \ No newline at end of file
diff --git a/libj2_ju_gt_j2i.c b/libj2_ju_gt_j2i.c
index a649307..17f0e2b 100644
--- a/libj2_ju_gt_j2i.c
+++ b/libj2_ju_gt_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ju_gt_j2i(uintmax_t a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ju_gt_j2u.3 b/libj2_ju_gt_j2u.3
new file mode 120000
index 0000000..2f99f07
--- /dev/null
+++ b/libj2_ju_gt_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_gt_j2i.3 \ No newline at end of file
diff --git a/libj2_ju_gt_j2u.c b/libj2_ju_gt_j2u.c
index a7a4a2d..c152053 100644
--- a/libj2_ju_gt_j2u.c
+++ b/libj2_ju_gt_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ju_gt_j2u(uintmax_t a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ju_le_j2i.3 b/libj2_ju_le_j2i.3
new file mode 120000
index 0000000..98e4335
--- /dev/null
+++ b/libj2_ju_le_j2i.3
@@ -0,0 +1 @@
+libj2_j2i_le_j2i.3 \ No newline at end of file
diff --git a/libj2_ju_le_j2i.c b/libj2_ju_le_j2i.c
index 57665ae..55300c9 100644
--- a/libj2_ju_le_j2i.c
+++ b/libj2_ju_le_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ju_le_j2i(uintmax_t a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ju_le_j2u.3 b/libj2_ju_le_j2u.3
new file mode 120000
index 0000000..98e4335
--- /dev/null
+++ b/libj2_ju_le_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_le_j2i.3 \ No newline at end of file
diff --git a/libj2_ju_le_j2u.c b/libj2_ju_le_j2u.c
index 0e428c2..ceaee9e 100644
--- a/libj2_ju_le_j2u.c
+++ b/libj2_ju_le_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ju_le_j2u(uintmax_t a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ju_lt_j2i.3 b/libj2_ju_lt_j2i.3
new file mode 120000
index 0000000..3bfb749
--- /dev/null
+++ b/libj2_ju_lt_j2i.3
@@ -0,0 +1 @@
+libj2_j2i_lt_j2i.3 \ No newline at end of file
diff --git a/libj2_ju_lt_j2i.c b/libj2_ju_lt_j2i.c
index fed9aa2..b23ce6b 100644
--- a/libj2_ju_lt_j2i.c
+++ b/libj2_ju_lt_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ju_lt_j2i(uintmax_t a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ju_lt_j2u.3 b/libj2_ju_lt_j2u.3
new file mode 120000
index 0000000..3bfb749
--- /dev/null
+++ b/libj2_ju_lt_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_lt_j2i.3 \ No newline at end of file
diff --git a/libj2_ju_lt_j2u.c b/libj2_ju_lt_j2u.c
index b9d88e2..5c53c66 100644
--- a/libj2_ju_lt_j2u.c
+++ b/libj2_ju_lt_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ju_lt_j2u(uintmax_t a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ju_ne_j2i.3 b/libj2_ju_ne_j2i.3
new file mode 120000
index 0000000..f9c58c2
--- /dev/null
+++ b/libj2_ju_ne_j2i.3
@@ -0,0 +1 @@
+libj2_j2i_ne_j2i.3 \ No newline at end of file
diff --git a/libj2_ju_ne_j2i.c b/libj2_ju_ne_j2i.c
index 8cb6962..80a512e 100644
--- a/libj2_ju_ne_j2i.c
+++ b/libj2_ju_ne_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ju_ne_j2i(uintmax_t a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ju_ne_j2u.3 b/libj2_ju_ne_j2u.3
new file mode 120000
index 0000000..f9c58c2
--- /dev/null
+++ b/libj2_ju_ne_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_ne_j2i.3 \ No newline at end of file
diff --git a/libj2_ju_ne_j2u.c b/libj2_ju_ne_j2u.c
index 556d553..d7e1644 100644
--- a/libj2_ju_ne_j2u.c
+++ b/libj2_ju_ne_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ju_ne_j2u(uintmax_t a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_kfs_j2u.3 b/libj2_kfs_j2u.3
new file mode 100644
index 0000000..de3841a
--- /dev/null
+++ b/libj2_kfs_j2u.3
@@ -0,0 +1,52 @@
+.TH LIBJ2_KFS_J2U 3 LIBJ2
+.SH NAME
+libj2_kfs_j2u \- Keep first set bit, clear the rest
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+void \fBlibj2_kfs_j2u\fP(struct libj2_j2u *\fIa\fP);
+void \fBlibj2_kfs_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, struct libj2_j2u *\fIr\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_kfs_j2u ()
+function clears all bits in
+.I a
+except the first (least significant)
+set bit (no modification if all bits
+are cleared).
+.PP
+The
+.BR libj2_kfs_j2u_to_j2u ()
+function performs the same action as
+.BR libj2_kfs_j2u ()
+but instead of modifying
+.IR a ,
+the result is stored in
+.IR r .
+.PP
+The arguments are assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+None.
+
+.SH ERRORS
+The
+.BR libj2_kfs_j2u ()
+and
+.BR libj2_kfs_j2u_to_j2u ()
+functions cannot fail.
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_kls_j2u (3),
+.BR libj2_ffs_j2u (3),
+.BR libj2_cfs_j2u (3),
+.BR libj2_sfc_j2u (3)
diff --git a/libj2_kfs_j2u.c b/libj2_kfs_j2u.c
index af07619..7ed355a 100644
--- a/libj2_kfs_j2u.c
+++ b/libj2_kfs_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_kfs_j2u(struct libj2_j2u *a);
-/* TODO Add man page */
#else
diff --git a/libj2_kfs_j2u_to_j2u.3 b/libj2_kfs_j2u_to_j2u.3
new file mode 120000
index 0000000..e202a7c
--- /dev/null
+++ b/libj2_kfs_j2u_to_j2u.3
@@ -0,0 +1 @@
+libj2_kfs_j2u.3 \ No newline at end of file
diff --git a/libj2_kfs_j2u_to_j2u.c b/libj2_kfs_j2u_to_j2u.c
index afc09fe..5b0ce92 100644
--- a/libj2_kfs_j2u_to_j2u.c
+++ b/libj2_kfs_j2u_to_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_kfs_j2u_to_j2u(const struct libj2_j2u *a, struct libj2_j2u *res);
-/* TODO Add man page */
#else
diff --git a/libj2_kls_j2u.3 b/libj2_kls_j2u.3
new file mode 100644
index 0000000..c327102
--- /dev/null
+++ b/libj2_kls_j2u.3
@@ -0,0 +1,52 @@
+.TH LIBJ2_KLS_J2U 3 LIBJ2
+.SH NAME
+libj2_kls_j2u \- Keep last set bit, clear the rest
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+void \fBlibj2_kls_j2u\fP(struct libj2_j2u *\fIa\fP);
+void \fBlibj2_kls_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, struct libj2_j2u *\fIr\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_kls_j2u ()
+function clears all bits in
+.I a
+except the last (most significant)
+set bit (no modification if all bits
+are cleared).
+.PP
+The
+.BR libj2_kls_j2u_to_j2u ()
+function performs the same action as
+.BR libj2_kls_j2u ()
+but instead of modifying
+.IR a ,
+the result is stored in
+.IR r .
+.PP
+The arguments are assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+None.
+
+.SH ERRORS
+The
+.BR libj2_kls_j2u ()
+and
+.BR libj2_kls_j2u_to_j2u ()
+functions cannot fail.
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_kfs_j2u (3),
+.BR libj2_fls_j2u (3),
+.BR libj2_cls_j2u (3),
+.BR libj2_slc_j2u (3)
diff --git a/libj2_kls_j2u.c b/libj2_kls_j2u.c
index 1c52f36..ee1b6c3 100644
--- a/libj2_kls_j2u.c
+++ b/libj2_kls_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_kls_j2u(struct libj2_j2u *a);
-/* TODO Add man page */
#else
diff --git a/libj2_kls_j2u_to_j2u.3 b/libj2_kls_j2u_to_j2u.3
new file mode 120000
index 0000000..bf6f801
--- /dev/null
+++ b/libj2_kls_j2u_to_j2u.3
@@ -0,0 +1 @@
+libj2_kls_j2u.3 \ No newline at end of file
diff --git a/libj2_kls_j2u_to_j2u.c b/libj2_kls_j2u_to_j2u.c
index 4b13153..5251d21 100644
--- a/libj2_kls_j2u_to_j2u.c
+++ b/libj2_kls_j2u_to_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_kls_j2u_to_j2u(const struct libj2_j2u *a, struct libj2_j2u *res);
-/* TODO Add man page */
#else
diff --git a/libj2_parity_j2u.3 b/libj2_parity_j2u.3
new file mode 100644
index 0000000..067c0cf
--- /dev/null
+++ b/libj2_parity_j2u.3
@@ -0,0 +1,42 @@
+.TH LIBJ2_PARITY_J2U 3 LIBJ2
+.SH NAME
+libj2_parity_j2u \- Calculate bit parity
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+unsigned \fBlibj2_parity_j2u\fP(const struct libj2_j2u *\fIa\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_parity_j2u ()
+function returns the parity of the bits in
+.IR a .
+.PP
+.I a
+is assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+The
+.BR libj2_parity_j2u ()
+function returns the 1 if the number of
+set bits (or equivalently the cleared bits)
+in
+.I a
+is odd, and 0 otherwise.
+
+.SH ERRORS
+The
+.BR libj2_parity_j2u ()
+function cannot fail.
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_co_j2u (3),
+.BR libj2_cz_j2u (3)
diff --git a/libj2_parity_j2u.c b/libj2_parity_j2u.c
index 5adafc6..fda18ad 100644
--- a/libj2_parity_j2u.c
+++ b/libj2_parity_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline unsigned libj2_parity_j2u(const struct libj2_j2u *a);
-/* TODO Add man page */
#else
diff --git a/libj2_sfc_j2u.3 b/libj2_sfc_j2u.3
new file mode 100644
index 0000000..ec993c8
--- /dev/null
+++ b/libj2_sfc_j2u.3
@@ -0,0 +1,51 @@
+.TH LIBJ2_SFC_J2U 3 LIBJ2
+.SH NAME
+libj2_sfc_j2u \- Set first cleared bit
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+void \fBlibj2_sfc_j2u\fP(struct libj2_j2u *\fIa\fP);
+void \fBlibj2_sfc_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, struct libj2_j2u *\fIr\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_sfc_j2u ()
+function sets the first (least significant)
+cleared bit in
+.I a
+(no modification if all bits are set).
+.PP
+The
+.BR libj2_sfc_j2u_to_j2u ()
+function performs the same action as
+.BR libj2_sfc_j2u ()
+but instead of modifying
+.IR a ,
+the result is stored in
+.IR r .
+.PP
+The arguments are assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+None.
+
+.SH ERRORS
+The
+.BR libj2_sfc_j2u ()
+and
+.BR libj2_sfc_j2u_to_j2u ()
+functions cannot fail.
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_slc_j2u (3),
+.BR libj2_ffc_j2u (3),
+.BR libj2_kfs_j2u (3),
+.BR libj2_cfs_j2u (3)
diff --git a/libj2_sfc_j2u.c b/libj2_sfc_j2u.c
index 1b91a7e..9bc09ea 100644
--- a/libj2_sfc_j2u.c
+++ b/libj2_sfc_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_sfc_j2u(struct libj2_j2u *a);
-/* TODO Add man page */
#else
diff --git a/libj2_sfc_j2u_to_j2u.3 b/libj2_sfc_j2u_to_j2u.3
new file mode 120000
index 0000000..8824875
--- /dev/null
+++ b/libj2_sfc_j2u_to_j2u.3
@@ -0,0 +1 @@
+libj2_sfc_j2u.3 \ No newline at end of file
diff --git a/libj2_sfc_j2u_to_j2u.c b/libj2_sfc_j2u_to_j2u.c
index a1a9e17..b2d6f72 100644
--- a/libj2_sfc_j2u_to_j2u.c
+++ b/libj2_sfc_j2u_to_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_sfc_j2u_to_j2u(const struct libj2_j2u *a, struct libj2_j2u *res);
-/* TODO Add man page */
#else
diff --git a/libj2_slc_j2u.3 b/libj2_slc_j2u.3
new file mode 100644
index 0000000..d65b13a
--- /dev/null
+++ b/libj2_slc_j2u.3
@@ -0,0 +1,51 @@
+.TH LIBJ2_SLC_J2U 3 LIBJ2
+.SH NAME
+libj2_slc_j2u \- Set last cleared bit
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+void \fBlibj2_slc_j2u\fP(struct libj2_j2u *\fIa\fP);
+void \fBlibj2_slc_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, struct libj2_j2u *\fIr\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_slc_j2u ()
+function sets the last (most significant)
+cleared bit in
+.I a
+(no modification if all bits are set).
+.PP
+The
+.BR libj2_slc_j2u_to_j2u ()
+function performs the same action as
+.BR libj2_slc_j2u ()
+but instead of modifying
+.IR a ,
+the result is stored in
+.IR r .
+.PP
+The arguments are assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+None.
+
+.SH ERRORS
+The
+.BR libj2_slc_j2u ()
+and
+.BR libj2_slc_j2u_to_j2u ()
+functions cannot fail.
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_sfc_j2u (3),
+.BR libj2_flc_j2u (3),
+.BR libj2_kls_j2u (3),
+.BR libj2_cls_j2u (3)
diff --git a/libj2_slc_j2u.c b/libj2_slc_j2u.c
index 500f633..7f65df4 100644
--- a/libj2_slc_j2u.c
+++ b/libj2_slc_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_slc_j2u(struct libj2_j2u *a);
-/* TODO Add man page */
#else
diff --git a/libj2_slc_j2u_to_j2u.3 b/libj2_slc_j2u_to_j2u.3
new file mode 120000
index 0000000..96f60b0
--- /dev/null
+++ b/libj2_slc_j2u_to_j2u.3
@@ -0,0 +1 @@
+libj2_slc_j2u.3 \ No newline at end of file
diff --git a/libj2_slc_j2u_to_j2u.c b/libj2_slc_j2u_to_j2u.c
index 874be05..933843e 100644
--- a/libj2_slc_j2u_to_j2u.c
+++ b/libj2_slc_j2u_to_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_slc_j2u_to_j2u(const struct libj2_j2u *a, struct libj2_j2u *res);
-/* TODO Add man page */
#else