gpt4 book ai didi

assembly - 将 float 向量转换为 uint32 向量的最有效方法?

转载 作者:行者123 更新时间:2023-12-02 19:31:13 24 4
gpt4 key购买 nike

这是 this one 的后续问题。现在我想以相反的方向转换 float --> unsigned int。以下标量运算的最优且准确的向量序列是什么?

float x = ...
unsigned int res = (unsigned int)x;

最佳答案

这是基于旧的但有用的 Apple AltiVec-SSE 迁移文档中的示例,不幸的是,该文档现在不再可用 http://developer.apple.com :

inline __m128i _mm_ctu_ps(const __m128 f)
{
const __m128 two31 = _mm_set1_ps(0x1.0p31f);
const __m128 two32 = _mm_add_ps(two31, two31);
const __m128 zero = _mm_xor_ps(f,f);

// check for overflow before conversion to int
const __m128 overflow = _mm_cmpge_ps(f, two31);
const __m128 overflow2 = _mm_cmpge_ps(f, two32);
const __m128 subval = _mm_and_ps(overflow, two31);
const __m128i addval = _mm_slli_epi32((__m128i)overflow, 31);
__m128i result;

// bias the value to signed space if it is >= 2**31
f = _mm_sub_ps(f, subval);

// clip at zero
f = _mm_max_ps(f, zero);

// convert to int with saturation
result = _mm_cvtps_epi32(f); // rounding mode should be round to nearest

// unbias
result = _mm_add_epi32(result, addval);

// patch up the overflow case
result = _mm_or_si128(result, (__m128i)overflow2);

return result;
}

关于assembly - 将 float 向量转换为 uint32 向量的最有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9157373/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com