3

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

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

1 回答 1

4

这些问题的答案大多可以在英特尔® 64 和 IA-32 架构软件开发人员手册中找到:

CVTPD2DQ

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

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

  1. 是的,行为已定义。
  2. 在默认的浮点环境下(即MXCSR中屏蔽了无效异常),不会破坏控制流;它只设置一个标志。
  3. 结果是0x80000000
于 2015-07-22T19:53:21.020 回答