1 #include "extension.h"
2 #include <cstring>
3 
4 struct : public arg_t {
to_string__anon0ed3196401085   std::string to_string(insn_t insn) const {
6     return xpr_name[insn.rs1()];
7   }
8 } xrs1;
9 
custom_cflush(processor_t * p,insn_t insn,reg_t pc)10 static reg_t custom_cflush(processor_t* p, insn_t insn, reg_t pc)
11 {
12   require_privilege(PRV_M);
13 
14   return pc + 4; \
15 }
16 
17 class cflush_t : public extension_t
18 {
19  public:
name()20   const char* name() { return "cflush"; }
21 
cflush_t()22   cflush_t() {}
23 
get_instructions()24   std::vector<insn_desc_t> get_instructions() {
25     std::vector<insn_desc_t> insns;
26     insns.push_back((insn_desc_t){0xFC000073, 0xFFF07FFF, custom_cflush, custom_cflush});
27     insns.push_back((insn_desc_t){0xFC200073, 0xFFF07FFF, custom_cflush, custom_cflush});
28     insns.push_back((insn_desc_t){0xFC100073, 0xFFF07FFF, custom_cflush, custom_cflush});
29     return insns;
30   }
31 
get_disasms()32   std::vector<disasm_insn_t*> get_disasms() {
33     std::vector<disasm_insn_t*> insns;
34     insns.push_back(new disasm_insn_t("cflush.d.l1", 0xFC000073, 0xFFF07FFF, {&xrs1}));
35     insns.push_back(new disasm_insn_t("cdiscard.d.l1", 0xFC200073, 0xFFF07FFF, {&xrs1}));
36     insns.push_back(new disasm_insn_t("cflush.i.l1", 0xFC100073, 0xFFF07FFF, {&xrs1}));
37     return insns;
38   }
39 };
40 
__anon0ed319640202() 41 REGISTER_EXTENSION(cflush, []() { return new cflush_t; })
42