New wrb GDB monitor command, for writing to individual bit fields of target registers
This commit is contained in:
@@ -1,5 +1,9 @@
|
||||
#include "TargetBitFieldDescriptor.hpp"
|
||||
|
||||
#include <bitset>
|
||||
#include <limits>
|
||||
#include <numeric>
|
||||
|
||||
namespace Targets
|
||||
{
|
||||
TargetBitFieldDescriptor::TargetBitFieldDescriptor(
|
||||
@@ -14,6 +18,21 @@ namespace Targets
|
||||
, description(description)
|
||||
{}
|
||||
|
||||
std::size_t TargetBitFieldDescriptor::width() const {
|
||||
const auto maskBitset = std::bitset<std::numeric_limits<decltype(TargetBitFieldDescriptor::mask)>::digits>{
|
||||
this->mask
|
||||
};
|
||||
|
||||
auto width = std::size_t{0};
|
||||
for (auto maskIndex = std::size_t{0}; maskIndex < maskBitset.size(); ++maskIndex) {
|
||||
if (maskBitset[maskIndex]) {
|
||||
++width;
|
||||
}
|
||||
}
|
||||
|
||||
return width;
|
||||
}
|
||||
|
||||
TargetBitFieldDescriptor TargetBitFieldDescriptor::clone() const {
|
||||
return {*this};
|
||||
}
|
||||
|
||||
@@ -28,6 +28,8 @@ namespace Targets
|
||||
TargetBitFieldDescriptor(TargetBitFieldDescriptor&& other) noexcept = default;
|
||||
TargetBitFieldDescriptor& operator = (TargetBitFieldDescriptor&& other) = default;
|
||||
|
||||
std::size_t width() const;
|
||||
|
||||
[[nodiscard]] TargetBitFieldDescriptor clone() const;
|
||||
|
||||
private:
|
||||
|
||||
Reference in New Issue
Block a user