all: pass -march=x86_64-vX to CGo compiler when GOAMD64=vX is set

vfwfrxfs  于 4个月前  发布在  Go
关注(0)|答案(2)|浏览(57)

你正在使用的Go版本是什么(go version)?
目前仅适用于Go 1.18,因为GOAMD64仍处于开发中。

你正在使用的操作系统和处理器架构是什么(go env)?
使用GOAMD64变量的x86_64,v1、v2、v3、v4。

你做了什么?
我建议使用GOAMD64=vX变量集构建时,应该将正确的-march=x86_64-vX(即GOAMD64=v3 -> -march=x86_64-v3)应用于用于CGo的C编译器。这允许C代码也优化为使用更新的目标架构,该目标架构支持较新的指令。在可能应用不存在的目标之前,我们需要检查C编译器是否支持这些目标架构(看起来GCC11和Clang12是最初支持的版本:https://www.phoronix.com/scan.php?page=news_item&px=GCC-11-x86-64-Feature-Levels)。
#45453相关

jm81lzqq

jm81lzqq1#

Go工具链是否已经足够了解C/C++工具链,以判断它们是否支持这个-march标志?有没有一种便宜的方法来弄清楚这一点?从#45453(评论)中接手这个问题。

qojgxg4l

qojgxg4l2#

在cmd/go中,我们使用(*Builder).gccSupportsFlag。在cmd/link中,我们使用linkerFlagSupported。如果需要的话,我们可以在cmd/cgo中做类似的事情。

相关问题