[英]Using SSE instructions with gcc without inline assembly
我有興趣在 gcc 中使用 x86-64 的 SSE 向量指令,並且不想為此使用任何內聯匯編。 有沒有辦法在 C 中做到這一點? 如果是這樣,有人可以舉個例子嗎?
是的,您可以使用 *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 編譯器,例如 Linux/Mac OS X/Windows 上的 gcc、clang 和 Intel 的 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
)包括所有其他-msse2
。
您想要的是內在函數,它看起來像庫函數,但實際上是內置在編譯器中的,因此它們可以轉換為特定的機器代碼。
Paul R 和 hroptatyr 描述了在哪里可以找到 GCC 的文檔。 Microsoft 在其編譯器中也有關於內在函數的良好文檔; 即使您正在使用 GCC,您也可能會發現 MS 對這個想法的描述是一個更好的教程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.