例如:
// 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
所有这些都给了我同样的错误:
语法错误,姓氏:""。
我确定我错过了一些明显的东西,但我似乎无法弄明白。
答案 0 :(得分:3)
使用当前的工具链实际上是不可能的。上下文在issue 4978
中进行了解释请注意,a simple patch可启用此功能 - 但只有少数人正在使用此功能。
您可以编写一个普通的汇编函数(即不是方法),并在Go方法中实现对此汇编函数的调用。但额外的调用不会被编译器优化掉。
这个问题的一个可能的解决方法是实现一些支持,以允许在Go代码中内联汇编函数 - 这将带来更多好处。我的理解是它已经在过去讨论过了,但还没有计划好。