1e5dd7070Spatrick //===--- AVR.cpp - Implement AVR target feature support -------------------===// 2e5dd7070Spatrick // 3e5dd7070Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4e5dd7070Spatrick // See https://llvm.org/LICENSE.txt for license information. 5e5dd7070Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6e5dd7070Spatrick // 7e5dd7070Spatrick //===----------------------------------------------------------------------===// 8e5dd7070Spatrick // 9e5dd7070Spatrick // This file implements AVR TargetInfo objects. 10e5dd7070Spatrick // 11e5dd7070Spatrick //===----------------------------------------------------------------------===// 12e5dd7070Spatrick 13e5dd7070Spatrick #include "AVR.h" 14e5dd7070Spatrick #include "clang/Basic/MacroBuilder.h" 15e5dd7070Spatrick #include "llvm/ADT/StringSwitch.h" 16e5dd7070Spatrick 17e5dd7070Spatrick using namespace clang; 18e5dd7070Spatrick using namespace clang::targets; 19e5dd7070Spatrick 20e5dd7070Spatrick namespace clang { 21e5dd7070Spatrick namespace targets { 22e5dd7070Spatrick 23e5dd7070Spatrick /// Information about a specific microcontroller. 24e5dd7070Spatrick struct LLVM_LIBRARY_VISIBILITY MCUInfo { 25e5dd7070Spatrick const char *Name; 26e5dd7070Spatrick const char *DefineName; 27e5dd7070Spatrick }; 28e5dd7070Spatrick 29e5dd7070Spatrick // This list should be kept up-to-date with AVRDevices.td in LLVM. 30e5dd7070Spatrick static MCUInfo AVRMcus[] = { 31e5dd7070Spatrick {"at90s1200", "__AVR_AT90S1200__"}, 32e5dd7070Spatrick {"attiny11", "__AVR_ATtiny11__"}, 33e5dd7070Spatrick {"attiny12", "__AVR_ATtiny12__"}, 34e5dd7070Spatrick {"attiny15", "__AVR_ATtiny15__"}, 35e5dd7070Spatrick {"attiny28", "__AVR_ATtiny28__"}, 36e5dd7070Spatrick {"at90s2313", "__AVR_AT90S2313__"}, 37e5dd7070Spatrick {"at90s2323", "__AVR_AT90S2323__"}, 38e5dd7070Spatrick {"at90s2333", "__AVR_AT90S2333__"}, 39e5dd7070Spatrick {"at90s2343", "__AVR_AT90S2343__"}, 40e5dd7070Spatrick {"attiny22", "__AVR_ATtiny22__"}, 41e5dd7070Spatrick {"attiny26", "__AVR_ATtiny26__"}, 42e5dd7070Spatrick {"at86rf401", "__AVR_AT86RF401__"}, 43e5dd7070Spatrick {"at90s4414", "__AVR_AT90S4414__"}, 44e5dd7070Spatrick {"at90s4433", "__AVR_AT90S4433__"}, 45e5dd7070Spatrick {"at90s4434", "__AVR_AT90S4434__"}, 46e5dd7070Spatrick {"at90s8515", "__AVR_AT90S8515__"}, 47e5dd7070Spatrick {"at90c8534", "__AVR_AT90c8534__"}, 48e5dd7070Spatrick {"at90s8535", "__AVR_AT90S8535__"}, 49e5dd7070Spatrick {"ata5272", "__AVR_ATA5272__"}, 50e5dd7070Spatrick {"attiny13", "__AVR_ATtiny13__"}, 51e5dd7070Spatrick {"attiny13a", "__AVR_ATtiny13A__"}, 52e5dd7070Spatrick {"attiny2313", "__AVR_ATtiny2313__"}, 53e5dd7070Spatrick {"attiny2313a", "__AVR_ATtiny2313A__"}, 54e5dd7070Spatrick {"attiny24", "__AVR_ATtiny24__"}, 55e5dd7070Spatrick {"attiny24a", "__AVR_ATtiny24A__"}, 56e5dd7070Spatrick {"attiny4313", "__AVR_ATtiny4313__"}, 57e5dd7070Spatrick {"attiny44", "__AVR_ATtiny44__"}, 58e5dd7070Spatrick {"attiny44a", "__AVR_ATtiny44A__"}, 59e5dd7070Spatrick {"attiny84", "__AVR_ATtiny84__"}, 60e5dd7070Spatrick {"attiny84a", "__AVR_ATtiny84A__"}, 61e5dd7070Spatrick {"attiny25", "__AVR_ATtiny25__"}, 62e5dd7070Spatrick {"attiny45", "__AVR_ATtiny45__"}, 63e5dd7070Spatrick {"attiny85", "__AVR_ATtiny85__"}, 64e5dd7070Spatrick {"attiny261", "__AVR_ATtiny261__"}, 65e5dd7070Spatrick {"attiny261a", "__AVR_ATtiny261A__"}, 66e5dd7070Spatrick {"attiny461", "__AVR_ATtiny461__"}, 67e5dd7070Spatrick {"attiny461a", "__AVR_ATtiny461A__"}, 68e5dd7070Spatrick {"attiny861", "__AVR_ATtiny861__"}, 69e5dd7070Spatrick {"attiny861a", "__AVR_ATtiny861A__"}, 70e5dd7070Spatrick {"attiny87", "__AVR_ATtiny87__"}, 71e5dd7070Spatrick {"attiny43u", "__AVR_ATtiny43U__"}, 72e5dd7070Spatrick {"attiny48", "__AVR_ATtiny48__"}, 73e5dd7070Spatrick {"attiny88", "__AVR_ATtiny88__"}, 74e5dd7070Spatrick {"attiny828", "__AVR_ATtiny828__"}, 75e5dd7070Spatrick {"at43usb355", "__AVR_AT43USB355__"}, 76e5dd7070Spatrick {"at76c711", "__AVR_AT76C711__"}, 77e5dd7070Spatrick {"atmega103", "__AVR_ATmega103__"}, 78e5dd7070Spatrick {"at43usb320", "__AVR_AT43USB320__"}, 79e5dd7070Spatrick {"attiny167", "__AVR_ATtiny167__"}, 80e5dd7070Spatrick {"at90usb82", "__AVR_AT90USB82__"}, 81e5dd7070Spatrick {"at90usb162", "__AVR_AT90USB162__"}, 82e5dd7070Spatrick {"ata5505", "__AVR_ATA5505__"}, 83e5dd7070Spatrick {"atmega8u2", "__AVR_ATmega8U2__"}, 84e5dd7070Spatrick {"atmega16u2", "__AVR_ATmega16U2__"}, 85e5dd7070Spatrick {"atmega32u2", "__AVR_ATmega32U2__"}, 86e5dd7070Spatrick {"attiny1634", "__AVR_ATtiny1634__"}, 87e5dd7070Spatrick {"atmega8", "__AVR_ATmega8__"}, 88e5dd7070Spatrick {"ata6289", "__AVR_ATA6289__"}, 89e5dd7070Spatrick {"atmega8a", "__AVR_ATmega8A__"}, 90e5dd7070Spatrick {"ata6285", "__AVR_ATA6285__"}, 91e5dd7070Spatrick {"ata6286", "__AVR_ATA6286__"}, 92e5dd7070Spatrick {"atmega48", "__AVR_ATmega48__"}, 93e5dd7070Spatrick {"atmega48a", "__AVR_ATmega48A__"}, 94e5dd7070Spatrick {"atmega48pa", "__AVR_ATmega48PA__"}, 95e5dd7070Spatrick {"atmega48p", "__AVR_ATmega48P__"}, 96e5dd7070Spatrick {"atmega88", "__AVR_ATmega88__"}, 97e5dd7070Spatrick {"atmega88a", "__AVR_ATmega88A__"}, 98e5dd7070Spatrick {"atmega88p", "__AVR_ATmega88P__"}, 99e5dd7070Spatrick {"atmega88pa", "__AVR_ATmega88PA__"}, 100e5dd7070Spatrick {"atmega8515", "__AVR_ATmega8515__"}, 101e5dd7070Spatrick {"atmega8535", "__AVR_ATmega8535__"}, 102e5dd7070Spatrick {"atmega8hva", "__AVR_ATmega8HVA__"}, 103e5dd7070Spatrick {"at90pwm1", "__AVR_AT90PWM1__"}, 104e5dd7070Spatrick {"at90pwm2", "__AVR_AT90PWM2__"}, 105e5dd7070Spatrick {"at90pwm2b", "__AVR_AT90PWM2B__"}, 106e5dd7070Spatrick {"at90pwm3", "__AVR_AT90PWM3__"}, 107e5dd7070Spatrick {"at90pwm3b", "__AVR_AT90PWM3B__"}, 108e5dd7070Spatrick {"at90pwm81", "__AVR_AT90PWM81__"}, 109e5dd7070Spatrick {"ata5790", "__AVR_ATA5790__"}, 110e5dd7070Spatrick {"ata5795", "__AVR_ATA5795__"}, 111e5dd7070Spatrick {"atmega16", "__AVR_ATmega16__"}, 112e5dd7070Spatrick {"atmega16a", "__AVR_ATmega16A__"}, 113e5dd7070Spatrick {"atmega161", "__AVR_ATmega161__"}, 114e5dd7070Spatrick {"atmega162", "__AVR_ATmega162__"}, 115e5dd7070Spatrick {"atmega163", "__AVR_ATmega163__"}, 116e5dd7070Spatrick {"atmega164a", "__AVR_ATmega164A__"}, 117e5dd7070Spatrick {"atmega164p", "__AVR_ATmega164P__"}, 118e5dd7070Spatrick {"atmega164pa", "__AVR_ATmega164PA__"}, 119e5dd7070Spatrick {"atmega165", "__AVR_ATmega165__"}, 120e5dd7070Spatrick {"atmega165a", "__AVR_ATmega165A__"}, 121e5dd7070Spatrick {"atmega165p", "__AVR_ATmega165P__"}, 122e5dd7070Spatrick {"atmega165pa", "__AVR_ATmega165PA__"}, 123e5dd7070Spatrick {"atmega168", "__AVR_ATmega168__"}, 124e5dd7070Spatrick {"atmega168a", "__AVR_ATmega168A__"}, 125e5dd7070Spatrick {"atmega168p", "__AVR_ATmega168P__"}, 126e5dd7070Spatrick {"atmega168pa", "__AVR_ATmega168PA__"}, 127e5dd7070Spatrick {"atmega169", "__AVR_ATmega169__"}, 128e5dd7070Spatrick {"atmega169a", "__AVR_ATmega169A__"}, 129e5dd7070Spatrick {"atmega169p", "__AVR_ATmega169P__"}, 130e5dd7070Spatrick {"atmega169pa", "__AVR_ATmega169PA__"}, 131e5dd7070Spatrick {"atmega32", "__AVR_ATmega32__"}, 132e5dd7070Spatrick {"atmega32a", "__AVR_ATmega32A__"}, 133e5dd7070Spatrick {"atmega323", "__AVR_ATmega323__"}, 134e5dd7070Spatrick {"atmega324a", "__AVR_ATmega324A__"}, 135e5dd7070Spatrick {"atmega324p", "__AVR_ATmega324P__"}, 136e5dd7070Spatrick {"atmega324pa", "__AVR_ATmega324PA__"}, 137e5dd7070Spatrick {"atmega325", "__AVR_ATmega325__"}, 138e5dd7070Spatrick {"atmega325a", "__AVR_ATmega325A__"}, 139e5dd7070Spatrick {"atmega325p", "__AVR_ATmega325P__"}, 140e5dd7070Spatrick {"atmega325pa", "__AVR_ATmega325PA__"}, 141e5dd7070Spatrick {"atmega3250", "__AVR_ATmega3250__"}, 142e5dd7070Spatrick {"atmega3250a", "__AVR_ATmega3250A__"}, 143e5dd7070Spatrick {"atmega3250p", "__AVR_ATmega3250P__"}, 144e5dd7070Spatrick {"atmega3250pa", "__AVR_ATmega3250PA__"}, 145e5dd7070Spatrick {"atmega328", "__AVR_ATmega328__"}, 146e5dd7070Spatrick {"atmega328p", "__AVR_ATmega328P__"}, 147e5dd7070Spatrick {"atmega329", "__AVR_ATmega329__"}, 148e5dd7070Spatrick {"atmega329a", "__AVR_ATmega329A__"}, 149e5dd7070Spatrick {"atmega329p", "__AVR_ATmega329P__"}, 150e5dd7070Spatrick {"atmega329pa", "__AVR_ATmega329PA__"}, 151e5dd7070Spatrick {"atmega3290", "__AVR_ATmega3290__"}, 152e5dd7070Spatrick {"atmega3290a", "__AVR_ATmega3290A__"}, 153e5dd7070Spatrick {"atmega3290p", "__AVR_ATmega3290P__"}, 154e5dd7070Spatrick {"atmega3290pa", "__AVR_ATmega3290PA__"}, 155e5dd7070Spatrick {"atmega406", "__AVR_ATmega406__"}, 156e5dd7070Spatrick {"atmega64", "__AVR_ATmega64__"}, 157e5dd7070Spatrick {"atmega64a", "__AVR_ATmega64A__"}, 158e5dd7070Spatrick {"atmega640", "__AVR_ATmega640__"}, 159e5dd7070Spatrick {"atmega644", "__AVR_ATmega644__"}, 160e5dd7070Spatrick {"atmega644a", "__AVR_ATmega644A__"}, 161e5dd7070Spatrick {"atmega644p", "__AVR_ATmega644P__"}, 162e5dd7070Spatrick {"atmega644pa", "__AVR_ATmega644PA__"}, 163e5dd7070Spatrick {"atmega645", "__AVR_ATmega645__"}, 164e5dd7070Spatrick {"atmega645a", "__AVR_ATmega645A__"}, 165e5dd7070Spatrick {"atmega645p", "__AVR_ATmega645P__"}, 166e5dd7070Spatrick {"atmega649", "__AVR_ATmega649__"}, 167e5dd7070Spatrick {"atmega649a", "__AVR_ATmega649A__"}, 168e5dd7070Spatrick {"atmega649p", "__AVR_ATmega649P__"}, 169e5dd7070Spatrick {"atmega6450", "__AVR_ATmega6450__"}, 170e5dd7070Spatrick {"atmega6450a", "__AVR_ATmega6450A__"}, 171e5dd7070Spatrick {"atmega6450p", "__AVR_ATmega6450P__"}, 172e5dd7070Spatrick {"atmega6490", "__AVR_ATmega6490__"}, 173e5dd7070Spatrick {"atmega6490a", "__AVR_ATmega6490A__"}, 174e5dd7070Spatrick {"atmega6490p", "__AVR_ATmega6490P__"}, 175e5dd7070Spatrick {"atmega64rfr2", "__AVR_ATmega64RFR2__"}, 176e5dd7070Spatrick {"atmega644rfr2", "__AVR_ATmega644RFR2__"}, 177e5dd7070Spatrick {"atmega16hva", "__AVR_ATmega16HVA__"}, 178e5dd7070Spatrick {"atmega16hva2", "__AVR_ATmega16HVA2__"}, 179e5dd7070Spatrick {"atmega16hvb", "__AVR_ATmega16HVB__"}, 180e5dd7070Spatrick {"atmega16hvbrevb", "__AVR_ATmega16HVBREVB__"}, 181e5dd7070Spatrick {"atmega32hvb", "__AVR_ATmega32HVB__"}, 182e5dd7070Spatrick {"atmega32hvbrevb", "__AVR_ATmega32HVBREVB__"}, 183e5dd7070Spatrick {"atmega64hve", "__AVR_ATmega64HVE__"}, 184e5dd7070Spatrick {"at90can32", "__AVR_AT90CAN32__"}, 185e5dd7070Spatrick {"at90can64", "__AVR_AT90CAN64__"}, 186e5dd7070Spatrick {"at90pwm161", "__AVR_AT90PWM161__"}, 187e5dd7070Spatrick {"at90pwm216", "__AVR_AT90PWM216__"}, 188e5dd7070Spatrick {"at90pwm316", "__AVR_AT90PWM316__"}, 189e5dd7070Spatrick {"atmega32c1", "__AVR_ATmega32C1__"}, 190e5dd7070Spatrick {"atmega64c1", "__AVR_ATmega64C1__"}, 191e5dd7070Spatrick {"atmega16m1", "__AVR_ATmega16M1__"}, 192e5dd7070Spatrick {"atmega32m1", "__AVR_ATmega32M1__"}, 193e5dd7070Spatrick {"atmega64m1", "__AVR_ATmega64M1__"}, 194e5dd7070Spatrick {"atmega16u4", "__AVR_ATmega16U4__"}, 195e5dd7070Spatrick {"atmega32u4", "__AVR_ATmega32U4__"}, 196e5dd7070Spatrick {"atmega32u6", "__AVR_ATmega32U6__"}, 197e5dd7070Spatrick {"at90usb646", "__AVR_AT90USB646__"}, 198e5dd7070Spatrick {"at90usb647", "__AVR_AT90USB647__"}, 199e5dd7070Spatrick {"at90scr100", "__AVR_AT90SCR100__"}, 200e5dd7070Spatrick {"at94k", "__AVR_AT94K__"}, 201e5dd7070Spatrick {"m3000", "__AVR_AT000__"}, 202e5dd7070Spatrick {"atmega128", "__AVR_ATmega128__"}, 203e5dd7070Spatrick {"atmega128a", "__AVR_ATmega128A__"}, 204e5dd7070Spatrick {"atmega1280", "__AVR_ATmega1280__"}, 205e5dd7070Spatrick {"atmega1281", "__AVR_ATmega1281__"}, 206e5dd7070Spatrick {"atmega1284", "__AVR_ATmega1284__"}, 207e5dd7070Spatrick {"atmega1284p", "__AVR_ATmega1284P__"}, 208e5dd7070Spatrick {"atmega128rfa1", "__AVR_ATmega128RFA1__"}, 209e5dd7070Spatrick {"atmega128rfr2", "__AVR_ATmega128RFR2__"}, 210e5dd7070Spatrick {"atmega1284rfr2", "__AVR_ATmega1284RFR2__"}, 211e5dd7070Spatrick {"at90can128", "__AVR_AT90CAN128__"}, 212e5dd7070Spatrick {"at90usb1286", "__AVR_AT90USB1286__"}, 213e5dd7070Spatrick {"at90usb1287", "__AVR_AT90USB1287__"}, 214e5dd7070Spatrick {"atmega2560", "__AVR_ATmega2560__"}, 215e5dd7070Spatrick {"atmega2561", "__AVR_ATmega2561__"}, 216e5dd7070Spatrick {"atmega256rfr2", "__AVR_ATmega256RFR2__"}, 217e5dd7070Spatrick {"atmega2564rfr2", "__AVR_ATmega2564RFR2__"}, 218e5dd7070Spatrick {"atxmega16a4", "__AVR_ATxmega16A4__"}, 219e5dd7070Spatrick {"atxmega16a4u", "__AVR_ATxmega16a4U__"}, 220e5dd7070Spatrick {"atxmega16c4", "__AVR_ATxmega16C4__"}, 221e5dd7070Spatrick {"atxmega16d4", "__AVR_ATxmega16D4__"}, 222e5dd7070Spatrick {"atxmega32a4", "__AVR_ATxmega32A4__"}, 223e5dd7070Spatrick {"atxmega32a4u", "__AVR_ATxmega32A4U__"}, 224e5dd7070Spatrick {"atxmega32c4", "__AVR_ATxmega32C4__"}, 225e5dd7070Spatrick {"atxmega32d4", "__AVR_ATxmega32D4__"}, 226e5dd7070Spatrick {"atxmega32e5", "__AVR_ATxmega32E5__"}, 227e5dd7070Spatrick {"atxmega16e5", "__AVR_ATxmega16E5__"}, 228e5dd7070Spatrick {"atxmega8e5", "__AVR_ATxmega8E5__"}, 229e5dd7070Spatrick {"atxmega32x1", "__AVR_ATxmega32X1__"}, 230e5dd7070Spatrick {"atxmega64a3", "__AVR_ATxmega64A3__"}, 231e5dd7070Spatrick {"atxmega64a3u", "__AVR_ATxmega64A3U__"}, 232e5dd7070Spatrick {"atxmega64a4u", "__AVR_ATxmega64A4U__"}, 233e5dd7070Spatrick {"atxmega64b1", "__AVR_ATxmega64B1__"}, 234e5dd7070Spatrick {"atxmega64b3", "__AVR_ATxmega64B3__"}, 235e5dd7070Spatrick {"atxmega64c3", "__AVR_ATxmega64C3__"}, 236e5dd7070Spatrick {"atxmega64d3", "__AVR_ATxmega64D3__"}, 237e5dd7070Spatrick {"atxmega64d4", "__AVR_ATxmega64D4__"}, 238e5dd7070Spatrick {"atxmega64a1", "__AVR_ATxmega64A1__"}, 239e5dd7070Spatrick {"atxmega64a1u", "__AVR_ATxmega64A1U__"}, 240e5dd7070Spatrick {"atxmega128a3", "__AVR_ATxmega128A3__"}, 241e5dd7070Spatrick {"atxmega128a3u", "__AVR_ATxmega128A3U__"}, 242e5dd7070Spatrick {"atxmega128b1", "__AVR_ATxmega128B1__"}, 243e5dd7070Spatrick {"atxmega128b3", "__AVR_ATxmega128B3__"}, 244e5dd7070Spatrick {"atxmega128c3", "__AVR_ATxmega128C3__"}, 245e5dd7070Spatrick {"atxmega128d3", "__AVR_ATxmega128D3__"}, 246e5dd7070Spatrick {"atxmega128d4", "__AVR_ATxmega128D4__"}, 247e5dd7070Spatrick {"atxmega192a3", "__AVR_ATxmega192A3__"}, 248e5dd7070Spatrick {"atxmega192a3u", "__AVR_ATxmega192A3U__"}, 249e5dd7070Spatrick {"atxmega192c3", "__AVR_ATxmega192C3__"}, 250e5dd7070Spatrick {"atxmega192d3", "__AVR_ATxmega192D3__"}, 251e5dd7070Spatrick {"atxmega256a3", "__AVR_ATxmega256A3__"}, 252e5dd7070Spatrick {"atxmega256a3u", "__AVR_ATxmega256A3U__"}, 253e5dd7070Spatrick {"atxmega256a3b", "__AVR_ATxmega256A3B__"}, 254e5dd7070Spatrick {"atxmega256a3bu", "__AVR_ATxmega256A3BU__"}, 255e5dd7070Spatrick {"atxmega256c3", "__AVR_ATxmega256C3__"}, 256e5dd7070Spatrick {"atxmega256d3", "__AVR_ATxmega256D3__"}, 257e5dd7070Spatrick {"atxmega384c3", "__AVR_ATxmega384C3__"}, 258e5dd7070Spatrick {"atxmega384d3", "__AVR_ATxmega384D3__"}, 259e5dd7070Spatrick {"atxmega128a1", "__AVR_ATxmega128A1__"}, 260e5dd7070Spatrick {"atxmega128a1u", "__AVR_ATxmega128A1U__"}, 261e5dd7070Spatrick {"atxmega128a4u", "__AVR_ATxmega128a4U__"}, 262e5dd7070Spatrick {"attiny4", "__AVR_ATtiny4__"}, 263e5dd7070Spatrick {"attiny5", "__AVR_ATtiny5__"}, 264e5dd7070Spatrick {"attiny9", "__AVR_ATtiny9__"}, 265e5dd7070Spatrick {"attiny10", "__AVR_ATtiny10__"}, 266e5dd7070Spatrick {"attiny20", "__AVR_ATtiny20__"}, 267e5dd7070Spatrick {"attiny40", "__AVR_ATtiny40__"}, 268e5dd7070Spatrick {"attiny102", "__AVR_ATtiny102__"}, 269e5dd7070Spatrick {"attiny104", "__AVR_ATtiny104__"}, 270e5dd7070Spatrick }; 271e5dd7070Spatrick 272e5dd7070Spatrick } // namespace targets 273e5dd7070Spatrick } // namespace clang 274e5dd7070Spatrick 275e5dd7070Spatrick static constexpr llvm::StringLiteral ValidFamilyNames[] = { 276e5dd7070Spatrick "avr1", "avr2", "avr25", "avr3", "avr31", 277e5dd7070Spatrick "avr35", "avr4", "avr5", "avr51", "avr6", 278e5dd7070Spatrick "avrxmega1", "avrxmega2", "avrxmega3", "avrxmega4", "avrxmega5", 279e5dd7070Spatrick "avrxmega6", "avrxmega7", "avrtiny"}; 280e5dd7070Spatrick 281e5dd7070Spatrick bool AVRTargetInfo::isValidCPUName(StringRef Name) const { 282e5dd7070Spatrick bool IsFamily = 283e5dd7070Spatrick llvm::find(ValidFamilyNames, Name) != std::end(ValidFamilyNames); 284e5dd7070Spatrick 285e5dd7070Spatrick bool IsMCU = 286e5dd7070Spatrick llvm::find_if(AVRMcus, [&](const MCUInfo &Info) { 287e5dd7070Spatrick return Info.Name == Name; 288e5dd7070Spatrick }) != std::end(AVRMcus); 289e5dd7070Spatrick return IsFamily || IsMCU; 290e5dd7070Spatrick } 291e5dd7070Spatrick 292e5dd7070Spatrick void AVRTargetInfo::fillValidCPUList(SmallVectorImpl<StringRef> &Values) const { 293e5dd7070Spatrick Values.append(std::begin(ValidFamilyNames), std::end(ValidFamilyNames)); 294e5dd7070Spatrick for (const MCUInfo &Info : AVRMcus) 295e5dd7070Spatrick Values.push_back(Info.Name); 296e5dd7070Spatrick } 297e5dd7070Spatrick 298e5dd7070Spatrick void AVRTargetInfo::getTargetDefines(const LangOptions &Opts, 299e5dd7070Spatrick MacroBuilder &Builder) const { 300e5dd7070Spatrick Builder.defineMacro("AVR"); 301e5dd7070Spatrick Builder.defineMacro("__AVR"); 302e5dd7070Spatrick Builder.defineMacro("__AVR__"); 303*ec727ea7Spatrick Builder.defineMacro("__ELF__"); 304e5dd7070Spatrick 305e5dd7070Spatrick if (!this->CPU.empty()) { 306e5dd7070Spatrick auto It = llvm::find_if( 307e5dd7070Spatrick AVRMcus, [&](const MCUInfo &Info) { return Info.Name == this->CPU; }); 308e5dd7070Spatrick 309e5dd7070Spatrick if (It != std::end(AVRMcus)) 310e5dd7070Spatrick Builder.defineMacro(It->DefineName); 311e5dd7070Spatrick } 312e5dd7070Spatrick } 313