こんにちは、私はさらに別の任意精度整数ライブラリに取り組んでいます。乗算を実装したかったのですが、機能しなかったとき_m_pmulhw
に行き詰まりました。MMX 命令に関するドキュメント<mmintrin.h>
はほとんどありません。私がテストすると、2 つの UINT64_MAX を乗算すると意味不明になります。
uint_fast64_t mulH(const uint_fast64_t &a, const uint_fast64_t &b) {
return (uint_fast64_t)_m_pmulhw((__m64)a,(__m64)b);
}
uint_fast64_t mulL(const uint_fast64_t &a, const uint_fast64_t &b) {
return (uint_fast64_t)_m_pmullw((__m64)a,(__m64)b);
}
int main() {
uint64_t a = UINT64_MAX;
uint64_t b = UINT64_MAX;
std::cout << std::bitset<64>(mulH(a,b)) << std::bitset<64>(mulL(a,b));
}
output: 00000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000100000000000000010000000000000001
A6-4400M APU を使用しているのに、なぜ機能しないのかわかりません...
coreinfo の出力:MMX * Supports MMX instruction set
したがって、サポートされていないわけではないと言えると思います。誰かがこれを機能させる方法についてのヒントを教えてくれたら、ありがとう。
コンパイラ: gcc
IDE: ビジュアル スタジオ コード