天天看點

aarch64架構編譯osgearth2.10過程中報錯,找不到emmintrin.h

  1. emmintrin.h是Intrinsic的一部分。在MMX,SSE系列中,intrinsics表示一種封裝的MMX或者SSE指令。
  2. SSE(Stream SIMD Extentions,資料流單指令多資料擴充)是英特爾繼MMX(Multi Media eXtension,多媒體擴充指令集)之後推出的新一代CPU指令集。換言之,這個指令集隻支援在x86架構下使用,在aarch64架構下不能使用。
  3. MMX,SSE,AVX是Intel處理器支援的SIMD技術中的一項,SIMD(Single Instruction Multiple Data)是單指令多資料技術。
  4. SIMD技術,在x86架構下,使用sse或者sse2等等指令集,而在arm架構下,使用的是NEON指令集。
  5. NEON技術是ARM Cortex-A系列處理器的128位SIMD架構擴充,旨在為消費性多媒體應用程式提供靈活、強大的加速功能。
  6. 由上可知,emmintrin.h這個頭檔案,本身就不是在aarch64中使用的指令集,是以,一開始我在網上找到這個emmintrin.h頭檔案,發現報了更多的error,需要找到相應架構下的指令集才行。
  7. 是以,需要将其改寫為neon的代碼,即在arm架構下可以使用的指令集。這一步操作,英特爾提供了相應的函數,也就是sse2neon.h。
  8. sse2neon.h的使用方法很簡單,先将其放入

    /usr/local/include

    或者

    /usr/include

    或者你的代碼工程下,總之就是要能調用到,而後修改代碼中原本的

    #include <emmintrin.h>

    #include <sse2neon.h>

    即可使用。
  9. sse2neon.h的下載下傳位址及使用方法
  10. 頭檔案-架構-指令集

    arm_neon.h - ARM Neon types & intrinsics

    altivec.h - Freescale Altivec types & intrinsics

    mmintrin.h - X86 MMX

    xmmintrin.h - X86 SSE1

    emmintrin.h - X86 SSE2

繼續閱讀