Компилятор GCC предоставляет возможность использовать ассемблерные вставки. Это может быть полезно например для умножения двух 64-битных чисел по 64-битному модулю. Дело в том, что умножая два 64-битных регистор, процессор сохраняет результат в паре регистров rdx (верхнюю часть) и rax (нижнюю часть). Деление же работает похожим образом: делимое берется с регистров rdx и rax, после чего в rax сохраняется частное, а в rdx остаток. Используя эти знания можно реализовать аналог следующей функции:
inline long long mul(long long a, long long b) {
return (__int128)a * b % 1000000014018503LL;
}