![](/img/trans.png)
[英]How do I efficiently reverse the last seven bits of a 16-bit integer in MIPS?
[英]Performantly reverse the order of 16-bit quantities within a 64-bit word
我需要對少量小的無符號整數進行字典比較。 如果有(例如)8 個 8 位整數,顯而易見的方法是對它們進行字節交換並在 GPR 中進行普通整數比較。 如果有 2 個 32 位整數,則 32 位循環和普通比較就可以了。 如果有 4 個 16 位整數怎么辦? 顯然,使用向量寄存器很容易將它們打亂,但是有沒有一種有效的方法——或者顛倒它們的順序,或者在不顛倒順序的情況下進行比較——只使用 GPR?
僅反過來,這是我的嘗試:
wswap2:
;; rdi = ABCD (words)
mov rax, rdi
ror edi, 16 ; rdi = 00DC
shl rdi, 32 ; rdi = DC00
shr rax, 32 ; rax = 00AB
ror eax, 16 ; rax = 00BA
or rax, rdi ; rax = DCBA
ret
能夠使用 32 位循環來交換兩個相鄰的字很方便。
我們有兩個平行的依賴鏈,每個鏈有兩個 uop,然后再有一個 uop 來合並它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.