From 9a31bddd0678126893df39d613bd4f5765b0afd7 Mon Sep 17 00:00:00 2001 From: Nav Date: Sat, 5 Jun 2021 22:36:53 +0100 Subject: [PATCH] Fixed issue with AVR8 'store program memory control register' (SPMCR) loading from TDFs --- .../TargetDescriptionFile.cpp | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/Targets/TargetDescription/TargetDescriptionFile.cpp b/src/Targets/TargetDescription/TargetDescriptionFile.cpp index c6b89a0d..20bc966d 100644 --- a/src/Targets/TargetDescription/TargetDescriptionFile.cpp +++ b/src/Targets/TargetDescription/TargetDescriptionFile.cpp @@ -595,11 +595,14 @@ std::optional TargetDescriptionFile::getOscillatorCalibrationRegister( std::optional TargetDescriptionFile::getSpmcsRegister() const { auto cpuRegisterGroup = this->getCpuRegisterGroup(); - if (cpuRegisterGroup.has_value()) { - auto spmcsRegisterIt = cpuRegisterGroup->registersMappedByName.find("spmcsr"); + if (cpuRegisterGroup.has_value() && cpuRegisterGroup->registersMappedByName.contains("spmcsr")) { + return cpuRegisterGroup->registersMappedByName.at("spmcsr"); - if (spmcsRegisterIt != cpuRegisterGroup->registersMappedByName.end()) { - return spmcsRegisterIt->second; + } else { + auto bootLoadRegisterGroup = this->getBootLoadRegisterGroup(); + + if (bootLoadRegisterGroup.has_value() && bootLoadRegisterGroup->registersMappedByName.contains("spmcsr")) { + return bootLoadRegisterGroup->registersMappedByName.at("spmcsr"); } } @@ -609,11 +612,14 @@ std::optional TargetDescriptionFile::getSpmcsRegister() const { std::optional TargetDescriptionFile::getSpmcRegister() const { auto bootLoadRegisterGroup = this->getBootLoadRegisterGroup(); - if (bootLoadRegisterGroup.has_value()) { - auto spmcRegisterIt = bootLoadRegisterGroup->registersMappedByName.find("spmcr"); + if (bootLoadRegisterGroup.has_value() && bootLoadRegisterGroup->registersMappedByName.contains("spmcr")) { + return bootLoadRegisterGroup->registersMappedByName.at("spmcr"); - if (spmcRegisterIt != bootLoadRegisterGroup->registersMappedByName.end()) { - return spmcRegisterIt->second; + } else { + auto cpuRegisterGroup = this->getCpuRegisterGroup(); + + if (cpuRegisterGroup.has_value() && cpuRegisterGroup->registersMappedByName.contains("spmcr")) { + return cpuRegisterGroup->registersMappedByName.at("spmcr"); } }