簡體   English   中英

在沒有內聯匯編的情況下使用帶有 gcc 的 SSE 指令

[英]Using SSE instructions with gcc without inline assembly

我有興趣在 gcc 中使用 x86-64 的 SSE 向量指令,並且不想為此使用任何內聯匯編。 有沒有辦法在 C 中做到這一點? 如果是這樣,有人可以舉個例子嗎?

是的,您可以使用 *mmintrin.h 標頭中的 內在函數emmintrin.hxmmintrin.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM