Я пытаюсь битрейт целых чисел вправо, используя встроенные функции. Код ниже пытается это сделать, но вывод выглядит не так, как ожидалось, возможно, я неправильно загружаю цифры или использую неправильную внутреннюю функцию. Вот результат:SSE внутреннее битовое смещение вправо
2 4 8 16 32 64 128 1 2 4 8 16 32 64 128 0
512 1024 2048 4096 8192 16384 32768 0
0 8192 0 16384
8 0 16 0
я стараюсь смотреть на эту thread, но это даже не попробовать использовать bitshift instructions with SSE intrinsics.
Вот полный код (скомпилируйте флаг SSE2).
#include <emmintrin.h>
#include <stdio.h>
#include <stdint.h>
void print_16_num(__m128i var)
{
uint8_t *val = (uint8_t*) &var;
printf(" %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i \n",
val[0], val[1], val[2], val[3], val[4], val[5], val[6], val[7],val[8], val[9], val[10], val[11], val[12], val[13], val[14], val[15]);
}
void print_8_num(__m128i var)
{
uint16_t *val = (uint16_t*) &var;
printf(" %i %i %i %i %i %i %i %i \n",
val[0], val[1], val[2], val[3], val[4], val[5], val[6], val[7]);
}
void print_4_num(__m128i var)
{
uint16_t *val = (uint16_t*) &var;
printf(" %i %i %i %i \n",
val[0], val[1], val[2], val[3]);
}
int main()
{
__m128i _16 = _mm_set_epi8(128, 64, 32, 16, 8, 4, 2, 1, 128, 64, 32, 16, 8, 4, 2, 1);
print_16_num(_mm_srli_si128(_16,1));
__m128i _8 = _mm_set_epi16(128, 64, 32, 16, 8, 4, 2, 1);
print_8_num(_mm_srli_si128(_8,1));
__m128i _4 = _mm_set_epi32(128, 64, 32, 16);
print_4_num(_mm_srli_si128(_4,1));
_4 = _mm_set_epi32(128, 64, 32, 16);
print_4_num(_mm_srli_epi32(_4,1));
return 0;
}
Согласно документации, вы ссылочная '_mm_srli_si128' [сдвиги на байтах, а не бит] (HTTP: // математика .nju.edu.cn/помощь/mathhpc/док/Intel/куб.см/mergedProjects/intref_cls/общие/intref_sse2_int_shift.htm # slli_si128). –
@RaymondChen О, неудивительно, что это не сработает. Итак, я предполагаю, что ссылка (на другой вопрос stackoverflow) - единственный способ сдвигаться по битам? – pandoragami
afaik только сдвигает 128-битное смещение значения по байтам, 64,32,16 битов использования. Я предполагаю, что дизайнеры поставили под сомнение, в каком бизнесе вы бы переместили такое большое значение. – mukunda