18#ifndef BACKENDS_TOFINO_BF_ASM_REGISTER_REFERENCE_H_
19#define BACKENDS_TOFINO_BF_ASM_REGISTER_REFERENCE_H_
31 prefix(
const prefix *p,
const char *s) : pfx(p), str(s) {}
34inline std::ostream &operator<<(std::ostream &out,
const prefix *p) {
36 if (p->pfx) out << p->pfx <<
'.';
48class register_reference {
53 mutable bool read =
false, write =
false, disabled_ =
false;
54 register_reference() {}
55 register_reference(
const register_reference &) =
default;
56 register_reference(register_reference &&) =
default;
57 register_reference &operator=(
const register_reference &) & =
default;
58 register_reference &operator=(register_reference &&) & =
default;
59 ~register_reference() {}
61 register_reference &set(
const char *a, REG *r) {
62 if (disabled_) LOG1(
"ERROR: Writing disabled register value in " <<
this);
63 if (write) LOG1(
"WARNING: Overwriting \"" << name <<
"\" with \"" << a <<
"\" in " <<
this);
70 const char *c_str()
const {
return name.c_str(); }
71 REG *operator->()
const {
75 explicit operator bool()
const {
return tree !=
nullptr; }
76 bool modified()
const {
return write; }
77 void set_modified(
bool v =
true) { write = v; }
78 void rewrite() { write =
false; }
80 void enable() { disabled_ =
false; }
81 bool disabled()
const {
return disabled_; }
82 bool disable_if_unmodified() {
return false; }
83 bool disable_if_zero() {
return false; }
84 bool disable_if_reset_value() {
return false; }
87 LOG1(
"ERROR: Disabling modified register in " <<
this);
94 void log()
const { LOG1(
this <<
" = \"" << name <<
"\""); }
99 print_regname(out, u, u + 1);
107 out <<
'"' << u.c_str() <<
'"';
Definition register_reference.h:48
Definition register_reference.h:28