SSE / AVX浮点转换异常

时间:2015-07-22 18:47:07

标签: floating-point sse avx floating-point-exceptions

假设SSE寄存器包含一个或多个不能表示为32位int的压缩值(例如InfNaN),并且调用convert-to-int,例如{ {1}} / _mm_cvtpd_epi32

  1. 是否安全,即行为是否定义?
  2. 它会破坏控制流程,还是仅仅举起一面旗帜?
  3. 转换的结果是什么?如果已定义?

1 个答案:

答案 0 :(得分:3)

这些问题的答案大多可以在Intel® 64 and IA-32 Architectures Software Developer’s Manual

中找到
  

<强> CVTPD2DQ

     

...   如果转换结果大于最大有符号双字整数,则引发浮点无效异常,如果屏蔽此异常,则返回不定整数值(80000000H)。

本节未明确说明,但这也适用于无穷大和NaN。所以:

  1. 是的,行为已定义。
  2. 在默认浮点环境下(即在MXCSR中屏蔽了无效异常),它不会破坏控制流;它只设置了一面旗帜。
  3. 结果为0x80000000