И небольшие комментарии.
В базовой версии удалось чуть ускорить вариант с развернутым умножением. Версию с таблицей квадратов разогнал на 3% и сократил на байт. Думаю примерно такие варианты и останутся. При желании можно наплодить промежуточных версий, которые по размеру и скорости будут между существующими, но не вижу в этом особого смысла.
Про обновление вероятностей с LUT (как раз пример одной из опций, которую можно реализовать). Несколько раз полностью переписал генератор таблицы, удалось его сократить до 23 байт и сильно ускорить (что неважно на фоне времени распаковки). А для z80 получается 21 байт, т.е. практически на нижней границе оценки автора распаковщика для z80 ("20+ bytes almost for sure"). Исходя из границ возможного это весьма хороший результат, но по критерию {ускорение/добавочный размер} не очень, разгон умножения более эффективен. Другое дело, что когда умножение уже разогнано до упора и хочется еще быстрее, тогда да. Если будут соревнования спортивных распаковщиков upkr, то можно туда добавить.
В целом повторю очевидную вещь: upkr - очень крутой упаковщик с очень медленной распаковкой. По сравнению со шринклером несомненный шаг в правильную сторону и по степени сжатия и по скорости и по размеру распаковщика, плюс еще и с полезными опциями упаковщика. Надеюсь все же в будущем появится что-то между rip и upkr.




Ответить с цитированием