首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SSE2码优化

SSE2码优化
EN

Stack Overflow用户
提问于 2011-11-03 13:33:35
回答 2查看 1.4K关注 0票数 8

我正在使用SSE2本质优化我的应用程序的瓶颈,并有以下问题:

代码语言:javascript
复制
ddata = _mm_xor_si128(_mm_xor_si128(
    _mm_sll_epi32(xdata, 0x7u), _mm_srl_epi32(tdata, 0x19u)), xdata);

在Microsoft C++编译器上,这不会编译,因为类型__m128iunsigned int (传递给_mm_sll_epi32指令)是不可互换的。

为什么是这样,以及如何将任意的unsigned int值传递给_mm_sll_epi32

_m128i是:

代码语言:javascript
复制
typedef union __declspec(intrin_type) _CRT_ALIGN(16) __m128i {
    __int8              m128i_i8[16];
    __int16             m128i_i16[8];
    __int32             m128i_i32[4];    
    __int64             m128i_i64[2];
    unsigned __int8     m128i_u8[16];
    unsigned __int16    m128i_u16[8];
    unsigned __int32    m128i_u32[4];
    unsigned __int64    m128i_u64[2];
} __m128i;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-03 13:35:50

它应该是:

代码语言:javascript
复制
ddata = _mm_xor_si128(_mm_xor_si128(
    _mm_slli_epi32(xdata, 0x7), _mm_srli_epi32(tdata, 0x19)), xdata);

注意i中的“立即”。如果没有这一点,shift本质就需要一个向量作为第二个参数。

票数 11
EN

Stack Overflow用户

发布于 2011-11-03 13:36:34

您可以使用_mm_slli_epi32 (注意i),也可以使用_mm_srli_epi32。它使用的是整数参数,而不是__m128i

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7995790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档