use crate::bid_internal::*;
use crate::bid_types::{BidUint384, BidUint512};
use crate::bid128::*;
use crate::{BidUint64, BidUint128, BidUint192, BidUint256};
#[allow(clippy::too_many_arguments)]
pub fn bid_round64_2_18(
q: i32,
x: i32,
mut c: BidUint64,
ptr_c_star: &mut BidUint64,
incr_exp: &mut i32,
ptr_is_midpoint_lt_even: &mut bool,
ptr_is_midpoint_gt_even: &mut bool,
ptr_is_inexact_lt_midpoint: &mut bool,
ptr_is_inexact_gt_midpoint: &mut bool,
) {
let mut p128: BidUint128 = Default::default();
let mut f_star: BidUint128 = Default::default();
let mut c_star: BidUint64;
let tmp64: BidUint64;
let mut ind: i32;
ind = x - 1; c = c.wrapping_add(bid_midpoint64![ind]);
mul_64x64_to_128mach!(p128, c, bid_kx64![ind]);
let shift = bid_ex64m64![ind] as i32; c_star = p128.w[1] >> shift;
f_star.w[1] = p128.w[1] & bid_mask64![ind];
f_star.w[0] = p128.w[0];
if f_star.w[1] > bid_half64![ind] || (f_star.w[1] == bid_half64![ind] && f_star.w[0] > 0) {
tmp64 = f_star.w[1] - bid_half64![ind];
if tmp64 > 0 || f_star.w[0] > bid_ten2mxtrunc64![ind] {
*ptr_is_inexact_lt_midpoint = true;
} } else {
*ptr_is_inexact_gt_midpoint = true;
}
if f_star.w[1] == 0 && f_star.w[0] <= bid_ten2mxtrunc64![ind] {
if c_star & 0x01 > 0 {
dec!(c_star); *ptr_is_midpoint_gt_even = true;
*ptr_is_inexact_lt_midpoint = false;
*ptr_is_inexact_gt_midpoint = false;
} else {
*ptr_is_midpoint_lt_even = true;
*ptr_is_inexact_lt_midpoint = false;
*ptr_is_inexact_gt_midpoint = false;
}
}
ind = q - x; if c_star == bid_ten2k64![ind] {
c_star = bid_ten2k64![ind - 1]; *incr_exp = 1;
} else {
*incr_exp = 0;
}
*ptr_c_star = c_star;
}
#[allow(clippy::too_many_arguments)]
pub fn bid_round128_19_38(
q: i32,
x: i32,
mut c: BidUint128,
ptr_c_star: &mut BidUint128,
incr_exp: &mut i32,
ptr_is_midpoint_lt_even: &mut bool,
ptr_is_midpoint_gt_even: &mut bool,
ptr_is_inexact_lt_midpoint: &mut bool,
ptr_is_inexact_gt_midpoint: &mut bool,
) {
let mut p256: BidUint256 = Default::default();
let mut f_star: BidUint256 = Default::default();
let mut c_star: BidUint128 = Default::default();
let mut tmp64: BidUint64;
let mut ind: i32;
ind = x - 1; if ind <= 18 {
tmp64 = c.w[0];
c.w[0] = c.w[0].wrapping_add(bid_midpoint64!(ind));
if c.w[0] < tmp64 {
inc!(c.w[1]);
}
} else {
tmp64 = c.w[0];
c.w[0] = c.w[0].wrapping_add(bid_midpoint128!(ind - 19).w[0]);
if c.w[0] < tmp64 {
inc!(c.w[1]);
}
c.w[1] = c.w[1].wrapping_add(bid_midpoint128!(ind - 19).w[1]);
}
mul_128x128_to_256!(p256, c, bid_kx128!(ind));
let shift = bid_ex128m128!(ind) as i32; if ind <= 18 {
c_star.w[0] = (p256.w[2] >> shift) | (p256.w[3] << (64 - shift));
c_star.w[1] = p256.w[3] >> shift;
f_star.w[0] = p256.w[0];
f_star.w[1] = p256.w[1];
f_star.w[2] = p256.w[2] & bid_mask128!(ind);
f_star.w[3] = 0;
} else {
c_star.w[0] = p256.w[3] >> shift;
c_star.w[1] = 0;
f_star.w[0] = p256.w[0];
f_star.w[1] = p256.w[1];
f_star.w[2] = p256.w[2];
f_star.w[3] = p256.w[3] & bid_mask128!(ind);
}
if ind <= 18 {
if f_star.w[2] > bid_half128!(ind) || (f_star.w[2] == bid_half128!(ind) && (f_star.w[1] > 0 || f_star.w[0] > 0)) {
tmp64 = f_star.w[2] - bid_half128!(ind);
if tmp64 > 0 || f_star.w[1] > bid_ten2mxtrunc128!(ind).w[1] || (f_star.w[1] == bid_ten2mxtrunc128!(ind).w[1] && f_star.w[0] > bid_ten2mxtrunc128!(ind).w[0]) {
*ptr_is_inexact_lt_midpoint = true;
} } else {
*ptr_is_inexact_gt_midpoint = true;
}
} else {
if f_star.w[3] > bid_half128!(ind) || (f_star.w[3] == bid_half128!(ind) && (f_star.w[2] > 0 || f_star.w[1] > 0 || f_star.w[0] > 0)) {
tmp64 = f_star.w[3] - bid_half128!(ind);
if tmp64 > 0 || f_star.w[2] > 0 || f_star.w[1] > bid_ten2mxtrunc128!(ind).w[1] || (f_star.w[1] == bid_ten2mxtrunc128!(ind).w[1] && f_star.w[0] > bid_ten2mxtrunc128!(ind).w[0]) {
*ptr_is_inexact_lt_midpoint = true;
} } else {
*ptr_is_inexact_gt_midpoint = true;
}
}
if f_star.w[3] == 0 && f_star.w[2] == 0 && (f_star.w[1] < bid_ten2mxtrunc128!(ind).w[1] || (f_star.w[1] == bid_ten2mxtrunc128!(ind).w[1] && f_star.w[0] <= bid_ten2mxtrunc128!(ind).w[0])) {
if c_star.w[0] & 0x01 > 0 {
dec!(c_star.w[0]); if c_star.w[0] == 0xffffffffffffffff {
dec!(c_star.w[1]);
}
*ptr_is_midpoint_gt_even = true;
*ptr_is_inexact_lt_midpoint = false;
*ptr_is_inexact_gt_midpoint = false;
} else {
*ptr_is_midpoint_lt_even = true;
*ptr_is_inexact_lt_midpoint = false;
*ptr_is_inexact_gt_midpoint = false;
}
}
ind = q - x; if ind <= 19 {
if c_star.w[1] == 0 && c_star.w[0] == bid_ten2k64!(ind) {
c_star.w[0] = bid_ten2k64!(ind - 1); *incr_exp = 1;
} else {
*incr_exp = 0;
}
} else if ind == 20 {
if c_star.w[1] == bid_ten2k128!(0).w[1] && c_star.w[0] == bid_ten2k128!(0).w[0] {
c_star.w[0] = bid_ten2k64!(19); c_star.w[1] = 0;
*incr_exp = 1;
} else {
*incr_exp = 0;
}
} else {
if c_star.w[1] == bid_ten2k128!(ind - 20).w[1] && c_star.w[0] == bid_ten2k128!(ind - 20).w[0] {
c_star.w[0] = bid_ten2k128!(ind - 21).w[0]; c_star.w[1] = bid_ten2k128!(ind - 21).w[1];
*incr_exp = 1;
} else {
*incr_exp = 0;
}
}
ptr_c_star.w[1] = c_star.w[1];
ptr_c_star.w[0] = c_star.w[0];
}
#[allow(clippy::too_many_arguments)]
pub fn bid_round192_39_57(
q: i32,
x: i32,
mut c: BidUint192,
ptr_c_star: &mut BidUint192,
incr_exp: &mut i32,
ptr_is_midpoint_lt_even: &mut bool,
ptr_is_midpoint_gt_even: &mut bool,
ptr_is_inexact_lt_midpoint: &mut bool,
ptr_is_inexact_gt_midpoint: &mut bool,
) {
let mut p384: BidUint384 = Default::default();
let mut f_star: BidUint384 = Default::default();
let mut c_star: BidUint192 = Default::default();
let mut tmp64: BidUint64;
let mut ind: i32;
ind = x - 1; if ind <= 18 {
tmp64 = c.w[0];
c.w[0] = c.w[0].wrapping_add(bid_midpoint64!(ind));
if c.w[0] < tmp64 {
inc!(c.w[1]);
if c.w[1] == 0x0 {
inc!(c.w[2]);
}
}
} else if ind <= 37 {
tmp64 = c.w[0];
c.w[0] = c.w[0].wrapping_add(bid_midpoint128!(ind - 19).w[0]);
if c.w[0] < tmp64 {
inc!(c.w[1]);
if c.w[1] == 0x0 {
inc!(c.w[2]);
}
}
tmp64 = c.w[1];
c.w[1] = c.w[1].wrapping_add(bid_midpoint128!(ind - 19).w[1]);
if c.w[1] < tmp64 {
inc!(c.w[2]);
}
} else {
tmp64 = c.w[0];
c.w[0] = c.w[0].wrapping_add(bid_midpoint192!(ind - 38).w[0]);
if c.w[0] < tmp64 {
inc!(c.w[1]);
if c.w[1] == 0 {
inc!(c.w[2]);
}
}
tmp64 = c.w[1];
c.w[1] = c.w[1].wrapping_add(bid_midpoint192!(ind - 38).w[1]);
if c.w[1] < tmp64 {
inc!(c.w[2]);
}
c.w[2] = c.w[2].wrapping_add(bid_midpoint192!(ind - 38).w[2]);
}
mul_192x192_to_384!(p384, c, bid_kx192!(ind));
let shift = bid_ex192m192!(ind) as i32; if ind <= 18 {
c_star.w[2] = p384.w[5] >> shift;
c_star.w[1] = (p384.w[5] << (64 - shift)) | (p384.w[4] >> shift);
c_star.w[0] = (p384.w[4] << (64 - shift)) | (p384.w[3] >> shift);
f_star.w[5] = 0;
f_star.w[4] = 0;
f_star.w[3] = p384.w[3] & bid_mask192!(ind);
f_star.w[2] = p384.w[2];
f_star.w[1] = p384.w[1];
f_star.w[0] = p384.w[0];
} else if ind <= 37 {
c_star.w[2] = 0;
c_star.w[1] = p384.w[5] >> shift;
c_star.w[0] = (p384.w[5] << (64 - shift)) | (p384.w[4] >> shift);
f_star.w[5] = 0;
f_star.w[4] = p384.w[4] & bid_mask192!(ind);
f_star.w[3] = p384.w[3];
f_star.w[2] = p384.w[2];
f_star.w[1] = p384.w[1];
f_star.w[0] = p384.w[0];
} else {
c_star.w[2] = 0;
c_star.w[1] = 0;
c_star.w[0] = p384.w[5] >> shift;
f_star.w[5] = p384.w[5] & bid_mask192!(ind);
f_star.w[4] = p384.w[4];
f_star.w[3] = p384.w[3];
f_star.w[2] = p384.w[2];
f_star.w[1] = p384.w[1];
f_star.w[0] = p384.w[0];
}
if ind <= 18 {
if f_star.w[3] > bid_half192!(ind) || (f_star.w[3] == bid_half192!(ind) && (f_star.w[2] > 0 || f_star.w[1] > 0 || f_star.w[0] > 0)) {
tmp64 = f_star.w[3] - bid_half192!(ind);
if tmp64 > 0
|| f_star.w[2] > bid_ten2mxtrunc192!(ind).w[2]
|| (f_star.w[2] == bid_ten2mxtrunc192!(ind).w[2] && f_star.w[1] > bid_ten2mxtrunc192!(ind).w[1])
|| (f_star.w[2] == bid_ten2mxtrunc192!(ind).w[2] && f_star.w[1] == bid_ten2mxtrunc192!(ind).w[1] && f_star.w[0] > bid_ten2mxtrunc192!(ind).w[0])
{
*ptr_is_inexact_lt_midpoint = true;
} } else {
*ptr_is_inexact_gt_midpoint = true;
}
} else if ind <= 37 {
if f_star.w[4] > bid_half192!(ind) || (f_star.w[4] == bid_half192!(ind) && (f_star.w[3] > 0 || f_star.w[2] > 0 || f_star.w[1] > 0 || f_star.w[0] > 0)) {
tmp64 = f_star.w[4] - bid_half192!(ind);
if tmp64 > 0
|| f_star.w[3] > 0
|| f_star.w[2] > bid_ten2mxtrunc192!(ind).w[2]
|| (f_star.w[2] == bid_ten2mxtrunc192!(ind).w[2] && f_star.w[1] > bid_ten2mxtrunc192!(ind).w[1])
|| (f_star.w[2] == bid_ten2mxtrunc192!(ind).w[2] && f_star.w[1] == bid_ten2mxtrunc192!(ind).w[1] && f_star.w[0] > bid_ten2mxtrunc192!(ind).w[0])
{
*ptr_is_inexact_lt_midpoint = true;
} } else {
*ptr_is_inexact_gt_midpoint = true;
}
} else {
if f_star.w[5] > bid_half192!(ind) || (f_star.w[5] == bid_half192!(ind) && (f_star.w[4] > 0 || f_star.w[3] > 0 || f_star.w[2] > 0 || f_star.w[1] > 0 || f_star.w[0] > 0)) {
tmp64 = f_star.w[5] - bid_half192!(ind);
if tmp64 > 0
|| f_star.w[4] > 0
|| f_star.w[3] > 0
|| f_star.w[2] > bid_ten2mxtrunc192!(ind).w[2]
|| (f_star.w[2] == bid_ten2mxtrunc192!(ind).w[2] && f_star.w[1] > bid_ten2mxtrunc192!(ind).w[1])
|| (f_star.w[2] == bid_ten2mxtrunc192!(ind).w[2] && f_star.w[1] == bid_ten2mxtrunc192!(ind).w[1] && f_star.w[0] > bid_ten2mxtrunc192!(ind).w[0])
{
*ptr_is_inexact_lt_midpoint = true;
} } else {
*ptr_is_inexact_gt_midpoint = true;
}
}
if f_star.w[5] == 0
&& f_star.w[4] == 0
&& f_star.w[3] == 0
&& (f_star.w[2] < bid_ten2mxtrunc192!(ind).w[2]
|| (f_star.w[2] == bid_ten2mxtrunc192!(ind).w[2] && f_star.w[1] < bid_ten2mxtrunc192!(ind).w[1])
|| (f_star.w[2] == bid_ten2mxtrunc192!(ind).w[2] && f_star.w[1] == bid_ten2mxtrunc192!(ind).w[1] && f_star.w[0] <= bid_ten2mxtrunc192!(ind).w[0]))
{
if c_star.w[0] & 0x01 > 0 {
dec!(c_star.w[0]); if c_star.w[0] == 0xffffffffffffffff {
dec!(c_star.w[1]);
if c_star.w[1] == 0xffffffffffffffff {
dec!(c_star.w[2]);
}
}
*ptr_is_midpoint_gt_even = true;
*ptr_is_inexact_lt_midpoint = false;
*ptr_is_inexact_gt_midpoint = false;
} else {
*ptr_is_midpoint_lt_even = true;
*ptr_is_inexact_lt_midpoint = false;
*ptr_is_inexact_gt_midpoint = false;
}
}
ind = q - x; if ind <= 19 {
if c_star.w[2] == 0 && c_star.w[1] == 0 && c_star.w[0] == bid_ten2k64!(ind) {
c_star.w[0] = bid_ten2k64!(ind - 1); *incr_exp = 1;
} else {
*incr_exp = 0;
}
} else if ind == 20 {
if c_star.w[2] == 0 && c_star.w[1] == bid_ten2k128!(0).w[1] && c_star.w[0] == bid_ten2k128!(0).w[0] {
c_star.w[0] = bid_ten2k64!(19); c_star.w[1] = 0;
*incr_exp = 1;
} else {
*incr_exp = 0;
}
} else if ind <= 38 {
if c_star.w[2] == 0 && c_star.w[1] == bid_ten2k128!(ind - 20).w[1] && c_star.w[0] == bid_ten2k128!(ind - 20).w[0] {
c_star.w[0] = bid_ten2k128!(ind - 21).w[0]; c_star.w[1] = bid_ten2k128!(ind - 21).w[1];
*incr_exp = 1;
} else {
*incr_exp = 0;
}
} else if ind == 39 {
if c_star.w[2] == bid_ten2k256!(0).w[2] && c_star.w[1] == bid_ten2k256!(0).w[1] && c_star.w[0] == bid_ten2k256!(0).w[0] {
c_star.w[0] = bid_ten2k128!(18).w[0]; c_star.w[1] = bid_ten2k128!(18).w[1];
c_star.w[2] = 0;
*incr_exp = 1;
} else {
*incr_exp = 0;
}
} else {
if c_star.w[2] == bid_ten2k256!(ind - 39).w[2] && c_star.w[1] == bid_ten2k256!(ind - 39).w[1] && c_star.w[0] == bid_ten2k256!(ind - 39).w[0] {
c_star.w[0] = bid_ten2k256!(ind - 40).w[0]; c_star.w[1] = bid_ten2k256!(ind - 40).w[1];
c_star.w[2] = bid_ten2k256!(ind - 40).w[2];
*incr_exp = 1;
} else {
*incr_exp = 0;
}
}
ptr_c_star.w[2] = c_star.w[2];
ptr_c_star.w[1] = c_star.w[1];
ptr_c_star.w[0] = c_star.w[0];
}
#[allow(clippy::too_many_arguments)]
pub fn bid_round256_58_76(
q: i32,
x: i32,
mut c: BidUint256,
ptr_c_star: &mut BidUint256,
incr_exp: &mut i32,
ptr_is_midpoint_lt_even: &mut bool,
ptr_is_midpoint_gt_even: &mut bool,
ptr_is_inexact_lt_midpoint: &mut bool,
ptr_is_inexact_gt_midpoint: &mut bool,
) {
let mut p512: BidUint512 = Default::default();
let mut f_star: BidUint512 = Default::default();
let mut c_star: BidUint256 = Default::default();
let mut tmp64: BidUint64;
let mut ind: i32;
ind = x - 1; if ind <= 18 {
tmp64 = c.w[0];
c.w[0] = c.w[0].wrapping_add(bid_midpoint64!(ind));
if c.w[0] < tmp64 {
inc!(c.w[1]);
if c.w[1] == 0 {
inc!(c.w[2]);
if c.w[2] == 0 {
inc!(c.w[3]);
}
}
}
} else if ind <= 37 {
tmp64 = c.w[0];
c.w[0] = c.w[0].wrapping_add(bid_midpoint128!(ind - 19).w[0]);
if c.w[0] < tmp64 {
inc!(c.w[1]);
if c.w[1] == 0 {
inc!(c.w[2]);
if c.w[2] == 0 {
inc!(c.w[3]);
}
}
}
tmp64 = c.w[1];
c.w[1] = c.w[1].wrapping_add(bid_midpoint128!(ind - 19).w[1]);
if c.w[1] < tmp64 {
inc!(c.w[2]);
if c.w[2] == 0 {
inc!(c.w[3]);
}
}
} else if ind <= 57 {
tmp64 = c.w[0];
c.w[0] = c.w[0].wrapping_add(bid_midpoint192!(ind - 38).w[0]);
if c.w[0] < tmp64 {
inc!(c.w[1]);
if c.w[1] == 0 {
inc!(c.w[2]);
if c.w[2] == 0 {
inc!(c.w[3]);
}
}
}
tmp64 = c.w[1];
c.w[1] = c.w[1].wrapping_add(bid_midpoint192!(ind - 38).w[1]);
if c.w[1] < tmp64 {
inc!(c.w[2]);
if c.w[2] == 0 {
inc!(c.w[3]);
}
}
tmp64 = c.w[2];
c.w[2] = c.w[2].wrapping_add(bid_midpoint192!(ind - 38).w[2]);
if c.w[2] < tmp64 {
inc!(c.w[3]);
}
} else {
tmp64 = c.w[0];
c.w[0] = c.w[0].wrapping_add(bid_midpoint256!(ind - 58).w[0]);
if c.w[0] < tmp64 {
inc!(c.w[1]);
if c.w[1] == 0 {
inc!(c.w[2]);
if c.w[2] == 0 {
inc!(c.w[3]);
}
}
}
tmp64 = c.w[1];
c.w[1] = c.w[1].wrapping_add(bid_midpoint256!(ind - 58).w[1]);
if c.w[1] < tmp64 {
inc!(c.w[2]);
if c.w[2] == 0x0 {
inc!(c.w[3]);
}
}
tmp64 = c.w[2];
c.w[2] = c.w[2].wrapping_add(bid_midpoint256!(ind - 58).w[2]);
if c.w[2] < tmp64 {
inc!(c.w[3]);
}
c.w[3] = c.w[3].wrapping_add(bid_midpoint256!(ind - 58).w[3]);
}
mul_256x256_to_512!(p512, c, bid_kx256!(ind));
let shift = bid_ex256m256!(ind) as i32; if ind <= 18 {
c_star.w[3] = p512.w[7] >> shift;
c_star.w[2] = (p512.w[7] << (64 - shift)) | (p512.w[6] >> shift);
c_star.w[1] = (p512.w[6] << (64 - shift)) | (p512.w[5] >> shift);
c_star.w[0] = (p512.w[5] << (64 - shift)) | (p512.w[4] >> shift);
f_star.w[7] = 0;
f_star.w[6] = 0;
f_star.w[5] = 0;
f_star.w[4] = p512.w[4] & bid_mask256!(ind);
f_star.w[3] = p512.w[3];
f_star.w[2] = p512.w[2];
f_star.w[1] = p512.w[1];
f_star.w[0] = p512.w[0];
} else if ind <= 37 {
c_star.w[3] = 0;
c_star.w[2] = p512.w[7] >> shift;
c_star.w[1] = (p512.w[7] << (64 - shift)) | (p512.w[6] >> shift);
c_star.w[0] = (p512.w[6] << (64 - shift)) | (p512.w[5] >> shift);
f_star.w[7] = 0;
f_star.w[6] = 0;
f_star.w[5] = p512.w[5] & bid_mask256!(ind);
f_star.w[4] = p512.w[4];
f_star.w[3] = p512.w[3];
f_star.w[2] = p512.w[2];
f_star.w[1] = p512.w[1];
f_star.w[0] = p512.w[0];
} else if ind <= 56 {
c_star.w[3] = 0;
c_star.w[2] = 0;
c_star.w[1] = p512.w[7] >> shift;
c_star.w[0] = (p512.w[7] << (64 - shift)) | (p512.w[6] >> shift);
f_star.w[7] = 0;
f_star.w[6] = p512.w[6] & bid_mask256!(ind);
f_star.w[5] = p512.w[5];
f_star.w[4] = p512.w[4];
f_star.w[3] = p512.w[3];
f_star.w[2] = p512.w[2];
f_star.w[1] = p512.w[1];
f_star.w[0] = p512.w[0];
} else if ind == 57 {
c_star.w[3] = 0;
c_star.w[2] = 0;
c_star.w[1] = 0;
c_star.w[0] = p512.w[7];
f_star.w[7] = 0;
f_star.w[6] = p512.w[6];
f_star.w[5] = p512.w[5];
f_star.w[4] = p512.w[4];
f_star.w[3] = p512.w[3];
f_star.w[2] = p512.w[2];
f_star.w[1] = p512.w[1];
f_star.w[0] = p512.w[0];
} else {
c_star.w[3] = 0;
c_star.w[2] = 0;
c_star.w[1] = 0;
c_star.w[0] = p512.w[7] >> shift;
f_star.w[7] = p512.w[7] & bid_mask256!(ind);
f_star.w[6] = p512.w[6];
f_star.w[5] = p512.w[5];
f_star.w[4] = p512.w[4];
f_star.w[3] = p512.w[3];
f_star.w[2] = p512.w[2];
f_star.w[1] = p512.w[1];
f_star.w[0] = p512.w[0];
}
if ind <= 18 {
if f_star.w[4] > bid_half256!(ind) || (f_star.w[4] == bid_half256!(ind) && (f_star.w[3] > 0 || f_star.w[2] > 0 || f_star.w[1] > 0 || f_star.w[0] > 0)) {
tmp64 = f_star.w[4] - bid_half256!(ind);
if tmp64 > 0
|| f_star.w[3] > bid_ten2mxtrunc256!(ind).w[2]
|| (f_star.w[3] == bid_ten2mxtrunc256!(ind).w[3] && f_star.w[2] > bid_ten2mxtrunc256!(ind).w[2])
|| (f_star.w[3] == bid_ten2mxtrunc256!(ind).w[3] && f_star.w[2] == bid_ten2mxtrunc256!(ind).w[2] && f_star.w[1] > bid_ten2mxtrunc256!(ind).w[1])
|| (f_star.w[3] == bid_ten2mxtrunc256!(ind).w[3] && f_star.w[2] == bid_ten2mxtrunc256!(ind).w[2] && f_star.w[1] == bid_ten2mxtrunc256!(ind).w[1] && f_star.w[0] > bid_ten2mxtrunc256!(ind).w[0])
{
*ptr_is_inexact_lt_midpoint = true;
} } else {
*ptr_is_inexact_gt_midpoint = true;
}
} else if ind <= 37 {
if f_star.w[5] > bid_half256!(ind) || (f_star.w[5] == bid_half256!(ind) && (f_star.w[4] > 0 || f_star.w[3] > 0 || f_star.w[2] > 0 || f_star.w[1] > 0 || f_star.w[0] > 0)) {
tmp64 = f_star.w[5] - bid_half256!(ind);
if tmp64 > 0
|| f_star.w[4] > 0
|| f_star.w[3] > bid_ten2mxtrunc256!(ind).w[3]
|| (f_star.w[3] == bid_ten2mxtrunc256!(ind).w[3] && f_star.w[2] > bid_ten2mxtrunc256!(ind).w[2])
|| (f_star.w[3] == bid_ten2mxtrunc256!(ind).w[3] && f_star.w[2] == bid_ten2mxtrunc256!(ind).w[2] && f_star.w[1] > bid_ten2mxtrunc256!(ind).w[1])
|| (f_star.w[3] == bid_ten2mxtrunc256!(ind).w[3] && f_star.w[2] == bid_ten2mxtrunc256!(ind).w[2] && f_star.w[1] == bid_ten2mxtrunc256!(ind).w[1] && f_star.w[0] > bid_ten2mxtrunc256!(ind).w[0])
{
*ptr_is_inexact_lt_midpoint = true;
} } else {
*ptr_is_inexact_gt_midpoint = true;
}
} else if ind <= 57 {
if f_star.w[6] > bid_half256!(ind) || (f_star.w[6] == bid_half256!(ind) && (f_star.w[5] > 0 || f_star.w[4] > 0 || f_star.w[3] > 0 || f_star.w[2] > 0 || f_star.w[1] > 0 || f_star.w[0] > 0)) {
tmp64 = f_star.w[6] - bid_half256!(ind);
if tmp64 > 0
|| f_star.w[5] > 0
|| f_star.w[4] > 0
|| f_star.w[3] > bid_ten2mxtrunc256!(ind).w[3]
|| (f_star.w[3] == bid_ten2mxtrunc256!(ind).w[3] && f_star.w[2] > bid_ten2mxtrunc256!(ind).w[2])
|| (f_star.w[3] == bid_ten2mxtrunc256!(ind).w[3] && f_star.w[2] == bid_ten2mxtrunc256!(ind).w[2] && f_star.w[1] > bid_ten2mxtrunc256!(ind).w[1])
|| (f_star.w[3] == bid_ten2mxtrunc256!(ind).w[3] && f_star.w[2] == bid_ten2mxtrunc256!(ind).w[2] && f_star.w[1] == bid_ten2mxtrunc256!(ind).w[1] && f_star.w[0] > bid_ten2mxtrunc256!(ind).w[0])
{
*ptr_is_inexact_lt_midpoint = true;
} } else {
*ptr_is_inexact_gt_midpoint = true;
}
} else {
if f_star.w[7] > bid_half256!(ind) || (f_star.w[7] == bid_half256!(ind) && (f_star.w[6] > 0 || f_star.w[5] > 0 || f_star.w[4] > 0 || f_star.w[3] > 0 || f_star.w[2] > 0 || f_star.w[1] > 0 || f_star.w[0] > 0)) {
tmp64 = f_star.w[7] - bid_half256!(ind);
if tmp64 > 0
|| f_star.w[6] > 0
|| f_star.w[5] > 0
|| f_star.w[4] > 0
|| f_star.w[3] > bid_ten2mxtrunc256!(ind).w[3]
|| (f_star.w[3] == bid_ten2mxtrunc256!(ind).w[3] && f_star.w[2] > bid_ten2mxtrunc256!(ind).w[2])
|| (f_star.w[3] == bid_ten2mxtrunc256!(ind).w[3] && f_star.w[2] == bid_ten2mxtrunc256!(ind).w[2] && f_star.w[1] > bid_ten2mxtrunc256!(ind).w[1])
|| (f_star.w[3] == bid_ten2mxtrunc256!(ind).w[3] && f_star.w[2] == bid_ten2mxtrunc256!(ind).w[2] && f_star.w[1] == bid_ten2mxtrunc256!(ind).w[1] && f_star.w[0] > bid_ten2mxtrunc256!(ind).w[0])
{
*ptr_is_inexact_lt_midpoint = true;
} } else {
*ptr_is_inexact_gt_midpoint = true;
}
}
if f_star.w[7] == 0
&& f_star.w[6] == 0
&& f_star.w[5] == 0
&& f_star.w[4] == 0
&& (f_star.w[3] < bid_ten2mxtrunc256!(ind).w[3]
|| (f_star.w[3] == bid_ten2mxtrunc256!(ind).w[3] && f_star.w[2] < bid_ten2mxtrunc256!(ind).w[2])
|| (f_star.w[3] == bid_ten2mxtrunc256!(ind).w[3] && f_star.w[2] == bid_ten2mxtrunc256!(ind).w[2] && f_star.w[1] < bid_ten2mxtrunc256!(ind).w[1])
|| (f_star.w[3] == bid_ten2mxtrunc256!(ind).w[3] && f_star.w[2] == bid_ten2mxtrunc256!(ind).w[2] && f_star.w[1] == bid_ten2mxtrunc256!(ind).w[1] && f_star.w[0] <= bid_ten2mxtrunc256!(ind).w[0]))
{
if c_star.w[0] & 0x01 > 0 {
dec!(c_star.w[0]); if c_star.w[0] == 0xffffffffffffffff {
dec!(c_star.w[1]);
if c_star.w[1] == 0xffffffffffffffff {
dec!(c_star.w[2]);
if c_star.w[2] == 0xffffffffffffffff {
dec!(c_star.w[3]);
}
}
}
*ptr_is_midpoint_gt_even = true;
*ptr_is_inexact_lt_midpoint = false;
*ptr_is_inexact_gt_midpoint = false;
} else {
*ptr_is_midpoint_lt_even = true;
*ptr_is_inexact_lt_midpoint = false;
*ptr_is_inexact_gt_midpoint = false;
}
}
ind = q - x; if ind <= 19 {
if c_star.w[3] == 0 && c_star.w[2] == 0 && c_star.w[1] == 0 && c_star.w[0] == bid_ten2k64!(ind) {
c_star.w[0] = bid_ten2k64!(ind - 1); *incr_exp = 1;
} else {
*incr_exp = 0;
}
} else if ind == 20 {
if c_star.w[3] == 0 && c_star.w[2] == 0 && c_star.w[1] == bid_ten2k128!(0).w[1] && c_star.w[0] == bid_ten2k128!(0).w[0] {
c_star.w[0] = bid_ten2k64!(19); c_star.w[1] = 0;
*incr_exp = 1;
} else {
*incr_exp = 0;
}
} else if ind <= 38 {
if c_star.w[3] == 0 && c_star.w[2] == 0 && c_star.w[1] == bid_ten2k128!(ind - 20).w[1] && c_star.w[0] == bid_ten2k128!(ind - 20).w[0] {
c_star.w[0] = bid_ten2k128!(ind - 21).w[0]; c_star.w[1] = bid_ten2k128!(ind - 21).w[1];
*incr_exp = 1;
} else {
*incr_exp = 0;
}
} else if ind == 39 {
if c_star.w[3] == 0 && c_star.w[2] == bid_ten2k256!(0).w[2] && c_star.w[1] == bid_ten2k256!(0).w[1] && c_star.w[0] == bid_ten2k256!(0).w[0] {
c_star.w[0] = bid_ten2k128!(18).w[0]; c_star.w[1] = bid_ten2k128!(18).w[1];
c_star.w[2] = 0;
*incr_exp = 1;
} else {
*incr_exp = 0;
}
} else if ind <= 57 {
if c_star.w[3] == 0 && c_star.w[2] == bid_ten2k256!(ind - 39).w[2] && c_star.w[1] == bid_ten2k256!(ind - 39).w[1] && c_star.w[0] == bid_ten2k256!(ind - 39).w[0] {
c_star.w[0] = bid_ten2k256!(ind - 40).w[0]; c_star.w[1] = bid_ten2k256!(ind - 40).w[1];
c_star.w[2] = bid_ten2k256!(ind - 40).w[2];
*incr_exp = 1;
} else {
*incr_exp = 0;
}
} else {
if c_star.w[3] == bid_ten2k256!(ind - 39).w[3] && c_star.w[2] == bid_ten2k256!(ind - 39).w[2] && c_star.w[1] == bid_ten2k256!(ind - 39).w[1] && c_star.w[0] == bid_ten2k256!(ind - 39).w[0] {
c_star.w[0] = bid_ten2k256!(ind - 40).w[0]; c_star.w[1] = bid_ten2k256!(ind - 40).w[1];
c_star.w[2] = bid_ten2k256!(ind - 40).w[2];
c_star.w[3] = bid_ten2k256!(ind - 40).w[3];
*incr_exp = 1;
} else {
*incr_exp = 0;
}
}
ptr_c_star.w[3] = c_star.w[3];
ptr_c_star.w[2] = c_star.w[2];
ptr_c_star.w[1] = c_star.w[1];
ptr_c_star.w[0] = c_star.w[0];
}