gpt4 book ai didi

go - _mm_add_epi32的Golang汇编工具

转载 作者:行者123 更新时间:2023-12-01 20:25:55 25 4
gpt4 key购买 nike

我正在尝试在golang汇编中实现_mm_add_epi32,可以选择在avo的帮助下进行。但是我对汇编知之甚少,甚至不知道如何启动。你能给我一些代码提示吗?谢谢你们。
这是等效的较慢golang版本:

func add(x, y []uint32) []uint32 {
if len(x) != len(y) {
return nil
}

result := make([]uint32, len(x))
for i := 0; i < len(x); i++ {
result[i] = x[i] + y[i]
}
return result
}

我知道 paddq xmm, xmm指令是我们所需要的,但是不知道如何将 []byte的片段转换为256位寄存器 YMM

最佳答案

这是此类加法功能的示例:

    // func add(x, y [8]int32) [8]int32
// q = x + y
TEXT ·add(SB),0,$0
VMOVDQU x+0(FP), Y0
VPADDD Y+32(FP), Y0, Y0
VMOVDQU Y0, q+64(FP)
VZEROUPPER
RET
在阅读此代码之前,请熟悉 this document。不幸的是,Go风格的程序集(又称Plan 9风格的程序集)的文档很少。
数组按值传递到堆栈上。返回值作为调用方回读的最右边的参数传递。使用我链接到访问函数参数的文档中记录的 (FP)
除此之外,它非常简单。语法类似于(但不等于)AT&T语法。请注意,寄存器名称不同,并且必须提供大小后缀。
如您所见,为单个操作编写汇编函数是毫无意义的。采用所需的算法并将其完全编写为汇编可能会更好地工作。

关于go - _mm_add_epi32的Golang汇编工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63242918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com