ROSE  0.9.10.47
NullSemantics2.h
1 #ifndef Rose_NullSemantics2_H
2 #define Rose_NullSemantics2_H
3 
4 #include "BaseSemantics2.h"
5 
6 namespace Rose {
7 namespace BinaryAnalysis { // documented elsewhere
8 namespace InstructionSemantics2 { // documented elsewhere
9 
10 
15 namespace NullSemantics {
16 
18 // Semantic values
20 
23 
26 
28  // Real constructors.
29 protected:
30  explicit SValue(size_t nbits): BaseSemantics::SValue(nbits) {}
31 
33  // Static allocating constructors
34 public:
36  static SValuePtr instance() {
37  return SValuePtr(new SValue(1));
38  }
39 
41  static SValuePtr instance(size_t nbits) {
42  return SValuePtr(new SValue(nbits));
43  }
44 
46  static SValuePtr instance(size_t nbits, uint64_t number) {
47  return SValuePtr(new SValue(nbits)); // the number is not important in this domain
48  }
49 
51  static SValuePtr instance(const SValuePtr &other) {
52  return SValuePtr(new SValue(*other));
53  }
54 
56  // Virtual constructors
57 public:
58  virtual BaseSemantics::SValuePtr bottom_(size_t nBits) const ROSE_OVERRIDE {
59  return instance(nBits);
60  }
61  virtual BaseSemantics::SValuePtr undefined_(size_t nBits) const ROSE_OVERRIDE {
62  return instance(nBits);
63  }
64  virtual BaseSemantics::SValuePtr unspecified_(size_t nBits) const ROSE_OVERRIDE {
65  return instance(nBits);
66  }
67  virtual BaseSemantics::SValuePtr number_(size_t nBits, uint64_t number) const ROSE_OVERRIDE {
68  return instance(nBits, number);
69  }
70  virtual BaseSemantics::SValuePtr copy(size_t new_width=0) const ROSE_OVERRIDE {
71  SValuePtr retval(new SValue(*this));
72  if (new_width!=0 && new_width!=retval->get_width())
73  retval->set_width(new_width);
74  return retval;
75  }
78  const SmtSolverPtr&) const ROSE_OVERRIDE {
79  return Sawyer::Nothing();
80  }
81 
83  // Dynamic pointer casting
84 public:
87  SValuePtr retval = v.dynamicCast<SValue>();
88  ASSERT_not_null(retval);
89  return retval;
90  }
91 
93  // Implementations of functions inherited
94 public:
95  virtual bool isBottom() const ROSE_OVERRIDE {
96  return false;
97  }
98 
99  virtual bool is_number() const ROSE_OVERRIDE {
100  return false;
101  }
102 
103  virtual uint64_t get_number() const ROSE_OVERRIDE {
104  ASSERT_not_reachable("not a number");
105  uint64_t retval;
106  return retval;
107  }
108 
109  virtual bool may_equal(const BaseSemantics::SValuePtr &other,
110  const SmtSolverPtr &solver = SmtSolverPtr()) const ROSE_OVERRIDE {
111  return true;
112  }
113 
114  virtual bool must_equal(const BaseSemantics::SValuePtr &other,
115  const SmtSolverPtr &solver = SmtSolverPtr()) const ROSE_OVERRIDE {
116  return this == getRawPointer(other); // must be equal if they're both the same object
117  }
118 
119  virtual void print(std::ostream &stream, BaseSemantics::Formatter&) const ROSE_OVERRIDE {
120  stream <<"VOID[" <<get_width() <<"]";
121  }
122 };
123 
124 
126 // Register state
128 
130 typedef boost::shared_ptr<class RegisterState> RegisterStatePtr;
131 
136 protected:
137  RegisterState(const RegisterState &other)
138  : BaseSemantics::RegisterState(other) {}
139 
141  : BaseSemantics::RegisterState(protoval, regdict) {}
142 
143 public:
144  static RegisterStatePtr instance(const BaseSemantics::SValuePtr &protoval, const RegisterDictionary *regdict) {
145  return RegisterStatePtr(new RegisterState(protoval, regdict));
146  }
147 
149  const RegisterDictionary *regdict) const ROSE_OVERRIDE {
150  return instance(protoval, regdict);
151  }
152 
153  virtual BaseSemantics::RegisterStatePtr clone() const ROSE_OVERRIDE {
154  return RegisterStatePtr(new RegisterState(*this));
155  }
156 
157  static RegisterStatePtr promote(const BaseSemantics::RegisterStatePtr &from) {
158  RegisterStatePtr retval = boost::dynamic_pointer_cast<RegisterState>(from);
159  ASSERT_not_null(retval);
160  return retval;
161  }
162 
163  virtual bool merge(const BaseSemantics::RegisterStatePtr &other_, BaseSemantics::RiscOperators*) ROSE_OVERRIDE {
164  return false;
165  }
166 
167  virtual void clear() ROSE_OVERRIDE {}
168  virtual void zero() ROSE_OVERRIDE {}
169 
172  BaseSemantics::RiscOperators *ops) ROSE_OVERRIDE {
173  return protoval()->undefined_(reg.get_nbits());
174  }
175 
178  BaseSemantics::RiscOperators *ops) ROSE_OVERRIDE {
179  return protoval()->undefined_(reg.get_nbits());
180  }
181 
183  BaseSemantics::RiscOperators *ops) ROSE_OVERRIDE {}
184 
185  virtual void print(std::ostream&, BaseSemantics::Formatter&) const ROSE_OVERRIDE {}
186 };
187 
188 
190 // Memory state
192 
194 typedef boost::shared_ptr<class MemoryState> MemoryStatePtr;
195 
200 protected:
201  MemoryState(const BaseSemantics::SValuePtr &addrProtoval, const BaseSemantics::SValuePtr &valProtoval)
202  : BaseSemantics::MemoryState(addrProtoval, valProtoval) {}
203 
204  MemoryState(const MemoryStatePtr &other)
205  : BaseSemantics::MemoryState(other) {}
206 
207 public:
208  static MemoryStatePtr instance(const BaseSemantics::SValuePtr &addrProtoval, const BaseSemantics::SValuePtr &valProtoval) {
209  return MemoryStatePtr(new MemoryState(addrProtoval, valProtoval));
210  }
211 
212 public:
214  const BaseSemantics::SValuePtr &valProtoval) const ROSE_OVERRIDE {
215  return instance(addrProtoval, valProtoval);
216  }
217 
218  virtual BaseSemantics::MemoryStatePtr clone() const ROSE_OVERRIDE {
219  return MemoryStatePtr(new MemoryState(*this));
220  }
221 
222 public:
223  static MemoryStatePtr promote(const BaseSemantics::MemoryStatePtr &x) {
224  MemoryStatePtr retval = boost::dynamic_pointer_cast<MemoryState>(x);
225  ASSERT_not_null(x);
226  return retval;
227  }
228 
229 public:
230  virtual void clear() ROSE_OVERRIDE {}
231 
234  BaseSemantics::RiscOperators *valOps) ROSE_OVERRIDE {
235  return dflt->copy();
236  }
237 
238  virtual void writeMemory(const BaseSemantics::SValuePtr &addr, const BaseSemantics::SValuePtr &value,
239  BaseSemantics::RiscOperators *addrOps, BaseSemantics::RiscOperators *valOps) ROSE_OVERRIDE {}
240 
243  BaseSemantics::RiscOperators *valOps) ROSE_OVERRIDE {
244  return dflt->copy();
245  }
246 
247  virtual void print(std::ostream&, BaseSemantics::Formatter&) const ROSE_OVERRIDE {}
248 
250  BaseSemantics::RiscOperators *valOps) ROSE_OVERRIDE {
251  return false;
252  }
253 };
254 
255 
257 // Complete state
259 
260 typedef BaseSemantics::State State;
261 typedef BaseSemantics::StatePtr StatePtr;
262 
263 
265 // RISC operators
267 
269 typedef boost::shared_ptr<class RiscOperators> RiscOperatorsPtr;
270 
273 
275  // Real constructors
276 protected:
278  : BaseSemantics::RiscOperators(protoval, solver) {
279  name("Null");
280  }
281  explicit RiscOperators(const BaseSemantics::StatePtr &state, const SmtSolverPtr &solver = SmtSolverPtr())
283  name("Null");
284  }
285 
287  // Static allocating constructors
288 public:
291  static RiscOperatorsPtr instance(const RegisterDictionary *regdict);
292 
295  return RiscOperatorsPtr(new RiscOperators(protoval, solver));
296  }
297 
300  return RiscOperatorsPtr(new RiscOperators(state, solver));
301  }
302 
304  // Virtual constructors
305 public:
307  const SmtSolverPtr &solver = SmtSolverPtr()) const ROSE_OVERRIDE {
308  return instance(protoval, solver);
309  }
310 
312  const SmtSolverPtr &solver = SmtSolverPtr()) const ROSE_OVERRIDE {
313  return instance(state, solver);
314  }
315 
317  // Risc operators inherited
318 public:
320  const BaseSemantics::SValuePtr &b_) ROSE_OVERRIDE;
321 
323  const BaseSemantics::SValuePtr &b_) ROSE_OVERRIDE;
324 
326  const BaseSemantics::SValuePtr &b_) ROSE_OVERRIDE;
327 
328  virtual BaseSemantics::SValuePtr invert(const BaseSemantics::SValuePtr &a_) ROSE_OVERRIDE;
329 
331  size_t begin_bit, size_t end_bit) ROSE_OVERRIDE;
332 
334  const BaseSemantics::SValuePtr &b_) ROSE_OVERRIDE;
335 
337 
339 
341  const BaseSemantics::SValuePtr &sa_) ROSE_OVERRIDE;
342 
344  const BaseSemantics::SValuePtr &sa_) ROSE_OVERRIDE;
345 
347  const BaseSemantics::SValuePtr &sa_) ROSE_OVERRIDE;
348 
350  const BaseSemantics::SValuePtr &sa_) ROSE_OVERRIDE;
351 
353  const BaseSemantics::SValuePtr &sa_) ROSE_OVERRIDE;
354 
355  virtual BaseSemantics::SValuePtr equalToZero(const BaseSemantics::SValuePtr &a_) ROSE_OVERRIDE;
356 
358  const BaseSemantics::SValuePtr &a_,
359  const BaseSemantics::SValuePtr &b_) ROSE_OVERRIDE;
360 
361  virtual BaseSemantics::SValuePtr signExtend(const BaseSemantics::SValuePtr &a_, size_t new_width) ROSE_OVERRIDE;
362 
364  const BaseSemantics::SValuePtr &b_) ROSE_OVERRIDE;
365 
367  const BaseSemantics::SValuePtr &b_,
368  const BaseSemantics::SValuePtr &c_,
369  BaseSemantics::SValuePtr &carry_out/*out*/) ROSE_OVERRIDE;
370 
371  virtual BaseSemantics::SValuePtr negate(const BaseSemantics::SValuePtr &a_) ROSE_OVERRIDE;
372 
374  const BaseSemantics::SValuePtr &b_) ROSE_OVERRIDE;
375 
377  const BaseSemantics::SValuePtr &b_) ROSE_OVERRIDE;
378 
380  const BaseSemantics::SValuePtr &b_) ROSE_OVERRIDE;
381 
383  const BaseSemantics::SValuePtr &b_) ROSE_OVERRIDE;
384 
386  const BaseSemantics::SValuePtr &b_) ROSE_OVERRIDE;
387 
389  const BaseSemantics::SValuePtr &b_) ROSE_OVERRIDE;
390 
392  const BaseSemantics::SValuePtr &addr,
393  const BaseSemantics::SValuePtr &dflt,
394  const BaseSemantics::SValuePtr &cond) ROSE_OVERRIDE;
395 
397  const BaseSemantics::SValuePtr &addr,
398  const BaseSemantics::SValuePtr &dflt) ROSE_OVERRIDE;
399 
400  virtual void writeMemory(RegisterDescriptor segreg,
401  const BaseSemantics::SValuePtr &addr,
402  const BaseSemantics::SValuePtr &data,
403  const BaseSemantics::SValuePtr &cond) ROSE_OVERRIDE;
404 };
405 
406 } // namespace
407 } // namespace
408 } // namespace
409 } // namespace
410 
411 #endif
virtual BaseSemantics::SValuePtr peekMemory(const BaseSemantics::SValuePtr &address, const BaseSemantics::SValuePtr &dflt, BaseSemantics::RiscOperators *addrOps, BaseSemantics::RiscOperators *valOps) ROSE_OVERRIDE
Read a value from memory without side effects.
virtual BaseSemantics::SValuePtr copy(size_t new_width=0) const ROSE_OVERRIDE
Create a new value from an existing value, changing the width if new_width is non-zero.
virtual BaseSemantics::SValuePtr add(const BaseSemantics::SValuePtr &a_, const BaseSemantics::SValuePtr &b_) ROSE_OVERRIDE
Adds two integers of equal size.
virtual uint64_t get_number() const ROSE_OVERRIDE
Return the concrete number for this value.
virtual BaseSemantics::SValuePtr peekMemory(RegisterDescriptor segreg, const BaseSemantics::SValuePtr &addr, const BaseSemantics::SValuePtr &dflt) ROSE_OVERRIDE
Read memory without side effects.
static RiscOperatorsPtr instance(const BaseSemantics::StatePtr &state, const SmtSolverPtr &solver=SmtSolverPtr())
Constructor.
virtual void print(std::ostream &, BaseSemantics::Formatter &) const ROSE_OVERRIDE
Print the register contents.
virtual BaseSemantics::SValuePtr shiftRightArithmetic(const BaseSemantics::SValuePtr &a_, const BaseSemantics::SValuePtr &sa_) ROSE_OVERRIDE
Returns arg shifted right arithmetically (with sign bit).
virtual BaseSemantics::SValuePtr and_(const BaseSemantics::SValuePtr &a_, const BaseSemantics::SValuePtr &b_) ROSE_OVERRIDE
Computes bit-wise AND of two values.
virtual BaseSemantics::SValuePtr concat(const BaseSemantics::SValuePtr &a_, const BaseSemantics::SValuePtr &b_) ROSE_OVERRIDE
Concatenates the bits of two values.
virtual BaseSemantics::SValuePtr readRegister(RegisterDescriptor reg, const BaseSemantics::SValuePtr &dflt, BaseSemantics::RiscOperators *ops) ROSE_OVERRIDE
Read a value from a register.
virtual BaseSemantics::SValuePtr undefined_(size_t nBits) const ROSE_OVERRIDE
Create a new undefined semantic value.
virtual BaseSemantics::RiscOperatorsPtr create(const BaseSemantics::StatePtr &state, const SmtSolverPtr &solver=SmtSolverPtr()) const ROSE_OVERRIDE
Virtual allocating constructor.
virtual bool is_number() const ROSE_OVERRIDE
Determines if the value is a concrete number.
virtual Sawyer::Optional< BaseSemantics::SValuePtr > createOptionalMerge(const BaseSemantics::SValuePtr &other, const BaseSemantics::MergerPtr &, const SmtSolverPtr &) const ROSE_OVERRIDE
Possibly create a new value by merging two existing values.
virtual BaseSemantics::SValuePtr extract(const BaseSemantics::SValuePtr &a_, size_t begin_bit, size_t end_bit) ROSE_OVERRIDE
Extracts bits from a value.
static SValuePtr instance()
Instantiate a new prototypical values.
virtual BaseSemantics::SValuePtr signedModulo(const BaseSemantics::SValuePtr &a_, const BaseSemantics::SValuePtr &b_) ROSE_OVERRIDE
Calculates modulo with signed values.
boost::shared_ptr< class RiscOperators > RiscOperatorsPtr
Shared-ownership pointer to null RISC operations.
virtual BaseSemantics::SValuePtr leastSignificantSetBit(const BaseSemantics::SValuePtr &a_) ROSE_OVERRIDE
Returns position of least significant set bit; zero when no bits are set.
Holds a value or nothing.
Definition: Optional.h:49
virtual BaseSemantics::SValuePtr mostSignificantSetBit(const BaseSemantics::SValuePtr &a_) ROSE_OVERRIDE
Returns position of most significant set bit; zero when no bits are set.
virtual BaseSemantics::SValuePtr rotateRight(const BaseSemantics::SValuePtr &a_, const BaseSemantics::SValuePtr &sa_) ROSE_OVERRIDE
Rotate bits to the right.
virtual SValuePtr protoval() const
Property: Prototypical semantic value.
boost::shared_ptr< class MemoryState > MemoryStatePtr
Shared-ownership pointer to null register state.
virtual BaseSemantics::SValuePtr ite(const BaseSemantics::SValuePtr &sel_, const BaseSemantics::SValuePtr &a_, const BaseSemantics::SValuePtr &b_) ROSE_OVERRIDE
If-then-else.
static RiscOperatorsPtr instance(const RegisterDictionary *regdict)
Instantiate a new RiscOperators object and configures it to use semantic values and states that are d...
Describes (part of) a physical CPU register.
virtual BaseSemantics::RiscOperatorsPtr create(const BaseSemantics::SValuePtr &protoval, const SmtSolverPtr &solver=SmtSolverPtr()) const ROSE_OVERRIDE
Virtual allocating constructor.
virtual BaseSemantics::SValuePtr negate(const BaseSemantics::SValuePtr &a_) ROSE_OVERRIDE
Two&#39;s complement.
virtual BaseSemantics::RegisterStatePtr clone() const ROSE_OVERRIDE
Make a copy of this register state.
virtual BaseSemantics::SValuePtr addWithCarries(const BaseSemantics::SValuePtr &a_, const BaseSemantics::SValuePtr &b_, const BaseSemantics::SValuePtr &c_, BaseSemantics::SValuePtr &carry_out) ROSE_OVERRIDE
Add two values of equal size and a carry bit.
virtual BaseSemantics::RegisterStatePtr create(const BaseSemantics::SValuePtr &protoval, const RegisterDictionary *regdict) const ROSE_OVERRIDE
Virtual constructor.
boost::shared_ptr< class RegisterState > RegisterStatePtr
Shared-ownership pointer to null register state.
Sawyer::SharedPointer< class SmtSolver > SmtSolverPtr
Reference-counting pointer for SMT solvers.
virtual void writeMemory(RegisterDescriptor segreg, const BaseSemantics::SValuePtr &addr, const BaseSemantics::SValuePtr &data, const BaseSemantics::SValuePtr &cond) ROSE_OVERRIDE
Writes a value to memory.
boost::shared_ptr< class RegisterState > RegisterStatePtr
Shared-ownership pointer to a register state.
boost::shared_ptr< class State > StatePtr
Shared-ownership pointer to a semantic state.
virtual BaseSemantics::SValuePtr readMemory(const BaseSemantics::SValuePtr &address, const BaseSemantics::SValuePtr &dflt, BaseSemantics::RiscOperators *addrOps, BaseSemantics::RiscOperators *valOps) ROSE_OVERRIDE
Read a value from memory.
virtual BaseSemantics::SValuePtr unsignedMultiply(const BaseSemantics::SValuePtr &a_, const BaseSemantics::SValuePtr &b_) ROSE_OVERRIDE
Multiply two unsigned values.
virtual BaseSemantics::SValuePtr signExtend(const BaseSemantics::SValuePtr &a_, size_t new_width) ROSE_OVERRIDE
Sign extends a value.
virtual BaseSemantics::SValuePtr unspecified_(size_t nBits) const ROSE_OVERRIDE
Create a new unspecified semantic value.
boost::shared_ptr< class RiscOperators > RiscOperatorsPtr
Shared-ownership pointer to a RISC operators object.
virtual bool may_equal(const BaseSemantics::SValuePtr &other, const SmtSolverPtr &solver=SmtSolverPtr()) const ROSE_OVERRIDE
Returns true if two values could be equal.
virtual bool merge(const BaseSemantics::RegisterStatePtr &other_, BaseSemantics::RiscOperators *) ROSE_OVERRIDE
Merge register states for data flow analysis.
static RiscOperatorsPtr instance(const BaseSemantics::SValuePtr &protoval, const SmtSolverPtr &solver=SmtSolverPtr())
Static allocating constructor.
NullSemantics operators always return a new undefined value.
static SValuePtr instance(size_t nbits)
Instantiate a new undefined value.
virtual BaseSemantics::SValuePtr signedMultiply(const BaseSemantics::SValuePtr &a_, const BaseSemantics::SValuePtr &b_) ROSE_OVERRIDE
Multiplies two signed values.
virtual bool must_equal(const BaseSemantics::SValuePtr &other, const SmtSolverPtr &solver=SmtSolverPtr()) const ROSE_OVERRIDE
Returns true if two values must be equal.
virtual void zero() ROSE_OVERRIDE
Set all registers to the zero.
virtual void print(std::ostream &stream, BaseSemantics::Formatter &) const ROSE_OVERRIDE
Print a value to a stream using default format.
virtual bool merge(const BaseSemantics::MemoryStatePtr &other, BaseSemantics::RiscOperators *addrOps, BaseSemantics::RiscOperators *valOps) ROSE_OVERRIDE
Merge memory states for data flow analysis.
virtual void print(std::ostream &, BaseSemantics::Formatter &) const ROSE_OVERRIDE
Print a memory state to more than one line of output.
virtual BaseSemantics::SValuePtr xor_(const BaseSemantics::SValuePtr &a_, const BaseSemantics::SValuePtr &b_) ROSE_OVERRIDE
Computes bit-wise XOR of two values.
virtual BaseSemantics::SValuePtr unsignedDivide(const BaseSemantics::SValuePtr &a_, const BaseSemantics::SValuePtr &b_) ROSE_OVERRIDE
Divides two unsigned values.
Defines registers available for a particular architecture.
Definition: Registers.h:32
virtual BaseSemantics::SValuePtr number_(size_t nBits, uint64_t number) const ROSE_OVERRIDE
Create a new concrete semantic value.
SharedPointer< U > dynamicCast() const
Dynamic cast.
Base class for most instruction semantics RISC operators.
virtual BaseSemantics::SValuePtr peekRegister(RegisterDescriptor reg, const BaseSemantics::SValuePtr &dflt, BaseSemantics::RiscOperators *ops) ROSE_OVERRIDE
Read a register without side effects.
const RegisterDictionary * regdict
Registers that are able to be stored by this state.
static SValuePtr instance(size_t nbits, uint64_t number)
Instantiate a new concrete value.
virtual void clear() ROSE_OVERRIDE
Removes stored values from the register state.
static SValuePtr instance(const SValuePtr &other)
Instantiate a new copy of an existing value.
virtual BaseSemantics::SValuePtr invert(const BaseSemantics::SValuePtr &a_) ROSE_OVERRIDE
One&#39;s complement.
virtual BaseSemantics::MemoryStatePtr create(const BaseSemantics::SValuePtr &addrProtoval, const BaseSemantics::SValuePtr &valProtoval) const ROSE_OVERRIDE
Virtual allocating constructor.
virtual BaseSemantics::SValuePtr shiftRight(const BaseSemantics::SValuePtr &a_, const BaseSemantics::SValuePtr &sa_) ROSE_OVERRIDE
Returns arg shifted right logically (no sign bit).
boost::shared_ptr< class MemoryState > MemoryStatePtr
Shared-ownership pointer to a memory state.
virtual BaseSemantics::SValuePtr unsignedModulo(const BaseSemantics::SValuePtr &a_, const BaseSemantics::SValuePtr &b_) ROSE_OVERRIDE
Calculates modulo with unsigned values.
virtual BaseSemantics::SValuePtr shiftLeft(const BaseSemantics::SValuePtr &a_, const BaseSemantics::SValuePtr &sa_) ROSE_OVERRIDE
Returns arg shifted left.
virtual BaseSemantics::MemoryStatePtr clone() const ROSE_OVERRIDE
Virtual allocating copy constructor.
virtual size_t get_width() const
Accessor for value width.
virtual BaseSemantics::SValuePtr signedDivide(const BaseSemantics::SValuePtr &a_, const BaseSemantics::SValuePtr &b_) ROSE_OVERRIDE
Divides two signed values.
virtual bool isBottom() const ROSE_OVERRIDE
Determines whether a value is a data-flow bottom.
Sawyer::SharedPointer< class SValue > SValuePtr
Shared-ownership pointer to a null semantic value.
virtual BaseSemantics::SValuePtr rotateLeft(const BaseSemantics::SValuePtr &a_, const BaseSemantics::SValuePtr &sa_) ROSE_OVERRIDE
Rotate bits to the left.
static SValuePtr promote(const BaseSemantics::SValuePtr &v)
Promote a base value to a NullSemantics value.
virtual void writeMemory(const BaseSemantics::SValuePtr &addr, const BaseSemantics::SValuePtr &value, BaseSemantics::RiscOperators *addrOps, BaseSemantics::RiscOperators *valOps) ROSE_OVERRIDE
Write a value to memory.
virtual SmtSolverPtr solver() const
Property: Satisfiability module theory (SMT) solver.
Represents no value.
Definition: Optional.h:32
virtual const std::string & name() const
Property: Name used for debugging.
virtual BaseSemantics::SValuePtr readMemory(RegisterDescriptor segreg, const BaseSemantics::SValuePtr &addr, const BaseSemantics::SValuePtr &dflt, const BaseSemantics::SValuePtr &cond) ROSE_OVERRIDE
Reads a value from memory.
virtual void writeRegister(RegisterDescriptor reg, const BaseSemantics::SValuePtr &value, BaseSemantics::RiscOperators *ops) ROSE_OVERRIDE
Write a value to a register.
virtual BaseSemantics::SValuePtr or_(const BaseSemantics::SValuePtr &a_, const BaseSemantics::SValuePtr &b_) ROSE_OVERRIDE
Computes bit-wise OR of two values.
virtual BaseSemantics::SValuePtr bottom_(size_t nBits) const ROSE_OVERRIDE
Data-flow bottom value.
virtual BaseSemantics::SValuePtr equalToZero(const BaseSemantics::SValuePtr &a_) ROSE_OVERRIDE
Determines whether a value is equal to zero.