Похоже, что разделение с этими типами в настоящее время не поддерживается за пределами 128 бит.
По состоянию на 2 августа 2020 года с использованием clang trunk на Godbolt, компилируя следующий код для x86-64
typedef unsigned _ExtInt(256) uint256;
uint256 div(uint256 a, uint256 b) {
return a/b;
}
выдает сообщение об ошибке
fatal error: error in backend: Unsupported library call operation!
Попробуйте
То же самое происходит с _ExtInt(129)
и всем, что больше, чем я пытался. _ExtInt(128)
и меньше, похоже, работают, хотя они вызывают внутреннюю библиотечную функцию __udivti3
вместо встраивания.
Об этом сообщалось как Ошибка LLVM 45649 . На этой странице есть некоторые обсуждения, но результат, похоже, заключается в том, что они действительно не хотят писать полную инструкцию деления произвольной точности.
Сложение, вычитание и умножение действительно работают с _ExtInt(256)
в этой версии .