GCC檢測CUP及編譯環境是否支持MMX&SSE

最後,別忘了檢查環境——
INTRIN_MMX、INTRIN_SSE2、 INTRIN_AVX 宏是 zintrin.h 提供的,可用來在編譯時檢測編譯器是否支持MMX、SSE2、AVX指令集。
simd_mmx、simd_sse_level、simd_avx_level函數是 ccpuid.h 提供的,可用來在運行時檢測當前系統環境是否支持MMX、SSE2、AVX指令集。
GCC中的Intrinsics頭文件與SIMD指令集、宏、參數的對應表
  gcc允許通過命令行參數來控制是否打開某種指令集的支持,例如“-mmmx”用於打開MMX支持。可在終端中執行“gcc --target-help”,得到詳細的參數列表。
  當通過命令行參數打開指令集支持後,gcc會自動定義對應的預處理宏。例如用“-mmmx”打開MMX支持後,gcc會自動定義“__MMX__”這個預定義宏。這一類的預定義宏有——
__MMX__
__3dNOW__
__SSE__
__SSE2__
__SSE3__
__SSSE3__
__SSE4_1__
__SSE4_2__
__SSE4A__
__AES__
__PCLMUL__
__AVX__
__AVX2__
__F16C__
__FMA__
__FMA4__
__XOP__
__LWP__
__RDRND__
__FSGSBASE__
__LZCNT__
__POPCNT__
__BMI__
__BMI2__
__TBM__
  gcc用於引入所有x86平臺intrinsic函數的頭文件是“x86intrin.h”,它會根據那些指令集預定義宏來引入相關的intrinsic函數。例如有“__MMX__”宏時,x86intrin.h會引入MMX的intrinsic函數。
用於判斷當前編譯環境是否支持該intrin函數的宏:
INTRIN_MMX
INTRIN_3dNOW
INTRIN_SSE
INTRIN_SSE2
INTRIN_SSE3
INTRIN_SSSE3
INTRIN_SSE4_1
INTRIN_SSE4_2
INTRIN_SSE4A
INTRIN_AES
INTRIN_PCLMUL
INTRIN_AVX
INTRIN_AVX2
INTRIN_F16C
INTRIN_FMA
INTRIN_FMA4
INTRIN_XOP
INTRIN_LWP
INTRIN_RDRND
INTRIN_FSGSBASE
INTRIN_LZCNT
INTRIN_POPCNT
INTRIN_BMI
INTRIN_BMI2
INTRIN_TBM

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章