簡體   English   中英

有沒有辦法用AVX2寫入_mm256_shldi_epi8(a,b,1)? (在向量之間每8位元素移動一位)

[英]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包含:

10011001011001111001100101100110 ,... X16

(編者注:先前所描述的問題此作為_mm256_sllv_epi8sllv是可變計數移位,其中每個元素的計數來自於其它源中的相應元素,並且沒有像兩班)。

顯然,任務是移位的字節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.

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