Implemented unimplemented instructions (issue #3)
This commit is contained in:
@@ -187,6 +187,9 @@ void Instruction::executeOn(Core &c) {
|
||||
case NEG: reg[rdest] = -(Word_s)reg[rsrc[0]];
|
||||
reg[rdest].trunc(wordSz);
|
||||
break;
|
||||
case NOT: reg[rdest] = ~(Word_s)reg[rsrc[0]];
|
||||
reg[rdest].trunc(wordSz);
|
||||
break;
|
||||
case ADDI: reg[rdest] = reg[rsrc[0]] + immsrc;
|
||||
reg[rdest].trunc(wordSz);
|
||||
break;
|
||||
@@ -218,6 +221,9 @@ void Instruction::executeOn(Core &c) {
|
||||
case JALI: reg[rdest] = c.pc;
|
||||
c.pc += immsrc;
|
||||
break;
|
||||
case JALR: reg[rdest] = c.pc;
|
||||
c.pc = reg[rsrc[0]];
|
||||
break;
|
||||
case JMPR: c.pc = reg[rsrc[0]];
|
||||
break;
|
||||
case CLONE: c.reg[reg[rsrc[0]]] = reg;
|
||||
@@ -226,6 +232,10 @@ void Instruction::executeOn(Core &c) {
|
||||
reg[rdest] = c.pc;
|
||||
c.pc += immsrc;
|
||||
break;
|
||||
case JALRS: nextActiveThreads = reg[rsrc[0]];
|
||||
reg[rdest] = c.pc;
|
||||
c.pc = reg[rsrc[0]];
|
||||
break;
|
||||
case JMPRT: nextActiveThreads = 1;
|
||||
c.pc = reg[rsrc[0]];
|
||||
break;
|
||||
@@ -256,6 +266,8 @@ void Instruction::executeOn(Core &c) {
|
||||
break;
|
||||
case ORP: pReg[pdest] = pReg[psrc[0]] | pReg[psrc[1]];
|
||||
break;
|
||||
case XORP: pReg[pdest] = pReg[psrc[0]] != pReg[psrc[1]];
|
||||
break;
|
||||
case ISNEG: pReg[pdest] = (1ll<<(wordSz*8 - 1))®[rsrc[0]];
|
||||
break;
|
||||
case HALT: c.activeThreads = 0;
|
||||
|
||||
Reference in New Issue
Block a user