Compare commits

...

3 Commits

View File

@ -20,6 +20,8 @@ iss::plugin::cov::cov(std::string const &filename)
, filename(filename) , filename(filename)
{ {
output.open("output.trc"); output.open("output.trc");
jumped = false;
first = true;
} }
iss::plugin::cov::~cov() { iss::plugin::cov::~cov() {
@ -79,13 +81,47 @@ bool iss::plugin::cov::registration(const char *const version, vm_if& vm) {
} }
inline string formatPC(uint64_t pc) {
stringstream stream;
stream << "0x" << std::hex << pc;
return stream.str();
}
void iss::plugin::cov::callback(instr_info_t iinfo, const exec_info& einfo) { void iss::plugin::cov::callback(instr_info_t iinfo, const exec_info& einfo) {
// if((instr_if->get_next_pc() - instr_if->get_pc() != 4) ||( instr_if->get_next_pc() - instr_if->get_pc() != 2)){ // auto delay = 0;
// std::cout << "jump from " << std::hex << instr_if->get_pc() << " to " << instr_if->get_next_pc()<< " after " << std::dec << counter <<" linear instructions" <<std::endl; // auto entry = delays[iinfo.instr_id];
// counter = 0; // bool taken = einfo.branch_taken;
// }else { // if (einfo.branch_taken)
// counter++; // delay = entry.taken;
// else
// delay = entry.not_taken;
//
// if (first){
// output << formatPC(instr_if->get_pc()) << "," << delay;
// first = false;
// } // }
// if(instr_if->get_next_pc()-instr_if->get_pc() != delays[iinfo.instr_id].size/8){
// //The goal is to keep the output in start-target pairs, so after a jump the target address needs to get written
// //to the output. If the target happens to also be a start, we keep the pairing by adding a 0-delay entry.
// if (jumped)
// output <<"\n" <<formatPC(instr_if->get_pc()) << "," << 0;
// output <<"\n" << formatPC(instr_if->get_pc()) << "," << delay;
// jumped = true;
// }
// else{
// if (jumped){
// output <<"\n" << formatPC(instr_if->get_pc()) << "," << delay;
// jumped = false;
// }
// else if(delay!=1){
// output <<"\n" << formatPC(instr_if->get_pc()) << "," << delay;
// output <<"\n" << formatPC(instr_if->get_pc()) << "," << 0;
// }
//
// }
//source code for the full output
auto delay = 0; auto delay = 0;
auto entry = delays[iinfo.instr_id]; auto entry = delays[iinfo.instr_id];
bool taken = einfo.branch_taken; bool taken = einfo.branch_taken;