Re: 0.3.6 向け SSE2 CPU での 4 ハッシュ並列処理

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 での話だ。