Доступ к произвольным 16-битным элементам, упакованным в 128-битный регистр

С помощью встроенных функций компилятора Intel, учитывая 128-битный регистр, упаковывающий 8 16-битных элементов, как мне получить доступ (дешево) к произвольным элементам из регистра, для последующего использования из _mm_cvtepi8_epi64(знак расширяет два 8-битных элемента, упакованных в младшие 16 бит регистра, до двух 64-битных элементов)?


Поясню, почему я спрашиваю:

  1. Ввод : Буфер в памяти с k байтами, каждый либо 0x0, либо 0xff.
  2. Желаемый результат: Для каждых двух последовательных байтов ввода регистр, упаковывающий два учетверенных слова (64-бита) с 0x0и 0xffff ffff ffff ffff, соответственно.
  3. Конечная цель: суммировать буфер из k удвоений, замаскированных в соответствии с элементами входного буфера.

Примечание: Значения 0x0и 0xffвходного буфера могут быть изменены на наиболее полезные, при условии, что сохраняется эффект маскирования перед суммированием.

Как видно из моего вопроса, мой текущий план выглядит следующим образом, потоковая передача через входные буферы:

  1. Расширить буфер входной маски с 8-битного до 64-битного.
  2. Замаскируйте буфер двойников расширенной маской.
  3. Суммируйте замаскированные двойники.

Спасибо, Asaf

7
задан Whaa 16 September 2015 в 14:55
поделиться