Skip to content

Commit f2a20b1

Browse files
authored
Merge pull request #1715 from abejgonzalez/fix-interactive-vregs
Don't print vregs in interactive mode if no V extension exists
2 parents ed5f817 + 3947fa0 commit f2a20b1

File tree

1 file changed

+34
-29
lines changed

1 file changed

+34
-29
lines changed

riscv/interactive.cc

Lines changed: 34 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -580,39 +580,44 @@ void sim_t::interactive_vreg(const std::string& cmd, const std::vector<std::stri
580580
}
581581
}
582582

583+
std::ostream out(sout_.rdbuf());
584+
583585
// Show all the regs!
584586
processor_t *p = get_core(args[0]);
585-
const int vlen = (int)(p->VU.get_vlen()) >> 3;
586-
const int elen = (int)(p->VU.get_elen()) >> 3;
587-
const int num_elem = vlen/elen;
588-
589-
std::ostream out(sout_.rdbuf());
590-
out << std::dec << "VLEN=" << (vlen << 3) << " bits; ELEN=" << (elen << 3) << " bits" << std::endl;
591-
592-
for (int r = rstart; r < rend; ++r) {
593-
out << std::setfill (' ') << std::left << std::setw(4) << vr_name[r] << std::right << ": ";
594-
for (int e = num_elem-1; e >= 0; --e) {
595-
uint64_t val;
596-
switch (elen) {
597-
case 8:
598-
val = p->VU.elt<uint64_t>(r, e);
599-
out << std::dec << "[" << e << "]: 0x" << std::hex << std::setfill ('0') << std::setw(16) << val << " ";
600-
break;
601-
case 4:
602-
val = p->VU.elt<uint32_t>(r, e);
603-
out << std::dec << "[" << e << "]: 0x" << std::hex << std::setfill ('0') << std::setw(8) << (uint32_t)val << " ";
604-
break;
605-
case 2:
606-
val = p->VU.elt<uint16_t>(r, e);
607-
out << std::dec << "[" << e << "]: 0x" << std::hex << std::setfill ('0') << std::setw(8) << (uint16_t)val << " ";
608-
break;
609-
case 1:
610-
val = p->VU.elt<uint8_t>(r, e);
611-
out << std::dec << "[" << e << "]: 0x" << std::hex << std::setfill ('0') << std::setw(8) << (int)(uint8_t)val << " ";
612-
break;
587+
if (p->any_vector_extensions()) {
588+
const int vlen = (int)(p->VU.get_vlen()) >> 3;
589+
const int elen = (int)(p->VU.get_elen()) >> 3;
590+
const int num_elem = vlen/elen;
591+
592+
out << std::dec << "VLEN=" << (vlen << 3) << " bits; ELEN=" << (elen << 3) << " bits" << std::endl;
593+
594+
for (int r = rstart; r < rend; ++r) {
595+
out << std::setfill (' ') << std::left << std::setw(4) << vr_name[r] << std::right << ": ";
596+
for (int e = num_elem-1; e >= 0; --e) {
597+
uint64_t val;
598+
switch (elen) {
599+
case 8:
600+
val = p->VU.elt<uint64_t>(r, e);
601+
out << std::dec << "[" << e << "]: 0x" << std::hex << std::setfill ('0') << std::setw(16) << val << " ";
602+
break;
603+
case 4:
604+
val = p->VU.elt<uint32_t>(r, e);
605+
out << std::dec << "[" << e << "]: 0x" << std::hex << std::setfill ('0') << std::setw(8) << (uint32_t)val << " ";
606+
break;
607+
case 2:
608+
val = p->VU.elt<uint16_t>(r, e);
609+
out << std::dec << "[" << e << "]: 0x" << std::hex << std::setfill ('0') << std::setw(8) << (uint16_t)val << " ";
610+
break;
611+
case 1:
612+
val = p->VU.elt<uint8_t>(r, e);
613+
out << std::dec << "[" << e << "]: 0x" << std::hex << std::setfill ('0') << std::setw(8) << (int)(uint8_t)val << " ";
614+
break;
615+
}
613616
}
617+
out << std::endl;
614618
}
615-
out << std::endl;
619+
} else {
620+
out << "Processor selected does not support any vector extensions" << std::endl;
616621
}
617622
}
618623

0 commit comments

Comments
 (0)