将 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
我正在将一些 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