tasm_lib/arithmetic/
u192.rs

1pub mod overflowing_add;
2pub mod safe_add;
3
4#[cfg(test)]
5pub(crate) type U192 = [u32; 6];
6
7/// Convert a `u128` to a u192 representation with the same value.
8#[cfg(test)]
9pub(super) fn u128_to_u192(x: u128) -> U192 {
10    [
11        (x & (u32::MAX as u128)) as u32,
12        ((x >> 32) & (u32::MAX as u128)) as u32,
13        ((x >> 64) & (u32::MAX as u128)) as u32,
14        ((x >> 96) & (u32::MAX as u128)) as u32,
15        0,
16        0,
17    ]
18}
19
20/// Multiply input value with $2^{64}$ and return result as a u192
21#[cfg(test)]
22pub(super) fn u128_to_u192_shl64(x: u128) -> U192 {
23    [
24        0,
25        0,
26        (x & (u32::MAX as u128)) as u32,
27        ((x >> 32) & (u32::MAX as u128)) as u32,
28        ((x >> 64) & (u32::MAX as u128)) as u32,
29        ((x >> 96) & (u32::MAX as u128)) as u32,
30    ]
31}
32
33#[cfg(test)]
34pub(super) fn to_u192(hi: u128, lo: u64) -> U192 {
35    [
36        (lo & u32::MAX as u64) as u32,
37        (lo >> 32) as u32,
38        (hi & (u32::MAX as u128)) as u32,
39        ((hi >> 32) & (u32::MAX as u128)) as u32,
40        ((hi >> 64) & (u32::MAX as u128)) as u32,
41        (hi >> 96) as u32,
42    ]
43}