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

例如:

// 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

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

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

我试过了

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

他们都给我同样的错误:

语法错误,姓氏:“”。

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


目前的工具链实际上是不可能的。 问题4978解释了上下文

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

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

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

链接地址: http://www.djcxy.com/p/22947.html

上一篇: How to define a function on a struct pointer in assembly?

下一篇: Main app assets catalog copied in today extension