P4C
The P4 Compiler
All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
disasm.h
1
17
18#ifndef DISASM_H_
19#define DISASM_H_
20
21#include "backends/tofino/bf-asm/target.h"
22
23class Disasm {
24 public:
25 FOR_ALL_TARGETS(DECLARE_TARGET_CLASS)
26 virtual ~Disasm() {}
27 virtual void input_binary(uint64_t addr, char tag, uint32_t *data, size_t len) = 0;
28 static Disasm *create(std::string target);
29};
30
31#define DECLARE_DISASM_TARGET(TARGET, ...) \
32 class Disasm::TARGET : public Disasm { \
33 public: \
34 typedef ::Target::TARGET Target; \
35 Target::top_level_regs regs; \
36 TARGET() { declare_registers(&regs); } \
37 ~TARGET() { undeclare_registers(&regs); } \
38 TARGET(const TARGET &) = delete; \
39 __VA_ARGS__ \
40 };
41
42FOR_ALL_TARGETS(
43 DECLARE_DISASM_TARGET, void input_binary(uint64_t addr, char tag, uint32_t *data, size_t len) {
44 if (tag == 'D') {
45 regs.mem_top.input_binary(addr, tag, data, len);
46 } else {
47 regs.reg_top.input_binary(addr, tag, data, len);
48 }
49 })
50
51#endif /* DISASM_H_ */
Definition disasm.h:23
static Disasm * create(std::string target)
Definition disasm.cpp:22