2013-04-17 51 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的獨立實用程序中以很好的總結格式。 –