Cleaned up simX for much better performance
This commit is contained in:
@@ -45,9 +45,8 @@ ostream &Harp::operator<<(ostream& os, Instruction &inst) {
|
||||
// else os << "#0x" << hex << inst.immsrc;
|
||||
// }
|
||||
|
||||
os << instTable[inst.op].opString;
|
||||
D(3, instTable[inst.op].opString << ';\n');
|
||||
|
||||
os << ';';
|
||||
return os;
|
||||
}
|
||||
|
||||
@@ -353,7 +352,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
/* If I try to execute a privileged instruction in user mode, throw an
|
||||
exception 3. */
|
||||
if (instTable[op].privileged && !c.supervisorMode) {
|
||||
std::cout << "INTERRUPT SUPERVISOR\n";
|
||||
D(3, "INTERRUPT SUPERVISOR\n");
|
||||
c.interrupt(3);
|
||||
return;
|
||||
}
|
||||
@@ -717,8 +716,8 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
//std::cout << "S_INST\n";
|
||||
++c.stores;
|
||||
memAddr = reg[rsrc[0]] + immsrc;
|
||||
std::cout << "STORE MEM ADDRESS: " << std::hex << reg[rsrc[0]] << " + " << immsrc << "\n";
|
||||
std::cout << "STORE MEM ADDRESS: " << std::hex << memAddr;
|
||||
D(3, "STORE MEM ADDRESS: " << std::hex << reg[rsrc[0]] << " + " << immsrc << "\n");
|
||||
D(3, "STORE MEM ADDRESS: " << std::hex << memAddr);
|
||||
trace_inst->is_sw = true;
|
||||
trace_inst->mem_addresses[t] = memAddr;
|
||||
// //std::cout << "FUNC3: " << func3 << "\n";
|
||||
@@ -755,7 +754,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
case B_INST:
|
||||
//std::cout << "B_INST\n";
|
||||
trace_inst->stall_warp = true;
|
||||
cout << "func3:" << func3 << endl;
|
||||
D(3,"func3:" << func3 << endl);
|
||||
switch (func3)
|
||||
{
|
||||
case 0:
|
||||
@@ -768,7 +767,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
break;
|
||||
case 1:
|
||||
// BNE
|
||||
cout << "rsrc0: " << reg[rsrc[0]] << " rsrc1 : " << reg[rsrc[1]] << endl;
|
||||
D(3, "rsrc0: " << reg[rsrc[0]] << " rsrc1 : " << reg[rsrc[1]] << endl);
|
||||
if (int(reg[rsrc[0]]) != int(reg[rsrc[1]]))
|
||||
{
|
||||
if (!pcSet) nextPc = (c.pc - 4) + immsrc;
|
||||
@@ -829,7 +828,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
pcSet = true;
|
||||
break;
|
||||
case JALR_INST:
|
||||
std::cout << "JALR_INST\n";
|
||||
D(3, "JALR_INST\n");
|
||||
trace_inst->stall_warp = true;
|
||||
if (!pcSet) nextPc = reg[rsrc[0]] + immsrc;
|
||||
if (!pcSet) {/*std::cout << "JALR... SETTING PC: " << nextPc << "\n";*/ }
|
||||
@@ -945,7 +944,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
{
|
||||
case 1:
|
||||
// WSPAWN
|
||||
std::cout << "WSPAWN\n";
|
||||
D(3, "WSPAWN\n");
|
||||
trace_inst->wspawn = true;
|
||||
if (sjOnce)
|
||||
{
|
||||
@@ -993,15 +992,14 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
{
|
||||
sjOnce = false;
|
||||
if (checkUnanimous(pred, c.reg, c.tmask)) {
|
||||
std::cout << "Unanimous pred: " << pred << " val: " << reg[pred] << "\n";
|
||||
D(3, "Unanimous pred: " << pred << " val: " << reg[pred] << "\n");
|
||||
DomStackEntry e(c.tmask);
|
||||
e.uni = true;
|
||||
c.domStack.push(e);
|
||||
break;
|
||||
}
|
||||
cout << "Split: Original TM: ";
|
||||
for (auto y : c.tmask) cout << y << " ";
|
||||
cout << "\n";
|
||||
D(3, "Split: Original TM: ");
|
||||
for (auto y : c.tmask) D(3, y << " ");
|
||||
|
||||
DomStackEntry e(pred, c.reg, c.tmask, c.pc);
|
||||
c.domStack.push(c.tmask);
|
||||
@@ -1012,12 +1010,10 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
}
|
||||
|
||||
|
||||
cout << "Split: New TM\n";
|
||||
for (auto y : c.tmask) cout << y << " ";
|
||||
cout << "\n";
|
||||
cout << "Split: Pushed TM PC: " << hex << e.pc << dec << "\n";
|
||||
for (auto y : e.tmask) cout << y << " ";
|
||||
cout << "\n";
|
||||
D(3, "Split: New TM");
|
||||
for (auto y : c.tmask) D(3, y << " ");
|
||||
D(3, "Split: Pushed TM PC: " << hex << e.pc << dec << "\n");
|
||||
for (auto y : e.tmask) D(3, y << " ");
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -1038,19 +1034,18 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
if (!c.domStack.top().fallThrough) {
|
||||
if (!pcSet) {
|
||||
nextPc = c.domStack.top().pc;
|
||||
cout << "join: NOT FALLTHROUGH PC: " << hex << nextPc << dec << '\n';
|
||||
D(3, "join: NOT FALLTHROUGH PC: " << hex << nextPc << dec);
|
||||
}
|
||||
pcSet = true;
|
||||
}
|
||||
|
||||
cout << "Join: Old TM: ";
|
||||
for (auto y : c.tmask) cout << y << " ";
|
||||
D(3, "Join: Old TM: ");
|
||||
for (auto y : c.tmask) D(3, y << " ");
|
||||
cout << "\n";
|
||||
c.tmask = c.domStack.top().tmask;
|
||||
|
||||
cout << "Join: New TM: " << '\n';
|
||||
for (auto y : c.tmask) cout << y << " ";
|
||||
cout << "\n";
|
||||
D(3, "Join: New TM: ");
|
||||
for (auto y : c.tmask) D(3, y << " ");
|
||||
|
||||
c.domStack.pop();
|
||||
}
|
||||
@@ -1120,7 +1115,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint8_t * first_ptr = (uint8_t *) vr1[i].val;
|
||||
uint8_t * second_ptr = (uint8_t *) vr2[i].val;
|
||||
uint8_t result = *first_ptr + *second_ptr;
|
||||
cout << "Adding " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Adding " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint8_t * result_ptr = (uint8_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1139,7 +1134,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint16_t * first_ptr = (uint16_t *) vr1[i].val;
|
||||
uint16_t * second_ptr = (uint16_t *) vr2[i].val;
|
||||
uint16_t result = *first_ptr + *second_ptr;
|
||||
cout << "Adding " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Adding " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint16_t * result_ptr = (uint16_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1148,7 +1143,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
}
|
||||
} else if (c.vtype.vsew == 32)
|
||||
{
|
||||
cout << "Doing 32 bit vector addition\n";
|
||||
D(3, "Doing 32 bit vector addition");
|
||||
for (Word i = 0; i < c.vl; i++)
|
||||
{
|
||||
int *mask_ptr = (int*) mask[i].val;
|
||||
@@ -1157,7 +1152,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
int * first_ptr = (int *) vr1[i].val;
|
||||
int * second_ptr = (int *) vr2[i].val;
|
||||
int result = *first_ptr + *second_ptr;
|
||||
cout << "Adding " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Adding " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
int * result_ptr = (int *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1174,15 +1169,15 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
if (c.vtype.vsew == 8)
|
||||
{
|
||||
uint8_t * ptr_val = (uint8_t *) c.vreg[i][j].val;
|
||||
std::cout << "reg[" << i << "][" << j << "] = " << *ptr_val << std::endl;
|
||||
D(3, "reg[" << i << "][" << j << "] = " << *ptr_val);
|
||||
} else if (c.vtype.vsew == 16)
|
||||
{
|
||||
uint16_t * ptr_val = (uint16_t *) c.vreg[i][j].val;
|
||||
std::cout << "reg[" << i << "][" << j << "] = " << *ptr_val << std::endl;
|
||||
D(3, "reg[" << i << "][" << j << "] = " << *ptr_val);
|
||||
} else if (c.vtype.vsew == 32)
|
||||
{
|
||||
uint32_t * ptr_val = (uint32_t *) c.vreg[i][j].val;
|
||||
std::cout << "reg[" << i << "][" << j << "] = " << *ptr_val << std::endl;
|
||||
D(3, "reg[" << i << "][" << j << "] = " << *ptr_val);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1200,7 +1195,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint8_t *first_ptr = (uint8_t *)vr1[i].val;
|
||||
uint8_t *second_ptr = (uint8_t *)vr2[i].val;
|
||||
uint8_t result = (*first_ptr == *second_ptr) ? 1 : 0;
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint8_t * result_ptr = (uint8_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1211,7 +1206,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint16_t *first_ptr = (uint16_t *)vr1[i].val;
|
||||
uint16_t *second_ptr = (uint16_t *)vr2[i].val;
|
||||
uint16_t result = (*first_ptr == *second_ptr) ? 1 : 0;
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint16_t * result_ptr = (uint16_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1222,7 +1217,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint32_t *first_ptr = (uint32_t *)vr1[i].val;
|
||||
uint32_t *second_ptr = (uint32_t *)vr2[i].val;
|
||||
uint32_t result = (*first_ptr == *second_ptr) ? 1 : 0;
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint32_t * result_ptr = (uint32_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1241,7 +1236,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint8_t *first_ptr = (uint8_t *)vr1[i].val;
|
||||
uint8_t *second_ptr = (uint8_t *)vr2[i].val;
|
||||
uint8_t result = (*first_ptr != *second_ptr) ? 1 : 0;
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3,"Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint8_t * result_ptr = (uint8_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1252,7 +1247,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint16_t *first_ptr = (uint16_t *)vr1[i].val;
|
||||
uint16_t *second_ptr = (uint16_t *)vr2[i].val;
|
||||
uint16_t result = (*first_ptr != *second_ptr) ? 1 : 0;
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3,"Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint16_t * result_ptr = (uint16_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1263,7 +1258,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint32_t *first_ptr = (uint32_t *)vr1[i].val;
|
||||
uint32_t *second_ptr = (uint32_t *)vr2[i].val;
|
||||
uint32_t result = (*first_ptr != *second_ptr) ? 1 : 0;
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint32_t * result_ptr = (uint32_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1282,7 +1277,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint8_t *first_ptr = (uint8_t *)vr1[i].val;
|
||||
uint8_t *second_ptr = (uint8_t *)vr2[i].val;
|
||||
uint8_t result = (*first_ptr < *second_ptr) ? 1 : 0;
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint8_t * result_ptr = (uint8_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1293,7 +1288,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint16_t *first_ptr = (uint16_t *)vr1[i].val;
|
||||
uint16_t *second_ptr = (uint16_t *)vr2[i].val;
|
||||
uint16_t result = (*first_ptr < *second_ptr) ? 1 : 0;
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3,"Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint16_t * result_ptr = (uint16_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1304,7 +1299,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint32_t *first_ptr = (uint32_t *)vr1[i].val;
|
||||
uint32_t *second_ptr = (uint32_t *)vr2[i].val;
|
||||
uint32_t result = (*first_ptr < *second_ptr) ? 1 : 0;
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint32_t * result_ptr = (uint32_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1323,7 +1318,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
int8_t *first_ptr = (int8_t *)vr1[i].val;
|
||||
int8_t *second_ptr = (int8_t *)vr2[i].val;
|
||||
int8_t result = (*first_ptr < *second_ptr) ? 1 : 0;
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
int8_t * result_ptr = (int8_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1334,7 +1329,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
int16_t *first_ptr = (int16_t *)vr1[i].val;
|
||||
int16_t *second_ptr = (int16_t *)vr2[i].val;
|
||||
int16_t result = (*first_ptr < *second_ptr) ? 1 : 0;
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
int16_t * result_ptr = (int16_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1345,7 +1340,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
int32_t *first_ptr = (int32_t *)vr1[i].val;
|
||||
int32_t *second_ptr = (int32_t *)vr2[i].val;
|
||||
int32_t result = (*first_ptr < *second_ptr) ? 1 : 0;
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3,"Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
int32_t * result_ptr = (int32_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1363,7 +1358,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint8_t *first_ptr = (uint8_t *)vr1[i].val;
|
||||
uint8_t *second_ptr = (uint8_t *)vr2[i].val;
|
||||
uint8_t result = (*first_ptr <= *second_ptr) ? 1 : 0;
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3,"Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint8_t * result_ptr = (uint8_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1374,7 +1369,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint16_t *first_ptr = (uint16_t *)vr1[i].val;
|
||||
uint16_t *second_ptr = (uint16_t *)vr2[i].val;
|
||||
uint16_t result = (*first_ptr <= *second_ptr) ? 1 : 0;
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3,"Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint16_t * result_ptr = (uint16_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1385,7 +1380,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint32_t *first_ptr = (uint32_t *)vr1[i].val;
|
||||
uint32_t *second_ptr = (uint32_t *)vr2[i].val;
|
||||
uint32_t result = (*first_ptr <= *second_ptr) ? 1 : 0;
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint32_t * result_ptr = (uint32_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1403,7 +1398,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
int8_t *first_ptr = (int8_t *)vr1[i].val;
|
||||
int8_t *second_ptr = (int8_t *)vr2[i].val;
|
||||
int8_t result = (*first_ptr <= *second_ptr) ? 1 : 0;
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
int8_t * result_ptr = (int8_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1414,7 +1409,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
int16_t *first_ptr = (int16_t *)vr1[i].val;
|
||||
int16_t *second_ptr = (int16_t *)vr2[i].val;
|
||||
int16_t result = (*first_ptr <= *second_ptr) ? 1 : 0;
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3,"Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
int16_t * result_ptr = (int16_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1425,7 +1420,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
int32_t *first_ptr = (int32_t *)vr1[i].val;
|
||||
int32_t *second_ptr = (int32_t *)vr2[i].val;
|
||||
int32_t result = (*first_ptr <= *second_ptr) ? 1 : 0;
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
int32_t * result_ptr = (int32_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1443,7 +1438,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint8_t *first_ptr = (uint8_t *)vr1[i].val;
|
||||
uint8_t *second_ptr = (uint8_t *)vr2[i].val;
|
||||
uint8_t result = (*first_ptr > *second_ptr) ? 1 : 0;
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint8_t * result_ptr = (uint8_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1454,7 +1449,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint16_t *first_ptr = (uint16_t *)vr1[i].val;
|
||||
uint16_t *second_ptr = (uint16_t *)vr2[i].val;
|
||||
uint16_t result = (*first_ptr > *second_ptr) ? 1 : 0;
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint16_t * result_ptr = (uint16_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1465,7 +1460,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint32_t *first_ptr = (uint32_t *)vr1[i].val;
|
||||
uint32_t *second_ptr = (uint32_t *)vr2[i].val;
|
||||
uint32_t result = (*first_ptr > *second_ptr) ? 1 : 0;
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint32_t * result_ptr = (uint32_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1483,7 +1478,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
int8_t *first_ptr = (int8_t *)vr1[i].val;
|
||||
int8_t *second_ptr = (int8_t *)vr2[i].val;
|
||||
int8_t result = (*first_ptr > *second_ptr) ? 1 : 0;
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
int8_t * result_ptr = (int8_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1494,7 +1489,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
int16_t *first_ptr = (int16_t *)vr1[i].val;
|
||||
int16_t *second_ptr = (int16_t *)vr2[i].val;
|
||||
int16_t result = (*first_ptr > *second_ptr) ? 1 : 0;
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
int16_t * result_ptr = (int16_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1505,7 +1500,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
int32_t *first_ptr = (int32_t *)vr1[i].val;
|
||||
int32_t *second_ptr = (int32_t *)vr2[i].val;
|
||||
int32_t result = (*first_ptr > *second_ptr) ? 1 : 0;
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
int32_t * result_ptr = (int32_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1536,7 +1531,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint8_t first_value = (*first_ptr & 0x1);
|
||||
uint8_t second_value = (*second_ptr & 0x1);
|
||||
uint8_t result = (first_value & !second_value);
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint8_t * result_ptr = (uint8_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1554,7 +1549,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint16_t first_value = (*first_ptr & 0x1);
|
||||
uint16_t second_value = (*second_ptr & 0x1);
|
||||
uint16_t result = (first_value & !second_value);
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint16_t * result_ptr = (uint16_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1572,7 +1567,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint32_t first_value = (*first_ptr & 0x1);
|
||||
uint32_t second_value = (*second_ptr & 0x1);
|
||||
uint32_t result = (first_value & !second_value);
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint32_t * result_ptr = (uint32_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1598,7 +1593,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint8_t first_value = (*first_ptr & 0x1);
|
||||
uint8_t second_value = (*second_ptr & 0x1);
|
||||
uint8_t result = (first_value & second_value);
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3,"Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint8_t * result_ptr = (uint8_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1615,7 +1610,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint16_t first_value = (*first_ptr & 0x1);
|
||||
uint16_t second_value = (*second_ptr & 0x1);
|
||||
uint16_t result = (first_value & second_value);
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint16_t * result_ptr = (uint16_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1633,7 +1628,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint32_t first_value = (*first_ptr & 0x1);
|
||||
uint32_t second_value = (*second_ptr & 0x1);
|
||||
uint32_t result = (first_value & second_value);
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3,"Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint32_t * result_ptr = (uint32_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1659,7 +1654,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint8_t first_value = (*first_ptr & 0x1);
|
||||
uint8_t second_value = (*second_ptr & 0x1);
|
||||
uint8_t result = (first_value | second_value);
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint8_t * result_ptr = (uint8_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1677,7 +1672,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint16_t first_value = (*first_ptr & 0x1);
|
||||
uint16_t second_value = (*second_ptr & 0x1);
|
||||
uint16_t result = (first_value | second_value);
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
result_ptr = (uint16_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1694,12 +1689,12 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint32_t first_value = (*first_ptr & 0x1);
|
||||
uint32_t second_value = (*second_ptr & 0x1);
|
||||
uint32_t result = (first_value | second_value);
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
result_ptr = (uint32_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
}
|
||||
cout << "VLMAX: " << VLMAX << endl;
|
||||
D(3, "VLMAX: " << VLMAX);
|
||||
for(Word i = c.vl; i < VLMAX; i++){
|
||||
result_ptr = (uint32_t *) vd[i].val;
|
||||
*result_ptr = 0;
|
||||
@@ -1721,7 +1716,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint8_t first_value = (*first_ptr & 0x1);
|
||||
uint8_t second_value = (*second_ptr & 0x1);
|
||||
uint8_t result = (first_value ^ second_value);
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3,"Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
result_ptr = (uint8_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
}
|
||||
@@ -1737,7 +1732,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint16_t first_value = (*first_ptr & 0x1);
|
||||
uint16_t second_value = (*second_ptr & 0x1);
|
||||
uint16_t result = (first_value ^ second_value);
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3,"Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
result_ptr = (uint16_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1756,7 +1751,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint32_t first_value = (*first_ptr & 0x1);
|
||||
uint32_t second_value = (*second_ptr & 0x1);
|
||||
uint32_t result = (first_value ^ second_value);
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3,"Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
result_ptr = (uint32_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1781,7 +1776,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint8_t first_value = (*first_ptr & 0x1);
|
||||
uint8_t second_value = (*second_ptr & 0x1);
|
||||
uint8_t result = (first_value | !second_value);
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint8_t * result_ptr = (uint8_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1797,7 +1792,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint16_t first_value = (*first_ptr & 0x1);
|
||||
uint16_t second_value = (*second_ptr & 0x1);
|
||||
uint16_t result = (first_value | !second_value);
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint16_t * result_ptr = (uint16_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1814,7 +1809,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint32_t first_value = (*first_ptr & 0x1);
|
||||
uint32_t second_value = (*second_ptr & 0x1);
|
||||
uint32_t result = (first_value | !second_value);
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint32_t * result_ptr = (uint32_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1839,7 +1834,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint8_t first_value = (*first_ptr & 0x1);
|
||||
uint8_t second_value = (*second_ptr & 0x1);
|
||||
uint8_t result = !(first_value & second_value);
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint8_t * result_ptr = (uint8_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1856,7 +1851,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint16_t first_value = (*first_ptr & 0x1);
|
||||
uint16_t second_value = (*second_ptr & 0x1);
|
||||
uint16_t result = !(first_value & second_value);
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint16_t * result_ptr = (uint16_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1874,7 +1869,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint32_t first_value = (*first_ptr & 0x1);
|
||||
uint32_t second_value = (*second_ptr & 0x1);
|
||||
uint32_t result = !(first_value & second_value);
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint32_t * result_ptr = (uint32_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1903,7 +1898,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint8_t first_value = (*first_ptr & 0x1);
|
||||
uint8_t second_value = (*second_ptr & 0x1);
|
||||
uint8_t result = !(first_value | second_value);
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
result_ptr = (uint8_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1919,7 +1914,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint16_t first_value = (*first_ptr & 0x1);
|
||||
uint16_t second_value = (*second_ptr & 0x1);
|
||||
uint16_t result = !(first_value | second_value);
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint16_t * result_ptr = (uint16_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1937,7 +1932,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint32_t first_value = (*first_ptr & 0x1);
|
||||
uint32_t second_value = (*second_ptr & 0x1);
|
||||
uint32_t result = !(first_value | second_value);
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
uint32_t * result_ptr = (uint32_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1965,7 +1960,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint8_t first_value = (*first_ptr & 0x1);
|
||||
uint8_t second_value = (*second_ptr & 0x1);
|
||||
uint8_t result = !(first_value ^ second_value);
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
result_ptr = (uint8_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -1983,7 +1978,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint16_t first_value = (*first_ptr & 0x1);
|
||||
uint16_t second_value = (*second_ptr & 0x1);
|
||||
uint16_t result = !(first_value ^ second_value);
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
result_ptr = (uint16_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -2002,7 +1997,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint32_t first_value = (*first_ptr & 0x1);
|
||||
uint32_t second_value = (*second_ptr & 0x1);
|
||||
uint32_t result = !(first_value ^ second_value);
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3, "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
result_ptr = (uint32_t *) vd[i].val;
|
||||
*result_ptr = result;
|
||||
@@ -2028,7 +2023,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint8_t *first_ptr = (uint8_t *)vr1[i].val;
|
||||
uint8_t *second_ptr = (uint8_t *)vr2[i].val;
|
||||
uint8_t result = (*first_ptr * *second_ptr);
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3,"Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
result_ptr = (uint8_t *) vd[i].val;
|
||||
*result_ptr += result;
|
||||
@@ -2044,7 +2039,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint16_t *first_ptr = (uint16_t *)vr1[i].val;
|
||||
uint16_t *second_ptr = (uint16_t *)vr2[i].val;
|
||||
uint16_t result = (*first_ptr * *second_ptr);
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3,"Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
result_ptr = (uint16_t *) vd[i].val;
|
||||
*result_ptr += result;
|
||||
@@ -2061,7 +2056,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
uint32_t *first_ptr = (uint32_t *)vr1[i].val;
|
||||
uint32_t *second_ptr = (uint32_t *)vr2[i].val;
|
||||
uint32_t result = (*first_ptr * *second_ptr);
|
||||
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
|
||||
D(3,"Comparing " << *first_ptr << " + " << *second_ptr << " = " << result);
|
||||
|
||||
result_ptr = (uint32_t *) vd[i].val;
|
||||
*result_ptr += result;
|
||||
@@ -2092,7 +2087,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
}
|
||||
else if(reg[rsrc[0]] < 2*VLMAX) {
|
||||
c.vl = (int)ceil((reg[rsrc[0]]*1.0)/2.0);
|
||||
cout << "Length:" << c.vl << ceil(reg[rsrc[0]]/2) << endl;
|
||||
D(3, "Length:" << c.vl << ceil(reg[rsrc[0]]/2));
|
||||
}
|
||||
else if(reg[rsrc[0]] >= (2*VLMAX)) {
|
||||
c.vl = VLMAX;
|
||||
@@ -2176,9 +2171,9 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
// }
|
||||
// }
|
||||
|
||||
cout << "Finished loop" << endl;
|
||||
// cout << "Finished loop" << endl;
|
||||
}
|
||||
cout << "aaaaaaaaaaaaaaaaaaaaaa" << endl;
|
||||
// cout << "aaaaaaaaaaaaaaaaaaaaaa" << endl;
|
||||
break;
|
||||
default:
|
||||
{
|
||||
@@ -2194,10 +2189,10 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
VLMAX = (c.vtype.vlmul * c.VLEN)/c.vtype.vsew;
|
||||
for(Word i = 0; i < c.vl; i++)
|
||||
{
|
||||
cout << "iter" << endl;
|
||||
// cout << "iter" << endl;
|
||||
++c.stores;
|
||||
memAddr = reg[rsrc[0]] + (i*c.vtype.vsew/8);
|
||||
std::cout << "STORE MEM ADDRESS *** : " << std::hex << memAddr << "\n";
|
||||
// std::cout << "STORE MEM ADDRESS *** : " << std::hex << memAddr << "\n";
|
||||
|
||||
|
||||
trace_inst->is_sw = true;
|
||||
@@ -2217,11 +2212,11 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
cout << "ERROR: UNSUPPORTED S INST\n" << flush;
|
||||
exit(1);
|
||||
}
|
||||
cout << "Loop finished" << endl;
|
||||
// cout << "Loop finished" << endl;
|
||||
// c.memAccesses.push_back(Warp::MemAccess(true, memAddr));
|
||||
}
|
||||
|
||||
cout << "After for loop" << endl;
|
||||
// cout << "After for loop" << endl;
|
||||
break;
|
||||
default:
|
||||
cout << "pc: " << hex << (c.pc-4) << "\n";
|
||||
@@ -2234,7 +2229,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
|
||||
}
|
||||
|
||||
std::cout << "finished instruction" << endl << flush;
|
||||
// std::cout << "finished instruction" << endl << flush;
|
||||
|
||||
D(3, "End instruction execute." << flush);
|
||||
|
||||
@@ -2259,7 +2254,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
if (pcSet)
|
||||
{
|
||||
c.pc = nextPc;
|
||||
cout << "Next PC: " << hex << nextPc << dec << "\n";
|
||||
D(3,"Next PC: " << hex << nextPc << dec);
|
||||
}
|
||||
|
||||
if (nextActiveThreads > c.reg.size()) {
|
||||
|
||||
Reference in New Issue
Block a user