Здравствуйте, товарищи.
Имеется старенький arm926, на нём потребовалось запилить определённый алгоритм.
Основная тяжеловесная часть данного алгоритма делают следующее:
На входе - 32-битное слово (лежит в регистре R0), в памяти (время доступа - 1 такт) лежат 4 таблицы по 256 однобайтовых элементов каждая.
-Выковыриваем из входного слова отдельно все 4 байта
-Из таблицы 1 дёргаем байт, позиция которого определяется первым выдернутым байтом входного слова
-Из таблицы 2 дёргаем байт, позиция которого определяется вторым выдернутым байтом входного слова
-Из таблицы 3 дёргаем байт, позиция которого определяется третьим выдернутым байтом входного слова
-Из таблицы 4 дёргаем байт, позиция которого определяется четвёртым выдернутым байтом входного слова
-Из четырёх надёрганных байтов формируем выходное 32-битное слово
Реализация в лоб занимает у меня 11 команд (4 логических И с маской, затем 4 загрузки из таблиц в регистры, затем 3 сложения, чтобы получить выходное слово. Сдвиги не учитываю, так как они прилеплены к другим командам и даются "бесплатно")
Есть ли предложения по сокращению количества команд, если алгоритмическая оптимизация недоступна (то есть только грамотным подбором ассемблерных инструкций) ?
Очень надеюсь, что есть опытные сограждане.