1//===---------------------------------------------------------------------===// 2// AVR Device Definitions 3//===---------------------------------------------------------------------===// 4 5// :TODO: Implement the skip errata, see `gcc/config/avr/avr-arch.h` for details 6// :TODO: We define all devices with SRAM to have all variants of LD/ST/LDD/STD. 7// In reality, avr1 (no SRAM) has one variant each of `LD` and `ST`. 8// avr2 (with SRAM) adds the rest of the variants. 9 10// A feature set aggregates features, grouping them. We don't want to create a 11// new member in AVRSubtarget (to store a value) for each set because we do not 12// care if the set is supported, only the subfeatures inside the set. We fix 13// this by simply setting the same dummy member for all feature sets, which is 14// then ignored. 15class FeatureSet<string name, string desc, list<SubtargetFeature> i> 16 : SubtargetFeature<name, "m_FeatureSetDummy", "true", desc, i>; 17 18// A family of microcontrollers, defining a set of supported features. 19class Family<string name, list<SubtargetFeature> i> 20 : FeatureSet< 21 name, !strconcat("The device is a part of the ", name, " family"), i>; 22 23// The device has SRAM, and supports the bare minimum of 24// SRAM-relevant instructions. 25// 26// These are: 27// LD - all 9 variants 28// ST - all 9 variants 29// LDD - two variants for Y and Z 30// STD - two variants for Y and Z 31// `LDS Rd, K` 32// `STS k, Rr` 33// `PUSH`/`POP` 34def FeatureSRAM : SubtargetFeature<"sram", "m_hasSRAM", "true", 35 "The device has random access memory">; 36 37// The device supports the `JMP k` and `CALL k` instructions. 38def FeatureJMPCALL : SubtargetFeature<"jmpcall", "m_hasJMPCALL", "true", 39 "The device supports the `JMP` and " 40 "`CALL` instructions">; 41 42// The device supports the indirect branches `IJMP` and `ICALL`. 43def FeatureIJMPCALL : SubtargetFeature<"ijmpcall", "m_hasIJMPCALL", "true", 44 "The device supports `IJMP`/`ICALL`" 45 "instructions">; 46 47// The device supports the extended indirect branches `EIJMP` and `EICALL`. 48def FeatureEIJMPCALL : SubtargetFeature<"eijmpcall", "m_hasEIJMPCALL", "true", 49 "The device supports the " 50 "`EIJMP`/`EICALL` instructions">; 51 52// The device supports `ADDI Rd, K`, `SUBI Rd, K`. 53def FeatureADDSUBIW : SubtargetFeature<"addsubiw", "m_hasADDSUBIW", "true", 54 "Enable 16-bit register-immediate " 55 "addition and subtraction instructions">; 56 57// The device has an 8-bit stack pointer (SP) register. 58def FeatureSmallStack 59 : SubtargetFeature<"smallstack", "m_hasSmallStack", "true", 60 "The device has an 8-bit " 61 "stack pointer">; 62 63// The device supports the 16-bit GPR pair MOVW instruction. 64def FeatureMOVW : SubtargetFeature<"movw", "m_hasMOVW", "true", 65 "The device supports the 16-bit MOVW " 66 "instruction">; 67 68// The device has a separate flash namespace that must be accessed using special 69// instructions like lpm. 70def FeaturePROGMEM : SubtargetFeature<"progmem", "m_hasPROGMEM", "true", 71 "The device has a separate flash namespace">; 72 73// The device supports the `LPM` instruction, with implied destination being r0. 74def FeatureLPM : SubtargetFeature<"lpm", "m_hasLPM", "true", 75 "The device supports the `LPM` instruction">; 76 77// The device supports the `LPM Rd, Z[+] instruction. 78def FeatureLPMX : SubtargetFeature<"lpmx", "m_hasLPMX", "true", 79 "The device supports the `LPM Rd, Z[+]` " 80 "instruction">; 81 82// The device supports the `ELPM` instruction. 83def FeatureELPM : SubtargetFeature<"elpm", "m_hasELPM", "true", 84 "The device supports the ELPM instruction">; 85 86// The device supports the `ELPM Rd, Z[+]` instructions. 87def FeatureELPMX : SubtargetFeature<"elpmx", "m_hasELPMX", "true", 88 "The device supports the `ELPM Rd, Z[+]` " 89 "instructions">; 90 91// The device supports the `SPM` instruction. 92def FeatureSPM : SubtargetFeature<"spm", "m_hasSPM", "true", 93 "The device supports the `SPM` instruction">; 94 95// The device supports the `SPM Z+` instruction. 96def FeatureSPMX : SubtargetFeature<"spmx", "m_hasSPMX", "true", 97 "The device supports the `SPM Z+` " 98 "instruction">; 99 100// The device supports the `DES k` instruction. 101def FeatureDES : SubtargetFeature<"des", "m_hasDES", "true", 102 "The device supports the `DES k` encryption " 103 "instruction">; 104 105// The device supports the Read-Write-Modify instructions 106// XCH, LAS, LAC, and LAT. 107def FeatureRMW : SubtargetFeature<"rmw", "m_supportsRMW", "true", 108 "The device supports the read-write-modify " 109 "instructions: XCH, LAS, LAC, LAT">; 110 111// The device supports the `[F]MUL[S][U]` family of instructions. 112def FeatureMultiplication 113 : SubtargetFeature<"mul", "m_supportsMultiplication", "true", 114 "The device supports the " 115 "multiplication instructions">; 116 117// The device supports the `BREAK` instruction. 118def FeatureBREAK : SubtargetFeature<"break", "m_hasBREAK", "true", 119 "The device supports the `BREAK` debugging " 120 "instruction">; 121 122// The device has instruction encodings specific to the Tiny core. 123def FeatureTinyEncoding 124 : SubtargetFeature<"tinyencoding", "m_hasTinyEncoding", "true", 125 "The device has Tiny core specific " 126 "instruction encodings">; 127 128// The device has CPU registers mapped in data address space 129def FeatureMMR : SubtargetFeature<"memmappedregs", "m_hasMemMappedGPR", "true", 130 "The device has CPU registers " 131 "mapped in data address space">; 132 133class ELFArch<string name> 134 : SubtargetFeature<"", "ELFArch", !strconcat("ELF::", name), "">; 135 136// ELF e_flags architecture values 137def ELFArchAVR1 : ELFArch<"EF_AVR_ARCH_AVR1">; 138def ELFArchAVR2 : ELFArch<"EF_AVR_ARCH_AVR2">; 139def ELFArchAVR25 : ELFArch<"EF_AVR_ARCH_AVR25">; 140def ELFArchAVR3 : ELFArch<"EF_AVR_ARCH_AVR3">; 141def ELFArchAVR31 : ELFArch<"EF_AVR_ARCH_AVR31">; 142def ELFArchAVR35 : ELFArch<"EF_AVR_ARCH_AVR35">; 143def ELFArchAVR4 : ELFArch<"EF_AVR_ARCH_AVR4">; 144def ELFArchAVR5 : ELFArch<"EF_AVR_ARCH_AVR5">; 145def ELFArchAVR51 : ELFArch<"EF_AVR_ARCH_AVR51">; 146def ELFArchAVR6 : ELFArch<"EF_AVR_ARCH_AVR6">; 147def ELFArchTiny : ELFArch<"EF_AVR_ARCH_AVRTINY">; 148def ELFArchXMEGA1 : ELFArch<"EF_AVR_ARCH_XMEGA1">; 149def ELFArchXMEGA2 : ELFArch<"EF_AVR_ARCH_XMEGA2">; 150def ELFArchXMEGA3 : ELFArch<"EF_AVR_ARCH_XMEGA3">; 151def ELFArchXMEGA4 : ELFArch<"EF_AVR_ARCH_XMEGA4">; 152def ELFArchXMEGA5 : ELFArch<"EF_AVR_ARCH_XMEGA5">; 153def ELFArchXMEGA6 : ELFArch<"EF_AVR_ARCH_XMEGA6">; 154def ELFArchXMEGA7 : ELFArch<"EF_AVR_ARCH_XMEGA7">; 155 156//===---------------------------------------------------------------------===// 157// AVR Families 158//===---------------------------------------------------------------------===// 159 160// The device has at least the bare minimum that **every** single AVR 161// device should have. 162def FamilyAVR0 : Family<"avr0", []>; 163 164def FamilyAVR1 : Family<"avr1", [FamilyAVR0, FeatureLPM, FeaturePROGMEM, FeatureMMR]>; 165 166def FamilyAVR2 167 : Family<"avr2", 168 [FamilyAVR1, FeatureIJMPCALL, FeatureADDSUBIW, FeatureSRAM]>; 169 170def FamilyAVR25 171 : Family<"avr25", 172 [FamilyAVR2, FeatureMOVW, FeatureLPMX, FeatureSPM, FeatureBREAK]>; 173 174def FamilyAVR3 : Family<"avr3", [FamilyAVR2, FeatureJMPCALL]>; 175 176def FamilyAVR31 : Family<"avr31", [FamilyAVR3, FeatureELPM]>; 177 178def FamilyAVR35 179 : Family<"avr35", 180 [FamilyAVR3, FeatureMOVW, FeatureLPMX, FeatureSPM, FeatureBREAK]>; 181 182def FamilyAVR4 : Family<"avr4", 183 [FamilyAVR2, FeatureMultiplication, FeatureMOVW, 184 FeatureLPMX, FeatureSPM, FeatureBREAK]>; 185 186def FamilyAVR5 : Family<"avr5", 187 [FamilyAVR3, FeatureMultiplication, FeatureMOVW, 188 FeatureLPMX, FeatureSPM, FeatureBREAK]>; 189 190def FamilyAVR51 : Family<"avr51", [FamilyAVR5, FeatureELPM, FeatureELPMX]>; 191 192def FamilyAVR6 : Family<"avr6", [FamilyAVR51, FeatureEIJMPCALL]>; 193 194def FamilyTiny 195 : Family<"avrtiny", 196 [FamilyAVR0, FeatureBREAK, FeatureSRAM, FeatureTinyEncoding, 197 FeatureSmallStack]>; 198 199def FamilyXMEGA3 : Family<"xmega3", 200 [FamilyAVR0, FeatureLPM, FeaturePROGMEM, FeatureIJMPCALL, 201 FeatureADDSUBIW, FeatureSRAM, FeatureJMPCALL, 202 FeatureMultiplication, FeatureMOVW, FeatureLPMX, 203 FeatureBREAK]>; 204 205def FamilyXMEGA : Family<"xmega", 206 [FamilyAVR0, FeatureLPM, FeaturePROGMEM, FeatureIJMPCALL, 207 FeatureADDSUBIW, FeatureSRAM, FeatureJMPCALL, 208 FeatureMultiplication, FeatureMOVW, FeatureLPMX, 209 FeatureSPM, FeatureBREAK, FeatureEIJMPCALL, 210 FeatureSPMX, FeatureDES, FeatureELPM, FeatureELPMX]>; 211 212def FamilyXMEGAU : Family<"xmegau", [FamilyXMEGA, FeatureRMW]>; 213 214def FeatureSetSpecial 215 : FeatureSet<"special", 216 "Enable use of the entire instruction " 217 "set - used for debugging", 218 [ 219 FeatureSRAM, FeatureJMPCALL, FeatureIJMPCALL, 220 FeatureEIJMPCALL, FeatureADDSUBIW, FeatureMOVW, FeatureLPM, 221 FeatureLPMX, FeatureELPM, FeatureELPMX, FeatureSPM, 222 FeatureSPMX, FeatureDES, FeatureRMW, FeatureMultiplication, 223 FeatureBREAK, FeatureMMR 224 ]>; 225 226//===---------------------------------------------------------------------===// 227// AVR microcontrollers supported. 228//===---------------------------------------------------------------------===// 229 230class Device<string Name, Family Fam, ELFArch Arch, 231 list<SubtargetFeature> ExtraFeatures = []> 232 : Processor<Name, NoItineraries, !listconcat([Fam, Arch], ExtraFeatures)>; 233 234// Generic MCUs 235// Note that several versions of GCC has strange ELF architecture 236// settings for backwards compatibility - see `gas/config/tc-avr.c` 237// in AVR binutils. We do not replicate this. 238def : Device<"avr1", FamilyAVR1, ELFArchAVR1>; 239def : Device<"avr2", FamilyAVR2, ELFArchAVR2>; 240def : Device<"avr25", FamilyAVR25, ELFArchAVR25>; 241def : Device<"avr3", FamilyAVR3, ELFArchAVR3>; 242def : Device<"avr31", FamilyAVR31, ELFArchAVR31>; 243def : Device<"avr35", FamilyAVR35, ELFArchAVR35>; 244def : Device<"avr4", FamilyAVR4, ELFArchAVR4>; 245def : Device<"avr5", FamilyAVR5, ELFArchAVR5>; 246def : Device<"avr51", FamilyAVR51, ELFArchAVR51>; 247def : Device<"avr6", FamilyAVR6, ELFArchAVR6>; 248def : Device<"avrxmega1", FamilyXMEGA, ELFArchXMEGA1>; 249def : Device<"avrxmega2", FamilyXMEGA, ELFArchXMEGA2>; 250def : Device<"avrxmega3", FamilyXMEGA3, ELFArchXMEGA3>; 251def : Device<"avrxmega4", FamilyXMEGA, ELFArchXMEGA4>; 252def : Device<"avrxmega5", FamilyXMEGA, ELFArchXMEGA5>; 253def : Device<"avrxmega6", FamilyXMEGA, ELFArchXMEGA6>; 254def : Device<"avrxmega7", FamilyXMEGA, ELFArchXMEGA7>; 255def : Device<"avrtiny", FamilyTiny, ELFArchTiny>; 256 257// Specific MCUs 258// NOTE: This list has been synchronized with gcc-avr 5.4.0 and avr-libc 2.0.0. 259def : Device<"at90s1200", FamilyAVR0, ELFArchAVR1, [FeatureSmallStack]>; 260def : Device<"attiny11", FamilyAVR1, ELFArchAVR1, [FeatureSmallStack]>; 261def : Device<"attiny12", FamilyAVR1, ELFArchAVR1, [FeatureSmallStack]>; 262def : Device<"attiny15", FamilyAVR1, ELFArchAVR1, [FeatureSmallStack]>; 263def : Device<"attiny28", FamilyAVR1, ELFArchAVR1, [FeatureSmallStack]>; 264def : Device<"at90s2313", FamilyAVR2, ELFArchAVR2, [FeatureSmallStack]>; 265def : Device<"at90s2323", FamilyAVR2, ELFArchAVR2, [FeatureSmallStack]>; 266def : Device<"at90s2333", FamilyAVR2, ELFArchAVR2, [FeatureSmallStack]>; 267def : Device<"at90s2343", FamilyAVR2, ELFArchAVR2, [FeatureSmallStack]>; 268def : Device<"attiny22", FamilyAVR2, ELFArchAVR2, [FeatureSmallStack]>; 269def : Device<"attiny26", FamilyAVR2, ELFArchAVR2, 270 [FeatureLPMX, FeatureSmallStack]>; 271def : Device<"at86rf401", FamilyAVR2, ELFArchAVR25, [FeatureMOVW, FeatureLPMX]>; 272def : Device<"at90s4414", FamilyAVR2, ELFArchAVR2, [FeatureSmallStack]>; 273def : Device<"at90s4433", FamilyAVR2, ELFArchAVR2, [FeatureSmallStack]>; 274def : Device<"at90s4434", FamilyAVR2, ELFArchAVR2, [FeatureSmallStack]>; 275def : Device<"at90s8515", FamilyAVR2, ELFArchAVR2>; 276def : Device<"at90c8534", FamilyAVR2, ELFArchAVR2>; 277def : Device<"at90s8535", FamilyAVR2, ELFArchAVR2>; 278def : Device<"ata5272", FamilyAVR25, ELFArchAVR25>; 279def : Device<"ata6616c", FamilyAVR25, ELFArchAVR25>; 280def : Device<"attiny13", FamilyAVR25, ELFArchAVR25, [FeatureSmallStack]>; 281def : Device<"attiny13a", FamilyAVR25, ELFArchAVR25, [FeatureSmallStack]>; 282def : Device<"attiny2313", FamilyAVR25, ELFArchAVR25, [FeatureSmallStack]>; 283def : Device<"attiny2313a", FamilyAVR25, ELFArchAVR25, [FeatureSmallStack]>; 284def : Device<"attiny24", FamilyAVR25, ELFArchAVR25, [FeatureSmallStack]>; 285def : Device<"attiny24a", FamilyAVR25, ELFArchAVR25, [FeatureSmallStack]>; 286def : Device<"attiny4313", FamilyAVR25, ELFArchAVR25>; 287def : Device<"attiny44", FamilyAVR25, ELFArchAVR25>; 288def : Device<"attiny44a", FamilyAVR25, ELFArchAVR25>; 289def : Device<"attiny84", FamilyAVR25, ELFArchAVR25>; 290def : Device<"attiny84a", FamilyAVR25, ELFArchAVR25>; 291def : Device<"attiny25", FamilyAVR25, ELFArchAVR25, [FeatureSmallStack]>; 292def : Device<"attiny45", FamilyAVR25, ELFArchAVR25>; 293def : Device<"attiny85", FamilyAVR25, ELFArchAVR25>; 294def : Device<"attiny261", FamilyAVR25, ELFArchAVR25, [FeatureSmallStack]>; 295def : Device<"attiny261a", FamilyAVR25, ELFArchAVR25, [FeatureSmallStack]>; 296def : Device<"attiny441", FamilyAVR25, ELFArchAVR25>; 297def : Device<"attiny461", FamilyAVR25, ELFArchAVR25>; 298def : Device<"attiny461a", FamilyAVR25, ELFArchAVR25>; 299def : Device<"attiny841", FamilyAVR25, ELFArchAVR25>; 300def : Device<"attiny861", FamilyAVR25, ELFArchAVR25>; 301def : Device<"attiny861a", FamilyAVR25, ELFArchAVR25>; 302def : Device<"attiny87", FamilyAVR25, ELFArchAVR25>; 303def : Device<"attiny43u", FamilyAVR25, ELFArchAVR25>; 304def : Device<"attiny48", FamilyAVR25, ELFArchAVR25>; 305def : Device<"attiny88", FamilyAVR25, ELFArchAVR25>; 306def : Device<"attiny828", FamilyAVR25, ELFArchAVR25>; 307def : Device<"at43usb355", FamilyAVR3, ELFArchAVR3>; 308def : Device<"at76c711", FamilyAVR3, ELFArchAVR3>; 309def : Device<"atmega103", FamilyAVR31, ELFArchAVR31>; 310def : Device<"at43usb320", FamilyAVR31, ELFArchAVR31>; 311def : Device<"attiny167", FamilyAVR35, ELFArchAVR35>; 312def : Device<"at90usb82", FamilyAVR35, ELFArchAVR35>; 313def : Device<"at90usb162", FamilyAVR35, ELFArchAVR35>; 314def : Device<"ata5505", FamilyAVR35, ELFArchAVR35>; 315def : Device<"ata6617c", FamilyAVR35, ELFArchAVR35>; 316def : Device<"ata664251", FamilyAVR35, ELFArchAVR35>; 317def : Device<"atmega8u2", FamilyAVR35, ELFArchAVR35>; 318def : Device<"atmega16u2", FamilyAVR35, ELFArchAVR35>; 319def : Device<"atmega32u2", FamilyAVR35, ELFArchAVR35>; 320def : Device<"attiny1634", FamilyAVR35, ELFArchAVR35>; 321def : Device<"atmega8", FamilyAVR2, ELFArchAVR4, 322 [FeatureMultiplication, FeatureMOVW, FeatureLPMX, FeatureSPM]>; 323def : Device<"ata6289", FamilyAVR4, ELFArchAVR4>; 324def : Device<"atmega8a", FamilyAVR2, ELFArchAVR4, 325 [FeatureMultiplication, FeatureMOVW, FeatureLPMX, FeatureSPM]>; 326def : Device<"ata6285", FamilyAVR4, ELFArchAVR4>; 327def : Device<"ata6286", FamilyAVR4, ELFArchAVR4>; 328def : Device<"ata6612c", FamilyAVR4, ELFArchAVR4>; 329def : Device<"atmega48", FamilyAVR4, ELFArchAVR4>; 330def : Device<"atmega48a", FamilyAVR4, ELFArchAVR4>; 331def : Device<"atmega48pa", FamilyAVR4, ELFArchAVR4>; 332def : Device<"atmega48pb", FamilyAVR4, ELFArchAVR4>; 333def : Device<"atmega48p", FamilyAVR4, ELFArchAVR4>; 334def : Device<"atmega88", FamilyAVR4, ELFArchAVR4>; 335def : Device<"atmega88a", FamilyAVR4, ELFArchAVR4>; 336def : Device<"atmega88p", FamilyAVR4, ELFArchAVR4>; 337def : Device<"atmega88pa", FamilyAVR4, ELFArchAVR4>; 338def : Device<"atmega88pb", FamilyAVR4, ELFArchAVR4>; 339def : Device<"atmega8515", FamilyAVR2, ELFArchAVR4, 340 [FeatureMultiplication, FeatureMOVW, FeatureLPMX, FeatureSPM]>; 341def : Device<"atmega8535", FamilyAVR2, ELFArchAVR4, 342 [FeatureMultiplication, FeatureMOVW, FeatureLPMX, FeatureSPM]>; 343def : Device<"atmega8hva", FamilyAVR4, ELFArchAVR4>; 344def : Device<"at90pwm1", FamilyAVR4, ELFArchAVR4>; 345def : Device<"at90pwm2", FamilyAVR4, ELFArchAVR4>; 346def : Device<"at90pwm2b", FamilyAVR4, ELFArchAVR4>; 347def : Device<"at90pwm3", FamilyAVR4, ELFArchAVR4>; 348def : Device<"at90pwm3b", FamilyAVR4, ELFArchAVR4>; 349def : Device<"at90pwm81", FamilyAVR4, ELFArchAVR4>; 350def : Device<"ata5702m322", FamilyAVR5, ELFArchAVR5>; 351def : Device<"ata5782", FamilyAVR5, ELFArchAVR5>; 352def : Device<"ata5790", FamilyAVR5, ELFArchAVR5>; 353def : Device<"ata5790n", FamilyAVR5, ELFArchAVR5>; 354def : Device<"ata5791", FamilyAVR5, ELFArchAVR5>; 355def : Device<"ata5795", FamilyAVR5, ELFArchAVR5>; 356def : Device<"ata5831", FamilyAVR5, ELFArchAVR5>; 357def : Device<"ata6613c", FamilyAVR5, ELFArchAVR5>; 358def : Device<"ata6614q", FamilyAVR5, ELFArchAVR5>; 359def : Device<"ata8210", FamilyAVR5, ELFArchAVR5>; 360def : Device<"ata8510", FamilyAVR5, ELFArchAVR5>; 361def : Device<"atmega16", FamilyAVR5, ELFArchAVR5>; 362def : Device<"atmega16a", FamilyAVR5, ELFArchAVR5>; 363def : Device<"atmega161", FamilyAVR3, ELFArchAVR5, 364 [FeatureMultiplication, FeatureMOVW, FeatureLPMX, FeatureSPM]>; 365def : Device<"atmega162", FamilyAVR5, ELFArchAVR5>; 366def : Device<"atmega163", FamilyAVR3, ELFArchAVR5, 367 [FeatureMultiplication, FeatureMOVW, FeatureLPMX, FeatureSPM]>; 368def : Device<"atmega164a", FamilyAVR5, ELFArchAVR5>; 369def : Device<"atmega164p", FamilyAVR5, ELFArchAVR5>; 370def : Device<"atmega164pa", FamilyAVR5, ELFArchAVR5>; 371def : Device<"atmega165", FamilyAVR5, ELFArchAVR5>; 372def : Device<"atmega165a", FamilyAVR5, ELFArchAVR5>; 373def : Device<"atmega165p", FamilyAVR5, ELFArchAVR5>; 374def : Device<"atmega165pa", FamilyAVR5, ELFArchAVR5>; 375def : Device<"atmega168", FamilyAVR5, ELFArchAVR5>; 376def : Device<"atmega168a", FamilyAVR5, ELFArchAVR5>; 377def : Device<"atmega168p", FamilyAVR5, ELFArchAVR5>; 378def : Device<"atmega168pa", FamilyAVR5, ELFArchAVR5>; 379def : Device<"atmega168pb", FamilyAVR5, ELFArchAVR5>; 380def : Device<"atmega169", FamilyAVR5, ELFArchAVR5>; 381def : Device<"atmega169a", FamilyAVR5, ELFArchAVR5>; 382def : Device<"atmega169p", FamilyAVR5, ELFArchAVR5>; 383def : Device<"atmega169pa", FamilyAVR5, ELFArchAVR5>; 384def : Device<"atmega32", FamilyAVR5, ELFArchAVR5>; 385def : Device<"atmega32a", FamilyAVR5, ELFArchAVR5>; 386def : Device<"atmega323", FamilyAVR5, ELFArchAVR5>; 387def : Device<"atmega324a", FamilyAVR5, ELFArchAVR5>; 388def : Device<"atmega324p", FamilyAVR5, ELFArchAVR5>; 389def : Device<"atmega324pa", FamilyAVR5, ELFArchAVR5>; 390def : Device<"atmega324pb", FamilyAVR5, ELFArchAVR5>; 391def : Device<"atmega325", FamilyAVR5, ELFArchAVR5>; 392def : Device<"atmega325a", FamilyAVR5, ELFArchAVR5>; 393def : Device<"atmega325p", FamilyAVR5, ELFArchAVR5>; 394def : Device<"atmega325pa", FamilyAVR5, ELFArchAVR5>; 395def : Device<"atmega3250", FamilyAVR5, ELFArchAVR5>; 396def : Device<"atmega3250a", FamilyAVR5, ELFArchAVR5>; 397def : Device<"atmega3250p", FamilyAVR5, ELFArchAVR5>; 398def : Device<"atmega3250pa", FamilyAVR5, ELFArchAVR5>; 399def : Device<"atmega328", FamilyAVR5, ELFArchAVR5>; 400def : Device<"atmega328p", FamilyAVR5, ELFArchAVR5>; 401def : Device<"atmega328pb", FamilyAVR5, ELFArchAVR5>; 402def : Device<"atmega329", FamilyAVR5, ELFArchAVR5>; 403def : Device<"atmega329a", FamilyAVR5, ELFArchAVR5>; 404def : Device<"atmega329p", FamilyAVR5, ELFArchAVR5>; 405def : Device<"atmega329pa", FamilyAVR5, ELFArchAVR5>; 406def : Device<"atmega3290", FamilyAVR5, ELFArchAVR5>; 407def : Device<"atmega3290a", FamilyAVR5, ELFArchAVR5>; 408def : Device<"atmega3290p", FamilyAVR5, ELFArchAVR5>; 409def : Device<"atmega3290pa", FamilyAVR5, ELFArchAVR5>; 410def : Device<"atmega406", FamilyAVR5, ELFArchAVR5>; 411def : Device<"atmega64", FamilyAVR5, ELFArchAVR5>; 412def : Device<"atmega64a", FamilyAVR5, ELFArchAVR5>; 413def : Device<"atmega640", FamilyAVR5, ELFArchAVR5>; 414def : Device<"atmega644", FamilyAVR5, ELFArchAVR5>; 415def : Device<"atmega644a", FamilyAVR5, ELFArchAVR5>; 416def : Device<"atmega644p", FamilyAVR5, ELFArchAVR5>; 417def : Device<"atmega644pa", FamilyAVR5, ELFArchAVR5>; 418def : Device<"atmega645", FamilyAVR5, ELFArchAVR5>; 419def : Device<"atmega645a", FamilyAVR5, ELFArchAVR5>; 420def : Device<"atmega645p", FamilyAVR5, ELFArchAVR5>; 421def : Device<"atmega649", FamilyAVR5, ELFArchAVR5>; 422def : Device<"atmega649a", FamilyAVR5, ELFArchAVR5>; 423def : Device<"atmega649p", FamilyAVR5, ELFArchAVR5>; 424def : Device<"atmega6450", FamilyAVR5, ELFArchAVR5>; 425def : Device<"atmega6450a", FamilyAVR5, ELFArchAVR5>; 426def : Device<"atmega6450p", FamilyAVR5, ELFArchAVR5>; 427def : Device<"atmega6490", FamilyAVR5, ELFArchAVR5>; 428def : Device<"atmega6490a", FamilyAVR5, ELFArchAVR5>; 429def : Device<"atmega6490p", FamilyAVR5, ELFArchAVR5>; 430def : Device<"atmega64rfr2", FamilyAVR5, ELFArchAVR5>; 431def : Device<"atmega644rfr2", FamilyAVR5, ELFArchAVR5>; 432def : Device<"atmega16hva", FamilyAVR5, ELFArchAVR5>; 433def : Device<"atmega16hva2", FamilyAVR5, ELFArchAVR5>; 434def : Device<"atmega16hvb", FamilyAVR5, ELFArchAVR5>; 435def : Device<"atmega16hvbrevb", FamilyAVR5, ELFArchAVR5>; 436def : Device<"atmega32hvb", FamilyAVR5, ELFArchAVR5>; 437def : Device<"atmega32hvbrevb", FamilyAVR5, ELFArchAVR5>; 438def : Device<"atmega64hve", FamilyAVR5, ELFArchAVR5>; 439def : Device<"atmega64hve2", FamilyAVR5, ELFArchAVR5>; 440def : Device<"at90can32", FamilyAVR5, ELFArchAVR5>; 441def : Device<"at90can64", FamilyAVR5, ELFArchAVR5>; 442def : Device<"at90pwm161", FamilyAVR5, ELFArchAVR5>; 443def : Device<"at90pwm216", FamilyAVR5, ELFArchAVR5>; 444def : Device<"at90pwm316", FamilyAVR5, ELFArchAVR5>; 445def : Device<"atmega32c1", FamilyAVR5, ELFArchAVR5>; 446def : Device<"atmega64c1", FamilyAVR5, ELFArchAVR5>; 447def : Device<"atmega16m1", FamilyAVR5, ELFArchAVR5>; 448def : Device<"atmega32m1", FamilyAVR5, ELFArchAVR5>; 449def : Device<"atmega64m1", FamilyAVR5, ELFArchAVR5>; 450def : Device<"atmega16u4", FamilyAVR5, ELFArchAVR5>; 451def : Device<"atmega32u4", FamilyAVR5, ELFArchAVR5>; 452def : Device<"atmega32u6", FamilyAVR5, ELFArchAVR5>; 453def : Device<"at90usb646", FamilyAVR5, ELFArchAVR5>; 454def : Device<"at90usb647", FamilyAVR5, ELFArchAVR5>; 455def : Device<"at90scr100", FamilyAVR5, ELFArchAVR5>; 456def : Device<"at94k", FamilyAVR3, ELFArchAVR5, 457 [FeatureMultiplication, FeatureMOVW, FeatureLPMX]>; 458def : Device<"m3000", FamilyAVR5, ELFArchAVR5>; 459def : Device<"atmega128", FamilyAVR51, ELFArchAVR51>; 460def : Device<"atmega128a", FamilyAVR51, ELFArchAVR51>; 461def : Device<"atmega1280", FamilyAVR51, ELFArchAVR51>; 462def : Device<"atmega1281", FamilyAVR51, ELFArchAVR51>; 463def : Device<"atmega1284", FamilyAVR51, ELFArchAVR51>; 464def : Device<"atmega1284p", FamilyAVR51, ELFArchAVR51>; 465def : Device<"atmega128rfa1", FamilyAVR51, ELFArchAVR51>; 466def : Device<"atmega128rfr2", FamilyAVR51, ELFArchAVR51>; 467def : Device<"atmega1284rfr2", FamilyAVR51, ELFArchAVR51>; 468def : Device<"at90can128", FamilyAVR51, ELFArchAVR51>; 469def : Device<"at90usb1286", FamilyAVR51, ELFArchAVR51>; 470def : Device<"at90usb1287", FamilyAVR51, ELFArchAVR51>; 471def : Device<"atmega2560", FamilyAVR6, ELFArchAVR6>; 472def : Device<"atmega2561", FamilyAVR6, ELFArchAVR6>; 473def : Device<"atmega256rfr2", FamilyAVR6, ELFArchAVR6>; 474def : Device<"atmega2564rfr2", FamilyAVR6, ELFArchAVR6>; 475def : Device<"atxmega16a4", FamilyXMEGA, ELFArchXMEGA2>; 476def : Device<"atxmega16a4u", FamilyXMEGAU, ELFArchXMEGA2>; 477def : Device<"atxmega16c4", FamilyXMEGAU, ELFArchXMEGA2>; 478def : Device<"atxmega16d4", FamilyXMEGA, ELFArchXMEGA2>; 479def : Device<"atxmega32a4", FamilyXMEGA, ELFArchXMEGA2>; 480def : Device<"atxmega32a4u", FamilyXMEGAU, ELFArchXMEGA2>; 481def : Device<"atxmega32c3", FamilyXMEGAU, ELFArchXMEGA2>; 482def : Device<"atxmega32c4", FamilyXMEGAU, ELFArchXMEGA2>; 483def : Device<"atxmega32d3", FamilyXMEGA, ELFArchXMEGA2>; 484def : Device<"atxmega32d4", FamilyXMEGA, ELFArchXMEGA2>; 485def : Device<"atxmega32e5", FamilyXMEGAU, ELFArchXMEGA2>; 486def : Device<"atxmega16e5", FamilyXMEGAU, ELFArchXMEGA2>; 487def : Device<"atxmega8e5", FamilyXMEGAU, ELFArchXMEGA2>; 488def : Device<"atxmega64a3", FamilyXMEGA, ELFArchXMEGA4>; 489def : Device<"atxmega64a3u", FamilyXMEGAU, ELFArchXMEGA4>; 490def : Device<"atxmega64a4u", FamilyXMEGAU, ELFArchXMEGA4>; 491def : Device<"atxmega64b1", FamilyXMEGAU, ELFArchXMEGA4>; 492def : Device<"atxmega64b3", FamilyXMEGAU, ELFArchXMEGA4>; 493def : Device<"atxmega64c3", FamilyXMEGAU, ELFArchXMEGA4>; 494def : Device<"atxmega64d3", FamilyXMEGA, ELFArchXMEGA4>; 495def : Device<"atxmega64d4", FamilyXMEGA, ELFArchXMEGA4>; 496def : Device<"atxmega64a1", FamilyXMEGA, ELFArchXMEGA5>; 497def : Device<"atxmega64a1u", FamilyXMEGAU, ELFArchXMEGA5>; 498def : Device<"atxmega128a3", FamilyXMEGA, ELFArchXMEGA6>; 499def : Device<"atxmega128a3u", FamilyXMEGAU, ELFArchXMEGA6>; 500def : Device<"atxmega128b1", FamilyXMEGAU, ELFArchXMEGA6>; 501def : Device<"atxmega128b3", FamilyXMEGAU, ELFArchXMEGA6>; 502def : Device<"atxmega128c3", FamilyXMEGAU, ELFArchXMEGA6>; 503def : Device<"atxmega128d3", FamilyXMEGA, ELFArchXMEGA6>; 504def : Device<"atxmega128d4", FamilyXMEGA, ELFArchXMEGA6>; 505def : Device<"atxmega192a3", FamilyXMEGA, ELFArchXMEGA6>; 506def : Device<"atxmega192a3u", FamilyXMEGAU, ELFArchXMEGA6>; 507def : Device<"atxmega192c3", FamilyXMEGAU, ELFArchXMEGA6>; 508def : Device<"atxmega192d3", FamilyXMEGA, ELFArchXMEGA6>; 509def : Device<"atxmega256a3", FamilyXMEGA, ELFArchXMEGA6>; 510def : Device<"atxmega256a3u", FamilyXMEGAU, ELFArchXMEGA6>; 511def : Device<"atxmega256a3b", FamilyXMEGA, ELFArchXMEGA6>; 512def : Device<"atxmega256a3bu", FamilyXMEGAU, ELFArchXMEGA6>; 513def : Device<"atxmega256c3", FamilyXMEGAU, ELFArchXMEGA6>; 514def : Device<"atxmega256d3", FamilyXMEGA, ELFArchXMEGA6>; 515def : Device<"atxmega384c3", FamilyXMEGAU, ELFArchXMEGA6>; 516def : Device<"atxmega384d3", FamilyXMEGA, ELFArchXMEGA6>; 517def : Device<"atxmega128a1", FamilyXMEGA, ELFArchXMEGA7>; 518def : Device<"atxmega128a1u", FamilyXMEGAU, ELFArchXMEGA7>; 519def : Device<"atxmega128a4u", FamilyXMEGAU, ELFArchXMEGA7>; 520def : Device<"attiny4", FamilyTiny, ELFArchTiny>; 521def : Device<"attiny5", FamilyTiny, ELFArchTiny>; 522def : Device<"attiny9", FamilyTiny, ELFArchTiny>; 523def : Device<"attiny10", FamilyTiny, ELFArchTiny>; 524def : Device<"attiny20", FamilyTiny, ELFArchTiny>; 525def : Device<"attiny40", FamilyTiny, ELFArchTiny>; 526def : Device<"attiny102", FamilyTiny, ELFArchTiny>; 527def : Device<"attiny104", FamilyTiny, ELFArchTiny>; 528def : Device<"attiny202", FamilyXMEGA3, ELFArchXMEGA3>; 529def : Device<"attiny402", FamilyXMEGA3, ELFArchXMEGA3>; 530def : Device<"attiny204", FamilyXMEGA3, ELFArchXMEGA3>; 531def : Device<"attiny404", FamilyXMEGA3, ELFArchXMEGA3>; 532def : Device<"attiny804", FamilyXMEGA3, ELFArchXMEGA3>; 533def : Device<"attiny1604", FamilyXMEGA3, ELFArchXMEGA3>; 534def : Device<"attiny406", FamilyXMEGA3, ELFArchXMEGA3>; 535def : Device<"attiny806", FamilyXMEGA3, ELFArchXMEGA3>; 536def : Device<"attiny1606", FamilyXMEGA3, ELFArchXMEGA3>; 537def : Device<"attiny807", FamilyXMEGA3, ELFArchXMEGA3>; 538def : Device<"attiny1607", FamilyXMEGA3, ELFArchXMEGA3>; 539def : Device<"attiny212", FamilyXMEGA3, ELFArchXMEGA3>; 540def : Device<"attiny412", FamilyXMEGA3, ELFArchXMEGA3>; 541def : Device<"attiny214", FamilyXMEGA3, ELFArchXMEGA3>; 542def : Device<"attiny414", FamilyXMEGA3, ELFArchXMEGA3>; 543def : Device<"attiny814", FamilyXMEGA3, ELFArchXMEGA3>; 544def : Device<"attiny1614", FamilyXMEGA3, ELFArchXMEGA3>; 545def : Device<"attiny416", FamilyXMEGA3, ELFArchXMEGA3>; 546def : Device<"attiny816", FamilyXMEGA3, ELFArchXMEGA3>; 547def : Device<"attiny1616", FamilyXMEGA3, ELFArchXMEGA3>; 548def : Device<"attiny3216", FamilyXMEGA3, ELFArchXMEGA3>; 549def : Device<"attiny417", FamilyXMEGA3, ELFArchXMEGA3>; 550def : Device<"attiny817", FamilyXMEGA3, ELFArchXMEGA3>; 551def : Device<"attiny1617", FamilyXMEGA3, ELFArchXMEGA3>; 552def : Device<"attiny3217", FamilyXMEGA3, ELFArchXMEGA3>; 553def : Device<"attiny1624", FamilyXMEGA3, ELFArchXMEGA3>; 554def : Device<"attiny1626", FamilyXMEGA3, ELFArchXMEGA3>; 555def : Device<"attiny1627", FamilyXMEGA3, ELFArchXMEGA3>; 556def : Device<"atmega808", FamilyXMEGA3, ELFArchXMEGA3>; 557def : Device<"atmega809", FamilyXMEGA3, ELFArchXMEGA3>; 558def : Device<"atmega1608", FamilyXMEGA3, ELFArchXMEGA3>; 559def : Device<"atmega1609", FamilyXMEGA3, ELFArchXMEGA3>; 560def : Device<"atmega3208", FamilyXMEGA3, ELFArchXMEGA3>; 561def : Device<"atmega3209", FamilyXMEGA3, ELFArchXMEGA3>; 562def : Device<"atmega4808", FamilyXMEGA3, ELFArchXMEGA3>; 563def : Device<"atmega4809", FamilyXMEGA3, ELFArchXMEGA3>; 564