将 ARM NEON 代码移植到 AARCH64,很多问题

Porting ARM NEON code to AARCH64, many questions

我正在将一些 ARM NEON 代码移植到 64 位 ARM-v8,但我找不到关于它的好文档。

很多功能好像没有了,不使用也不知道如何实现同样的功能

所以,一般问题是:我在哪里可以找到新 SIMD 实现的完整参考,包括如何执行许多 ARM-NEON 教程中解释的相同简单任务的说明?

关于特定功能的一些问题:

1 - 如何在 Dx 寄存器的所有通道中加载一个值?旧代码是

    mov R0, #42
    vdup.8 D0, R0

我的猜测是:

    mov W0, #42
    dup V0.8B, W0

2 - 如何用交错数据加载多个 Dx/Qx 寄存器?在旧代码中,这是:

    vld4.8 {D0-D3}, [R0]!

但我在新文档中找不到任何内容。

我知道这是一个全新的模型,但它的文档不是很完整(或者至少,我找不到任何带有可读样本的参考)

Android中关于使用ARMv8的文档不是很好,但是对于你的具体问题,在这个文档中得到了很好的回答:

ARMv8 Instruction Set Overview

回答您的具体问题:

mov R0, #42
vdup.8 D0, R0

变成

mov w0,#42
dup v0.8b,w0

vld4.8 {d0-d3}, [r0]!

变成

 ld4 {v0.8b,v1.8b,v2.8b,v3.8b},[x0],#32