Может не очень умный вопрос, но всё же: а можно без ассемблера понять, когда при сложении было переполнение? Аналог флажка carry так сказать. Ну или букварь соответствующий порекомендуйте. NTP timestamp не что иное, как fixed point 32.32
Через int64_t работает как-то странно, stm32f407; уже и оптимизацию до "1" убирал - всё равно. Ну и про умножение "вручную" что-нибудь можно сразу: скорее всего пригодится.
bool ntp_ge( ntptime_t op1, ntptime_t op2) // operator >=
{
uint64_t val1, val2;
val1 = op1.fraction + (uint64_t)op1.seconds<<32;
val2 = op2.fraction + (uint64_t)op2.seconds<<32;
return( val1>=val2);
}
На тесте выдаёт "козью морду".
TEST
Arg1: $0000000C.FACC0DE0, $0000000B.F9CC0DE0 => 1
Arg1: $0000000C.FACC0DE0, $0000000B.FACC0DE0 => 1
Arg1: $0000000C.FACC0DE0, $0000000B.FBCC0DE0 => 0
Arg1: $0000000C.FACC0DE0, $0000000C.F9CC0DE0 => 1
Arg1: $0000000C.FACC0DE0, $0000000C.FACC0DE0 => 1
Arg1: $0000000C.FACC0DE0, $0000000C.FBCC0DE0 => 0
Arg1: $0000000C.FACC0DE0, $0000000D.F9CC0DE0 => 1
Arg1: $0000000C.FACC0DE0, $0000000D.FACC0DE0 => 0
Arg1: $0000000C.FACC0DE0, $0000000D.FBCC0DE0 => 0
Это решил, теперь с арифметикой засада.