Портирование кода MASM5 в Quake 2 на GAS - неожиданные результаты рендеринга - PullRequest
3 голосов
/ 19 мая 2019

Я портирую встроенный код сборки Quake 2 для MSVC на MASM, а затем на GAS (для использования с MinGW). Конкретный рассматриваемый код предназначен для рисунка скина (R_PolysetCalcGradients для тех, кто хочет посмотреть его). Код почти «работает», что происходит, если кажется, что кожа неправильно растянута по модели.

Incorrect skin stretching Несколько интересных вещей, которые я заметил, - это когда я запускаю objdump -dwrC r_polysa.obj> r_polysa.masm и то же самое для версии GAS, код в основном похож, за исключением того факта, что fsubp и fsubrp были заменены в MASM. Обратите внимание, не операнды (я уже знаю об этой проблеме в ГАЗ). Swapped fsubp/fsubrp На рисунке левая сторона - версия GAS, правая сторона - версия MASM. Исходный код MASM (и, следовательно, то, что у меня есть в GAS) - это то, что должно быть слева. Я не уверен, почему MASM явно меняет это или objdump сообщает об этом неправильно. Однако, если я поменяю местами, это не решит проблему. Это просто переворачивается другим неправильным способом. Still wrong skin stretching

Я упоминаю этот своп FSUBP / FSUBRP, потому что это было проблемой при переносе встроенного кода ASM смешивания частиц. У этого был один вызов, чтобы использовать FSUBRP в версии MASM, objdump сообщил, что теперь это FSUBP, и мне пришлось изменить его на FSUBP в версии GAS, чтобы он работал! Я не понимаю, почему это происходит?

В любом случае, я новичок в сборке, но понимаю некоторые основы и немного читаю. Очевидно, математика здесь не совсем верна, но кажется, что так и должно быть. Я не знаю, как или что делать дальше. Как мне исправить и отладить эту проблему?

Репозиторий кода, над которым я работаю, находится по адресу: https://bitbucket.org/neozeed/q2dos/commits/branch/win32_asm (в частности, ветка Win32_ASM). Я работаю с файлами gas \ r_polysa.s и ref_soft \ r_polysa.asm .

1 Ответ

1 голос
/ 20 мая 2019

Операционные коды были изменены на обратные, поэтому после fsubp произошла ошибка с GAS и fsubrp.Был еще один дополнительный вопрос, не связанный с этим вопросом.Для желающих см .: https://bitbucket.org/neozeed/q2dos/commits/f5bf93e3a78e112ae1f766606471a6c5e67283d4

...