Create funzioni check registri
This commit is contained in:
parent
b881b7f9a2
commit
7eb95ac130
26
vm/vm.cpp
26
vm/vm.cpp
@ -128,7 +128,24 @@ void VM::initVariables(void) {
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
bool VM::dstRegCheck(uint8_t reg) {
|
||||
if (reg == IP || reg == SP || reg == RP) {
|
||||
DBG_ERROR(("Invalid register!\n"));
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
bool VM::srcDstRegCheck(uint8_t dst, uint8_t src) {
|
||||
if (dst == IP || dst == SP || dst == RP) {
|
||||
DBG_ERROR(("Invalid register!\n"));
|
||||
return false;
|
||||
}
|
||||
if (src == IP || src == SP || src == RP) {
|
||||
DBG_ERROR(("Invalid register!\n"));
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
/*
|
||||
INSTRUCTIONS IMPLEMENTATIONS
|
||||
*/
|
||||
@ -142,10 +159,8 @@ bool VM::execMOVI(void) {
|
||||
dst = as.code[regs[IP] + 1];
|
||||
imm = *((uint16_t *)&as.code[regs[IP] + 2]);
|
||||
DBG_INFO(("MOVI %s, 0x%x\n", getRegName(dst), imm));
|
||||
if (dst == IP || dst == SP || dst == RP) {
|
||||
DBG_ERROR(("MOVI: Invalid register!\n"));
|
||||
if (!dstRegCheck(dst))
|
||||
return false;
|
||||
}
|
||||
regs[dst] = imm;
|
||||
return true;
|
||||
}
|
||||
@ -160,7 +175,8 @@ bool VM::execMOVR(void) {
|
||||
dst = as.code[regs[IP] + 1] >> 4;
|
||||
src = as.code[regs[IP] + 1] & 0b00001111;
|
||||
DBG_INFO(("MOVR %s, %s\n", getRegName(dst), getRegName(src)));
|
||||
if (dst == IP || src == IP || dst == SP || src == SP || dst == RP || src== RP) {
|
||||
if (dst == IP || src == IP || dst == SP || src == SP || dst == RP ||
|
||||
src == RP) {
|
||||
DBG_ERROR(("MOVR: Invalid register!\n"));
|
||||
return false;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user