我正在尝试编写一些SIMD,主要用于学习目的.我知道Go可以链接汇编,但我无法让它正常工作.
这是我可以做的最小的例子(元素向量乘法):
vec_amd64.s(注意:实际文件下面有一个空白行,RET
因为它会导致错误)
// func mul(v1, v2 Vec4) Vec4
TEXT .mul(SB),4,$0-48
MOVUPS v1+0(FP), X0
MOVUPS v2+16(FP), X1
MULPS X1, X0
// also tried ret+32 since I've seen some places do that
MOVUPS X0, toReturn+32(FP)
RET
Run Code Online (Sandbox Code Playgroud)
vec.go
package simd
type Vec4 [4]float32
func (v1 Vec4) Mul(v2 Vec4) Vec4 {
return Vec4{v1[0] * v2[0], v1[1] * v2[1], v1[2] * v2[2], v1[3] * v2[3]}
}
func mul(v1, v2 Vec4) Vec4
Run Code Online (Sandbox Code Playgroud)
simd_test.go
package simd
import (
"testing"
)
func TestMul(t *testing.T) …
Run Code Online (Sandbox Code Playgroud) 我想在g ++中使用unicode变量名.
它似乎不起作用.
g ++不支持unicode变量名,...还是有一些unicode子集(我从中没有测试过).
谢谢!
我正在查看谷歌go的运行时源代码(在https://go.googlecode.com/hg/src/pkg/runtime/),似乎他们使用特殊字符作为其函数名称,·.(例如,请访问https://go.googlecode.com/hg/src/pkg/runtime/cgocall.c).这是否被主要编译器接受?它不是ANSI C,是吗?或者它只是一些宏观魔法?
谢谢!
我在go运行时查看了runtime.c文件
/usr/local/go/src/pkg/runtime
Run Code Online (Sandbox Code Playgroud)
并看到以下函数定义:
void
runtime?pprof·runtime_cyclesPerSecond(int64 res)
{...}
Run Code Online (Sandbox Code Playgroud)
和
int64
runtime·tickspersecond(void)
{...}
Run Code Online (Sandbox Code Playgroud)
并且有很多声明像
void runtime·hashinit(void);
Run Code Online (Sandbox Code Playgroud)
在runtime.h中.
我之前没有看到过这种C语法(特别是带有斜杠的语法似乎很奇怪).这是std C或某种plan9方言的一部分吗?