如何在程序集中的结构指针上定义一个函数?
例如:
// 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?