我的项目有一个VM,可以执行从特定领域语言编译的字节码。我正在寻找提高字节码执行时间的方法。首先,我想看看是否有一种方法可以在尝试机器代码编译之前简单地改进字节码解释器。
解释器的主循环如下:
解释器的主循环如下:
while(true)
{
uint8_t cmd = *code++;
switch( cmd )
{
case op_1: ...; break;
...
}
}
问题:有没有更快的方法来实现这个循环,而不需要使用汇编语言?
我所看到的一个选择是使用GCC特定的动态goto和标签地址。与在每个case结尾处的break
不同,我可以直接跳转到下一条指令。我希望优化器能够为我完成这个任务,但是查看反汇编代码后发现它并没有这样做:大多数op_codes的末尾都有一个重复的常量跳转。
如果相关,VM是一个简单的基于寄存器的机器,具有浮点和整数寄存器(每种8个)。没有堆栈,只有全局堆(语言不是那么复杂)。