例如:
// 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)
所有这些都给了我同样的错误:
语法错误,姓氏:"".
我确信我错过了一些明显的东西,但我似乎无法弄明白.
这对于当前的工具链来说实际上是不可能的。上下文在第 4978 期中进行了解释
请注意,有一个简单的补丁可以启用此功能 - 但只有少数人在使用它。
您可以编写一个普通的汇编函数(即不是方法),并在 Go 方法中实现对该汇编函数的调用。但额外的调用不会被编译器优化掉。
解决这个问题的一个可能的解决方法是实现一些支持,以允许在 Go 代码中内联汇编函数 - 这将带来更多好处。我的理解是过去已经讨论过,但还没有计划。
归档时间: |
|
查看次数: |
518 次 |
最近记录: |