【问题标题】:converting four floats in xmm3 to four ints in memory将 xmm3 中的四个浮点数转换为内存中的四个整数
【发布时间】:2013-04-17 07:18:21
【问题描述】:

我是sse的新手,我很难找到它, 请告诉我什么是转换的好方法 (截断如“(int)float_”)四个压缩浮点数 我在 xmm3 中注册成四个整数并存储 它进入内存(有些像“movaps oword [edx+32], xmm3” 存储很清楚,但我不知道如何转换)

【问题讨论】:

  • 您可以通过使用内在函数而不是尝试在原始 asm 中执行此操作来为自己省去很多麻烦。

标签: assembly x86 sse sse2


【解决方案1】:

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

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

【讨论】:

  • alrrite cvtps2dq xmm3, xmm3 工作,(我认为没有这样的东西(在 sse 助记符中有些丢失)但它确实存在)
  • 从 Intel 的 AVX 页面获取 AVX 内在函数指南 - 它在 Linux/Windows/Mac 的独立实用程序中以漂亮的摘要格式包含所有 SSE 内在函数和指令(当然还有 AVX)。
猜你喜欢
  • 1970-01-01
  • 2015-04-10
  • 1970-01-01
  • 1970-01-01
  • 2014-10-07
  • 2022-11-11
  • 2012-12-22
  • 1970-01-01
  • 2020-10-01
相关资源
最近更新 更多