Что такое fx есть в "руководстве" в разделе 9.2. При взгляде на таблицу 9.5 может возникнуть желание сравнить дизассемблер при работе с long double и double.
Сравните дизассемблер long double foo() { return 0; } и double foo() { return 0; } по части всяких "х" и в т.ч. nfx. Я не хочу прямо говорить то, чего нет в документации. Паранойя немного, извините.
т.е. это влияет только на числа с плавающей запятой? для целочисленных аргументов нет разницы?
По таблице FX только у чисел с плавающей.
По первому вопросу можно еще посмотреть #include <emmintrin.h> __m128i foo(__m128i a, __m128i b) { return _mm_adds_epu8(a, b); }
Вот так из за нежелания делиться знаниями и порохонили Эльбрус
да ладно, экспериментальным путём всё равно узнаем. Когда нас останавливало отсутствие документации?
Кто-то просто считает это наглядным примером
nfx = 1 инструктирует аппаратуру, что если далее в процедуре есть вызовы, то если при вызове будет спилл регистрового окна, нужно позаботиться о сохранении старшей части xr регистров в память. Если в процедуре есть работа с xr регистрами (используются только для long double), этот флаг следует выставлять, иначе значение xr регистров после какого-нибудь вызова может испортиться. dbl = 1 говорит о том, что ALU операции в текущей процедуре, которые в нормальном случае модифицируют 32-битный регистр (sr), на самом деле будут модифицировать соответствующий 64-битный регистр (dr), заполняя старшую часть нулями. При dbl = 0 старшая часть этих 64-битных регистров не изменяется
спросите @a1batross (лучше в профильных местах)
Обсуждают сегодня