ARM64 ASM代码中有p256one个全局数据作为示例:

DATA p256one<>+0x00(SB)/8, $0x0000000000000001
DATA p256one<>+0x08(SB)/8, $0xffffffff00000000
DATA p256one<>+0x10(SB)/8, $0xffffffffffffffff
DATA p256one<>+0x18(SB)/8, $0x00000000fffffffe

GLOBL p256one<>(SB), 8, $32

我需要将p256one;lt;&gt;(SB)加载到V0&amp;V1寄存器中.目前我使用的方法如下:

    LDP p256one<>+0x00(SB), (R0, R1)
    LDP p256one<>+0x10(SB), (R2, R3)
    VMOV R0, V0.D[0]
    VMOV R1, V0.D[1]
    VMOV R2, V1.D[0]
    VMOV R3, V1.D[1]

这里总共使用了六条指令.我们知道可以加载内存数据,如下所示:

    VLD1 (R0), [V0.B16, V1.B16]

But it seems we can't load global data with the same method.
So, is there a more efficient way to load global data into NEON registers in Go's Assembler code?

推荐答案

try 将地址加载到寄存器中,然后从该地址加载:

    MOVD $p256one<>(SB), R0
    VLD1 (R0), [V0.B16, V1.B16]

Go相关问答推荐

如何创建两个连接的io.ReadWriteClosers以用于测试目的

如何使用我的 struct 化日志(log)记录格式使人panic ?

将类型定义为泛型类型实例化

如何在v2 Go SDK中使用KeyConditionExpression查询AWS DynamoDb?

日志(log)文件不在 golang 的日志(log)目录中

Github Actions Go lambda 项目不同的 sha256sums

从给定顶点查找图形中所有闭合路径的算法

如何以干净的方式在中间件中注入 repo 或服务?

为什么不同的 Wireguard 私钥会产生相同的公钥?

如何将一片 map 转换为一片具有不同属性的 struct

在 go 中将运行命令的标准输出发送到其标准输入

在 Raspberry Pi4 上下载 Go Mod

vs 代码调试 go 测试不通过标志

使用 image/jpeg 编码导致图像饱和/错误像素

如何从 Go 1.18 中的单个方法返回两种不同的具体类型?

GRPC 反向代理混淆 GRPC 和 GRPC-Web

为什么我不能使用来自 gocloak 中 Login() 的访问令牌在 KeyCloak 中创建新客户端?

如何使用golang操作很长的字符串以避免内存不足

golang 如何从字符串中查找表情符号?

Gorilla/Mux 和 Websocket 竞赛条件,这安全吗?