//===-- AVRTargetParser - Parser for AVR target features ------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// /// /// \file /// This file implements a target parser to recognise AVR hardware features. /// //===----------------------------------------------------------------------===// #include "llvm/TargetParser/AVRTargetParser.h" #include "llvm/ADT/DenseMap.h" #include "llvm/BinaryFormat/ELF.h" #include "llvm/Support/Errc.h" using namespace llvm; Expected AVR::getFeatureSetFromEFlag(const unsigned EFlag) { static const DenseMap EFlagToFeatureSet = { {ELF::EF_AVR_ARCH_AVR1, "avr1"}, {ELF::EF_AVR_ARCH_AVR2, "avr2"}, {ELF::EF_AVR_ARCH_AVR25, "avr25"}, {ELF::EF_AVR_ARCH_AVR3, "avr3"}, {ELF::EF_AVR_ARCH_AVR31, "avr31"}, {ELF::EF_AVR_ARCH_AVR35, "avr35"}, {ELF::EF_AVR_ARCH_AVR4, "avr4"}, {ELF::EF_AVR_ARCH_AVR5, "avr5"}, {ELF::EF_AVR_ARCH_AVR51, "avr51"}, {ELF::EF_AVR_ARCH_AVR6, "avr6"}, {ELF::EF_AVR_ARCH_AVRTINY, "avrtiny"}, {ELF::EF_AVR_ARCH_XMEGA1, "xmega1"}, {ELF::EF_AVR_ARCH_XMEGA2, "xmega2"}, {ELF::EF_AVR_ARCH_XMEGA3, "xmega3"}, {ELF::EF_AVR_ARCH_XMEGA4, "xmega4"}, {ELF::EF_AVR_ARCH_XMEGA5, "xmega"}, {ELF::EF_AVR_ARCH_XMEGA6, "xmega"}, {ELF::EF_AVR_ARCH_XMEGA7, "xmega"}, }; auto It = EFlagToFeatureSet.find(EFlag); if (It != EFlagToFeatureSet.end()) return It->second.str(); return createStringError(errc::invalid_argument, "unrecognised AVR version, 0x" + Twine::utohexstr(EFlag)); }