【发布时间】:2018-12-06 02:15:20
【问题描述】:
给定一个包含两个四字(即两个 64 位整数)的 128 位 xmm 寄存器:
╭──────────────────┬──────────────────╮
xmm0 │ ffeeddccbbaa9988 │ 7766554433221100 │
╰──────────────────┴──────────────────╯
如何对单个四字执行旋转?例如:
prorqw xmm0, 32 // rotate right packed quadwords
╭──────────────────┬──────────────────╮
xmm0 │ bbaa9988ffeeddcc │ 3322110077665544 │
╰──────────────────┴──────────────────╯
我知道 SSE2 提供:
-
PSHUFW:随机压缩单词(16位) -
PSHUFD:随机压缩 双字(32 位)
虽然我不知道指令是做什么的,也没有 quadword(64 位)版本。
奖金问题
您将如何执行xmm 寄存器的ROR - 假设打包数据为其他 大小?
-
将压缩后的双字右移 16 位:
╭──────────┬──────────┬──────────┬──────────╮ xmm0 │ ffeeddcc │ bbaa9988 │ 77665544 │ 33221100 │ ╰──────────┴──────────┴──────────┴──────────╯ ⇓ ╭──────────┬──────────┬──────────┬──────────╮ xmm0 │ ddccffee │ 9988bbaa │ 55447766 │ 11003322 │ ╰──────────┴──────────┴──────────┴──────────╯ -
将压缩后的单词向右旋转 8 位:
╭──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────╮ xmm0 │ ffee │ ddcc │ bbaa │ 9988 │ 7766 │ 5544 │ 3322 │ 1100 │ ╰──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────╯ ⇓ ╭──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────╮ xmm0 │ eeff │ ccdd │ aabb │ 8899 │ 6677 │ 4455 │ 2233 │ 0011 │ ╰──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────╯
额外奖励问题
如果是 256 位 ymm 寄存器,您将如何执行上述操作?
╭──────────────────────────────────┬──────────────────────────────────╮
ymm0 │ 2f2e2d2c2b2a29282726252423222120 │ ffeeddccbbaa99887766554433221100 │ packed doublequadwords
╰──────────────────────────────────┴──────────────────────────────────╯
╭──────────────────┬──────────────────┬──────────────────┬──────────────────╮
ymm0 │ 2f2e2d2c2b2a2928 │ 2726252423222120 │ ffeeddccbbaa9988 │ 7766554433221100 │ packed quadwords
╰──────────────────┴──────────────────┴──────────────────┴──────────────────╯
╭──────────┬──────────┬──────────┬──────────┬──────────┬──────────┬──────────┬──────────╮
ymm0 │ 2f2e2d2c │ 2b2a2928 │ 27262524 │ 23222120 │ ffeeddcc │ bbaa9988 │ 77665544 │ 33221100 │ packed doublewords
╰──────────┴──────────┴──────────┴──────────┴──────────┴──────────┴──────────┴──────────╯
╭──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────╮
ymm0 │ 2f2e │ 2d2c │ 2b2a │ 2928 │ 2726 │ 2524 │ 2322 │ 2120 │ ffee │ ddcc │ bbaa │ 9988 │ 7766 │ 5544 │ 3322 │ 1100 │ packed words
╰──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────╯
阅读奖励
【问题讨论】: