Beginnings of ipdom support.
This commit is contained in:
@@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <stack>
|
||||||
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "archdef.h"
|
#include "archdef.h"
|
||||||
@@ -47,6 +48,12 @@ namespace Harp {
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Entry in the IPDOM Stack
|
||||||
|
struct DomStackEntry {
|
||||||
|
std::vector<bool> tmask;
|
||||||
|
Word pc;
|
||||||
|
};
|
||||||
|
|
||||||
class Core {
|
class Core {
|
||||||
public:
|
public:
|
||||||
Core(const ArchDef &a, Decoder &d, MemoryUnit &mem, Word id=0);
|
Core(const ArchDef &a, Decoder &d, MemoryUnit &mem, Word id=0);
|
||||||
@@ -67,6 +74,9 @@ namespace Harp {
|
|||||||
std::vector<std::vector<Reg<Word> > > reg;
|
std::vector<std::vector<Reg<Word> > > reg;
|
||||||
std::vector<std::vector<Reg<bool> > > pred;
|
std::vector<std::vector<Reg<bool> > > pred;
|
||||||
|
|
||||||
|
std::vector<bool> tmask;
|
||||||
|
std::stack<DomStackEntry> domStack;
|
||||||
|
|
||||||
std::vector<Word> shadowReg;
|
std::vector<Word> shadowReg;
|
||||||
std::vector<bool> shadowPReg;
|
std::vector<bool> shadowPReg;
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,8 @@ namespace Harp {
|
|||||||
JALI, JALR, JMPI, JMPR, CLONE, JALIS, JALRS,
|
JALI, JALR, JMPI, JMPR, CLONE, JALIS, JALRS,
|
||||||
JMPRT, LD, ST, LDI, RTOP, ANDP, ORP, XORP, NOTP, ISNEG,
|
JMPRT, LD, ST, LDI, RTOP, ANDP, ORP, XORP, NOTP, ISNEG,
|
||||||
ISZERO, HALT, TRAP, JMPRU, SKEP, RETI, TLBRM,
|
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 {
|
enum ArgClass {
|
||||||
AC_NONE, AC_2REG, AC_2IMM, AC_3REG, AC_3PREG, AC_3IMM, AC_3REGSRC,
|
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
|
AC_1IMM, AC_1REG, AC_3IMMSRC, AC_PREG_REG, AC_2PREG, AC_2REGSRC
|
||||||
|
|||||||
@@ -81,6 +81,8 @@ Instruction::InstTableEntry Instruction::instTable[] = {
|
|||||||
{"fdiv", false, false, false, false, AC_3REG, ITYPE_FPDIV },
|
{"fdiv", false, false, false, false, AC_3REG, ITYPE_FPDIV },
|
||||||
{"fneg", false, false, false, false, AC_2REG, ITYPE_FPBASIC },
|
{"fneg", false, false, false, false, AC_2REG, ITYPE_FPBASIC },
|
||||||
{"wspawn", false, false, true, false, AC_2REGSRC, ITYPE_NULL },
|
{"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.
|
{NULL,false,false,false,false,AC_NONE,ITYPE_NULL}/////// End of table.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user