Как дублировать последний байт каждого двойного слова? - PullRequest
0 голосов
/ 04 января 2019

Я использую SSE и хочу дублировать последний байт каждого двойного слова 4 раза XMM0, но я не знаю, как это сделать!(может быть с (un) пачками?)

В качестве иллюстрации я хотел бы сделать this .

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 04 января 2019

Вы можете сделать это с помощью команды SSSE3 PSHUFB следующим образом (32-разрядная сборка MASM)

.data 
  align 16
  mask  db 0,0,0,0, 4,4,4,4, 8,8,8,8, 12,12,12,12
.code
  ; value in XMM0                  ; 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
  pshufb xmm0, xmmword ptr [mask]  ; 12 12 12 12 08 08 08 08 04 04 04 04 00 00 00 00

То, что выходные данные соответствуют маске, совпадает.
В данный момент я не могу проверить это, порядок байтов маски может быть обратным.Но вы должны понять.

В любом случае: позаботьтесь о выравнивании, потому что

Когда исходный операнд является 128-битным операндом памяти, операнд должен быть выровнен по 16-байтовая граница или исключение общей защиты (#GP).

...