GCC中的Intrinsics頭文件與SIMD指令集、宏、參數的對應表


作者:zyl910

 

列名解釋——

GCC470:GCC 4.7.0 (Fedora 17)。/usr/lib/gcc/i686-redhat-linux/4.7.0/include/。

GCC462:GCC 4.6.2 (MinGW)。\lib\gcc\mingw32\4.6.2\include。

宏:判斷該指令集是否啟用的宏。

參數:啟用該指令集的命令行參數。

描述:指令集描述。

GCC470 GCC462 參數 描述
  abmintrin.h __ABM__ -mabm ABM: Advanced Bit Manipulation. 改為lzcntintrin.h.
ammintrin.h ammintrin.h __SSE4A__ -msse4a SSE4A
avx2intrin.h   __AVX2__ -mavx2 AVX2
avxintrin.h avxintrin.h __AVX__ -mavx AVX: Advanced Vector   Extensions
bmi2intrin.h   __BMI2__ -mbmi2 BMI2
bmiintrin.h bmiintrin.h __BMI__ -mbmi BMI: Bit Manipulation   Instruction
bmmintrin.h bmmintrin.h     SSE5, 已廢棄.
cpuid.h cpuid.h     CPUID
emmintrin.h emmintrin.h __SSE2__ -msse2 SSE2
f16cintrin.h   __F16C__ -mf16c F16C
fma4intrin.h fma4intrin.h __FMA4__ -mfma4 FMA4
fmaintrin.h   __FMA__ -mfma FMA
ia32intrin.h ia32intrin.h     bsf, bsr, bswap, crc32等.
immintrin.h immintrin.h __RDRND__, __FSGSBASE__ -mrdrnd -mfsgsbase Intel提出的擴展指令.
lwpintrin.h lwpintrin.h __LWP__ -mlwp LWP: Light Weight Profiling
lzcntintrin.h   __LZCNT__ -mlzcnt LZCNT
mm3dnow.h mm3dnow.h __3dNOW__ -m3dnow 3DNow!
mmintrin.h mmintrin.h __MMX__ -mmmx MMX: MultiMedia eXtension
nmmintrin.h nmmintrin.h __SSE4_2__ -msse4.2 SSE4.2
pmmintrin.h pmmintrin.h __SSE3__ -msse3 SSE3
popcntintrin.h popcntintrin.h __POPCNT__ -mpopcnt POPCNT
smmintrin.h smmintrin.h __SSE4_1__, __SSE4_2__ -msse4 SSE4.1, SSE4.2
tbmintrin.h tbmintrin.h __TBM__ -mtbm TBM: Trailing bit manipulation.
tmmintrin.h tmmintrin.h __SSSE3__ -mssse3 SSSE3
wmmintrin.h wmmintrin.h __AES__, __PCLMUL__ -maes -mpclmul AES, PCLMUL
x86intrin.h x86intrin.h     x86平台的intrin
xmmintrin.h xmmintrin.h __SSE__ -msse SSE: Streaming SIMD Extensions
xopintrin.h xopintrin.h __XOP__ -mxop XOP

 

在 Fedora 17 x64版中執行“gcc --target-help”的輸出信息——

下列選項與特定目標機相關:
  -m128bit-long-double        sizeof(long double) 等於 16
  -m32                        生成 32 位 i386 代碼
  -m3dnow                     支持 3DNow! 內建函數
  -m64                        生成 64 位 x86-64 代碼
  -m80387                     使用硬件浮點單元
  -m8bit-idiv                 將 32/64
                              位整數除法擴展為帶運行時檢查的 8
                              位無符號整數除法
  -m96bit-long-double         sizeof(long double) 等於 12
  -mabi=                      生成遵循給定 ABI 的代碼
  -mabm                       支持生成高級位操作(ABM)指令。
  -maccumulate-outgoing-args  在函數序言中為輸出參數預留空間
  -maes                       支持 AES 內建函數及代碼生成
  -malign-double              一些雙精度浮點數在雙字邊界上對齊
  -malign-functions=          函數入口對齊在 2 的此次方上
  -malign-jumps=              跳轉目標對齊在 2 的此次方上
  -malign-loops=              循環代碼對齊到 2 的此次方上
  -malign-stringops           對齊字符串操作的目標
  -mandroid                   為 Android 操作系統生成代碼。
  -march=                     為給定的 CPU 生成代碼
  -masm=                      使用給定的匯編風格
  -mavx                       支持
                              MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2
                              和 AVX 內建函數及代碼生成
  -mavx2                      Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
                              SSE4.2, AVX and AVX2 built-in functions and code
                              generation
  -mavx256-split-unaligned-load Split 32-byte AVX unaligned load
  -mavx256-split-unaligned-store Split 32-byte AVX unaligned store
  -mbionic                    使用 Bionic C 標准庫
  -mbmi                       支持 BMI 內建函數及代碼生成
  -mbmi2                      Support BMI2 built-in functions and code
                              generation
  -mbranch-cost=              指定分支的代價(1-5,任意單位)
  -mcld                       在函數序言中生成 cld 指令
  -mcmodel=                   使用給定的 x86-64 代碼模式
  -mcrc32                     支持生成 crc32 指令。
  -mcx16                      支持生成 cmpxchg16b 指令。
  -mdispatch-scheduler        Do dispatch scheduling if processor is bdver1 or
                              bdver2 and Haifa scheduling is selected.
  -mf16c                      支持 F16C 內建函數及代碼生成
  -mfancy-math-387            為 FPU 生成 sin、cos 和 sqrt 指令
  -mfentry                    Emit profiling counter call at function entry
                              before prologue.
  -mfma                       支持
                              MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2、AVX
                              和 FMA 內建函數及代碼生成
  -mfma4                      支持 FMA4 內建函數及代碼生成
  -mforce-drap                總是使用動態對齊參數指針(DRAP)來重新對齊堆棧
  -mfp-ret-in-387             在 FPU 寄存器中存放函數返回值
  -mfpmath=                   為指定的指令集生成浮點數學代碼
  -mfsgsbase                  支持 FSGSBASE 內建函數及代碼生成
  -mglibc                     使用 GNU C 標准庫
  -mhard-float                使用硬件浮點單元
  -mieee-fp                   浮點數間的比較嚴格遵循 IEEE 標准
  -mincoming-stack-boundary=  假定棧對齊到 2 的此次方上
  -minline-all-stringops      內聯所有已知的字符串操作
  -minline-stringops-dynamically 內聯 memset/memcpy
                              字符串操作,但僅為較小的塊使用內聯版本
  -mlarge-data-threshold=     在 x86-64
                              中等模式下大於指定閾值的數據將被存放在
                              .ldata 節中
  -mlwp                       支持 LWP 內建函數及代碼生成
  -mlzcnt                     Support LZCNT built-in function and code
                              generation
  -mmmx                       支持 MMX 內建函數
  -mmovbe                     支持生成 movbe 指令。
  -mms-bitfields              使用本地 (MS) 位段存儲方式
  -mno-sse4                   不支持 SSE4.1 和 SSE4.2
                              內建函數及代碼生成
  -momit-leaf-frame-pointer   為葉函數(不調用其他函數的函數)忽略框架指針
  -mpc32                      Set 80387 floating-point precision to 32-bit
  -mpc64                      Set 80387 floating-point precision to 64-bit
  -mpc80                      Set 80387 floating-point precision to 80-bit
  -mpclmul                    支持 PCLMUL 內建函數及代碼生成
  -mpopcnt                    支持生成 popcnt 指令。
  -mprefer-avx128             自動向量化時使用 128 位 AVX
                              指令而不是 256 位 AVX 指令
  -mpreferred-stack-boundary= 試圖讓棧保持對齊到 2 的此次方上
  -mpush-args                 使用 push 指令保存輸出參數
  -mrdrnd                     支持 RDRND 內建函數及代碼生成
  -mrecip                     生成倒數指令而不是 divss 和 sqrtss。
  -mrecip=                    Control generation of reciprocal estimates.
  -mred-zone                  在 x86-64 代碼中使用紅區
  -mregparm=                  用以傳遞整數參數的寄存器個數
  -mrtd                       更改調用約定
  -msahf                      支持在 x86-64 模式下生成 sahf 指令。
  -msoft-float                不使用硬件浮點單元
  -msse                       支持 MMX 和 SSE 內建函數及代碼生成
  -msse2                      支持 MMX、SSE 和 SSE2
                              內建函數及代碼生成
  -msse2avx                   支持帶 VEX 前綴的 SSE 指令
  -msse3                      支持 MMX、SSE、SSE2 和 SSE3
                              內建函數及代碼生成
  -msse4                      支持 MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1
                              和 SSE4.2 內建函數及代碼生成
  -msse4.1                    支持 MMX、SSE、SSE2、SSE3、SSSE3 和 SSE4.1
                              內建函數及代碼生成
  -msse4.2                    支持 MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1
                              和 SSE4.2 內建函數及代碼生成
  -msse4a                     支持 MMX、SSE、SSE2、SSE3 和 SSE4A
                              內建函數及代碼生成
  -msseregparm                在 SF 和 DF 模式下使用 SSE
                              寄存器調用約定
  -mssse3                     支持 MMX、SSE、SSE2、SSE3 和 SSSE3
                              內建函數及代碼生成
  -mstack-arg-probe           啟用堆棧探測
  -mstackrealign              在前言中重新對齊堆棧
  -mstringop-strategy=        選擇生成字符串操作的策略
  -mtbm                       支持 TBM 內建函數及代碼生成
  -mtls-dialect=              使用給定的線程局部存儲模式
  -mtls-direct-seg-refs       當訪問線程局部數據時直接引用 %gs
  -mtune=                     為指定的 CPU 優化代碼
  -muclibc                    使用 uClibc C 標准庫
  -mveclibabi=                指定要使用的向量庫 ABI
  -mvect8-ret-in-mem          將 8 字節向量在內存中返回
  -mvzeroupper                Generate vzeroupper instruction before a transfer
                              of control flow out of the function.
  -mx32                       Generate 32bit x86-64 code
  -mxop                       支持 XOP 內建函數及代碼生成

  Known assembler dialects (for use with the -masm-dialect= option):
    att intel

  Known ABIs (for use with the -mabi= option):
    ms sysv

  Known code models (for use with the -mcmodel= option):
    32 kernel large medium small

  Valid arguments to -mfpmath=:
    387 387+sse 387,sse both sse sse+387 sse,387

  Known vectorization library ABIs (for use with the -mveclibabi= option):
    acml svml

  Valid arguments to -mstringop-strategy=:
    byte_loop libcall loop rep_4byte rep_8byte rep_byte unrolled_loop

  Known TLS dialects (for use with the -mtls-dialect= option):
    gnu gnu2

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM