eRegPushImm2,
eRegPushImm3,
eRegPushImm4,
- eRegPush2Imm,
eRegPushMem,
eRegPushMem2,
eRegPushMem3,
#define RegPushImm2 (f_instr)eRegPushImm2
#define RegPushImm3 (f_instr)eRegPushImm3
#define RegPushImm4 (f_instr)eRegPushImm4
-#define RegPush2Imm (f_instr)eRegPush2Imm
#define RegPushMem (f_instr)eRegPushMem
#define RegPushMem2 (f_instr)eRegPushMem2
#define RegPushMem3 (f_instr)eRegPushMem3
gw_out(" {-M}%-14"UINT_F"{0}", instr->m_val2);
gw_out("\n");
break;
- case eRegPush2Imm:
- gw_out("{Y}┃{0}{-}% 4lu{0}: RegPush2Imm ", j);
- gw_out(" {-R}%-14p{0}", instr->m_val);
- gw_out(" {-M}%-14"UINT_F"{0}", instr->m_val2);
- gw_out("\n");
- break;
case eRegPushMem:
gw_out("{Y}┃{0}{-}% 4lu{0}: RegPushMem ", j);
gw_out(" {-R}%-14"UINT_F"{0}", instr->m_val);
__attribute__((hot)) void
vm_prepare(const VM *vm, m_bit *prepare_code) { // lgtm [cpp/use-of-goto]
static const void *dispatch[] = {
- &®setimm, &®pushimm, &®pushfloat, &®pushother, &®pushaddr, &®pushtwoimm,
+ &®setimm, &®pushimm, &®pushfloat, &®pushother, &®pushaddr,
&®pushmem, &®pushmemfloat, &®pushmemother, &®pushmemaddr,
&®pushmemderef, &&pushnow, &&baseint, &&basefloat, &&baseother,
&&baseaddr, &®toreg, &®toregother, &®toregother2, &®toregaddr, &®toregderef,
*(m_uint **)reg = &VAL;
reg += SZ_INT;
DISPATCH()
- regpushtwoimm:
- *(m_uint *)reg = VAL;
- *(m_uint *)(reg + SZ_INT)= VAL2;
- reg += SZ_INT*2;
- DISPATCH()
regpushmem:
*(m_uint *)reg = *(m_uint *)(mem + IVAL);
reg += SZ_INT;
} else {
static void *_dispatch[] = {
- &&_regsetimm, &&_regpushimm, &&_regpushfloat, &&_regpushother, &&_regpushaddr, &&_regpushtwoimm,
+ &&_regsetimm, &&_regpushimm, &&_regpushfloat, &&_regpushother, &&_regpushaddr,
&&_regpushmem, &&_regpushmemfloat, &&_regpushmemother, &&_regpushmemaddr,
&&_regpushmemderef, &&_pushnow, &&_baseint, &&_basefloat, &&_baseother,
&&_baseaddr, &&_regtoreg, &&_regtoregother, &&_regtoregother2, &&_regtoregaddr, &&_regtoregderef,
PREPARE(regpushfloat);
PREPARE(regpushother);
PREPARE(regpushaddr);
- PREPARE(regpushtwoimm);
PREPARE(regpushmem);
PREPARE(regpushmemfloat);
PREPARE(regpushmemother);
instr->m_val = next->m_val;
next->opcode = eNoOp;
}
- } else if (instr->opcode == eRegPushImm) {
- const Instr next = (Instr)vector_at(v, i+1);
- if (next->opcode == eRegPushImm) {
- instr->opcode = eRegPush2Imm;
- instr->m_val2 = next->m_val;
- next->opcode = eNoOp;
- }
} else if (instr->opcode == eUnroll2) {
const Instr unroll = (Instr)instr->m_val;
const m_uint pc = vector_find(v, (m_uint)unroll);