Add inl and del opcodes.

This commit is contained in:
David Given 2016-10-02 14:44:21 +02:00
parent b298c27c63
commit bf73fcdb64

View file

@ -340,6 +340,24 @@ static struct ir* extract_block_refs(struct basicblock* bb)
return outir;
}
static void change_by(struct ir* address, int amount)
{
appendir(
new_ir2(
IR_STORE, EM_wordsize,
address,
new_ir2(
IR_ADD, EM_wordsize,
new_ir1(
IR_LOAD, EM_wordsize,
address
),
new_wordir(amount)
)
)
);
}
static void insn_ivalue(int opcode, arith value)
{
switch (opcode)
@ -387,6 +405,14 @@ static void insn_ivalue(int opcode, arith value)
);
break;
case op_inl:
change_by(new_localir(value), 1);
break;
case op_del:
change_by(new_localir(value), -1);
break;
case op_loc:
push(
new_wordir(value)