Browse Source
the tool can parse the instruction name from spike debug log to help dsp kernel designer check what instructions have been used Signed-off-by: Jerry Shih <bignose1007@gmail.com>pull/303/head
3 changed files with 70 additions and 1 deletions
@ -0,0 +1,60 @@ |
|||
// See LICENSE for license details.
|
|||
|
|||
// This little program finds occurrences of strings like
|
|||
// core 0: 0x000000008000c36c (0xfe843783) ld a5, -24(s0)
|
|||
// in its inputs, then output the RISC-V instruction with the disassembly
|
|||
// enclosed hexadecimal number.
|
|||
|
|||
#include <iostream> |
|||
#include <string> |
|||
#include <cstdint> |
|||
#include <regex> |
|||
#include "fesvr/option_parser.h" |
|||
|
|||
#include "disasm.h" |
|||
#include "extension.h" |
|||
|
|||
using namespace std; |
|||
|
|||
int main(int argc, char** argv) |
|||
{ |
|||
string s; |
|||
const char* isa = DEFAULT_ISA; |
|||
|
|||
std::function<extension_t*()> extension; |
|||
option_parser_t parser; |
|||
parser.option(0, "extension", 1, [&](const char* s){extension = find_extension(s);}); |
|||
parser.option(0, "isa", 1, [&](const char* s){isa = s;}); |
|||
parser.parse(argv); |
|||
|
|||
processor_t p(isa, DEFAULT_VARCH, 0, 0); |
|||
if (extension) { |
|||
p.register_extension(extension()); |
|||
} |
|||
|
|||
std::regex reg("^core\\s+\\d+:\\s+0x[0-9a-f]+\\s+\\(0x([0-9a-f]+)\\)", std::regex_constants::icase); |
|||
std::smatch m; |
|||
std::ssub_match sm ; |
|||
|
|||
while (getline(cin,s)){ |
|||
if (regex_search(s, m, reg)){ |
|||
// the opcode string
|
|||
string op = m[1].str(); |
|||
uint32_t bit_num = op.size() * 4; |
|||
uint64_t opcode = strtoull(op.c_str(), nullptr, 16); |
|||
|
|||
if (bit_num<64){ |
|||
opcode = opcode << (64-bit_num) >> (64-bit_num); |
|||
} |
|||
|
|||
const disasm_insn_t* disasm = p.get_disassembler()->lookup(opcode); |
|||
if (disasm) { |
|||
cout << disasm->get_name() << '\n'; |
|||
} else { |
|||
cout << "unknown_op\n"; |
|||
} |
|||
} |
|||
} |
|||
|
|||
return 0; |
|||
} |
|||
Loading…
Reference in new issue