现代 CPU 可以在两个原生大小的字之间执行扩展乘法,并将低和高结果存储在单独的寄存器中。同样,在执行除法时,它们将商和余数存储在两个不同的寄存器中,而不是丢弃不需要的部分。
是否有某种可移植的 gcc 内在函数,它会采用以下签名:
void extmul(size_t a, size_t b, size_t *lo, size_t *hi);
或类似的东西,对于除法:
void extdiv(size_t a, size_t b, size_t *q, size_t *r);
我知道我可以通过在代码中添加#ifdef 来通过内联汇编和鞋拔可移植性自己完成它,或者我可以使用部分和来模拟乘法部分(这会显着变慢),但我想避免这种情况以提高可读性。当然存在一些内置函数可以做到这一点?