NEON 如何处理溢出?

Posted

技术标签:

【中文标题】NEON 如何处理溢出?【英文标题】:How NEON handle overflow? 【发布时间】:2012-06-13 01:50:34 【问题描述】:

我想知道 Neon 是如何处理溢出的。例如:

uint8x8_t vadd_u8 (uint8x8_t, uint8x8_t)

据我了解,这是 2 个向量的加法(每个向量都有 8 个无符号字节元素)。假设两个向量的所有值都是 255。

在这种情况下,我们应该期待什么结果?一个 8 元素向量 (510,...510) 还是其他?

【问题讨论】:

【参考方案1】:

8 位元素的值只能是 0 到 255。它不能包含 510。

vadd_u8 将环绕 => 255 + 255 = 510 % 256 = 254。

vqadd_u8 将饱和 => 255 + 255 = min(510, 255) = 255。

【讨论】:

那么我们如何使用 Neon 内在函数添加 2 个 uint8x8 向量? AFAIK,没有允许添加 2 个 uint8x8 向量的方法,这些向量给出 uint16x8 结果。参考:gcc.gnu.org/onlinedocs/gcc/ARM-NEON-Intrinsics.html vaddl_u8 将添加两个uint8x8 并返回一个uint16x8

以上是关于NEON 如何处理溢出?的主要内容,如果未能解决你的问题,请参考以下文章

单片机环形对接溢出如何处理

prometheus:prometheus如何处理数据类型溢出?

如何处理ListTile颤动中的右溢出

如何处理Android中的防缓冲区溢出技术

英特尔处理器的 TLB ASID 标签中有多少位?以及如何处理“ASID 溢出”?

Windows 如何处理无符号 64 位整数?