登录
首页 >  Golang >  Go问答

_mm_add_epi32的Golang汇编实现

来源:Golang技术栈

时间:2023-04-30 09:34:06 152浏览 收藏

golang学习网今天将给大家带来《_mm_add_epi32的Golang汇编实现》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到golang等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家!

问题内容

我正在尝试_mm_add_epi32在 golang 程序集中实现,可选地在 avo 的帮助下实现。但我对组装知之甚少,甚至不知道如何开始。你能给我一些代码提示吗?谢谢你们。

这是等效的较慢的 golang 版本:

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

    result := make([]uint32, len(x))
    for i := 0; i 

我知道该结构paddq xmm, xmm是我们需要的,但不知道如何将切片转换为[]byte256 位寄存器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

在阅读本代码之前,请先熟悉本文档。不幸的是,Go 风格的程序集(又名 Plan 9 风格的程序集)的文档记录很差。

数组按值在堆栈上传递。返回值作为调用者读回的额外最右边参数传递。(FP)按照我链接到访问函数参数的文档中的说明使用。

除此之外,它非常简单。语法类似于(但不等于)AT&T 语法。请注意,寄存器名称不同,并且必须提供大小后缀。

如您所见,为单个操作编写汇编函数是毫无意义的。采用您需要的算法并将其完全用汇编语言编写可能会更好。

以上就是《_mm_add_epi32的Golang汇编实现》的详细内容,更多关于golang的资料请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>