2016-12-24 97 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開始,它是英特爾指令名稱。如果它們中的任何一個不匹配 - 這是一個錯誤。在此之前,我不認爲像「無處不在」這樣的東西適用,因爲在這裏和那裏存在很多不一致。 –