Добавить 32-битные числа с плавающей запятой в регистры eax/ecx?

У меня есть пара 32-битных чисел, хранящихся в eax и ecx. Могу ли я напрямую загрузить их в FPU для работы с ними без предварительного сохранения в памяти? Это значительно упростит некоторый код компилятора, но fld Кажется, может работать только с памятью.

1 ответ

Решение

Нет, ты не можешь этого сделать. Что касается генерации кода, вы можете моделировать fld r32 например, достаточно легко выполнить следующую последовательность (оптимизировано по размеру;)):

push r32
fld [esp]
pop r32

Рассмотрите возможность использования SSE, если оно доступно, которое предлагает прямые перемещения GPR-XMM с использованием movd инструкция. Добавление двух регистров может выглядеть примерно так:

movd xmm0, eax
movd xmm1, ecx
addss xmm0, xmm1

Если вам нужен результат в георадаре, вы можете переместить его обратно, используя другой movd,

Другие вопросы по тегам