gccでx86-64のSSEベクタ命令を使用することに興味があり、インラインアセンブリを使用したくないです。私はCでそれを行うことができる方法はありますか?もしそうなら、誰かが私に例を挙げることができますか?インラインアセンブリを使用しないgccでのSSE命令の使用
答えて
はい、* mmintrin.hヘッダー(emmintrin.h
、xmmintrin.h
など、使用するSSEのレベルに応じて)の組み込み関数を使用できます。これは、多くの理由でアセンブラを使用するより一般的に好まれます。
#include <emmintrin.h>
int main(void)
{
__m128i a = _mm_set_epi32(4, 3, 2, 1);
__m128i b = _mm_set_epi32(7, 6, 5, 4);
__m128i c = _mm_add_epi32(a, b);
// ...
return 0;
}
このアプローチは、さまざまなプラットフォームのx86およびx86-64コンパイラのほとんどで機能します。 gcc、clang、Linux/Mac OS X/Windows上のインテルのICC、さらにはMicrosoftのVisual C/C++(Windowsのみ)
あなたのgccの*intrin.h
ヘッダーは(/usr/lib/gcc/x86_64-unknown-linux-gnu/4.8.0/include/
ここにあります)見つかりました。
ヘッダーimmintrin.h
には、許可する機能(たとえば-msse2
または-mavx
を使用)に応じて、他のすべてのイントリンが含まれています。
intrinsicsは、ライブラリ関数のように見えますが、実際にはコンパイラに組み込まれているため、特定のマシンコードに変換されます。
Paul Rとhroptatyrは、GCCのドキュメントの場所を示しています。 Microsoft also has good documentation on the intrinsics in their compiler;あなたがGCCを使っていても、MSのアイデアの説明がより良いチュートリアルであることがわかります。
ARMアーキテクチャはどうですか?それはNEON SIMDをサポートしていますか?これはx86のためのものですか? – enthusiasticgeek
@enthusiasticgeek質問はx86-64を指定します。 ARMおよびNEONには独自のコンパイラと固有の組み込み関数があります。 – Crashworks
- 1. SSE命令はどのように使用できますか?
- 2. gccはインテルのSSE 4.2命令をテキスト処理に使用していますか?
- 3. SSE命令:Byte + Short
- 4. PLD命令の使用
- 5. AltiVecへのMMX/SSE命令の移植
- 6. Raspberry Pi 2 NEONインラインアセンブリ命令が動作しない
- 7. スタックスマッシングを使用して命令をスキップ
- 8. GCCでのインラインアセンブリでのC++参照の使用
- 9. SSE命令セットが有効になっていません
- 10. Br_S OpCodeを使用してReflection.Emit.Labelを使用して次の命令を指す
- 11. structをgccのSSEベクタータイプとして使用していますか?
- 12. キャンバスレストパイのカールを使用してPUT命令を使用する方法
- 13. GCCインラインアセンブリエラー:いいえ、そのような命令: `stosdは」
- 14. gccのインラインアセンブリでラベルを使用すると奇妙な悪いアクセスエラーが発生します
- 15. DelphiはすべてのMMX/SSE命令をサポートしていますか?
- 16. Tileraマイクロプロセッサはどんな命令セットを使用していますか?
- 17. asm命令を使用してMIPS CPUレジスタを読み取る
- 18. gccインラインsimdアセンブリエラー:ショートタイプmovdqu命令
- 19. 32ビットレジスタ/命令をリアルモードで使用できますか?
- 20. SSE命令によるクローン作成 - XMMレジスタの拡張
- 21. 回転アーム命令を使用したMVN
- 22. アセンブラ "コール"命令を使用したMicrosoft Detour - Hook関数
- 23. 1つのスクリプトでテンポラリテーブルを使用して複数の命令を実行
- 24. X86でシングルステッピング命令を使用する理由
- 25. 一部のARM命令ではバレルシフタを使用しないのはなぜですか?
- 26. モジュロ(%)のGCC実装はどのように機能し、なぜdiv命令を使用しないのですか?
- 27. インラインアセンブリで__func__を使用する方法
- 28. SSEプリフェッチ命令サイズを決定する方法は?
- 29. GCCインラインアセンブリのC配列?
- 30. エラー:tsec.cドライバを使用してubootソースをコンパイル中に不正な命令 `sync '
これはgccまたはVC++用ですか? – pythonic
gccとVC++の両方が組み込み関数をサポートしています。 –
FTW、iccもこれらの組み込み関数をサポートしています – hroptatyr