2015-07-22 2 views
2

Предположим, что регистр SSE содержит одно или несколько упакованных значений, не представляемых в виде 32-битного int (например, Inf или NaN), и вызывается преобразование в int, например _mm_cvtpd_epi32/cvtpd2dq.Исключения преобразования с плавающей запятой SSE/AVX

  1. Безопасно ли, т. Е. Определено ли поведение?
  2. Разрывает ли поток контроля или просто поднимет флаг?
  3. Каков результат преобразования, если он определен?

ответ

3

Ответы на эти вопросы в большинстве случаев могут быть найдены в Intel® 64 and IA-32 Architectures Software Developer’s Manual:

CVTPD2DQ

... Если преобразованный результат больше, чем максимальное целое число подписано двойного слова, то недопустимое исключение с плавающей запятой, и если это исключение замаскировано, возвращается неопределенное целочисленное значение (80000000H).

В этом разделе четко не указано, но это также относится к бесконечностям и NaNs. Итак:

  1. Да, поведение определено.
  2. В среде с плавающей запятой по умолчанию (т. Е. С недопустимым исключением, замаскированным в MXCSR), он не нарушает поток управления; он устанавливает только флаг.
  3. Результат 0x80000000.
Смежные вопросы