| 117 | |
| 118 | template <typename T> |
| 119 | T rounding_shift_right_upward(T x, int k) { |
| 120 | T mask = (T(1) << k) - 1; |
| 121 | T threshold = mask >> 1; |
| 122 | return (x >> k) + ((x & mask) > threshold); |
| 123 | } |
| 124 | |
| 125 | template <typename T> |
| 126 | T do_round_mulh_saturate(T a, T b) { |