diff options
Diffstat (limited to 'libj2_j2i_mul_j2i.3')
| -rw-r--r-- | libj2_j2i_mul_j2i.3 | 38 |
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 , |
