小编liw*_*uen的帖子

为什么(或者为什么不)将 Neon 内在数据类型作为输入/输出函数参数传递?

这是我构建的一个小测试。这里我们有两种情况:

  1. 场景 1:两个函数 (scenario1ascenario1b),其输入和输出分别uint16_t*为 Neon 数据类型 ( ) 和从 Neon 数据类型 ( uint16x8x4_t) 加载/存储。
  2. 场景 2:与场景 1 功能相同(在本例中为scenario2ascenario2b),但输入和输出为uint16x8x4_t*,并且加载和存储在主函数中完成。

(在c代码下面,我包含了使用-O3编译后生成的反汇编代码)。

#include <stdio.h>
#include <stdlib.h>
#include <arm_neon.h>

void scenario1a(uint16_t* resultArray, const uint16_t* X);
void scenario1b(uint16_t* resultArray, const uint16_t* X);

void scenario2a(uint16x8x4_t* result, const uint16x8x4_t* temp);
void scenario2b(uint16x8x4_t* result, const uint16x8x4_t* temp);

void scenario1a(uint16_t* resultArray, const uint16_t* X) {
    uint16x8x4_t temp, result;

    temp = vld1q_u16_x4(X);

    result.val[0] = vextq_u16(temp.val[0], …
Run Code Online (Sandbox Code Playgroud)

c assembly arm simd neon

2
推荐指数
1
解决办法
122
查看次数

标签 统计

arm ×1

assembly ×1

c ×1

neon ×1

simd ×1