Merge pull request #156 from p12nGH/noncontiguous_harts
authorAndrew Waterman <aswaterman@gmail.com>
Thu, 16 Nov 2017 00:17:40 +0000 (16:17 -0800)
committerGitHub <noreply@github.com>
Thu, 16 Nov 2017 00:17:40 +0000 (16:17 -0800)
Support for non-contiguous hartids

1  2 
riscv/sim.cc

diff --combined riscv/sim.cc
index 5aa92136897208858ddf85e7815421f510dd67bb,57ba857778bb9e0fce75e9060ede59fe7d839e8b..793a2c871e6267439c88b1a5c2da7d289495c232
@@@ -25,7 -25,7 +25,7 @@@ static void handle_signal(int sig
  
  sim_t::sim_t(const char* isa, size_t nprocs, bool halted, reg_t start_pc,
               std::vector<std::pair<reg_t, mem_t*>> mems,
-              const std::vector<std::string>& args)
+              const std::vector<std::string>& args, std::vector<int> const hartids)
    : htif_t(args), debug_module(this), mems(mems), procs(std::max(nprocs, size_t(1))),
      start_pc(start_pc),
      current_step(0), current_proc(0), debug(false), remote_bitbang(NULL)
  
    debug_mmu = new mmu_t(this, NULL);
  
-   for (size_t i = 0; i < procs.size(); i++) {
-     procs[i] = new processor_t(isa, this, i, halted);
+   if (hartids.size() == 0) {
+     for (size_t i = 0; i < procs.size(); i++) {
+       procs[i] = new processor_t(isa, this, i, halted);
+     }
+   }
+   else {
+     if (hartids.size() != procs.size()) {
+       std::cerr << "Number of specified hartids doesn't match number of processors" << strerror(errno) << std::endl;
+       exit(1);
+     }
+     for (size_t i = 0; i < procs.size(); i++) {
+       procs[i] = new processor_t(isa, this, hartids[i], halted);
+     }
    }
  
    clint.reset(new clint_t(procs));
@@@ -300,9 -311,6 +311,9 @@@ void sim_t::make_dtb(
                       " 0x" << (clintsz >> 32) << " 0x" << (clintsz & (uint32_t)-1) << ">;\n"
           "    };\n"
           "  };\n"
 +         "  htif {\n"
 +         "    compatible = \"ucb,htif0\";\n"
 +         "  };\n"
           "};\n";
  
    dts = s.str();