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"); throw Exception("Unexpected general purpose register count");
} }
auto& gpRegisterDescriptors = registerDescriptorsByType.at(TargetRegisterType::GENERAL_PURPOSE_REGISTER); 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( this->registerNumberToDescriptorMapping.insert(std::pair(
static_cast<GdbRegisterNumber>(gpRegisterDescriptor.id.value()), static_cast<GdbRegisterNumber>(descriptorIndex),
gpRegisterDescriptor 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 * All AVR8 targets possess 32 general purpose CPU registers. These are not described in the TDF, so we
* construct the descriptors for them here. * construct the descriptors for them here.
*/ */
auto gpRegisterStartAddress = this->targetParameters->gpRegisterStartAddress.value_or(0);
for (std::uint8_t i = 0; i <= 31; i++) { for (std::uint8_t i = 0; i <= 31; i++) {
auto generalPurposeRegisterDescriptor = TargetRegisterDescriptor(); auto generalPurposeRegisterDescriptor = TargetRegisterDescriptor();
generalPurposeRegisterDescriptor.id = i; generalPurposeRegisterDescriptor.startAddress = gpRegisterStartAddress + i;
generalPurposeRegisterDescriptor.startAddress =
this->targetParameters->gpRegisterStartAddress.value_or(0) + i;
generalPurposeRegisterDescriptor.size = 1; generalPurposeRegisterDescriptor.size = 1;
generalPurposeRegisterDescriptor.type = TargetRegisterType::GENERAL_PURPOSE_REGISTER; generalPurposeRegisterDescriptor.type = TargetRegisterType::GENERAL_PURPOSE_REGISTER;
generalPurposeRegisterDescriptor.name = "R" + std::to_string(i); generalPurposeRegisterDescriptor.name = "R" + std::to_string(i);

View File

@@ -26,17 +26,15 @@ namespace Bloom::Targets
std::uint32_t size = 0; std::uint32_t size = 0;
TargetRegisterType type = TargetRegisterType::OTHER; TargetRegisterType type = TargetRegisterType::OTHER;
std::optional<std::size_t> id;
std::optional<std::string> name = ""; std::optional<std::string> name = "";
std::optional<std::string> groupName; std::optional<std::string> groupName;
std::optional<std::string> description; std::optional<std::string> description;
TargetRegisterDescriptor() = default; TargetRegisterDescriptor() = default;
explicit TargetRegisterDescriptor(TargetRegisterType type): type(type) {}; explicit TargetRegisterDescriptor(TargetRegisterType type): type(type) {};
TargetRegisterDescriptor(std::size_t id, TargetRegisterType type): id(id), type(type) {};
bool operator == (const TargetRegisterDescriptor& other) const { 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 TargetRegisters = std::vector<TargetRegister>;
using TargetRegisterDescriptors = std::vector<TargetRegisterDescriptor>; using TargetRegisterDescriptors = std::vector<TargetRegisterDescriptor>;
} }