如何在程序集中的结构指针上定义函数?

One*_*One 7 assembly go

例如:

// dummy.go
type dummy struct {
    p uintptr
}

func (d dummy) Get(i int) uint64
//func (d *dummy) Get(i int) uint64 //no way to define *dummy in assembly
Run Code Online (Sandbox Code Playgroud)

func (d dummy) Get 可以定义为:

// dummy_amd64.s
#include "textflag.h"
TEXT ·dummy·Get(SB),NOSPLIT,$0
    MOVQ $42, 24(SP)
    RET
Run Code Online (Sandbox Code Playgroud)

我试过了

TEXT "".(*dummy).Get+0(SB),4,$0-24 //output from 6g -S
TEXT ""·(*dummy)·Get+0(SB),4,$0
TEXT ·*dummy·Get(SB),NOSPLIT,$0
//and
TEXT ·(*dummy)·Get(SB),NOSPLIT,$0
Run Code Online (Sandbox Code Playgroud)

所有这些都给了我同样的错误:

语法错误,姓氏:"".

我确信我错过了一些明显的东西,但我似乎无法弄明白.

Did*_*zia 3

这对于当前的工具链来说实际上是不可能的。上下文在第 4978 期中进行了解释

请注意,有一个简单的补丁可以启用此功能 - 但只有少数人在使用它。

您可以编写一个普通的汇编函数(即不是方法),并在 Go 方法中实现对该汇编函数的调用。但额外的调用不会被编译器优化掉。

解决这个问题的一个可能的解决方法是实现一些支持,以允许在 Go 代码中内联汇编函数 - 这将带来更多好处。我的理解是过去已经讨论过,但还没有计划。