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

时间:2015-01-20 16:23:37

标签: android arm simd neon arm64

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

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

我知道这是一个全新的模型,但它没有很好地记录(或者至少,我无法找到任何可读样本的参考)

1 个答案:

答案 0 :(得分:4)

在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