这是我构建的一个小测试。这里我们有两种情况:
scenario1a和scenario1b),其输入和输出分别uint16_t*为 Neon 数据类型 ( ) 和从 Neon 数据类型 ( uint16x8x4_t) 加载/存储。scenario2a和scenario2b),但输入和输出为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)