aboutsummaryrefslogtreecommitdiffstats
path: root/libj2_j2i_mul_j2i.3
diff options
context:
space:
mode:
authorMattias Andrée <m@maandree.se>2026-02-11 11:20:10 +0100
committerMattias Andrée <m@maandree.se>2026-02-11 11:20:10 +0100
commit0d4c3e8f6be098e953502589b17cb28197322442 (patch)
treedf3a13e786769e78d3d6201150f4018dc0c22cb5 /libj2_j2i_mul_j2i.3
parentTest sat_add (diff)
downloadlibj2-0d4c3e8f6be098e953502589b17cb28197322442.tar.gz
libj2-0d4c3e8f6be098e953502589b17cb28197322442.tar.bz2
libj2-0d4c3e8f6be098e953502589b17cb28197322442.tar.xz
Finish signed saturated math
Signed-off-by: Mattias Andrée <m@maandree.se>
Diffstat (limited to 'libj2_j2i_mul_j2i.3')
-rw-r--r--libj2_j2i_mul_j2i.338
1 files changed, 34 insertions, 4 deletions
diff --git a/libj2_j2i_mul_j2i.3 b/libj2_j2i_mul_j2i.3
index d8ff10e..b77b77c 100644
--- a/libj2_j2i_mul_j2i.3
+++ b/libj2_j2i_mul_j2i.3
@@ -68,6 +68,19 @@ enum libj2_overflow \fBlibj2_ju_mul_j2u_overflow_p_quick\fP(uintmax_t \fIa\fP, c
int \fBlibj2_j2u_mul_j2u_to_j2u_overflow_p\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP, int *\fIr_set\fP);
int \fBlibj2_j2u_mul_ju_to_j2u_overflow_p\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP, int *\fIr_set\fP);
int \fBlibj2_ju_mul_j2u_to_j2u_overflow_p\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP, int *\fIr_set\fP);
+
+void \fBlibj2_j2i_sat_mul_j2i\fP(struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP);
+void \fBlibj2_j2i_sat_mul_j2i_to_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP, struct libj2_j2i *\fIr\fP);
+void \fBlibj2_j2i_sat_mul_ji\fP(struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP);
+void \fBlibj2_j2i_sat_mul_ji_to_j2i\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP, struct libj2_j2i *\fIr\fP);
+void \fBlibj2_ji_sat_mul_j2i_to_j2i\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP, struct libj2_j2i *\fIr\fP);
+
+void \fBlibj2_j2u_sat_mul_j2u\fP(struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP);
+void \fBlibj2_j2u_sat_mul_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP);
+void \fBlibj2_j2u_sat_mul_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
+void \fBlibj2_j2u_sat_mul_ju_to_j2u\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP);
+void \fBlibj2_ju_sat_mul_j2u_to_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP);
+void \fBlibj2_j2u_sat_mul_j2u_destructive\fP(struct libj2_j2u *restrict \fIa\fP, struct libj2_j2u *restrict \fIb\fP);
.fi
.PP
Link with
@@ -140,12 +153,18 @@ in their name), detect arithmetic overflow.
.PP
The result is truncated to the least significant
bits, as many as can be stored, in case of overflow;
-that is, modular arithmetics is used.
+that is, modular arithmetics is used. However, the
+.BR sat_mul -functions
+use saturated arithmetics, meaning that the result
+will be the maximum representable value on positive
+overflow and the minimum representable value on
+negative overflow.
.PP
The
-.BR libj2_j2u_mul_j2u_destructive ()
+.BR libj2_j2u_mul_j2u_destructive (),
+.BR libj2_j2u_mul_j2u_overflow_destructive (),
and
-.BR libj2_j2u_mul_j2u_overflow_destructive ()
+.BR libj2_j2u_sat_mul_j2u_destructive ()
functions modifies
.I b
arbitrarily, and do not support
@@ -257,8 +276,19 @@ The
.BR libj2_ji_mul_j2i_overflow_p_quick (),
.BR libj2_j2i_mul_j2i_to_j2i_overflow_p (),
.BR libj2_j2i_mul_ji_to_j2i_overflow_p (),
+.BR libj2_ji_mul_j2i_to_j2i_overflow_p (),
+.BR libj2_j2i_sat_mul_j2i (),
+.BR libj2_j2i_sat_mul_j2i_to_j2i (),
+.BR libj2_j2i_sat_mul_ji (),
+.BR libj2_j2i_sat_mul_ji_to_j2i (),
+.BR libj2_ji_sat_mul_j2i_to_j2i (),
+.BR libj2_j2u_sat_mul_j2u (),
+.BR libj2_j2u_sat_mul_j2u_destructive (),
+.BR libj2_j2u_sat_mul_j2u_to_j2u (),
+.BR libj2_j2u_sat_mul_ju (),
+.BR libj2_j2u_sat_mul_ju_to_j2u (),
and
-.BR libj2_ji_mul_j2i_to_j2i_overflow_p ()
+.BR libj2_ju_sat_mul_j2u_to_j2u ()
functions and the
.IR LIBJ2_POSITIVE_OVERFLOW ,
.IR LIBJ2_POSITIVE_OVERFLOW_UNKNOWN ,