ARM是否支持64位浮点数的SIMD操作?

时间:2016-03-17 05:47:18

标签: arm precision simd

NEON可以对32位浮点数进行SIMD操作。但不会对64位浮点数进行SIMD操作。 VFU不是SIMD。它只能在一个元素上执行32位或64位浮点运算。

ARM是否支持64位浮点数的SIMD操作?

2 个答案:

答案 0 :(得分:1)

这仅适用于支持ARMv8的处理器,并且仅在运行Aarch64指令集时才有效。这在Aarch32指令集中是不可能的。

但是大多数处理器都支持32位和64位标量浮点运算(即浮点单元)。

答案 1 :(得分:1)

ARMv8

在ARMv8中,可能:

fadd v2.2d, v0.2d, v1.2d

Minimal runnable example with an assert and QEMU user setup

类似的ARMv7不能正常工作:

vadd.f64 q2, q0, q1

汇编失败,并显示:

bad type in Neon instruction -- `vadd.f64 q2,q0,q1'

Minimal runnable 32-bit float v7 code for comparison

手册

https://static.docs.arm.com/ddi0487/ca/DDI0487C_a_armv8_arm.pdf A1.5“高级SIMD和浮点支持”说:

  

SIMD指令提供打包的单指令多数据(SIMD)和单元素标量运算,并支持:

     
      
  • 处于AArch64状态的单精度和双精度算法。
  •   

对于ARMv7,F6.1.27“ VADD(浮点)”表示:

  

<dt>是向量元素的数据类型,在“ sz”字段中编码。它可以具有以下值:

     

sz = 0时为F32   sz = 1时为F16

但是没有F64,这表明不可能。