Removed target register descriptor ID

This commit is contained in:
Nav
2021-08-07 18:09:12 +01:00
parent 81ad21b005
commit 9e29c3b19a
3 changed files with 15 additions and 10 deletions

View File

@@ -27,11 +27,20 @@ void AvrGdbRsp::loadRegisterNumberToDescriptorMapping() {
throw Exception("Unexpected general purpose register count");
}
auto& gpRegisterDescriptors = registerDescriptorsByType.at(TargetRegisterType::GENERAL_PURPOSE_REGISTER);
for (const auto& gpRegisterDescriptor : gpRegisterDescriptors) {
std::sort(
gpRegisterDescriptors.begin(),
gpRegisterDescriptors.end(),
[](const TargetRegisterDescriptor& descriptorA, const TargetRegisterDescriptor& descriptorB) {
return descriptorA.startAddress.value() < descriptorB.startAddress.value();
}
);
for (std::size_t descriptorIndex = 0; descriptorIndex < gpRegisterDescriptors.size(); descriptorIndex++) {
this->registerNumberToDescriptorMapping.insert(std::pair(
static_cast<GdbRegisterNumber>(gpRegisterDescriptor.id.value()),
gpRegisterDescriptor
static_cast<GdbRegisterNumber>(descriptorIndex),
gpRegisterDescriptors[descriptorIndex]
));
}

View File

@@ -58,11 +58,10 @@ void Avr8::loadTargetRegisterDescriptors() {
* All AVR8 targets possess 32 general purpose CPU registers. These are not described in the TDF, so we
* construct the descriptors for them here.
*/
auto gpRegisterStartAddress = this->targetParameters->gpRegisterStartAddress.value_or(0);
for (std::uint8_t i = 0; i <= 31; i++) {
auto generalPurposeRegisterDescriptor = TargetRegisterDescriptor();
generalPurposeRegisterDescriptor.id = i;
generalPurposeRegisterDescriptor.startAddress =
this->targetParameters->gpRegisterStartAddress.value_or(0) + i;
generalPurposeRegisterDescriptor.startAddress = gpRegisterStartAddress + i;
generalPurposeRegisterDescriptor.size = 1;
generalPurposeRegisterDescriptor.type = TargetRegisterType::GENERAL_PURPOSE_REGISTER;
generalPurposeRegisterDescriptor.name = "R" + std::to_string(i);

View File

@@ -26,17 +26,15 @@ namespace Bloom::Targets
std::uint32_t size = 0;
TargetRegisterType type = TargetRegisterType::OTHER;
std::optional<std::size_t> id;
std::optional<std::string> name = "";
std::optional<std::string> groupName;
std::optional<std::string> description;
TargetRegisterDescriptor() = default;
explicit TargetRegisterDescriptor(TargetRegisterType type): type(type) {};
TargetRegisterDescriptor(std::size_t id, TargetRegisterType type): id(id), type(type) {};
bool operator == (const TargetRegisterDescriptor& other) const {
return this->id == other.id && this->type == other.type;
return this->startAddress.value_or(0) == other.startAddress.value_or(0) && this->type == other.type;
}
};
@@ -53,7 +51,6 @@ namespace Bloom::Targets
}
};
using TargetRegisterMap = std::map<std::size_t, TargetRegister>;
using TargetRegisters = std::vector<TargetRegister>;
using TargetRegisterDescriptors = std::vector<TargetRegisterDescriptor>;
}