Как мне обновить 3dnow! Значения MMX?
Я пытаюсь возродить старую игру Win32, которая использует 3DNow! набор инструкций для создания 3D-рендеринга. На современных ОС, таких как Win7 - Win10 инструкции, такие как FPADD, не разрешены, и программа выдает исключение.
Начиная с числа 3DNow! инстукции, используемые игрой, очень ограничены, в моей программе VS2008 MFC я пытался использовать векторную обработку исключений, чтобы получить значение регистров MMX, эмулировать 3DNow! инструкции по коду C и отодвинуть значения обратно в процессор 3DNow! зарегистрирует.
Моя проблема заключается в том, что независимо от того, как я пытаюсь обновить значения регистра MMX (то есть для этой игры 8 пар 32-битных значений float, от mm0 до mm7) при следующем исключении значения регистра кажутся неизменными.
Что я уже пробовал:
Кодировка, которую я использовал, выглядит так::
float fval = emulated_instruction_value();
_ассемблер {
movq fval, мм0
}
Код, вероятно, неверен для неправильных типов данных, но меня озадачивает тот факт, что значения mmx никогда не обновляются.
** обновленный **
Некоторые более простые коды показали, что, по-видимому, когда я использую moveq для получения значений mmx, я получаю правильные значения, но когда я меняю порядок операндов и пытаюсь обновить значение регистра mmx, мне это не удается, его значение остается неизменным.