7

現在、VS2013 から VS2019 への大規模なコードベースの更新に取り組んでいます。私が遭遇したコンパイラエラーの1つは次のとおりです。

組み込み関数.h(348): エラー C3861: '_mm_cvtpd_pi32': 識別子が見つかりません

この組み込み関数は、Visual Studio の「emmintrin.h」で定義されています。このエラーは、64 ビット ビルドをターゲットにしている場合にのみ発生します。詳しく調べてみると、2013 年から 2019 年の間に emmintrin.h の定義が次のように変更されていることがわかります。

extern __m64 _mm_cvtpd_pi32(__m128d _A);
extern __m64 _mm_cvttpd_pi32(__m128d _A);
extern __m128d _mm_cvtpi32_pd(__m64 _A);

これに:

#if defined(_M_IX86)
extern __m64 _mm_cvtpd_pi32(__m128d _A);
extern __m64 _mm_cvttpd_pi32(__m128d _A);
extern __m128d _mm_cvtpi32_pd(__m64 _A);
#endif

つまり、プリプロセッサ ディレクティブにより、関数が 32 ビット ターゲットでのみ使用できるようになりました。エラーの発生元であるサードパーティのヘッダー ファイルは、ターゲット (64 ビットまたは 32 ビット) に関係なく、これらの関数を利用します。おそらく、このヘッダー ファイルを編集して、この関数が 32 ビット ターゲットに対してのみ呼び出されるようにするのが最善の方法です。しかし、私がもっと知りたいのは、なぜこれが 2013 年から 2019 年に変更されたのかということです。この関数の説明は次のとおりです。

https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtpd_pi32&expand=1705

そもそも64ビットターゲットには適用されなかったのですか? それとも、検討する必要がある 64 ビット バージョンに置き換えられましたか?

4

1 に答える 1