Completed support for WSPAWN, CLONE, and JALRS

This commit is contained in:
felsabbagh3
2019-02-14 03:32:58 -05:00
parent 39003073f9
commit 6c493cc4de
12 changed files with 408 additions and 9677 deletions

View File

@@ -431,7 +431,6 @@ void Instruction::executeOn(Warp &c) {
break;
case SYS_INST:
temp = reg[rsrc[0]];
std::cout << "STORING IN CSR: " << std::hex << reg[rsrc[0]] << " csr#: " << (immsrc & 0x00000FFF) << "\n";
switch (func3)
{
case 1:
@@ -440,7 +439,6 @@ void Instruction::executeOn(Warp &c) {
reg[rdest] = c.csr[immsrc & 0x00000FFF];
}
std::cout << "FOR SURE WRITING TO CSR#: " << (immsrc & 0x00000FFF) << " value: " << temp << "\n";
c.csr[immsrc & 0x00000FFF] = temp;
break;
@@ -495,7 +493,6 @@ void Instruction::executeOn(Warp &c) {
default:
break;
}
std::cout << "READING FROM CSR: " << reg[rdest] << " csr#: " << (immsrc & 0x00000FFF) << "\n";
break;
case TRAP:
std::cout << "INTERRUPT TRAP\n";
@@ -510,16 +507,16 @@ void Instruction::executeOn(Warp &c) {
case 0:
// WSPAWN
D(0, "Spawning a new warp.");
std::cout << "SIZE: " << c.core->w.size() << "\n";
// std::cout << "SIZE: " << c.core->w.size() << "\n";
for (unsigned i = 0; i < c.core->w.size(); ++i)
{
std::cout << "WHATTT\n";
// std::cout << "WHATTT\n";
Warp &newWarp(c.core->w[i]);
std::cout << "STARTING\n";
// std::cout << "STARTING\n";
if (newWarp.spawned == false) {
std::cout << "ABOUT TO START\n";
newWarp.pc = reg[rsrc[0]];
newWarp.reg[0][rdest] = reg[rsrc[1]];
// std::cout << "ABOUT TO START\n";
newWarp.pc = reg[rsrc[0]];
newWarp.reg[0] = reg;
newWarp.csr = c.csr;
newWarp.activeThreads = 1;
newWarp.supervisorMode = false;
@@ -530,8 +527,8 @@ void Instruction::executeOn(Warp &c) {
break;
case 5:
// CLONE
std::cout << "CLONE\n";
std::cout << "CLONING THREAD: " << reg[rsrc[0]] << "\n";
// std::cout << "CLONE\n";
// std::cout << "CLONING THREAD: " << reg[rsrc[0]] << "\n";
c.reg[reg[rsrc[0]]] = reg;
break;
case 6:
@@ -540,8 +537,8 @@ void Instruction::executeOn(Warp &c) {
reg[rdest] = c.pc;
if (!pcSet) nextPc = reg[rsrc[0]];
pcSet = true;
std::cout << "ACTIVE_THREDS: " << rsrc[1] << " val: " << reg[rsrc[1]] << "\n";
std::cout << "nextPC: " << rsrc[0] << " val: " << reg[rsrc[0]] << "\n";
// std::cout << "ACTIVE_THREDS: " << rsrc[1] << " val: " << reg[rsrc[1]] << "\n";
// std::cout << "nextPC: " << rsrc[0] << " val: " << reg[rsrc[0]] << "\n";
break;
default:
cout << "ERROR: UNSUPPORTED GPGPU INSTRUCTION " << *this << "\n";