🔘63 asm-функции в 21 файле, но 65% прироста даёт одна
D_DrawSpans8 (растеризация стен). Ещё 22% от surface caching (R_DrawSurfaceBlock8), 11% — отрисовка моделей (D_Polyset*).🔘Главный трюк: перспективно-корректная текстура требует деления, а FDIV на Pentium занимает 39 тактов. Абраш запускает деление для следующего блока из 8 пикселей в начале текущего, и пока FPU считает, целочисленные пайплайны U/V рисуют пиксели. В коде комментарий: «this is what we've gone to all this trouble to overlap».
🔘
TransformVector — пример работы с x87 FPU. Компилятор считает три dot product последовательно и стоит на каждом fadd (ждёт результат fmul 3 такта). Абраш считает три dot product параллельно, перемешивая операции через бесплатный fxch. Ноль столлов.🔘Ещё: self-modifying code (база colormap вшивается прямо в инструкции), полная развёртка циклов, jump table вместо ветвления на последнем блоке спана,
ja вместо двух сравнений для clamp.В общем, лучше оригинал почитайте, там подробнее и понятнее.
@make_game
