Потратил довольно много времени на эксперименты по повышению быстродействия ВМ, переписав при этом код основной функции трижды.
На коротком тесте удалось повысить быстродействие почти втрое.
Способы довольно простые и известные:
* убрал из основного цикла все лишнее: фактически остался только инкремент счетчика команд и большой оператор выбор-вариант (switch-case)
* отказался от использования битовых полей, вместо них битовые маски и битовые операции. Кроме того, что битовые поля медленнее, они еще и имеют разную реализацию в разных компиляторах. А это может стать проблемой.
* добавил в ВМ набор быстрых команд: это команды, которые выполняются в первых трех регистрах ВМ, то есть нет необходимости тратить время на полную расшифровку команды и извлечению из нее индексов регистров-аргументов.

Дополнительно поэкспериментировал с ассембером. Думаю, что очень много с его помощью уже не выиграть. Возможно будет прирост в десятки процентов, но уже не в разы.