javaee论坛

普通会员

225648

帖子

355

回复

369

积分

楼主
发表于 2017-09-27 15:48:32 | 查看: 303 | 回复: 1
http://davidwong.fr/goasm/add

接下来就是对这组Sample的测试(simple搬砖)

目前的版本是1.9 好像方法都简单了不少(智能). 对于这个例子可以简单的测试.


命名很松散:

1. .s文件后缀小写. 并且文件名任意. 只要包含了我们的函数实现即可.

2. 函数中x+0(SB) y+0(SB) 前面x,y 都是名字. 而在go中声明的函数原型中的形参名x, y都是任意. 和.s实现没有任何关系. (只有参数位置有意义)

go build即可编译.

它总是很聪明的找到package main以及没有函数体的函数的汇编实现.

linux下面输入"点" Ctrl + Shift + u b7回车.


http://davidwong.fr/goasm/hello

这个例子来自于go tool compile -S hello.go   (汇编输出到stdout)


http://davidwong.fr/goasm/sync-atomic

这个例子在JMP这条指令可能会出问题:

     JMP ·SwapUint32(SB)

# test/as/cinco
runtime.pclntab: relocation target main.SwapUint32.args_stackmap not defined
runtime.pclntab: undefined: "main.SwapUint32.args_stackmap"
若·SwapInt32直接采用下面的实现就没有问题(省略JMP以及·SwapUint32这个函数).

消除错误:  要在go文件中声明SwapUint32这个函数. (参数及返回值都是uint32) .


The Go compiler will look for files ending in _GOOS or _GOARCH or_GOOS_GOARCH toconsider which assembly file to compile. See go/build.


http://davidwong.fr/goasm/sqrt

另外在1.9的源码中的.s文件中可以找到这样的字样:

// +build amd64,!gccgo,!appengine
















上一篇:libtool 下一篇:cookie管理(1)

普通会员

2

帖子

317

回复

327

积分
沙发
发表于 2023-08-24 23:51:56

百因必有果你的报应就是我

您需要登录后才可以回帖 登录 | 立即注册

触屏版| 电脑版

技术支持 历史网 V2.0 © 2016-2017