pub fn adc(a: &mut u64, b: u64, carry: u64) -> u64
set a = a + b + carry, and return the new carry value.