arm NEON 数据类型中的 I8(未指定类型的整数)是啥?
Posted
技术标签:
【中文标题】arm NEON 数据类型中的 I8(未指定类型的整数)是啥?【英文标题】:What is I8(Integer of unspecified type) in arm NEON data types?arm NEON 数据类型中的 I8(未指定类型的整数)是什么? 【发布时间】:2021-02-08 09:25:59 【问题描述】:NEON 数据类型中的整数
type | 8-bit | 16-bit |
---|---|---|
Unsigned integer | U8 | U16 |
Signed integer | S8 | S16 |
Integer of unspecified type | I8 | I16 |
I8
和 S8
有什么区别?
【问题讨论】:
大概适用于像随机播放或二进制加法/减法这样的操作,其中有符号或无符号的操作是相同的。但这只是猜测。 这种差异的一个例子是饱和操作。您饱和的位置在有符号字节和无符号字节之间有所不同。 【参考方案1】:评论已经描述了它们,Peter Cordes完美地总结了这个想法:
大概适用于像随机播放或二进制加法这样的操作 / 减法,其中有符号或的运算相同 未签名
重点回答Neon的指令集,大部分指令只接受特定的数据类型,规则是:
当I
有效时,S
和U
也有效
仅指定数据大小时,U
、S
和 I
有效(P 和 F 也是)
某些指令会忽略数据类型
当没有数据类型时,任何一个都有效
很容易知道哪些指令将指定数据类型,即:
为了获得绝对值,VABS
只接受S
类型(注意它也允许F32)。
有些指令接受I
,因此它们也接受S
和U
,例如按位与(VAND
)。
【讨论】:
答案通常应该是独立的。如果这意味着重复 cmets 的解释,那么就这样做。如果需要,请随意复制我的评论文本。以上是关于arm NEON 数据类型中的 I8(未指定类型的整数)是啥?的主要内容,如果未能解决你的问题,请参考以下文章
arm_neon.h 是不是缺少所有 float16_t 类型?
ARM NEON 内部函数将 D(64 位)寄存器转换为 Q(128 位)寄存器的低半部分,而上半部分未定义