0
私は初期化が動作しているようC. でSSE2命令でSHA1を実装しようとしていますが、私は私のアルゴリズムの最初のラウンドとしてSSE2 SHA1問題
round1(testhashe, testhasha, testhashb, testhashc, testhashd, loadConstant(b[z]));
をしようとすると、私はエラーを取得します。前の定数と値は正しいとチェックされますが、最後の値は間違っています。私のマクロは
です。これは問題なくSSE2関数に変更される前に、これらは機能していました。私は関数を関数に変更しました。何が間違っているのですか?ラウンドワン
後SSE2自由作動コードを実行する際に見られるように、最後の行を除いて、正しい値を含ん時間Vector: 67452301 67452301 67452301 67452301
Vector: 7bf36ae2 7bf36ae2 7bf36ae2 7bf36ae2
Vector: 98badcfe 98badcfe 98badcfe 98badcfe
Vector: 10325476 10325476 10325476 10325476
Vector: 734fe2b5 724fe2b5 8b4ee2b5 8a4ee2b5
における組み込み及び4つのSHAの計算とから、この関数の後
出力
67452301
7bf36ae2
98badcfe
10325476
122fa21
マクロインライン関数を作成して、デバッガでコードをステップ実行することができます物事が迷っているところを見る。 –
上記のスニペットに基づいて、私が見たSSE実装の一部であるいくつかのプリアンブルが欠落しています。プリアンブルは、SHA機能への提示の準備のために単語のバイトをスワップします。たとえば、 '[A B C D] [E F G H]'は '[A B E F] [C D G H]'(IIRC)に置換されます。また、[Noloader | GitHub](https://github.com/noloader/SHA-Intrinsics)。 x86およびARMv8用のCコンパイラを使用するSHAを提供します。コードはパブリックドメインになっているので、コピー/ペーストと同じくらい使いづらいです。 – jww