Реализация регистров в виртуальной машине C

Я написал виртуальную машину на C в качестве хобби-проекта. Эта виртуальная машина выполняет код, очень похожий на синтаксическую сборку Intel x86. Проблема в том, что регистры, которые использует эта виртуальная машина, являются регистрами только по имени. В моем коде виртуальной машины регистры используются так же, как регистры x86, но машина хранит их в системной памяти. Нет улучшений производительности при использовании регистров в системной памяти в коде виртуальной машины. (Я думал, что одно только местоположение несколько повысит производительность, но на практике ничего не изменилось.)

При интерпретации программы эта виртуальная машина сохраняет аргументы инструкций как указатели. Это позволяет виртуальной инструкции принимать в качестве аргумента адрес памяти, постоянное значение, виртуальный регистр или что-нибудь еще.

Поскольку аппаратные регистры не имеют адресов, я не могу придумать, как на самом деле хранить регистры моей виртуальной машины в аппаратных регистрах. Использование ключевого слова register в моем типе виртуального регистра не работает, потому что мне нужно получить указатель на виртуальный регистр, чтобы использовать его в качестве аргумента. Есть ли способ сделать эти виртуальные регистры более похожими на их собственные аналоги?

Мне вполне комфортно вникать в сборку, если это необходимо. Я' Я знаю, что JIT-компиляция этого кода виртуальной машины может позволить мне использовать аппаратные регистры, но я хотел бы иметь возможность использовать их и с моим интерпретируемым кодом.

6
задан Seki 11 June 2015 в 12:01
поделиться