最新の CPU は、ネイティブ サイズの 2 つのワード間で拡張乗算を実行し、低い結果と高い結果を別々のレジスタに格納できます。同様に、除算を実行する場合、不要な部分を破棄する代わりに、商と剰余を 2 つの異なるレジスタに格納します。
次の署名を取るある種の移植可能な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 を挿入することで、インライン アセンブリと靴べらの移植性を自分で実行できることはわかっています。また、部分和を使用して乗算部分をエミュレートすることもできますが (これはかなり遅くなります)、読みやすさのために避けたいと思います。確かにこれを行うための組み込み関数が存在しますか?