【发布时间】:2013-04-17 07:18:21
【问题描述】:
我是sse的新手,我很难找到它, 请告诉我什么是转换的好方法 (截断如“(int)float_”)四个压缩浮点数 我在 xmm3 中注册成四个整数并存储 它进入内存(有些像“movaps oword [edx+32], xmm3” 存储很清楚,但我不知道如何转换)
【问题讨论】:
-
您可以通过使用内在函数而不是尝试在原始 asm 中执行此操作来为自己省去很多麻烦。
我是sse的新手,我很难找到它, 请告诉我什么是转换的好方法 (截断如“(int)float_”)四个压缩浮点数 我在 xmm3 中注册成四个整数并存储 它进入内存(有些像“movaps oword [edx+32], xmm3” 存储很清楚,但我不知道如何转换)
【问题讨论】:
如果您重视自己的理智(和空闲时间),请使用内在函数:
int32_t *dest;
__m128 vf = _mm_set_ps(4.0f, 3.0f, 2.0f, 1.0f);
__m128i vi = _mm_cvttps_epi32(vf); // 4 x float -> 4 x int (with truncation)
_mm_store_epi32(dest, vi); // NB: use _mm_storeu_epi32 if `dest` not aligned
如果由于某种原因必须使用 asm,_mm_cvttps_epi32 的相应指令是 cvttps2dq。
【讨论】:
cvtps2dq xmm3, xmm3 工作,(我认为没有这样的东西(在 sse 助记符中有些丢失)但它确实存在)