ARM NEON 将 f32 转换为 s32

san*_*e51 3 arm bankers-rounding neon

是否有任何函数可以控制 vcvt_s32_f32 内在的舍入模式?我想使用舍入到偶数而不是舍入到负无穷大。

谢谢。

Not*_*hat 5

不,您不能更改舍入模式。

NEON 专为性能而非精度而设计,因此与 VFP 相比受到限制。与 VFP 不同的是,它不是完整的 IEEE 754 实现,而是硬连线到某些设置 - 引用自 ARM ARM:

  • 非规范化数字刷新为零
  • 仅支持默认 NaN
  • 选择的 Round to Nearest *舍入模式
  • 为所有浮点异常选择了未捕获的异常处理

浮点到整数转换的具体情况略有不同,因为VCVT在这种情况下(对于 VFP 和 NEON)指令的行为是忽略选定的舍入模式并始终向零舍入。VCVTR使用所选舍入模式的指令仅在 VFP 中可用。

ARMv8 架构引入了一大堆用于使用特定舍入模式的舍入和转换指令,但我怀疑这在这种特殊情况下没有多大帮助。如果您想在 ARMv7 及更早版本上在不同的舍入模式下进行转换,则必须使用 VFP(如果可用)或一些位黑客来手动实现它。

* ARM ARM 使用 IEEE 754-1985 术语,因此更准确地说,这是四舍五入到最近,与偶数相关联