31 Operand& operand = resolved_operands[i];
46 if (!
memory.is_valid_address(maybe_base_address)) {
48 format(
"Addressing error: Base address (mem[0]) is not a valid address (has tag ",
55 const uint64_t
offset = rel_offset + *base_address;
68 if (!
memory.is_valid_address(indirect_value)) {
70 format(
"Addressing error: Address after indirection is not a valid address (address ",
76 operand = indirect_value;
80 return resolved_operands;
#define AVM_HIGHEST_MEM_ADDRESS
#define BB_BENCH_NAME(name)
static TaggedValue from(T value)
std::string to_string() const
virtual const ExecInstructionSpec & get(ExecutionOpCode opcode) const =0
const InstructionInfoDBInterface & instruction_info_db
std::vector< Operand > resolve(const Instruction &instruction, MemoryInterface &memory) override
std::string format(Args... args)
bool is_operand_relative(uint16_t indirect_flag, size_t operand_index)
bool is_operand_indirect(uint16_t indirect_flag, size_t operand_index)
uint8_t get_tag_bits(ValueTag tag)
constexpr auto MemoryAddressTag
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
std::string to_string(bb::avm2::ValueTag tag)