MinGW GCC 4.5.0: Crypto++が動作しない。X86_SHA256_HashBlocks()が返ってこない 4-wayはtest.cppでのみ動作するが、BitcoinMinerから呼び出された時は動作しない
MinGW GCC 4.4.1: Crypto++は動作する 4-wayはSIGSEGV
GCCは間違いなく__m128iをアラインしていない。
自分の__m128i変数をアラインしても、コンパイラが一時変数として裏で__m128iを使うことを決定する場合がある。
__m128i変数をアラインし、これらのインライン関数をdefineに変更することで、4.4.1の-O0のみで動作させることができた: #define Ch(b, c, d) ((b & c) ^ (~b & d)) #define Maj(b, c, d) ((b & c) ^ (b & d) ^ (c & d)) #define ROTR(x, n) (_mm_srli_epi32(x, n) | _mm_slli_epi32(x, 32 - n)) #define SHR(x, n) _mm_srli_epi32(x, n)
ただし、それは-O0での話だ。