diff --git a/src/include/core.h b/src/include/core.h index ce719bc1..d447b7d3 100644 --- a/src/include/core.h +++ b/src/include/core.h @@ -6,6 +6,7 @@ #include #include +#include #include "types.h" #include "archdef.h" @@ -47,6 +48,12 @@ namespace Harp { #endif }; + // Entry in the IPDOM Stack + struct DomStackEntry { + std::vector tmask; + Word pc; + }; + class Core { public: Core(const ArchDef &a, Decoder &d, MemoryUnit &mem, Word id=0); @@ -67,6 +74,9 @@ namespace Harp { std::vector > > reg; std::vector > > pred; + std::vector tmask; + std::stack domStack; + std::vector shadowReg; std::vector shadowPReg; diff --git a/src/include/instruction.h b/src/include/instruction.h index ed24eeab..d421cd6a 100644 --- a/src/include/instruction.h +++ b/src/include/instruction.h @@ -30,7 +30,8 @@ namespace Harp { JALI, JALR, JMPI, JMPR, CLONE, JALIS, JALRS, JMPRT, LD, ST, LDI, RTOP, ANDP, ORP, XORP, NOTP, ISNEG, ISZERO, HALT, TRAP, JMPRU, SKEP, RETI, TLBRM, - ITOF, FTOI, FADD, FSUB, FMUL, FDIV, FNEG, WSPAWN }; + ITOF, FTOI, FADD, FSUB, FMUL, FDIV, FNEG, WSPAWN, + SPLIT, JOIN }; enum ArgClass { AC_NONE, AC_2REG, AC_2IMM, AC_3REG, AC_3PREG, AC_3IMM, AC_3REGSRC, AC_1IMM, AC_1REG, AC_3IMMSRC, AC_PREG_REG, AC_2PREG, AC_2REGSRC diff --git a/src/instruction.cpp b/src/instruction.cpp index 61ec008e..bf7f0c1a 100644 --- a/src/instruction.cpp +++ b/src/instruction.cpp @@ -81,6 +81,8 @@ Instruction::InstTableEntry Instruction::instTable[] = { {"fdiv", false, false, false, false, AC_3REG, ITYPE_FPDIV }, {"fneg", false, false, false, false, AC_2REG, ITYPE_FPBASIC }, {"wspawn", false, false, true, false, AC_2REGSRC, ITYPE_NULL }, + {"split", false, false, true, false, AC_NONE, ITYPE_NULL }, + {"join", false, false, true, false, AC_NONE, ITYPE_NULL }, {NULL,false,false,false,false,AC_NONE,ITYPE_NULL}/////// End of table. };