簡體   English   中英

高效地反轉 64 位字中 16 位量的順序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM