Что, совсем никак оптимизировать нельзя? Битовые - в маски, вещественные, если размерность позволяет в int16 или uint16 перевести
Тут проблема не только в количестве доступных регистров, помимо этого мешает разовое присвоение переменных. Выходит что блок выходной может только один, а входных сколько угодно. Это приводит к тому что каждая математическая функция, требует создания отдельного под него блока.