簡體   English   中英

英特爾/ ARM內在等效性

[英]Intel / ARM intrinsics equivalence

我有一個使用英特爾內部函數的C應用程序,例如:

__m128 _mm_add_ps (__m128 a, __m128 b)
__m128 _mm_sub_ps (__m128 a, __m128 b)
__m128 _mm_mul_ps (__m128 a, __m128 b)
__m128 _mm_set_ps (float e3, float e2, float e1, float e0)
void _mm_store_ps (float* mem_addr, __m128 a)
__m128 _mm_load_ps (float const* mem_addr)

現在,我試圖使用名為Gem5的模擬器來修改我的應用程序,以使其在ARMv8上運行 因此,我開始四處尋找ARM內在函數,並找到了本手冊《 ARM®NEON™Intrinsics Reference》。

好吧,我發現了算術內在函數,但是我對設置,存儲和加載指令有些迷失。

任何具有ARM內部函數經驗的人都可以告訴我正確的內部函數嗎?

以下是一些等效的入門指南:

SSE             ARM

__m128          float32x4_t     // 4 x 32 bits floats in a vector

_mm_load_ps     vld1q_f32       // load float vector from memory

_mm_store_ps    vst1q_f32       // store float vector to memory

_mm_add_ps      vaddq_f32       // add float vectors

至於初始化向量,就像您在SSE中使用_mm_set_ps ,例如gcc和clang的編譯器就可以通過類似於Neon數據類型的C方式進行此操作,例如

const float32x4_t v = { 1.0f, 2.0f, 3.0f, 4.0f };

但是,如果編譯器不支持此方法,則可能必須使用等效的Neon內部函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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