Здравствуйте, VVVa, Вы писали:
VVV>кстати довольно много приходится писать ...
Ну вручную заниматься распределением регистров довольно неблагодарное занятие. Как тут уже писалось, задача Register Allocation это NP-полная задача.
Есть два популярных алгоритма регалока: Linear Scan и Graph Coloring. Первый прост в реализации и быстрее в работе, но второй более эффективен.
Для копирования из памяти в память в любом случае нужен регистр. В твоем случае ты под это выделил отдельный scratch регистр,
но тогда он изымается из свободных регистров, соответственно давление на регистры увеличивается, становится больше спиллов(освобождение регистров через их сохранение в память).
Я бы посоветовал генерировать сначала LLVM IR файл и потом скармливать его LLVM llc тулзе для генерации машинного кода.