我正在开发一个将中间表示(IR)转换为程序集的解释器。但是,我怀疑是否有必要将每条指令单独转换为汇编,如下例所示。此外,我希望收到基于所提供代码的推荐和优化建议。有关如何改进装配转换流程并使其更加高效的任何指导或见解。
#include <stdio.h>
#include <stdlib.h>
typedef enum {
OP_ADD,
OP_SUB,
OP_DIV,
OP_MUL,
NUM_OPCODES
} bytecode_opcode;
void convert_add() { printf("add rax, rbx\n"); }
void convert_sub() { printf("sub rax, rbx\n"); }
void convert_div() { printf("div rbx\n"); }
void convert_mul() { printf("mul rbx\n"); }
typedef void (*conversion_func)();
conversion_func conversion_table[NUM_OPCODES] = {
convert_add,
convert_sub,
convert_div,
convert_mul
};
void convert_to_x64(bytecode_opcode instr) {
if (instr >= 0 && instr < NUM_OPCODES) {
conversion_func func = conversion_table[instr];
func();
} else {
printf("Opcode inválido\n");
}
}
int main() {
convert_to_x64(OP_ADD);
convert_to_x64(OP_MUL);
convert_to_x64(10);
return 0;
}