#pragma once #include #include "src/DebugToolDrivers/Protocols/RiscVDebugSpec/Common.hpp" namespace DebugToolDrivers::Protocols::RiscVDebugSpec::DebugModule::Registers { struct MemoryAccessControlField { enum class MemorySize: std::uint8_t { SIZE_8 = 0x00, SIZE_16 = 0x01, SIZE_32 = 0x02, SIZE_64 = 0x03, SIZE_128 = 0x04, }; bool write = false; bool postIncrement = false; MemorySize size = MemorySize::SIZE_8; bool virtualAddress = false; static constexpr auto fromValue(std::uint32_t value) { return MemoryAccessControlField{ .write = static_cast(value & (0x01 << 16)), .postIncrement = static_cast(value & (0x01 << 19)), .size = static_cast((value >> 20) & 0x07), .virtualAddress = static_cast(value & (0x01 << 23)), }; } [[nodiscard]] constexpr std::uint32_t value() const { return std::uint32_t{0} | static_cast(this->write) << 16 | static_cast(this->postIncrement) << 19 | static_cast(this->size) << 20 | static_cast(this->virtualAddress) << 23 ; } }; }