_mm_mul_epu32与._mm_mul_epi32

用户名

开始讨论时,_mm_mul_epu32和_mm_mul_epi32之间的基本区别是:

  • _mm_mul_epu32在SSE2中可用,并接受并产生无符号整数(32位-> 64位)

  • _mm_mul_epi32在SSE4.1中可用,并接受并产生带符号的整数(32位-> 64位)

我不明白的是,在什么情况下应该使用_mm_mul_epu32似乎没有_mm_set [1] _epi32这样的set指令。如本例所示:4个32位整数的SSE乘法,最佳答案如下:

static inline __m128i muly(const __m128i &a, const __m128i &b)
{
    __m128i tmp1 = _mm_mul_epu32(a,b); /* mul 2,0*/
    __m128i tmp2 = _mm_mul_epu32( _mm_srli_si128(a,4), _mm_srli_si128(b,4)); /* mul 3,1 */
    return _mm_unpacklo_epi32(_mm_shuffle_epi32(tmp1, _MM_SHUFFLE (0,0,2,0)), _mm_shuffle_epi32(tmp2, _MM_SHUFFLE (0,0,2,0))); /* shuffle results to [63..0] and pack */
}

_mm_mul_epu32与_epi32指令一起使用。忽略有符号和无符号整数之间的差异是否有风险?

有人可以提供一个可以安全使用_mm_mul_epu32的示例吗?谢谢!

乳糜

使用_mm_mul_epu32时,操作数应被视为无符号整数,和_mm_mul_epi32其他。

在32位-> 64位乘法中,将操作数视为无符号或有符号会产生不同的结果,因此有单独的指令。Add,sub和mov不需要单独的说明。没有单独的__m128u类型。只需使用__m128i并记住它包含无符号数字。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

_mm_set1_epi32 的运行时错误

来自分类Dev

pinrd / _mm_insert_epi32 与字节指针对齐?

来自分类Dev

FPC BASM32 MUL错误?

来自分类Dev

将_mm_shuffle_epi32转换为C表达式以进行排列?

来自分类Dev

如何用gcc或clang模拟_mm256_loadu_epi32?

来自分类Dev

AVX2的_mm256_cmp_epi32_mask的模拟

来自分类Dev

可以使用“ _mm256_movemask_ps”代替未定义的“ _mm256_movemask_epi32”吗?

来自分类Dev

SSE移位指令使用_mm_set1_epi32()将计数向量归零吗?

来自分类Dev

计算AVX2向量中每个元素的前导零位,模拟_mm256_lzcnt_epi32

来自分类Dev

16位* 32位MUL,结果为48位

来自分类Dev

8086中的32位乘法而不使用MUL

来自分类Dev

MUL 指令将 32 位汇编为 64 位

来自分类Dev

Altivec:_mm_sad_epu8()的类似物

来自分类Dev

_mm_sad_epu8比_mm_sad_pu8快

来自分类Dev

为什么将8位MUL合并为AX,但将16位和32位MUL的结果分成[E] DX:[E] AX?

来自分类Dev

TypeError:“ Mul”操作的输入“ y”的类型为float32,与参数“ x”的int64类型不匹配

来自分类Dev

为什么_mm_set_epi16有时比_mm_load_si128快?

来自分类Dev

* _dpbusd_epi32或* _maddubs_epi16在ARM上是否等效?

来自分类Dev

OpenCV Mat::Mul 的参数

来自分类Dev

在一个_mm_load_si128上使用两个_mm_loadl_epi64

来自分类Dev

tcpdf 创建一个标签 pdf 尺寸宽度:57mm 和高度:32mm

来自分类Dev

如何实现“ _mm_storeu_epi64”而不会出现别名问题?

来自分类Dev

未解析的外部符号__mm256_setr_epi64x

来自分类Dev

使用_mm_slli_epi64移位__m128i

来自分类Dev

如何执行_mm256_movemask_epi8(VPMOVMSKB)的逆运算?

来自分类Dev

为什么_mm_mulhrs_epi16()总是将舍入舍入为正无穷大?

来自分类Dev

使用_mm_slli_epi64移位__m128i

来自分类Dev

如何执行_mm256_movemask_epi8(VPMOVMSKB)的逆运算?

来自分类Dev

cvRound()中的x64舍入不一致(_mm_cvtsd_si32)

Related 相关文章

  1. 1

    _mm_set1_epi32 的运行时错误

  2. 2

    pinrd / _mm_insert_epi32 与字节指针对齐?

  3. 3

    FPC BASM32 MUL错误?

  4. 4

    将_mm_shuffle_epi32转换为C表达式以进行排列?

  5. 5

    如何用gcc或clang模拟_mm256_loadu_epi32?

  6. 6

    AVX2的_mm256_cmp_epi32_mask的模拟

  7. 7

    可以使用“ _mm256_movemask_ps”代替未定义的“ _mm256_movemask_epi32”吗?

  8. 8

    SSE移位指令使用_mm_set1_epi32()将计数向量归零吗?

  9. 9

    计算AVX2向量中每个元素的前导零位,模拟_mm256_lzcnt_epi32

  10. 10

    16位* 32位MUL,结果为48位

  11. 11

    8086中的32位乘法而不使用MUL

  12. 12

    MUL 指令将 32 位汇编为 64 位

  13. 13

    Altivec:_mm_sad_epu8()的类似物

  14. 14

    _mm_sad_epu8比_mm_sad_pu8快

  15. 15

    为什么将8位MUL合并为AX,但将16位和32位MUL的结果分成[E] DX:[E] AX?

  16. 16

    TypeError:“ Mul”操作的输入“ y”的类型为float32,与参数“ x”的int64类型不匹配

  17. 17

    为什么_mm_set_epi16有时比_mm_load_si128快?

  18. 18

    * _dpbusd_epi32或* _maddubs_epi16在ARM上是否等效?

  19. 19

    OpenCV Mat::Mul 的参数

  20. 20

    在一个_mm_load_si128上使用两个_mm_loadl_epi64

  21. 21

    tcpdf 创建一个标签 pdf 尺寸宽度:57mm 和高度:32mm

  22. 22

    如何实现“ _mm_storeu_epi64”而不会出现别名问题?

  23. 23

    未解析的外部符号__mm256_setr_epi64x

  24. 24

    使用_mm_slli_epi64移位__m128i

  25. 25

    如何执行_mm256_movemask_epi8(VPMOVMSKB)的逆运算?

  26. 26

    为什么_mm_mulhrs_epi16()总是将舍入舍入为正无穷大?

  27. 27

    使用_mm_slli_epi64移位__m128i

  28. 28

    如何执行_mm256_movemask_epi8(VPMOVMSKB)的逆运算?

  29. 29

    cvRound()中的x64舍入不一致(_mm_cvtsd_si32)

热门标签

归档