2016-12-24 68 views
4

当我读了一些Golang的汇编代码,我发现MOVOU。通过在Google上搜索,我无法获得有关此说明的任何信息。什么是“MOVOU”意味着golang装配

例如:src/runtime/asm_amd64.s#L933

MOVOU -16(AX), X1 
+0

好吧,+1 - 它似乎没有在x64指令集中提及,所以它是一种不寻常的在工作代码中找到它。其中一位消息人士评论说:“MOVOU似乎总是比REP STOSL快。”但就是这样。 – usr2564301

+1

相关阅读:[添加MOVDQA和MOVDQU说明](https://codereview.appspot.com/133740043/) –

+1

@AshwiniChaudhary谢谢。这就是我需要的。 O代表八字。你是怎么找到的?我尝试了很多方法,但没有发现 – templexxx

回答

2

不幸的是,有很多奇怪的名字,矛盾和问题,在围棋的x86语法。

正如所指出的意见,MOVOU是MOVDQU。

我尽量保持Go assembly complementary reference,填补官方文档中的某些文档的差距,但目前它是相当出过期,需要一些清理。 当implementation details稳定时,计划在那里写入AVX512细节。 我希望它对于快速ctrl+F搜索一些Go asm问题很有用。

对于特定的问题,这是绝对有用:

enter image description here

您可能会发现x86.v0.2.csv有用,因为它为您提供了英特尔,GNU和列出的每个指令去语法。 顾名思义,v0.2将来会有更新和修复。

更糟的是,有aliases,允许你写,例如,PADDD,而不是PADDL。 由于向后兼容性,这是不可能改变的。

完全避免的负面印象,也有一些东西,去ASM“做得很好”。例如,它检查即时操作数的宽度,以获得只设置较低N位的指令。 它也不允许“无符号”立即数操作数的负常数。
(作为奖励,这里是一个问题,包含一些Russ Cox在这个主题上的想法:issue21528。)

+0

伟大的工作!谢谢 – templexxx

+0

那么去哪里使用O(如在Oct-word中)而不是DQ(double-quad)?英特尔还没有一致的('cqo'助记符与SSE2和其他SIMD指令),虽然也许这是AMD的错。我想AMD64引入了'cqo'助记符。呃,如果英特尔一直在命名的话,我们可以用'cqdq'去与'punpcklqdq'。 –

+0

@PeterCordes,从AVX开始,它是英特尔指令名称。如果它们中的任何一个不匹配 - 这是一个错误。在此之前,我不认为像“无处不在”这样的东西适用,因为在这里和那里存在很多不一致。 –