![](/img/trans.png)
[英]Reproduce _mm256_sllv_epi16 and _mm256_sllv_epi8 in AVX2
[英]Is there a way to write _mm256_shldi_epi8(a,b,1) with AVX2? (Shift one bit per 8-bit element between vectors)
我需要從各元件的頂部的位移b
到的相應元件的底部a
,像AVX512VBMI2 _mm256_shldi_epi16/32/64
用的計數1
。
有人知道改變這種方式的方法嗎?
例:
__m256i x = { 11001100, 00110011, 11001100, 00110011,... x16 }
__m256i y = { 10111100, 10001011, 11000010, 01100111,... x16 }
__m256i res = _mm256_shldi_epi16(x,y);
然后res包含:
10011001
, 01100111
, 10011001
, 01100110
,... X16
(編者注:先前所描述的問題此作為_mm256_sllv_epi8
。 sllv
是可變計數移位,其中每個元素的計數來自於其它源中的相應元素,並且沒有像兩班)。
顯然,任務是移位的字節a
由1左,而從對應的字節在頂部比特移位在b
,像的1的固定距離左移位可以用字節加成來完成一個小漏斗的移位,然后從b
復制該位:
__m256i funnel_left1_epi8(__m256i a, __m256i b) {
__m256i a2 = _mm256_add_epi8(a, a);
__m256i bit_from_b = _mm256_and_si256(_mm256_srli_epi16(b, 7), _mm256_set1_epi8(1));
return _mm256_or_si256(a2, bit_from_b);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.