CAR: added stack operations, call, ret, jmp and some other random stuff
This commit is contained in:
55
load_store.c
55
load_store.c
@ -160,3 +160,58 @@ DEFINE_OP(stj)
|
||||
|
||||
OP_RETURN_NORMAL
|
||||
}
|
||||
|
||||
DEFINE_OP(push)
|
||||
{
|
||||
ls_instruction_t i = convert_raw2ls(ri);
|
||||
|
||||
_push(state->gprs[i.reg], state);
|
||||
|
||||
OP_RETURN_NORMAL
|
||||
}
|
||||
|
||||
DEFINE_OP(pushi)
|
||||
{
|
||||
ls_instruction_t i = convert_raw2ls(ri);
|
||||
|
||||
_push(i.imm, state);
|
||||
|
||||
OP_RETURN_NORMAL
|
||||
}
|
||||
|
||||
DEFINE_OP(pop)
|
||||
{
|
||||
ls_instruction_t i = convert_raw2ls(ri);
|
||||
|
||||
uint32_t v;
|
||||
|
||||
_pop(&v, state);
|
||||
|
||||
state->gprs[i.reg] = v;
|
||||
|
||||
OP_RETURN_NORMAL
|
||||
}
|
||||
|
||||
DEFINE_OP(sth)
|
||||
{
|
||||
ls_instruction_t i = convert_raw2ls(ri);
|
||||
|
||||
uint32_t addr = state->pc + state->gprs[i.reg];
|
||||
uint32_t v = (i.imm >> 21) & 0x7ff;
|
||||
|
||||
memcpy(state->memory + addr, &v, sizeof(v));
|
||||
|
||||
OP_RETURN_NORMAL
|
||||
}
|
||||
|
||||
DEFINE_OP(stk)
|
||||
{
|
||||
ls_instruction_t i = convert_raw2ls(ri);
|
||||
|
||||
uint32_t addr = state->sp + state->gprs[i.reg];
|
||||
uint32_t v = (i.imm >> 21) & 0x7ff;
|
||||
|
||||
memcpy(state->memory + addr, &v, sizeof(v));
|
||||
|
||||
OP_RETURN_NORMAL
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user