簡體   English   中英

從__m128轉換為__m128i會導致錯誤的值

[英]Converting from __m128 to __m128i results in wrong value

我需要將浮點向量(__m128)轉換為整數向量(__m128i),並且我正在使用_mm_cvtps_epi32 ,但沒有得到期望的值。 這是一個非常簡單的示例:

__m128 test = _mm_set1_ps(4.5f);
__m128i test_i = _mm_cvtps_epi32(test);

我得到的調試器輸出:

(lldb) po test
 ([0] = 4.5, [1] = 4.5, [2] = 4.5, [3] = 4.5)
(lldb) po test_i
 ([0] = 17179869188, [1] = 17179869188)
(lldb) 

如您所見,結果整數是.. 17179869188? 從4.5開始? 為什么只有兩個值? _mm_cvtps_epi32應該將4個壓縮的32位浮點值轉換為4個壓縮的32位整數。

在此示例中,調試器將__m128i值解釋為兩個64位整數,而不是您期望的四個32位整數。 實際的轉換是正確的。

在代碼中,您需要明確指定如何解釋SIMD值,例如: test_i.m128i_i32[0]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM