【发布时间】:2017-05-11 03:44:24
【问题描述】:
我正在实现 SSE 类型之间的转换,我发现为 SSE4.1 之前的目标实现 int8->int64 扩展转换很麻烦。
简单的实现是:
inline __m128i convert_i8_i64(__m128i a)
{
#ifdef __SSE4_1__
return _mm_cvtepi8_epi64(a);
#else
a = _mm_unpacklo_epi8(a, a);
a = _mm_unpacklo_epi16(a, a);
a = _mm_unpacklo_epi32(a, a);
return _mm_srai_epi64(a, 56); // missing instrinsic!
#endif
}
但由于 _mm_srai_epi64 直到 AVX-512 才存在,此时有两种选择:
- 实现
_mm_srai_epi64,或者 - 以不同的方式实现
convert_i8_i64。
我不确定哪一个是最有效的解决方案。有什么想法吗?
【问题讨论】:
标签: c++ x86 sse simd intrinsics