Neon内部函数---部分基本函数、数据处理 类型转换

对于neon内置函数的概念相关定义网上很多,下面是对最近用的Neon函数的记录,以便方便查找。

 

必须使用头文件arm_neon.h来使用内部函数,并为矢量操作定义C样式类型。 C类型以以下形式编写:

    uint8x16_t:这是一个包含无符号8位整数的向量。向量中有16个元素。因此,向量必须位于128位Q寄存器中。

    int16x4_t:这是一个包含有符号16位整数的向量。向量中有4个元素。因此,向量必须位于64位D寄存器中。

关于指令:

当-mfpu=neon编译选项时就可以在C/C++代码内使用ARM的SIMD指令,包括加法、乘法、比较、移位、绝对值 、极大极小极值运算、保存和加载指令等。

(1)、正常指令:生成大小相同且类型通常与操作数向量相同的结果向量;
(2)、长指令:对双字向量操作数执行运算,生成四字向量的结果。所生成的元素一般是操作数元素宽度的两倍,
并属于同一类型;
(3)、宽指令:一个双字向量操作数和一个四字向量操作数执行运算,生成四字向量结果。所生成的元素和第一个
操作数的元素是第二个操作数元素宽度的两倍;
(4)、窄指令:四字向量操作数执行运算,并生成双字向量结果,所生成的元素一般是操作数元素宽度的一半;
(5)、饱和指令:当超过数据类型指定的范围则自动限制在该范围内。

一、 常用函数(基础函数)

注意:q标志,以指定内部函数对128位vector进行操作。

   Result_t vld1_type(Scalar_t* N); //后缀不带有q,输出向量是D寄存器的64位向量
   Result_t vld1q_type(Scalar_t* N); //带有q后缀,输出向量是128位向量,使用Q寄存器

 

从数组arr中依次Load 4个元素存到寄存器中:   

    float32x2_t temp = vld1_f32(int32_t arr);//

    float32x4_t temp = vld1q_f32(int32_t arr); //

将寄存器中的值写入数组中:(temp中的四个元素以此存入数组ptr中)

    void  vst1q_f32 (float32_t * ptr, float32x4_t temp )

将常量value复制4份到寄存器的每个元素中:

    float32x4_t  sum_vec = vdupq_n_f32(value);

将结果移回普通变量中。即从NEON寄存器中访问具体元素:

    float  sum = vgetq_lane_f32(sum_vec, i);  //i取值:0-3。表示从寄存器sum_vec中通道i

  • 8
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值