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