我正在将一些 ARM NEON 代码移植到 64 位 ARM-v8,但我找不到关于它的好文档。
很多功能好像没有了,不使用也不知道如何实现同样的功能。
因此,普遍的问题是:我在哪里可以找到新 SIMD 实现的完整引用,包括如何执行许多 ARM-NEON 教程中解释的相同简单任务的说明?
关于特定功能的一些问题:
1 - 如何在 Dx 寄存器的所有 channel 中加载一个值?旧代码是
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
我是一名优秀的程序员,十分优秀!