ARM最早支持SIMD指令集是ARMv6。这一代SIMD指令集依赖的向量寄存器,复用了ARM本身的通用寄存器。支持8/16bit整数,可以实现4个8bit整数或者2个16bit整数的并行计算。在ARMv7-A架构中,ARM进一步发展自身的SIMD指令集,并命名为NEON。这一代的指令集,有32个64bit的NEON向量寄存器,同时也支持单精度浮点。而在ARM v8-A架构中,NEON指令集进一步得到发展,32个向量寄存器的长度都增加到128bit。支持8/16/32/64bit整数,同时支持单精度和双精度浮点运算。
NEON的向量寄存器长度虽然是128bit,但也可以复用为32bit Sn寄存器或者64bit Dn寄存器。复用的方式如图1所示。