X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=riscv%2Fspike.cc;h=0ab1616a9e131fb2e84825bac6f4ef052ed31d01;hb=bbb0f2179c858c77918ef37dbfcd7bb5f3fd0417;hp=00997bd1fe1c345d896b6b376915dc3ad9af1aa7;hpb=04c2d491c4bbb424a59273d4ebee62ddfe3379f9;p=riscv-isa-sim.git diff --git a/riscv/spike.cc b/riscv/spike.cc index 00997bd..0ab1616 100644 --- a/riscv/spike.cc +++ b/riscv/spike.cc @@ -3,6 +3,7 @@ #include "sim.h" #include "htif.h" #include "cachesim.h" +#include "extension.h" #include #include #include @@ -33,6 +34,7 @@ int main(int argc, char** argv) std::unique_ptr ic; std::unique_ptr dc; std::unique_ptr l2; + std::function extension; option_parser_t parser; parser.help(&help); @@ -43,6 +45,11 @@ int main(int argc, char** argv) parser.option(0, "ic", 1, [&](const char* s){ic.reset(new icache_sim_t(s));}); parser.option(0, "dc", 1, [&](const char* s){dc.reset(new dcache_sim_t(s));}); parser.option(0, "l2", 1, [&](const char* s){l2.reset(cache_sim_t::construct(s, "L2$"));}); + parser.option(0, "extension", 1, [&](const char* s){ + if (!extensions().count(s)) + fprintf(stderr, "unknown extension %s!\n", s), exit(-1); + extension = extensions()[s]; + }); auto argv1 = parser.parse(argv); if (!*argv1) @@ -56,6 +63,7 @@ int main(int argc, char** argv) { if (ic) s.get_core(i)->get_mmu()->register_memtracer(&*ic); if (dc) s.get_core(i)->get_mmu()->register_memtracer(&*dc); + if (extension) s.get_core(i)->register_extension(extension()); } s.set_debug(debug);