2013-04-17 25 views
0

我是新手,我很难找到它, 请告诉我什么是将 (截断为“(int)float_”)的好方法。四个压缩花车 我在XMM3注册为四个整数并将其存储 到内存(有些像“MOVAPS oword [EDX + 32],XMM3” 存储是明确的,但我不觉得只是如何转换)将xmm3中的四个浮点数转换为内存中的四个整数

+0

通过使用内在函数而不是尝试在原始asm中执行此操作,可以为自己节省很多悲伤。 –

回答

3

如果您重视您的理智(和空闲时间),请使用内在函数:

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

+0

alrrite'cvtps2dq xmm3,xmm3'工作,(我没有这样的东西(有些在sse助记符中丢失),但它存在) –

+1

获取AVX内部函数指南形式英特尔的AVX页面 - 它具有所有SSE内在函数和指令以及AVX当然)在Linux/Windows/Mac的独立实用程序中以很好的总结格式。 –