#![doc = " fiat-crypto output postprocessed by fiat-constify: <https://github.com/rustcrypto/utils>"]
#![doc = " Autogenerated: './word_by_word_montgomery' --lang Rust --inline p192 64 '2^192 - 2^64 - 1' mul square add sub opp from_montgomery to_montgomery nonzero selectznz to_bytes from_bytes one msat divstep divstep_precomp"]
#![doc = " curve description: p192"]
#![doc = " machine_wordsize = 64 (from \"64\")"]
#![doc = " requested operations: mul, square, add, sub, opp, from_montgomery, to_montgomery, nonzero, selectznz, to_bytes, from_bytes, one, msat, divstep, divstep_precomp"]
#![doc = " m = 0xfffffffffffffffffffffffffffffffeffffffffffffffff (from \"2^192 - 2^64 - 1\")"]
#![doc = ""]
#![doc = " NOTE: In addition to the bounds specified above each function, all"]
#![doc = " functions synthesized for this Montgomery arithmetic require the"]
#![doc = " input to be strictly less than the prime modulus (m), and also"]
#![doc = " require the input to be in the unique saturated representation."]
#![doc = " All functions also ensure that these two properties are true of"]
#![doc = " return values."]
#![doc = ""]
#![doc = " Computed values:"]
#![doc = " eval z = z[0] + (z[1] << 64) + (z[2] << 128)"]
#![doc = " bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184)"]
#![doc = " twos_complement_eval z = let x1 := z[0] + (z[1] << 64) + (z[2] << 128) in"]
#![doc = " if x1 & (2^192-1) < 2^191 then x1 & (2^192-1) else (x1 & (2^192-1)) - 2^192"]
#![allow(unused_parens)]
#![allow(non_camel_case_types)]
#![allow(
clippy::identity_op,
clippy::unnecessary_cast,
dead_code,
rustdoc::broken_intra_doc_links,
unused_assignments,
unused_mut,
unused_variables
)]
pub type fiat_p192_u1 = u8;
pub type fiat_p192_i1 = i8;
pub type fiat_p192_u2 = u8;
pub type fiat_p192_i2 = i8;
pub type fiat_p192_montgomery_domain_field_element = [u64; 3];
pub type fiat_p192_non_montgomery_domain_field_element = [u64; 3];
#[doc = " The function fiat_p192_addcarryx_u64 is an addition with carry."]
#[doc = ""]
#[doc = " Postconditions:"]
#[doc = " out1 = (arg1 + arg2 + arg3) mod 2^64"]
#[doc = " out2 = ⌊(arg1 + arg2 + arg3) / 2^64⌋"]
#[doc = ""]
#[doc = " Input Bounds:"]
#[doc = " arg1: [0x0 ~> 0x1]"]
#[doc = " arg2: [0x0 ~> 0xffffffffffffffff]"]
#[doc = " arg3: [0x0 ~> 0xffffffffffffffff]"]
#[doc = " Output Bounds:"]
#[doc = " out1: [0x0 ~> 0xffffffffffffffff]"]
#[doc = " out2: [0x0 ~> 0x1]"]
#[inline]
pub const fn fiat_p192_addcarryx_u64(
arg1: fiat_p192_u1,
arg2: u64,
arg3: u64,
) -> (u64, fiat_p192_u1) {
let mut out1: u64 = 0;
let mut out2: fiat_p192_u1 = 0;
let x1: u128 = (((arg1 as u128) + (arg2 as u128)) + (arg3 as u128));
let x2: u64 = ((x1 & (0xffffffffffffffff as u128)) as u64);
let x3: fiat_p192_u1 = ((x1 >> 64) as fiat_p192_u1);
out1 = x2;
out2 = x3;
(out1, out2)
}
#[doc = " The function fiat_p192_subborrowx_u64 is a subtraction with borrow."]
#[doc = ""]
#[doc = " Postconditions:"]
#[doc = " out1 = (-arg1 + arg2 + -arg3) mod 2^64"]
#[doc = " out2 = -⌊(-arg1 + arg2 + -arg3) / 2^64⌋"]
#[doc = ""]
#[doc = " Input Bounds:"]
#[doc = " arg1: [0x0 ~> 0x1]"]
#[doc = " arg2: [0x0 ~> 0xffffffffffffffff]"]
#[doc = " arg3: [0x0 ~> 0xffffffffffffffff]"]
#[doc = " Output Bounds:"]
#[doc = " out1: [0x0 ~> 0xffffffffffffffff]"]
#[doc = " out2: [0x0 ~> 0x1]"]
#[inline]
pub const fn fiat_p192_subborrowx_u64(
arg1: fiat_p192_u1,
arg2: u64,
arg3: u64,
) -> (u64, fiat_p192_u1) {
let mut out1: u64 = 0;
let mut out2: fiat_p192_u1 = 0;
let x1: i128 = (((arg2 as i128) - (arg1 as i128)) - (arg3 as i128));
let x2: fiat_p192_i1 = ((x1 >> 64) as fiat_p192_i1);
let x3: u64 = ((x1 & (0xffffffffffffffff as i128)) as u64);
out1 = x3;
out2 = (((0x0 as fiat_p192_i2) - (x2 as fiat_p192_i2)) as fiat_p192_u1);
(out1, out2)
}
#[doc = " The function fiat_p192_mulx_u64 is a multiplication, returning the full double-width result."]
#[doc = ""]
#[doc = " Postconditions:"]
#[doc = " out1 = (arg1 * arg2) mod 2^64"]
#[doc = " out2 = ⌊arg1 * arg2 / 2^64⌋"]
#[doc = ""]
#[doc = " Input Bounds:"]
#[doc = " arg1: [0x0 ~> 0xffffffffffffffff]"]
#[doc = " arg2: [0x0 ~> 0xffffffffffffffff]"]
#[doc = " Output Bounds:"]
#[doc = " out1: [0x0 ~> 0xffffffffffffffff]"]
#[doc = " out2: [0x0 ~> 0xffffffffffffffff]"]
#[inline]
pub const fn fiat_p192_mulx_u64(arg1: u64, arg2: u64) -> (u64, u64) {
let mut out1: u64 = 0;
let mut out2: u64 = 0;
let x1: u128 = ((arg1 as u128) * (arg2 as u128));
let x2: u64 = ((x1 & (0xffffffffffffffff as u128)) as u64);
let x3: u64 = ((x1 >> 64) as u64);
out1 = x2;
out2 = x3;
(out1, out2)
}
#[doc = " The function fiat_p192_cmovznz_u64 is a single-word conditional move."]
#[doc = ""]
#[doc = " Postconditions:"]
#[doc = " out1 = (if arg1 = 0 then arg2 else arg3)"]
#[doc = ""]
#[doc = " Input Bounds:"]
#[doc = " arg1: [0x0 ~> 0x1]"]
#[doc = " arg2: [0x0 ~> 0xffffffffffffffff]"]
#[doc = " arg3: [0x0 ~> 0xffffffffffffffff]"]
#[doc = " Output Bounds:"]
#[doc = " out1: [0x0 ~> 0xffffffffffffffff]"]
#[inline]
pub const fn fiat_p192_cmovznz_u64(arg1: fiat_p192_u1, arg2: u64, arg3: u64) -> u64 {
let mut out1: u64 = 0;
let x1: fiat_p192_u1 = (!(!arg1));
let x2: u64 = ((((((0x0 as fiat_p192_i2) - (x1 as fiat_p192_i2)) as fiat_p192_i1) as i128)
& (0xffffffffffffffff as i128)) as u64);
let x3: u64 = ((x2 & arg3) | ((!x2) & arg2));
out1 = x3;
out1
}
#[doc = " The function fiat_p192_mul multiplies two field elements in the Montgomery domain."]
#[doc = ""]
#[doc = " Preconditions:"]
#[doc = " 0 ≤ eval arg1 < m"]
#[doc = " 0 ≤ eval arg2 < m"]
#[doc = " Postconditions:"]
#[doc = " eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg2)) mod m"]
#[doc = " 0 ≤ eval out1 < m"]
#[doc = ""]
#[inline]
pub const fn fiat_p192_mul(
arg1: &fiat_p192_montgomery_domain_field_element,
arg2: &fiat_p192_montgomery_domain_field_element,
) -> fiat_p192_montgomery_domain_field_element {
let mut out1: fiat_p192_montgomery_domain_field_element = [0; 3];
let x1: u64 = (arg1[1]);
let x2: u64 = (arg1[2]);
let x3: u64 = (arg1[0]);
let mut x4: u64 = 0;
let mut x5: u64 = 0;
let (x4, x5) = fiat_p192_mulx_u64(x3, (arg2[2]));
let mut x6: u64 = 0;
let mut x7: u64 = 0;
let (x6, x7) = fiat_p192_mulx_u64(x3, (arg2[1]));
let mut x8: u64 = 0;
let mut x9: u64 = 0;
let (x8, x9) = fiat_p192_mulx_u64(x3, (arg2[0]));
let mut x10: u64 = 0;
let mut x11: fiat_p192_u1 = 0;
let (x10, x11) = fiat_p192_addcarryx_u64(0x0, x9, x6);
let mut x12: u64 = 0;
let mut x13: fiat_p192_u1 = 0;
let (x12, x13) = fiat_p192_addcarryx_u64(x11, x7, x4);
let x14: u64 = ((x13 as u64) + x5);
let mut x15: u64 = 0;
let mut x16: u64 = 0;
let (x15, x16) = fiat_p192_mulx_u64(x8, 0xffffffffffffffff);
let mut x17: u64 = 0;
let mut x18: u64 = 0;
let (x17, x18) = fiat_p192_mulx_u64(x8, 0xfffffffffffffffe);
let mut x19: u64 = 0;
let mut x20: u64 = 0;
let (x19, x20) = fiat_p192_mulx_u64(x8, 0xffffffffffffffff);
let mut x21: u64 = 0;
let mut x22: fiat_p192_u1 = 0;
let (x21, x22) = fiat_p192_addcarryx_u64(0x0, x20, x17);
let mut x23: u64 = 0;
let mut x24: fiat_p192_u1 = 0;
let (x23, x24) = fiat_p192_addcarryx_u64(x22, x18, x15);
let x25: u64 = ((x24 as u64) + x16);
let mut x26: u64 = 0;
let mut x27: fiat_p192_u1 = 0;
let (x26, x27) = fiat_p192_addcarryx_u64(0x0, x8, x19);
let mut x28: u64 = 0;
let mut x29: fiat_p192_u1 = 0;
let (x28, x29) = fiat_p192_addcarryx_u64(x27, x10, x21);
let mut x30: u64 = 0;
let mut x31: fiat_p192_u1 = 0;
let (x30, x31) = fiat_p192_addcarryx_u64(x29, x12, x23);
let mut x32: u64 = 0;
let mut x33: fiat_p192_u1 = 0;
let (x32, x33) = fiat_p192_addcarryx_u64(x31, x14, x25);
let mut x34: u64 = 0;
let mut x35: u64 = 0;
let (x34, x35) = fiat_p192_mulx_u64(x1, (arg2[2]));
let mut x36: u64 = 0;
let mut x37: u64 = 0;
let (x36, x37) = fiat_p192_mulx_u64(x1, (arg2[1]));
let mut x38: u64 = 0;
let mut x39: u64 = 0;
let (x38, x39) = fiat_p192_mulx_u64(x1, (arg2[0]));
let mut x40: u64 = 0;
let mut x41: fiat_p192_u1 = 0;
let (x40, x41) = fiat_p192_addcarryx_u64(0x0, x39, x36);
let mut x42: u64 = 0;
let mut x43: fiat_p192_u1 = 0;
let (x42, x43) = fiat_p192_addcarryx_u64(x41, x37, x34);
let x44: u64 = ((x43 as u64) + x35);
let mut x45: u64 = 0;
let mut x46: fiat_p192_u1 = 0;
let (x45, x46) = fiat_p192_addcarryx_u64(0x0, x28, x38);
let mut x47: u64 = 0;
let mut x48: fiat_p192_u1 = 0;
let (x47, x48) = fiat_p192_addcarryx_u64(x46, x30, x40);
let mut x49: u64 = 0;
let mut x50: fiat_p192_u1 = 0;
let (x49, x50) = fiat_p192_addcarryx_u64(x48, x32, x42);
let mut x51: u64 = 0;
let mut x52: fiat_p192_u1 = 0;
let (x51, x52) = fiat_p192_addcarryx_u64(x50, (x33 as u64), x44);
let mut x53: u64 = 0;
let mut x54: u64 = 0;
let (x53, x54) = fiat_p192_mulx_u64(x45, 0xffffffffffffffff);
let mut x55: u64 = 0;
let mut x56: u64 = 0;
let (x55, x56) = fiat_p192_mulx_u64(x45, 0xfffffffffffffffe);
let mut x57: u64 = 0;
let mut x58: u64 = 0;
let (x57, x58) = fiat_p192_mulx_u64(x45, 0xffffffffffffffff);
let mut x59: u64 = 0;
let mut x60: fiat_p192_u1 = 0;
let (x59, x60) = fiat_p192_addcarryx_u64(0x0, x58, x55);
let mut x61: u64 = 0;
let mut x62: fiat_p192_u1 = 0;
let (x61, x62) = fiat_p192_addcarryx_u64(x60, x56, x53);
let x63: u64 = ((x62 as u64) + x54);
let mut x64: u64 = 0;
let mut x65: fiat_p192_u1 = 0;
let (x64, x65) = fiat_p192_addcarryx_u64(0x0, x45, x57);
let mut x66: u64 = 0;
let mut x67: fiat_p192_u1 = 0;
let (x66, x67) = fiat_p192_addcarryx_u64(x65, x47, x59);
let mut x68: u64 = 0;
let mut x69: fiat_p192_u1 = 0;
let (x68, x69) = fiat_p192_addcarryx_u64(x67, x49, x61);
let mut x70: u64 = 0;
let mut x71: fiat_p192_u1 = 0;
let (x70, x71) = fiat_p192_addcarryx_u64(x69, x51, x63);
let x72: u64 = ((x71 as u64) + (x52 as u64));
let mut x73: u64 = 0;
let mut x74: u64 = 0;
let (x73, x74) = fiat_p192_mulx_u64(x2, (arg2[2]));
let mut x75: u64 = 0;
let mut x76: u64 = 0;
let (x75, x76) = fiat_p192_mulx_u64(x2, (arg2[1]));
let mut x77: u64 = 0;
let mut x78: u64 = 0;
let (x77, x78) = fiat_p192_mulx_u64(x2, (arg2[0]));
let mut x79: u64 = 0;
let mut x80: fiat_p192_u1 = 0;
let (x79, x80) = fiat_p192_addcarryx_u64(0x0, x78, x75);
let mut x81: u64 = 0;
let mut x82: fiat_p192_u1 = 0;
let (x81, x82) = fiat_p192_addcarryx_u64(x80, x76, x73);
let x83: u64 = ((x82 as u64) + x74);
let mut x84: u64 = 0;
let mut x85: fiat_p192_u1 = 0;
let (x84, x85) = fiat_p192_addcarryx_u64(0x0, x66, x77);
let mut x86: u64 = 0;
let mut x87: fiat_p192_u1 = 0;
let (x86, x87) = fiat_p192_addcarryx_u64(x85, x68, x79);
let mut x88: u64 = 0;
let mut x89: fiat_p192_u1 = 0;
let (x88, x89) = fiat_p192_addcarryx_u64(x87, x70, x81);
let mut x90: u64 = 0;
let mut x91: fiat_p192_u1 = 0;
let (x90, x91) = fiat_p192_addcarryx_u64(x89, x72, x83);
let mut x92: u64 = 0;
let mut x93: u64 = 0;
let (x92, x93) = fiat_p192_mulx_u64(x84, 0xffffffffffffffff);
let mut x94: u64 = 0;
let mut x95: u64 = 0;
let (x94, x95) = fiat_p192_mulx_u64(x84, 0xfffffffffffffffe);
let mut x96: u64 = 0;
let mut x97: u64 = 0;
let (x96, x97) = fiat_p192_mulx_u64(x84, 0xffffffffffffffff);
let mut x98: u64 = 0;
let mut x99: fiat_p192_u1 = 0;
let (x98, x99) = fiat_p192_addcarryx_u64(0x0, x97, x94);
let mut x100: u64 = 0;
let mut x101: fiat_p192_u1 = 0;
let (x100, x101) = fiat_p192_addcarryx_u64(x99, x95, x92);
let x102: u64 = ((x101 as u64) + x93);
let mut x103: u64 = 0;
let mut x104: fiat_p192_u1 = 0;
let (x103, x104) = fiat_p192_addcarryx_u64(0x0, x84, x96);
let mut x105: u64 = 0;
let mut x106: fiat_p192_u1 = 0;
let (x105, x106) = fiat_p192_addcarryx_u64(x104, x86, x98);
let mut x107: u64 = 0;
let mut x108: fiat_p192_u1 = 0;
let (x107, x108) = fiat_p192_addcarryx_u64(x106, x88, x100);
let mut x109: u64 = 0;
let mut x110: fiat_p192_u1 = 0;
let (x109, x110) = fiat_p192_addcarryx_u64(x108, x90, x102);
let x111: u64 = ((x110 as u64) + (x91 as u64));
let mut x112: u64 = 0;
let mut x113: fiat_p192_u1 = 0;
let (x112, x113) = fiat_p192_subborrowx_u64(0x0, x105, 0xffffffffffffffff);
let mut x114: u64 = 0;
let mut x115: fiat_p192_u1 = 0;
let (x114, x115) = fiat_p192_subborrowx_u64(x113, x107, 0xfffffffffffffffe);
let mut x116: u64 = 0;
let mut x117: fiat_p192_u1 = 0;
let (x116, x117) = fiat_p192_subborrowx_u64(x115, x109, 0xffffffffffffffff);
let mut x118: u64 = 0;
let mut x119: fiat_p192_u1 = 0;
let (x118, x119) = fiat_p192_subborrowx_u64(x117, x111, (0x0 as u64));
let mut x120: u64 = 0;
let (x120) = fiat_p192_cmovznz_u64(x119, x112, x105);
let mut x121: u64 = 0;
let (x121) = fiat_p192_cmovznz_u64(x119, x114, x107);
let mut x122: u64 = 0;
let (x122) = fiat_p192_cmovznz_u64(x119, x116, x109);
out1[0] = x120;
out1[1] = x121;
out1[2] = x122;
out1
}
#[doc = " The function fiat_p192_square squares a field element in the Montgomery domain."]
#[doc = ""]
#[doc = " Preconditions:"]
#[doc = " 0 ≤ eval arg1 < m"]
#[doc = " Postconditions:"]
#[doc = " eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg1)) mod m"]
#[doc = " 0 ≤ eval out1 < m"]
#[doc = ""]
#[inline]
pub const fn fiat_p192_square(
arg1: &fiat_p192_montgomery_domain_field_element,
) -> fiat_p192_montgomery_domain_field_element {
let mut out1: fiat_p192_montgomery_domain_field_element = [0; 3];
let x1: u64 = (arg1[1]);
let x2: u64 = (arg1[2]);
let x3: u64 = (arg1[0]);
let mut x4: u64 = 0;
let mut x5: u64 = 0;
let (x4, x5) = fiat_p192_mulx_u64(x3, (arg1[2]));
let mut x6: u64 = 0;
let mut x7: u64 = 0;
let (x6, x7) = fiat_p192_mulx_u64(x3, (arg1[1]));
let mut x8: u64 = 0;
let mut x9: u64 = 0;
let (x8, x9) = fiat_p192_mulx_u64(x3, (arg1[0]));
let mut x10: u64 = 0;
let mut x11: fiat_p192_u1 = 0;
let (x10, x11) = fiat_p192_addcarryx_u64(0x0, x9, x6);
let mut x12: u64 = 0;
let mut x13: fiat_p192_u1 = 0;
let (x12, x13) = fiat_p192_addcarryx_u64(x11, x7, x4);
let x14: u64 = ((x13 as u64) + x5);
let mut x15: u64 = 0;
let mut x16: u64 = 0;
let (x15, x16) = fiat_p192_mulx_u64(x8, 0xffffffffffffffff);
let mut x17: u64 = 0;
let mut x18: u64 = 0;
let (x17, x18) = fiat_p192_mulx_u64(x8, 0xfffffffffffffffe);
let mut x19: u64 = 0;
let mut x20: u64 = 0;
let (x19, x20) = fiat_p192_mulx_u64(x8, 0xffffffffffffffff);
let mut x21: u64 = 0;
let mut x22: fiat_p192_u1 = 0;
let (x21, x22) = fiat_p192_addcarryx_u64(0x0, x20, x17);
let mut x23: u64 = 0;
let mut x24: fiat_p192_u1 = 0;
let (x23, x24) = fiat_p192_addcarryx_u64(x22, x18, x15);
let x25: u64 = ((x24 as u64) + x16);
let mut x26: u64 = 0;
let mut x27: fiat_p192_u1 = 0;
let (x26, x27) = fiat_p192_addcarryx_u64(0x0, x8, x19);
let mut x28: u64 = 0;
let mut x29: fiat_p192_u1 = 0;
let (x28, x29) = fiat_p192_addcarryx_u64(x27, x10, x21);
let mut x30: u64 = 0;
let mut x31: fiat_p192_u1 = 0;
let (x30, x31) = fiat_p192_addcarryx_u64(x29, x12, x23);
let mut x32: u64 = 0;
let mut x33: fiat_p192_u1 = 0;
let (x32, x33) = fiat_p192_addcarryx_u64(x31, x14, x25);
let mut x34: u64 = 0;
let mut x35: u64 = 0;
let (x34, x35) = fiat_p192_mulx_u64(x1, (arg1[2]));
let mut x36: u64 = 0;
let mut x37: u64 = 0;
let (x36, x37) = fiat_p192_mulx_u64(x1, (arg1[1]));
let mut x38: u64 = 0;
let mut x39: u64 = 0;
let (x38, x39) = fiat_p192_mulx_u64(x1, (arg1[0]));
let mut x40: u64 = 0;
let mut x41: fiat_p192_u1 = 0;
let (x40, x41) = fiat_p192_addcarryx_u64(0x0, x39, x36);
let mut x42: u64 = 0;
let mut x43: fiat_p192_u1 = 0;
let (x42, x43) = fiat_p192_addcarryx_u64(x41, x37, x34);
let x44: u64 = ((x43 as u64) + x35);
let mut x45: u64 = 0;
let mut x46: fiat_p192_u1 = 0;
let (x45, x46) = fiat_p192_addcarryx_u64(0x0, x28, x38);
let mut x47: u64 = 0;
let mut x48: fiat_p192_u1 = 0;
let (x47, x48) = fiat_p192_addcarryx_u64(x46, x30, x40);
let mut x49: u64 = 0;
let mut x50: fiat_p192_u1 = 0;
let (x49, x50) = fiat_p192_addcarryx_u64(x48, x32, x42);
let mut x51: u64 = 0;
let mut x52: fiat_p192_u1 = 0;
let (x51, x52) = fiat_p192_addcarryx_u64(x50, (x33 as u64), x44);
let mut x53: u64 = 0;
let mut x54: u64 = 0;
let (x53, x54) = fiat_p192_mulx_u64(x45, 0xffffffffffffffff);
let mut x55: u64 = 0;
let mut x56: u64 = 0;
let (x55, x56) = fiat_p192_mulx_u64(x45, 0xfffffffffffffffe);
let mut x57: u64 = 0;
let mut x58: u64 = 0;
let (x57, x58) = fiat_p192_mulx_u64(x45, 0xffffffffffffffff);
let mut x59: u64 = 0;
let mut x60: fiat_p192_u1 = 0;
let (x59, x60) = fiat_p192_addcarryx_u64(0x0, x58, x55);
let mut x61: u64 = 0;
let mut x62: fiat_p192_u1 = 0;
let (x61, x62) = fiat_p192_addcarryx_u64(x60, x56, x53);
let x63: u64 = ((x62 as u64) + x54);
let mut x64: u64 = 0;
let mut x65: fiat_p192_u1 = 0;
let (x64, x65) = fiat_p192_addcarryx_u64(0x0, x45, x57);
let mut x66: u64 = 0;
let mut x67: fiat_p192_u1 = 0;
let (x66, x67) = fiat_p192_addcarryx_u64(x65, x47, x59);
let mut x68: u64 = 0;
let mut x69: fiat_p192_u1 = 0;
let (x68, x69) = fiat_p192_addcarryx_u64(x67, x49, x61);
let mut x70: u64 = 0;
let mut x71: fiat_p192_u1 = 0;
let (x70, x71) = fiat_p192_addcarryx_u64(x69, x51, x63);
let x72: u64 = ((x71 as u64) + (x52 as u64));
let mut x73: u64 = 0;
let mut x74: u64 = 0;
let (x73, x74) = fiat_p192_mulx_u64(x2, (arg1[2]));
let mut x75: u64 = 0;
let mut x76: u64 = 0;
let (x75, x76) = fiat_p192_mulx_u64(x2, (arg1[1]));
let mut x77: u64 = 0;
let mut x78: u64 = 0;
let (x77, x78) = fiat_p192_mulx_u64(x2, (arg1[0]));
let mut x79: u64 = 0;
let mut x80: fiat_p192_u1 = 0;
let (x79, x80) = fiat_p192_addcarryx_u64(0x0, x78, x75);
let mut x81: u64 = 0;
let mut x82: fiat_p192_u1 = 0;
let (x81, x82) = fiat_p192_addcarryx_u64(x80, x76, x73);
let x83: u64 = ((x82 as u64) + x74);
let mut x84: u64 = 0;
let mut x85: fiat_p192_u1 = 0;
let (x84, x85) = fiat_p192_addcarryx_u64(0x0, x66, x77);
let mut x86: u64 = 0;
let mut x87: fiat_p192_u1 = 0;
let (x86, x87) = fiat_p192_addcarryx_u64(x85, x68, x79);
let mut x88: u64 = 0;
let mut x89: fiat_p192_u1 = 0;
let (x88, x89) = fiat_p192_addcarryx_u64(x87, x70, x81);
let mut x90: u64 = 0;
let mut x91: fiat_p192_u1 = 0;
let (x90, x91) = fiat_p192_addcarryx_u64(x89, x72, x83);
let mut x92: u64 = 0;
let mut x93: u64 = 0;
let (x92, x93) = fiat_p192_mulx_u64(x84, 0xffffffffffffffff);
let mut x94: u64 = 0;
let mut x95: u64 = 0;
let (x94, x95) = fiat_p192_mulx_u64(x84, 0xfffffffffffffffe);
let mut x96: u64 = 0;
let mut x97: u64 = 0;
let (x96, x97) = fiat_p192_mulx_u64(x84, 0xffffffffffffffff);
let mut x98: u64 = 0;
let mut x99: fiat_p192_u1 = 0;
let (x98, x99) = fiat_p192_addcarryx_u64(0x0, x97, x94);
let mut x100: u64 = 0;
let mut x101: fiat_p192_u1 = 0;
let (x100, x101) = fiat_p192_addcarryx_u64(x99, x95, x92);
let x102: u64 = ((x101 as u64) + x93);
let mut x103: u64 = 0;
let mut x104: fiat_p192_u1 = 0;
let (x103, x104) = fiat_p192_addcarryx_u64(0x0, x84, x96);
let mut x105: u64 = 0;
let mut x106: fiat_p192_u1 = 0;
let (x105, x106) = fiat_p192_addcarryx_u64(x104, x86, x98);
let mut x107: u64 = 0;
let mut x108: fiat_p192_u1 = 0;
let (x107, x108) = fiat_p192_addcarryx_u64(x106, x88, x100);
let mut x109: u64 = 0;
let mut x110: fiat_p192_u1 = 0;
let (x109, x110) = fiat_p192_addcarryx_u64(x108, x90, x102);
let x111: u64 = ((x110 as u64) + (x91 as u64));
let mut x112: u64 = 0;
let mut x113: fiat_p192_u1 = 0;
let (x112, x113) = fiat_p192_subborrowx_u64(0x0, x105, 0xffffffffffffffff);
let mut x114: u64 = 0;
let mut x115: fiat_p192_u1 = 0;
let (x114, x115) = fiat_p192_subborrowx_u64(x113, x107, 0xfffffffffffffffe);
let mut x116: u64 = 0;
let mut x117: fiat_p192_u1 = 0;
let (x116, x117) = fiat_p192_subborrowx_u64(x115, x109, 0xffffffffffffffff);
let mut x118: u64 = 0;
let mut x119: fiat_p192_u1 = 0;
let (x118, x119) = fiat_p192_subborrowx_u64(x117, x111, (0x0 as u64));
let mut x120: u64 = 0;
let (x120) = fiat_p192_cmovznz_u64(x119, x112, x105);
let mut x121: u64 = 0;
let (x121) = fiat_p192_cmovznz_u64(x119, x114, x107);
let mut x122: u64 = 0;
let (x122) = fiat_p192_cmovznz_u64(x119, x116, x109);
out1[0] = x120;
out1[1] = x121;
out1[2] = x122;
out1
}
#[doc = " The function fiat_p192_add adds two field elements in the Montgomery domain."]
#[doc = ""]
#[doc = " Preconditions:"]
#[doc = " 0 ≤ eval arg1 < m"]
#[doc = " 0 ≤ eval arg2 < m"]
#[doc = " Postconditions:"]
#[doc = " eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m"]
#[doc = " 0 ≤ eval out1 < m"]
#[doc = ""]
#[inline]
pub const fn fiat_p192_add(
arg1: &fiat_p192_montgomery_domain_field_element,
arg2: &fiat_p192_montgomery_domain_field_element,
) -> fiat_p192_montgomery_domain_field_element {
let mut out1: fiat_p192_montgomery_domain_field_element = [0; 3];
let mut x1: u64 = 0;
let mut x2: fiat_p192_u1 = 0;
let (x1, x2) = fiat_p192_addcarryx_u64(0x0, (arg1[0]), (arg2[0]));
let mut x3: u64 = 0;
let mut x4: fiat_p192_u1 = 0;
let (x3, x4) = fiat_p192_addcarryx_u64(x2, (arg1[1]), (arg2[1]));
let mut x5: u64 = 0;
let mut x6: fiat_p192_u1 = 0;
let (x5, x6) = fiat_p192_addcarryx_u64(x4, (arg1[2]), (arg2[2]));
let mut x7: u64 = 0;
let mut x8: fiat_p192_u1 = 0;
let (x7, x8) = fiat_p192_subborrowx_u64(0x0, x1, 0xffffffffffffffff);
let mut x9: u64 = 0;
let mut x10: fiat_p192_u1 = 0;
let (x9, x10) = fiat_p192_subborrowx_u64(x8, x3, 0xfffffffffffffffe);
let mut x11: u64 = 0;
let mut x12: fiat_p192_u1 = 0;
let (x11, x12) = fiat_p192_subborrowx_u64(x10, x5, 0xffffffffffffffff);
let mut x13: u64 = 0;
let mut x14: fiat_p192_u1 = 0;
let (x13, x14) = fiat_p192_subborrowx_u64(x12, (x6 as u64), (0x0 as u64));
let mut x15: u64 = 0;
let (x15) = fiat_p192_cmovznz_u64(x14, x7, x1);
let mut x16: u64 = 0;
let (x16) = fiat_p192_cmovznz_u64(x14, x9, x3);
let mut x17: u64 = 0;
let (x17) = fiat_p192_cmovznz_u64(x14, x11, x5);
out1[0] = x15;
out1[1] = x16;
out1[2] = x17;
out1
}
#[doc = " The function fiat_p192_sub subtracts two field elements in the Montgomery domain."]
#[doc = ""]
#[doc = " Preconditions:"]
#[doc = " 0 ≤ eval arg1 < m"]
#[doc = " 0 ≤ eval arg2 < m"]
#[doc = " Postconditions:"]
#[doc = " eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) - eval (from_montgomery arg2)) mod m"]
#[doc = " 0 ≤ eval out1 < m"]
#[doc = ""]
#[inline]
pub const fn fiat_p192_sub(
arg1: &fiat_p192_montgomery_domain_field_element,
arg2: &fiat_p192_montgomery_domain_field_element,
) -> fiat_p192_montgomery_domain_field_element {
let mut out1: fiat_p192_montgomery_domain_field_element = [0; 3];
let mut x1: u64 = 0;
let mut x2: fiat_p192_u1 = 0;
let (x1, x2) = fiat_p192_subborrowx_u64(0x0, (arg1[0]), (arg2[0]));
let mut x3: u64 = 0;
let mut x4: fiat_p192_u1 = 0;
let (x3, x4) = fiat_p192_subborrowx_u64(x2, (arg1[1]), (arg2[1]));
let mut x5: u64 = 0;
let mut x6: fiat_p192_u1 = 0;
let (x5, x6) = fiat_p192_subborrowx_u64(x4, (arg1[2]), (arg2[2]));
let mut x7: u64 = 0;
let (x7) = fiat_p192_cmovznz_u64(x6, (0x0 as u64), 0xffffffffffffffff);
let mut x8: u64 = 0;
let mut x9: fiat_p192_u1 = 0;
let (x8, x9) = fiat_p192_addcarryx_u64(0x0, x1, x7);
let mut x10: u64 = 0;
let mut x11: fiat_p192_u1 = 0;
let (x10, x11) = fiat_p192_addcarryx_u64(x9, x3, (x7 & 0xfffffffffffffffe));
let mut x12: u64 = 0;
let mut x13: fiat_p192_u1 = 0;
let (x12, x13) = fiat_p192_addcarryx_u64(x11, x5, x7);
out1[0] = x8;
out1[1] = x10;
out1[2] = x12;
out1
}
#[doc = " The function fiat_p192_opp negates a field element in the Montgomery domain."]
#[doc = ""]
#[doc = " Preconditions:"]
#[doc = " 0 ≤ eval arg1 < m"]
#[doc = " Postconditions:"]
#[doc = " eval (from_montgomery out1) mod m = -eval (from_montgomery arg1) mod m"]
#[doc = " 0 ≤ eval out1 < m"]
#[doc = ""]
#[inline]
pub const fn fiat_p192_opp(
arg1: &fiat_p192_montgomery_domain_field_element,
) -> fiat_p192_montgomery_domain_field_element {
let mut out1: fiat_p192_montgomery_domain_field_element = [0; 3];
let mut x1: u64 = 0;
let mut x2: fiat_p192_u1 = 0;
let (x1, x2) = fiat_p192_subborrowx_u64(0x0, (0x0 as u64), (arg1[0]));
let mut x3: u64 = 0;
let mut x4: fiat_p192_u1 = 0;
let (x3, x4) = fiat_p192_subborrowx_u64(x2, (0x0 as u64), (arg1[1]));
let mut x5: u64 = 0;
let mut x6: fiat_p192_u1 = 0;
let (x5, x6) = fiat_p192_subborrowx_u64(x4, (0x0 as u64), (arg1[2]));
let mut x7: u64 = 0;
let (x7) = fiat_p192_cmovznz_u64(x6, (0x0 as u64), 0xffffffffffffffff);
let mut x8: u64 = 0;
let mut x9: fiat_p192_u1 = 0;
let (x8, x9) = fiat_p192_addcarryx_u64(0x0, x1, x7);
let mut x10: u64 = 0;
let mut x11: fiat_p192_u1 = 0;
let (x10, x11) = fiat_p192_addcarryx_u64(x9, x3, (x7 & 0xfffffffffffffffe));
let mut x12: u64 = 0;
let mut x13: fiat_p192_u1 = 0;
let (x12, x13) = fiat_p192_addcarryx_u64(x11, x5, x7);
out1[0] = x8;
out1[1] = x10;
out1[2] = x12;
out1
}
#[doc = " The function fiat_p192_from_montgomery translates a field element out of the Montgomery domain."]
#[doc = ""]
#[doc = " Preconditions:"]
#[doc = " 0 ≤ eval arg1 < m"]
#[doc = " Postconditions:"]
#[doc = " eval out1 mod m = (eval arg1 * ((2^64)⁻¹ mod m)^3) mod m"]
#[doc = " 0 ≤ eval out1 < m"]
#[doc = ""]
#[inline]
pub const fn fiat_p192_from_montgomery(
arg1: &fiat_p192_montgomery_domain_field_element,
) -> fiat_p192_non_montgomery_domain_field_element {
let mut out1: fiat_p192_non_montgomery_domain_field_element = [0; 3];
let x1: u64 = (arg1[0]);
let mut x2: u64 = 0;
let mut x3: u64 = 0;
let (x2, x3) = fiat_p192_mulx_u64(x1, 0xffffffffffffffff);
let mut x4: u64 = 0;
let mut x5: u64 = 0;
let (x4, x5) = fiat_p192_mulx_u64(x1, 0xfffffffffffffffe);
let mut x6: u64 = 0;
let mut x7: u64 = 0;
let (x6, x7) = fiat_p192_mulx_u64(x1, 0xffffffffffffffff);
let mut x8: u64 = 0;
let mut x9: fiat_p192_u1 = 0;
let (x8, x9) = fiat_p192_addcarryx_u64(0x0, x7, x4);
let mut x10: u64 = 0;
let mut x11: fiat_p192_u1 = 0;
let (x10, x11) = fiat_p192_addcarryx_u64(x9, x5, x2);
let mut x12: u64 = 0;
let mut x13: fiat_p192_u1 = 0;
let (x12, x13) = fiat_p192_addcarryx_u64(0x0, x1, x6);
let mut x14: u64 = 0;
let mut x15: fiat_p192_u1 = 0;
let (x14, x15) = fiat_p192_addcarryx_u64(x13, (0x0 as u64), x8);
let mut x16: u64 = 0;
let mut x17: fiat_p192_u1 = 0;
let (x16, x17) = fiat_p192_addcarryx_u64(x15, (0x0 as u64), x10);
let mut x18: u64 = 0;
let mut x19: fiat_p192_u1 = 0;
let (x18, x19) = fiat_p192_addcarryx_u64(x17, (0x0 as u64), ((x11 as u64) + x3));
let mut x20: u64 = 0;
let mut x21: fiat_p192_u1 = 0;
let (x20, x21) = fiat_p192_addcarryx_u64(0x0, x14, (arg1[1]));
let mut x22: u64 = 0;
let mut x23: fiat_p192_u1 = 0;
let (x22, x23) = fiat_p192_addcarryx_u64(x21, x16, (0x0 as u64));
let mut x24: u64 = 0;
let mut x25: fiat_p192_u1 = 0;
let (x24, x25) = fiat_p192_addcarryx_u64(x23, x18, (0x0 as u64));
let mut x26: u64 = 0;
let mut x27: u64 = 0;
let (x26, x27) = fiat_p192_mulx_u64(x20, 0xffffffffffffffff);
let mut x28: u64 = 0;
let mut x29: u64 = 0;
let (x28, x29) = fiat_p192_mulx_u64(x20, 0xfffffffffffffffe);
let mut x30: u64 = 0;
let mut x31: u64 = 0;
let (x30, x31) = fiat_p192_mulx_u64(x20, 0xffffffffffffffff);
let mut x32: u64 = 0;
let mut x33: fiat_p192_u1 = 0;
let (x32, x33) = fiat_p192_addcarryx_u64(0x0, x31, x28);
let mut x34: u64 = 0;
let mut x35: fiat_p192_u1 = 0;
let (x34, x35) = fiat_p192_addcarryx_u64(x33, x29, x26);
let mut x36: u64 = 0;
let mut x37: fiat_p192_u1 = 0;
let (x36, x37) = fiat_p192_addcarryx_u64(0x0, x20, x30);
let mut x38: u64 = 0;
let mut x39: fiat_p192_u1 = 0;
let (x38, x39) = fiat_p192_addcarryx_u64(x37, x22, x32);
let mut x40: u64 = 0;
let mut x41: fiat_p192_u1 = 0;
let (x40, x41) = fiat_p192_addcarryx_u64(x39, x24, x34);
let mut x42: u64 = 0;
let mut x43: fiat_p192_u1 = 0;
let (x42, x43) =
fiat_p192_addcarryx_u64(x41, ((x25 as u64) + (x19 as u64)), ((x35 as u64) + x27));
let mut x44: u64 = 0;
let mut x45: fiat_p192_u1 = 0;
let (x44, x45) = fiat_p192_addcarryx_u64(0x0, x38, (arg1[2]));
let mut x46: u64 = 0;
let mut x47: fiat_p192_u1 = 0;
let (x46, x47) = fiat_p192_addcarryx_u64(x45, x40, (0x0 as u64));
let mut x48: u64 = 0;
let mut x49: fiat_p192_u1 = 0;
let (x48, x49) = fiat_p192_addcarryx_u64(x47, x42, (0x0 as u64));
let mut x50: u64 = 0;
let mut x51: u64 = 0;
let (x50, x51) = fiat_p192_mulx_u64(x44, 0xffffffffffffffff);
let mut x52: u64 = 0;
let mut x53: u64 = 0;
let (x52, x53) = fiat_p192_mulx_u64(x44, 0xfffffffffffffffe);
let mut x54: u64 = 0;
let mut x55: u64 = 0;
let (x54, x55) = fiat_p192_mulx_u64(x44, 0xffffffffffffffff);
let mut x56: u64 = 0;
let mut x57: fiat_p192_u1 = 0;
let (x56, x57) = fiat_p192_addcarryx_u64(0x0, x55, x52);
let mut x58: u64 = 0;
let mut x59: fiat_p192_u1 = 0;
let (x58, x59) = fiat_p192_addcarryx_u64(x57, x53, x50);
let mut x60: u64 = 0;
let mut x61: fiat_p192_u1 = 0;
let (x60, x61) = fiat_p192_addcarryx_u64(0x0, x44, x54);
let mut x62: u64 = 0;
let mut x63: fiat_p192_u1 = 0;
let (x62, x63) = fiat_p192_addcarryx_u64(x61, x46, x56);
let mut x64: u64 = 0;
let mut x65: fiat_p192_u1 = 0;
let (x64, x65) = fiat_p192_addcarryx_u64(x63, x48, x58);
let mut x66: u64 = 0;
let mut x67: fiat_p192_u1 = 0;
let (x66, x67) =
fiat_p192_addcarryx_u64(x65, ((x49 as u64) + (x43 as u64)), ((x59 as u64) + x51));
let mut x68: u64 = 0;
let mut x69: fiat_p192_u1 = 0;
let (x68, x69) = fiat_p192_subborrowx_u64(0x0, x62, 0xffffffffffffffff);
let mut x70: u64 = 0;
let mut x71: fiat_p192_u1 = 0;
let (x70, x71) = fiat_p192_subborrowx_u64(x69, x64, 0xfffffffffffffffe);
let mut x72: u64 = 0;
let mut x73: fiat_p192_u1 = 0;
let (x72, x73) = fiat_p192_subborrowx_u64(x71, x66, 0xffffffffffffffff);
let mut x74: u64 = 0;
let mut x75: fiat_p192_u1 = 0;
let (x74, x75) = fiat_p192_subborrowx_u64(x73, (x67 as u64), (0x0 as u64));
let mut x76: u64 = 0;
let (x76) = fiat_p192_cmovznz_u64(x75, x68, x62);
let mut x77: u64 = 0;
let (x77) = fiat_p192_cmovznz_u64(x75, x70, x64);
let mut x78: u64 = 0;
let (x78) = fiat_p192_cmovznz_u64(x75, x72, x66);
out1[0] = x76;
out1[1] = x77;
out1[2] = x78;
out1
}
#[doc = " The function fiat_p192_to_montgomery translates a field element into the Montgomery domain."]
#[doc = ""]
#[doc = " Preconditions:"]
#[doc = " 0 ≤ eval arg1 < m"]
#[doc = " Postconditions:"]
#[doc = " eval (from_montgomery out1) mod m = eval arg1 mod m"]
#[doc = " 0 ≤ eval out1 < m"]
#[doc = ""]
#[inline]
pub const fn fiat_p192_to_montgomery(
arg1: &fiat_p192_non_montgomery_domain_field_element,
) -> fiat_p192_montgomery_domain_field_element {
let mut out1: fiat_p192_montgomery_domain_field_element = [0; 3];
let x1: u64 = (arg1[1]);
let x2: u64 = (arg1[2]);
let x3: u64 = (arg1[0]);
let mut x4: u64 = 0;
let mut x5: u64 = 0;
let (x4, x5) = fiat_p192_mulx_u64(x3, 0x2);
let mut x6: u64 = 0;
let mut x7: fiat_p192_u1 = 0;
let (x6, x7) = fiat_p192_addcarryx_u64(0x0, ((x5 as fiat_p192_u1) as u64), x3);
let mut x8: u64 = 0;
let mut x9: u64 = 0;
let (x8, x9) = fiat_p192_mulx_u64(x3, 0xffffffffffffffff);
let mut x10: u64 = 0;
let mut x11: u64 = 0;
let (x10, x11) = fiat_p192_mulx_u64(x3, 0xfffffffffffffffe);
let mut x12: u64 = 0;
let mut x13: u64 = 0;
let (x12, x13) = fiat_p192_mulx_u64(x3, 0xffffffffffffffff);
let mut x14: u64 = 0;
let mut x15: fiat_p192_u1 = 0;
let (x14, x15) = fiat_p192_addcarryx_u64(0x0, x13, x10);
let mut x16: u64 = 0;
let mut x17: fiat_p192_u1 = 0;
let (x16, x17) = fiat_p192_addcarryx_u64(x15, x11, x8);
let mut x18: u64 = 0;
let mut x19: fiat_p192_u1 = 0;
let (x18, x19) = fiat_p192_addcarryx_u64(0x0, x3, x12);
let mut x20: u64 = 0;
let mut x21: fiat_p192_u1 = 0;
let (x20, x21) = fiat_p192_addcarryx_u64(x19, x4, x14);
let mut x22: u64 = 0;
let mut x23: fiat_p192_u1 = 0;
let (x22, x23) = fiat_p192_addcarryx_u64(x21, x6, x16);
let mut x24: u64 = 0;
let mut x25: fiat_p192_u1 = 0;
let (x24, x25) = fiat_p192_addcarryx_u64(x23, (x7 as u64), ((x17 as u64) + x9));
let mut x26: u64 = 0;
let mut x27: u64 = 0;
let (x26, x27) = fiat_p192_mulx_u64(x1, 0x2);
let mut x28: u64 = 0;
let mut x29: fiat_p192_u1 = 0;
let (x28, x29) = fiat_p192_addcarryx_u64(0x0, ((x27 as fiat_p192_u1) as u64), x1);
let mut x30: u64 = 0;
let mut x31: fiat_p192_u1 = 0;
let (x30, x31) = fiat_p192_addcarryx_u64(0x0, x20, x1);
let mut x32: u64 = 0;
let mut x33: fiat_p192_u1 = 0;
let (x32, x33) = fiat_p192_addcarryx_u64(x31, x22, x26);
let mut x34: u64 = 0;
let mut x35: fiat_p192_u1 = 0;
let (x34, x35) = fiat_p192_addcarryx_u64(x33, x24, x28);
let mut x36: u64 = 0;
let mut x37: u64 = 0;
let (x36, x37) = fiat_p192_mulx_u64(x30, 0xffffffffffffffff);
let mut x38: u64 = 0;
let mut x39: u64 = 0;
let (x38, x39) = fiat_p192_mulx_u64(x30, 0xfffffffffffffffe);
let mut x40: u64 = 0;
let mut x41: u64 = 0;
let (x40, x41) = fiat_p192_mulx_u64(x30, 0xffffffffffffffff);
let mut x42: u64 = 0;
let mut x43: fiat_p192_u1 = 0;
let (x42, x43) = fiat_p192_addcarryx_u64(0x0, x41, x38);
let mut x44: u64 = 0;
let mut x45: fiat_p192_u1 = 0;
let (x44, x45) = fiat_p192_addcarryx_u64(x43, x39, x36);
let mut x46: u64 = 0;
let mut x47: fiat_p192_u1 = 0;
let (x46, x47) = fiat_p192_addcarryx_u64(0x0, x30, x40);
let mut x48: u64 = 0;
let mut x49: fiat_p192_u1 = 0;
let (x48, x49) = fiat_p192_addcarryx_u64(x47, x32, x42);
let mut x50: u64 = 0;
let mut x51: fiat_p192_u1 = 0;
let (x50, x51) = fiat_p192_addcarryx_u64(x49, x34, x44);
let mut x52: u64 = 0;
let mut x53: fiat_p192_u1 = 0;
let (x52, x53) = fiat_p192_addcarryx_u64(
x51,
(((x35 as u64) + (x25 as u64)) + (x29 as u64)),
((x45 as u64) + x37),
);
let mut x54: u64 = 0;
let mut x55: u64 = 0;
let (x54, x55) = fiat_p192_mulx_u64(x2, 0x2);
let mut x56: u64 = 0;
let mut x57: fiat_p192_u1 = 0;
let (x56, x57) = fiat_p192_addcarryx_u64(0x0, ((x55 as fiat_p192_u1) as u64), x2);
let mut x58: u64 = 0;
let mut x59: fiat_p192_u1 = 0;
let (x58, x59) = fiat_p192_addcarryx_u64(0x0, x48, x2);
let mut x60: u64 = 0;
let mut x61: fiat_p192_u1 = 0;
let (x60, x61) = fiat_p192_addcarryx_u64(x59, x50, x54);
let mut x62: u64 = 0;
let mut x63: fiat_p192_u1 = 0;
let (x62, x63) = fiat_p192_addcarryx_u64(x61, x52, x56);
let mut x64: u64 = 0;
let mut x65: u64 = 0;
let (x64, x65) = fiat_p192_mulx_u64(x58, 0xffffffffffffffff);
let mut x66: u64 = 0;
let mut x67: u64 = 0;
let (x66, x67) = fiat_p192_mulx_u64(x58, 0xfffffffffffffffe);
let mut x68: u64 = 0;
let mut x69: u64 = 0;
let (x68, x69) = fiat_p192_mulx_u64(x58, 0xffffffffffffffff);
let mut x70: u64 = 0;
let mut x71: fiat_p192_u1 = 0;
let (x70, x71) = fiat_p192_addcarryx_u64(0x0, x69, x66);
let mut x72: u64 = 0;
let mut x73: fiat_p192_u1 = 0;
let (x72, x73) = fiat_p192_addcarryx_u64(x71, x67, x64);
let mut x74: u64 = 0;
let mut x75: fiat_p192_u1 = 0;
let (x74, x75) = fiat_p192_addcarryx_u64(0x0, x58, x68);
let mut x76: u64 = 0;
let mut x77: fiat_p192_u1 = 0;
let (x76, x77) = fiat_p192_addcarryx_u64(x75, x60, x70);
let mut x78: u64 = 0;
let mut x79: fiat_p192_u1 = 0;
let (x78, x79) = fiat_p192_addcarryx_u64(x77, x62, x72);
let mut x80: u64 = 0;
let mut x81: fiat_p192_u1 = 0;
let (x80, x81) = fiat_p192_addcarryx_u64(
x79,
(((x63 as u64) + (x53 as u64)) + (x57 as u64)),
((x73 as u64) + x65),
);
let mut x82: u64 = 0;
let mut x83: fiat_p192_u1 = 0;
let (x82, x83) = fiat_p192_subborrowx_u64(0x0, x76, 0xffffffffffffffff);
let mut x84: u64 = 0;
let mut x85: fiat_p192_u1 = 0;
let (x84, x85) = fiat_p192_subborrowx_u64(x83, x78, 0xfffffffffffffffe);
let mut x86: u64 = 0;
let mut x87: fiat_p192_u1 = 0;
let (x86, x87) = fiat_p192_subborrowx_u64(x85, x80, 0xffffffffffffffff);
let mut x88: u64 = 0;
let mut x89: fiat_p192_u1 = 0;
let (x88, x89) = fiat_p192_subborrowx_u64(x87, (x81 as u64), (0x0 as u64));
let mut x90: u64 = 0;
let (x90) = fiat_p192_cmovznz_u64(x89, x82, x76);
let mut x91: u64 = 0;
let (x91) = fiat_p192_cmovznz_u64(x89, x84, x78);
let mut x92: u64 = 0;
let (x92) = fiat_p192_cmovznz_u64(x89, x86, x80);
out1[0] = x90;
out1[1] = x91;
out1[2] = x92;
out1
}
#[doc = " The function fiat_p192_nonzero outputs a single non-zero word if the input is non-zero and zero otherwise."]
#[doc = ""]
#[doc = " Preconditions:"]
#[doc = " 0 ≤ eval arg1 < m"]
#[doc = " Postconditions:"]
#[doc = " out1 = 0 ↔ eval (from_montgomery arg1) mod m = 0"]
#[doc = ""]
#[doc = " Input Bounds:"]
#[doc = " arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]"]
#[doc = " Output Bounds:"]
#[doc = " out1: [0x0 ~> 0xffffffffffffffff]"]
#[inline]
pub const fn fiat_p192_nonzero(arg1: &[u64; 3]) -> u64 {
let mut out1: u64 = 0;
let x1: u64 = ((arg1[0]) | ((arg1[1]) | (arg1[2])));
out1 = x1;
out1
}
#[doc = " The function fiat_p192_selectznz is a multi-limb conditional select."]
#[doc = ""]
#[doc = " Postconditions:"]
#[doc = " out1 = (if arg1 = 0 then arg2 else arg3)"]
#[doc = ""]
#[doc = " Input Bounds:"]
#[doc = " arg1: [0x0 ~> 0x1]"]
#[doc = " arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]"]
#[doc = " arg3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]"]
#[doc = " Output Bounds:"]
#[doc = " out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]"]
#[inline]
pub const fn fiat_p192_selectznz(arg1: fiat_p192_u1, arg2: &[u64; 3], arg3: &[u64; 3]) -> [u64; 3] {
let mut out1: [u64; 3] = [0; 3];
let mut x1: u64 = 0;
let (x1) = fiat_p192_cmovznz_u64(arg1, (arg2[0]), (arg3[0]));
let mut x2: u64 = 0;
let (x2) = fiat_p192_cmovznz_u64(arg1, (arg2[1]), (arg3[1]));
let mut x3: u64 = 0;
let (x3) = fiat_p192_cmovznz_u64(arg1, (arg2[2]), (arg3[2]));
out1[0] = x1;
out1[1] = x2;
out1[2] = x3;
out1
}
#[doc = " The function fiat_p192_to_bytes serializes a field element NOT in the Montgomery domain to bytes in little-endian order."]
#[doc = ""]
#[doc = " Preconditions:"]
#[doc = " 0 ≤ eval arg1 < m"]
#[doc = " Postconditions:"]
#[doc = " out1 = map (λ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..23]"]
#[doc = ""]
#[doc = " Input Bounds:"]
#[doc = " arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]"]
#[doc = " Output Bounds:"]
#[doc = " out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]]"]
#[inline]
pub const fn fiat_p192_to_bytes(arg1: &[u64; 3]) -> [u8; 24] {
let mut out1: [u8; 24] = [0; 24];
let x1: u64 = (arg1[2]);
let x2: u64 = (arg1[1]);
let x3: u64 = (arg1[0]);
let x4: u8 = ((x3 & (0xff as u64)) as u8);
let x5: u64 = (x3 >> 8);
let x6: u8 = ((x5 & (0xff as u64)) as u8);
let x7: u64 = (x5 >> 8);
let x8: u8 = ((x7 & (0xff as u64)) as u8);
let x9: u64 = (x7 >> 8);
let x10: u8 = ((x9 & (0xff as u64)) as u8);
let x11: u64 = (x9 >> 8);
let x12: u8 = ((x11 & (0xff as u64)) as u8);
let x13: u64 = (x11 >> 8);
let x14: u8 = ((x13 & (0xff as u64)) as u8);
let x15: u64 = (x13 >> 8);
let x16: u8 = ((x15 & (0xff as u64)) as u8);
let x17: u8 = ((x15 >> 8) as u8);
let x18: u8 = ((x2 & (0xff as u64)) as u8);
let x19: u64 = (x2 >> 8);
let x20: u8 = ((x19 & (0xff as u64)) as u8);
let x21: u64 = (x19 >> 8);
let x22: u8 = ((x21 & (0xff as u64)) as u8);
let x23: u64 = (x21 >> 8);
let x24: u8 = ((x23 & (0xff as u64)) as u8);
let x25: u64 = (x23 >> 8);
let x26: u8 = ((x25 & (0xff as u64)) as u8);
let x27: u64 = (x25 >> 8);
let x28: u8 = ((x27 & (0xff as u64)) as u8);
let x29: u64 = (x27 >> 8);
let x30: u8 = ((x29 & (0xff as u64)) as u8);
let x31: u8 = ((x29 >> 8) as u8);
let x32: u8 = ((x1 & (0xff as u64)) as u8);
let x33: u64 = (x1 >> 8);
let x34: u8 = ((x33 & (0xff as u64)) as u8);
let x35: u64 = (x33 >> 8);
let x36: u8 = ((x35 & (0xff as u64)) as u8);
let x37: u64 = (x35 >> 8);
let x38: u8 = ((x37 & (0xff as u64)) as u8);
let x39: u64 = (x37 >> 8);
let x40: u8 = ((x39 & (0xff as u64)) as u8);
let x41: u64 = (x39 >> 8);
let x42: u8 = ((x41 & (0xff as u64)) as u8);
let x43: u64 = (x41 >> 8);
let x44: u8 = ((x43 & (0xff as u64)) as u8);
let x45: u8 = ((x43 >> 8) as u8);
out1[0] = x4;
out1[1] = x6;
out1[2] = x8;
out1[3] = x10;
out1[4] = x12;
out1[5] = x14;
out1[6] = x16;
out1[7] = x17;
out1[8] = x18;
out1[9] = x20;
out1[10] = x22;
out1[11] = x24;
out1[12] = x26;
out1[13] = x28;
out1[14] = x30;
out1[15] = x31;
out1[16] = x32;
out1[17] = x34;
out1[18] = x36;
out1[19] = x38;
out1[20] = x40;
out1[21] = x42;
out1[22] = x44;
out1[23] = x45;
out1
}
#[doc = " The function fiat_p192_from_bytes deserializes a field element NOT in the Montgomery domain from bytes in little-endian order."]
#[doc = ""]
#[doc = " Preconditions:"]
#[doc = " 0 ≤ bytes_eval arg1 < m"]
#[doc = " Postconditions:"]
#[doc = " eval out1 mod m = bytes_eval arg1 mod m"]
#[doc = " 0 ≤ eval out1 < m"]
#[doc = ""]
#[doc = " Input Bounds:"]
#[doc = " arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]]"]
#[doc = " Output Bounds:"]
#[doc = " out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]"]
#[inline]
pub const fn fiat_p192_from_bytes(arg1: &[u8; 24]) -> [u64; 3] {
let mut out1: [u64; 3] = [0; 3];
let x1: u64 = (((arg1[23]) as u64) << 56);
let x2: u64 = (((arg1[22]) as u64) << 48);
let x3: u64 = (((arg1[21]) as u64) << 40);
let x4: u64 = (((arg1[20]) as u64) << 32);
let x5: u64 = (((arg1[19]) as u64) << 24);
let x6: u64 = (((arg1[18]) as u64) << 16);
let x7: u64 = (((arg1[17]) as u64) << 8);
let x8: u8 = (arg1[16]);
let x9: u64 = (((arg1[15]) as u64) << 56);
let x10: u64 = (((arg1[14]) as u64) << 48);
let x11: u64 = (((arg1[13]) as u64) << 40);
let x12: u64 = (((arg1[12]) as u64) << 32);
let x13: u64 = (((arg1[11]) as u64) << 24);
let x14: u64 = (((arg1[10]) as u64) << 16);
let x15: u64 = (((arg1[9]) as u64) << 8);
let x16: u8 = (arg1[8]);
let x17: u64 = (((arg1[7]) as u64) << 56);
let x18: u64 = (((arg1[6]) as u64) << 48);
let x19: u64 = (((arg1[5]) as u64) << 40);
let x20: u64 = (((arg1[4]) as u64) << 32);
let x21: u64 = (((arg1[3]) as u64) << 24);
let x22: u64 = (((arg1[2]) as u64) << 16);
let x23: u64 = (((arg1[1]) as u64) << 8);
let x24: u8 = (arg1[0]);
let x25: u64 = (x23 + (x24 as u64));
let x26: u64 = (x22 + x25);
let x27: u64 = (x21 + x26);
let x28: u64 = (x20 + x27);
let x29: u64 = (x19 + x28);
let x30: u64 = (x18 + x29);
let x31: u64 = (x17 + x30);
let x32: u64 = (x15 + (x16 as u64));
let x33: u64 = (x14 + x32);
let x34: u64 = (x13 + x33);
let x35: u64 = (x12 + x34);
let x36: u64 = (x11 + x35);
let x37: u64 = (x10 + x36);
let x38: u64 = (x9 + x37);
let x39: u64 = (x7 + (x8 as u64));
let x40: u64 = (x6 + x39);
let x41: u64 = (x5 + x40);
let x42: u64 = (x4 + x41);
let x43: u64 = (x3 + x42);
let x44: u64 = (x2 + x43);
let x45: u64 = (x1 + x44);
out1[0] = x31;
out1[1] = x38;
out1[2] = x45;
out1
}
#[doc = " The function fiat_p192_set_one returns the field element one in the Montgomery domain."]
#[doc = ""]
#[doc = " Postconditions:"]
#[doc = " eval (from_montgomery out1) mod m = 1 mod m"]
#[doc = " 0 ≤ eval out1 < m"]
#[doc = ""]
#[inline]
pub const fn fiat_p192_set_one() -> fiat_p192_montgomery_domain_field_element {
let mut out1: fiat_p192_montgomery_domain_field_element = [0; 3];
out1[0] = 0x1;
out1[1] = 0x1;
out1[2] = 0x0;
out1
}
#[doc = " The function fiat_p192_msat returns the saturated representation of the prime modulus."]
#[doc = ""]
#[doc = " Postconditions:"]
#[doc = " twos_complement_eval out1 = m"]
#[doc = " 0 ≤ eval out1 < m"]
#[doc = ""]
#[doc = " Output Bounds:"]
#[doc = " out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]"]
#[inline]
pub const fn fiat_p192_msat() -> [u64; 4] {
let mut out1: [u64; 4] = [0; 4];
out1[0] = 0xffffffffffffffff;
out1[1] = 0xfffffffffffffffe;
out1[2] = 0xffffffffffffffff;
out1[3] = (0x0 as u64);
out1
}
#[doc = " The function fiat_p192_divstep computes a divstep."]
#[doc = ""]
#[doc = " Preconditions:"]
#[doc = " 0 ≤ eval arg4 < m"]
#[doc = " 0 ≤ eval arg5 < m"]
#[doc = " Postconditions:"]
#[doc = " out1 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then 1 - arg1 else 1 + arg1)"]
#[doc = " twos_complement_eval out2 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then twos_complement_eval arg3 else twos_complement_eval arg2)"]
#[doc = " twos_complement_eval out3 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then ⌊(twos_complement_eval arg3 - twos_complement_eval arg2) / 2⌋ else ⌊(twos_complement_eval arg3 + (twos_complement_eval arg3 mod 2) * twos_complement_eval arg2) / 2⌋)"]
#[doc = " eval (from_montgomery out4) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (2 * eval (from_montgomery arg5)) mod m else (2 * eval (from_montgomery arg4)) mod m)"]
#[doc = " eval (from_montgomery out5) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (eval (from_montgomery arg4) - eval (from_montgomery arg4)) mod m else (eval (from_montgomery arg5) + (twos_complement_eval arg3 mod 2) * eval (from_montgomery arg4)) mod m)"]
#[doc = " 0 ≤ eval out5 < m"]
#[doc = " 0 ≤ eval out5 < m"]
#[doc = " 0 ≤ eval out2 < m"]
#[doc = " 0 ≤ eval out3 < m"]
#[doc = ""]
#[doc = " Input Bounds:"]
#[doc = " arg1: [0x0 ~> 0xffffffffffffffff]"]
#[doc = " arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]"]
#[doc = " arg3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]"]
#[doc = " arg4: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]"]
#[doc = " arg5: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]"]
#[doc = " Output Bounds:"]
#[doc = " out1: [0x0 ~> 0xffffffffffffffff]"]
#[doc = " out2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]"]
#[doc = " out3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]"]
#[doc = " out4: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]"]
#[doc = " out5: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]"]
#[inline]
pub const fn fiat_p192_divstep(
arg1: u64,
arg2: &[u64; 4],
arg3: &[u64; 4],
arg4: &[u64; 3],
arg5: &[u64; 3],
) -> (u64, [u64; 4], [u64; 4], [u64; 3], [u64; 3]) {
let mut out1: u64 = 0;
let mut out2: [u64; 4] = [0; 4];
let mut out3: [u64; 4] = [0; 4];
let mut out4: [u64; 3] = [0; 3];
let mut out5: [u64; 3] = [0; 3];
let mut x1: u64 = 0;
let mut x2: fiat_p192_u1 = 0;
let (x1, x2) = fiat_p192_addcarryx_u64(0x0, (!arg1), (0x1 as u64));
let x3: fiat_p192_u1 =
(((x1 >> 63) as fiat_p192_u1) & (((arg3[0]) & (0x1 as u64)) as fiat_p192_u1));
let mut x4: u64 = 0;
let mut x5: fiat_p192_u1 = 0;
let (x4, x5) = fiat_p192_addcarryx_u64(0x0, (!arg1), (0x1 as u64));
let mut x6: u64 = 0;
let (x6) = fiat_p192_cmovznz_u64(x3, arg1, x4);
let mut x7: u64 = 0;
let (x7) = fiat_p192_cmovznz_u64(x3, (arg2[0]), (arg3[0]));
let mut x8: u64 = 0;
let (x8) = fiat_p192_cmovznz_u64(x3, (arg2[1]), (arg3[1]));
let mut x9: u64 = 0;
let (x9) = fiat_p192_cmovznz_u64(x3, (arg2[2]), (arg3[2]));
let mut x10: u64 = 0;
let (x10) = fiat_p192_cmovznz_u64(x3, (arg2[3]), (arg3[3]));
let mut x11: u64 = 0;
let mut x12: fiat_p192_u1 = 0;
let (x11, x12) = fiat_p192_addcarryx_u64(0x0, (0x1 as u64), (!(arg2[0])));
let mut x13: u64 = 0;
let mut x14: fiat_p192_u1 = 0;
let (x13, x14) = fiat_p192_addcarryx_u64(x12, (0x0 as u64), (!(arg2[1])));
let mut x15: u64 = 0;
let mut x16: fiat_p192_u1 = 0;
let (x15, x16) = fiat_p192_addcarryx_u64(x14, (0x0 as u64), (!(arg2[2])));
let mut x17: u64 = 0;
let mut x18: fiat_p192_u1 = 0;
let (x17, x18) = fiat_p192_addcarryx_u64(x16, (0x0 as u64), (!(arg2[3])));
let mut x19: u64 = 0;
let (x19) = fiat_p192_cmovznz_u64(x3, (arg3[0]), x11);
let mut x20: u64 = 0;
let (x20) = fiat_p192_cmovznz_u64(x3, (arg3[1]), x13);
let mut x21: u64 = 0;
let (x21) = fiat_p192_cmovznz_u64(x3, (arg3[2]), x15);
let mut x22: u64 = 0;
let (x22) = fiat_p192_cmovznz_u64(x3, (arg3[3]), x17);
let mut x23: u64 = 0;
let (x23) = fiat_p192_cmovznz_u64(x3, (arg4[0]), (arg5[0]));
let mut x24: u64 = 0;
let (x24) = fiat_p192_cmovznz_u64(x3, (arg4[1]), (arg5[1]));
let mut x25: u64 = 0;
let (x25) = fiat_p192_cmovznz_u64(x3, (arg4[2]), (arg5[2]));
let mut x26: u64 = 0;
let mut x27: fiat_p192_u1 = 0;
let (x26, x27) = fiat_p192_addcarryx_u64(0x0, x23, x23);
let mut x28: u64 = 0;
let mut x29: fiat_p192_u1 = 0;
let (x28, x29) = fiat_p192_addcarryx_u64(x27, x24, x24);
let mut x30: u64 = 0;
let mut x31: fiat_p192_u1 = 0;
let (x30, x31) = fiat_p192_addcarryx_u64(x29, x25, x25);
let mut x32: u64 = 0;
let mut x33: fiat_p192_u1 = 0;
let (x32, x33) = fiat_p192_subborrowx_u64(0x0, x26, 0xffffffffffffffff);
let mut x34: u64 = 0;
let mut x35: fiat_p192_u1 = 0;
let (x34, x35) = fiat_p192_subborrowx_u64(x33, x28, 0xfffffffffffffffe);
let mut x36: u64 = 0;
let mut x37: fiat_p192_u1 = 0;
let (x36, x37) = fiat_p192_subborrowx_u64(x35, x30, 0xffffffffffffffff);
let mut x38: u64 = 0;
let mut x39: fiat_p192_u1 = 0;
let (x38, x39) = fiat_p192_subborrowx_u64(x37, (x31 as u64), (0x0 as u64));
let x40: u64 = (arg4[2]);
let x41: u64 = (arg4[1]);
let x42: u64 = (arg4[0]);
let mut x43: u64 = 0;
let mut x44: fiat_p192_u1 = 0;
let (x43, x44) = fiat_p192_subborrowx_u64(0x0, (0x0 as u64), x42);
let mut x45: u64 = 0;
let mut x46: fiat_p192_u1 = 0;
let (x45, x46) = fiat_p192_subborrowx_u64(x44, (0x0 as u64), x41);
let mut x47: u64 = 0;
let mut x48: fiat_p192_u1 = 0;
let (x47, x48) = fiat_p192_subborrowx_u64(x46, (0x0 as u64), x40);
let mut x49: u64 = 0;
let (x49) = fiat_p192_cmovznz_u64(x48, (0x0 as u64), 0xffffffffffffffff);
let mut x50: u64 = 0;
let mut x51: fiat_p192_u1 = 0;
let (x50, x51) = fiat_p192_addcarryx_u64(0x0, x43, x49);
let mut x52: u64 = 0;
let mut x53: fiat_p192_u1 = 0;
let (x52, x53) = fiat_p192_addcarryx_u64(x51, x45, (x49 & 0xfffffffffffffffe));
let mut x54: u64 = 0;
let mut x55: fiat_p192_u1 = 0;
let (x54, x55) = fiat_p192_addcarryx_u64(x53, x47, x49);
let mut x56: u64 = 0;
let (x56) = fiat_p192_cmovznz_u64(x3, (arg5[0]), x50);
let mut x57: u64 = 0;
let (x57) = fiat_p192_cmovznz_u64(x3, (arg5[1]), x52);
let mut x58: u64 = 0;
let (x58) = fiat_p192_cmovznz_u64(x3, (arg5[2]), x54);
let x59: fiat_p192_u1 = ((x19 & (0x1 as u64)) as fiat_p192_u1);
let mut x60: u64 = 0;
let (x60) = fiat_p192_cmovznz_u64(x59, (0x0 as u64), x7);
let mut x61: u64 = 0;
let (x61) = fiat_p192_cmovznz_u64(x59, (0x0 as u64), x8);
let mut x62: u64 = 0;
let (x62) = fiat_p192_cmovznz_u64(x59, (0x0 as u64), x9);
let mut x63: u64 = 0;
let (x63) = fiat_p192_cmovznz_u64(x59, (0x0 as u64), x10);
let mut x64: u64 = 0;
let mut x65: fiat_p192_u1 = 0;
let (x64, x65) = fiat_p192_addcarryx_u64(0x0, x19, x60);
let mut x66: u64 = 0;
let mut x67: fiat_p192_u1 = 0;
let (x66, x67) = fiat_p192_addcarryx_u64(x65, x20, x61);
let mut x68: u64 = 0;
let mut x69: fiat_p192_u1 = 0;
let (x68, x69) = fiat_p192_addcarryx_u64(x67, x21, x62);
let mut x70: u64 = 0;
let mut x71: fiat_p192_u1 = 0;
let (x70, x71) = fiat_p192_addcarryx_u64(x69, x22, x63);
let mut x72: u64 = 0;
let (x72) = fiat_p192_cmovznz_u64(x59, (0x0 as u64), x23);
let mut x73: u64 = 0;
let (x73) = fiat_p192_cmovznz_u64(x59, (0x0 as u64), x24);
let mut x74: u64 = 0;
let (x74) = fiat_p192_cmovznz_u64(x59, (0x0 as u64), x25);
let mut x75: u64 = 0;
let mut x76: fiat_p192_u1 = 0;
let (x75, x76) = fiat_p192_addcarryx_u64(0x0, x56, x72);
let mut x77: u64 = 0;
let mut x78: fiat_p192_u1 = 0;
let (x77, x78) = fiat_p192_addcarryx_u64(x76, x57, x73);
let mut x79: u64 = 0;
let mut x80: fiat_p192_u1 = 0;
let (x79, x80) = fiat_p192_addcarryx_u64(x78, x58, x74);
let mut x81: u64 = 0;
let mut x82: fiat_p192_u1 = 0;
let (x81, x82) = fiat_p192_subborrowx_u64(0x0, x75, 0xffffffffffffffff);
let mut x83: u64 = 0;
let mut x84: fiat_p192_u1 = 0;
let (x83, x84) = fiat_p192_subborrowx_u64(x82, x77, 0xfffffffffffffffe);
let mut x85: u64 = 0;
let mut x86: fiat_p192_u1 = 0;
let (x85, x86) = fiat_p192_subborrowx_u64(x84, x79, 0xffffffffffffffff);
let mut x87: u64 = 0;
let mut x88: fiat_p192_u1 = 0;
let (x87, x88) = fiat_p192_subborrowx_u64(x86, (x80 as u64), (0x0 as u64));
let mut x89: u64 = 0;
let mut x90: fiat_p192_u1 = 0;
let (x89, x90) = fiat_p192_addcarryx_u64(0x0, x6, (0x1 as u64));
let x91: u64 = ((x64 >> 1) | ((x66 << 63) & 0xffffffffffffffff));
let x92: u64 = ((x66 >> 1) | ((x68 << 63) & 0xffffffffffffffff));
let x93: u64 = ((x68 >> 1) | ((x70 << 63) & 0xffffffffffffffff));
let x94: u64 = ((x70 & 0x8000000000000000) | (x70 >> 1));
let mut x95: u64 = 0;
let (x95) = fiat_p192_cmovznz_u64(x39, x32, x26);
let mut x96: u64 = 0;
let (x96) = fiat_p192_cmovznz_u64(x39, x34, x28);
let mut x97: u64 = 0;
let (x97) = fiat_p192_cmovznz_u64(x39, x36, x30);
let mut x98: u64 = 0;
let (x98) = fiat_p192_cmovznz_u64(x88, x81, x75);
let mut x99: u64 = 0;
let (x99) = fiat_p192_cmovznz_u64(x88, x83, x77);
let mut x100: u64 = 0;
let (x100) = fiat_p192_cmovznz_u64(x88, x85, x79);
out1 = x89;
out2[0] = x7;
out2[1] = x8;
out2[2] = x9;
out2[3] = x10;
out3[0] = x91;
out3[1] = x92;
out3[2] = x93;
out3[3] = x94;
out4[0] = x95;
out4[1] = x96;
out4[2] = x97;
out5[0] = x98;
out5[1] = x99;
out5[2] = x100;
(out1, out2, out3, out4, out5)
}
#[doc = " The function fiat_p192_divstep_precomp returns the precomputed value for Bernstein-Yang-inversion (in montgomery form)."]
#[doc = ""]
#[doc = " Postconditions:"]
#[doc = " eval (from_montgomery out1) = ⌊(m - 1) / 2⌋^(if ⌊log2 m⌋ + 1 < 46 then ⌊(49 * (⌊log2 m⌋ + 1) + 80) / 17⌋ else ⌊(49 * (⌊log2 m⌋ + 1) + 57) / 17⌋)"]
#[doc = " 0 ≤ eval out1 < m"]
#[doc = ""]
#[doc = " Output Bounds:"]
#[doc = " out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]"]
#[inline]
pub const fn fiat_p192_divstep_precomp() -> [u64; 3] {
let mut out1: [u64; 3] = [0; 3];
out1[0] = 0xffffffffffe00000;
out1[1] = 0xffffffffffefffff;
out1[2] = 0x1fffff;
out1
}