Vector matrix addition working

This commit is contained in:
proshan3
2019-11-22 19:23:54 -05:00
parent e61f8ecace
commit 0d763fd735
8 changed files with 3163 additions and 1298 deletions

View File

@@ -674,7 +674,7 @@ Warp::Warp(Core *c, Word id) :
core(c), pc(0x80000000), interruptEnable(true),
supervisorMode(true), activeThreads(0), reg(0), pred(0),
shadowReg(core->a.getNRegs()), shadowPReg(core->a.getNPRegs()), id(id),
spawned(false), steps(0), insts(0), loads(0), stores(0), VLEN(96)
spawned(false), steps(0), insts(0), loads(0), stores(0), VLEN(1024)
{
D(3, "Creating a new thread with PC: " << hex << this->pc << '\n');
/* Build the register file. */

View File

@@ -718,6 +718,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
++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;
trace_inst->is_sw = true;
trace_inst->mem_addresses[t] = memAddr;
// //std::cout << "FUNC3: " << func3 << "\n";
@@ -754,6 +755,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;
switch (func3)
{
case 0:
@@ -766,6 +768,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;
if (int(reg[rsrc[0]]) != int(reg[rsrc[1]]))
{
if (!pcSet) nextPc = (c.pc - 4) + immsrc;
@@ -2065,9 +2068,9 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
switch(vlsWidth) {
case 6: //load word and unit strided (not checking for unit stride)
for(Word i = 0; i < c.vl; i++) {
memAddr = ((reg[rsrc[0]]) & 0xFFFFFFFC) + i*c.vtype.vsew;
memAddr = ((reg[rsrc[0]]) & 0xFFFFFFFC) + (i*c.vtype.vsew/8);
data_read = c.core->mem.read(memAddr, c.supervisorMode);
D(3, "Data read " << data_read);
D(3, "Mem addr: " << std::hex << memAddr << " Data read " << data_read);
int * result_ptr = (int *) vd[i].val;
*result_ptr = data_read;
@@ -2106,7 +2109,7 @@ 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++) {
++c.stores;
memAddr = reg[rsrc[0]] + i*c.vtype.vsew;
memAddr = reg[rsrc[0]] + (i*c.vtype.vsew/8);
std::cout << "STORE MEM ADDRESS: " << std::hex << memAddr << "\n";