IAR нормально эмулирует 64-битную арифметику (uint64_t), но 128-битную не поддерживает. Писала на ассемблере процедуру:
uint64_t mul32x32( unsigned long A3A2A1A0, unsigned long B3B2B1B0);Это чтобы при умножении аргументы не приводить к типу произведения (С/С++ так требует).
Деление использовала стандартное, т.к. у меня в 64-битах накапливается сумма произведений long-чисел,
а деление производится всего один раз уже над полной суммой.