662 lines · plain
1//===---------------------------------------------------------------------===//2// AVR Device Definitions3//===---------------------------------------------------------------------===//4 5// :TODO: Implement the skip errata, see `gcc/config/avr/avr-arch.h` for details6// :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 a11// new member in AVRSubtarget (to store a value) for each set because we do not12// care if the set is supported, only the subfeatures inside the set. We fix13// this by simply setting the same dummy member for all feature sets, which is14// then ignored.15class FeatureSet<string name, string desc, list<SubtargetFeature> i>16 : SubtargetFeature<name, "HasFeatureSet"#NAME, "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 of24// SRAM-relevant instructions.25//26// These are:27// LD - all 9 variants28// ST - all 9 variants29// LDD - two variants for Y and Z30// STD - two variants for Y and Z31// `LDS Rd, K`32// `STS k, Rr`33// `PUSH`/`POP`34def FeatureSRAM : SubtargetFeature<"sram", "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", "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", "HasSRAMIJMPCALL", "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", "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", "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 FeatureSmallStack59 : SubtargetFeature<"smallstack", "HasSmallStack", "true",60 "The device has an 8-bit "61 "stack pointer">;62 63// The device potentially requires emitting rjmp that wraps across the flash64// boundary.65//66// We enable this for devices that have exactly 8 kB of flash memory and don't67// support the `jmp` instruction - with this feature enabled, we try to convert68// out-of-bounds relative jumps into in-bounds by wrapping the offset, e.g.69// `rjmp +5000` becomes `rjmp -3192`.70def FeatureWrappingRjmp71 : SubtargetFeature<"wrappingrjmp", "HasWrappingRjmp", "true",72 "The device potentially requires emitting rjmp that "73 "wraps across the flash boundary">;74 75// The device supports the 16-bit GPR pair MOVW instruction.76def FeatureMOVW : SubtargetFeature<"movw", "HasMOVW", "true",77 "The device supports the 16-bit MOVW "78 "instruction">;79 80// The device supports the `LPM` instruction, with implied destination being r0.81def FeatureLPM : SubtargetFeature<"lpm", "HasLPM", "true",82 "The device supports the `LPM` instruction">;83 84// The device supports the `LPM Rd, Z[+] instruction.85def FeatureLPMX : SubtargetFeature<"lpmx", "HasLPMX", "true",86 "The device supports the `LPM Rd, Z[+]` "87 "instruction">;88 89// The device supports the `ELPM` instruction.90def FeatureELPM : SubtargetFeature<"elpm", "HasELPM", "true",91 "The device supports the ELPM instruction">;92 93// The device supports the `ELPM Rd, Z[+]` instructions.94def FeatureELPMX : SubtargetFeature<"elpmx", "HasELPMX", "true",95 "The device supports the `ELPM Rd, Z[+]` "96 "instructions">;97 98// The device supports the `SPM` instruction.99def FeatureSPM : SubtargetFeature<"spm", "HasSPM", "true",100 "The device supports the `SPM` instruction">;101 102// The device supports the `SPM Z+` instruction.103def FeatureSPMX : SubtargetFeature<"spmx", "HasSPMX", "true",104 "The device supports the `SPM Z+` "105 "instruction">;106 107// The device supports the `DES k` instruction.108def FeatureDES : SubtargetFeature<"des", "HasDES", "true",109 "The device supports the `DES k` encryption "110 "instruction">;111 112// The device supports the Read-Write-Modify instructions113// XCH, LAS, LAC, and LAT.114def FeatureRMW : SubtargetFeature<"rmw", "SupportsRMW", "true",115 "The device supports the read-write-modify "116 "instructions: XCH, LAS, LAC, LAT">;117 118// The device supports the `[F]MUL[S][U]` family of instructions.119def FeatureMultiplication120 : SubtargetFeature<"mul", "SupportsMultiplication", "true",121 "The device supports the "122 "multiplication instructions">;123 124// The device supports the `BREAK` instruction.125def FeatureBREAK : SubtargetFeature<"break", "HasBREAK", "true",126 "The device supports the `BREAK` debugging "127 "instruction">;128 129// The device has instruction encodings specific to the Tiny core.130def FeatureTinyEncoding131 : SubtargetFeature<"tinyencoding", "HasTinyEncoding", "true",132 "The device has Tiny core specific "133 "instruction encodings">;134 135// When writing a 16-bit port or storing a 16-bit word, do the low byte first.136def FeatureLowByteFirst137 : SubtargetFeature<"lowbytefirst", "HasLowByteFirst", "true",138 "Do the low byte first when writing a 16-bit port or "139 "storing a 16-bit word">;140 141// The device has CPU registers mapped in data address space142def FeatureMMR : SubtargetFeature<"memmappedregs", "HasMemMappedGPR", "true",143 "The device has CPU registers "144 "mapped in data address space">;145 146class ELFArch<string name>147 : SubtargetFeature<"", "ELFArch", !strconcat("ELF::", name), "">;148 149// ELF e_flags architecture values150def ELFArchAVR1 : ELFArch<"EF_AVR_ARCH_AVR1">;151def ELFArchAVR2 : ELFArch<"EF_AVR_ARCH_AVR2">;152def ELFArchAVR25 : ELFArch<"EF_AVR_ARCH_AVR25">;153def ELFArchAVR3 : ELFArch<"EF_AVR_ARCH_AVR3">;154def ELFArchAVR31 : ELFArch<"EF_AVR_ARCH_AVR31">;155def ELFArchAVR35 : ELFArch<"EF_AVR_ARCH_AVR35">;156def ELFArchAVR4 : ELFArch<"EF_AVR_ARCH_AVR4">;157def ELFArchAVR5 : ELFArch<"EF_AVR_ARCH_AVR5">;158def ELFArchAVR51 : ELFArch<"EF_AVR_ARCH_AVR51">;159def ELFArchAVR6 : ELFArch<"EF_AVR_ARCH_AVR6">;160def ELFArchTiny : ELFArch<"EF_AVR_ARCH_AVRTINY">;161def ELFArchXMEGA1 : ELFArch<"EF_AVR_ARCH_XMEGA1">;162def ELFArchXMEGA2 : ELFArch<"EF_AVR_ARCH_XMEGA2">;163def ELFArchXMEGA3 : ELFArch<"EF_AVR_ARCH_XMEGA3">;164def ELFArchXMEGA4 : ELFArch<"EF_AVR_ARCH_XMEGA4">;165def ELFArchXMEGA5 : ELFArch<"EF_AVR_ARCH_XMEGA5">;166def ELFArchXMEGA6 : ELFArch<"EF_AVR_ARCH_XMEGA6">;167def ELFArchXMEGA7 : ELFArch<"EF_AVR_ARCH_XMEGA7">;168 169//===---------------------------------------------------------------------===//170// AVR Families171//===---------------------------------------------------------------------===//172 173// The device has at least the bare minimum that **every** single AVR174// device should have.175def FamilyAVR0 : Family<"avr0", []>;176 177def FamilyAVR1 : Family<"avr1", [FamilyAVR0, FeatureLPM, FeatureMMR]>;178 179def FamilyAVR2180 : Family<"avr2",181 [FamilyAVR1, FeatureIJMPCALL, FeatureADDSUBIW, FeatureSRAM]>;182 183def FamilyAVR25184 : Family<"avr25",185 [FamilyAVR2, FeatureMOVW, FeatureLPMX, FeatureSPM, FeatureBREAK]>;186 187def FamilyAVR3 : Family<"avr3", [FamilyAVR2, FeatureJMPCALL]>;188 189def FamilyAVR31 : Family<"avr31", [FamilyAVR3, FeatureELPM]>;190 191def FamilyAVR35192 : Family<"avr35",193 [FamilyAVR3, FeatureMOVW, FeatureLPMX, FeatureSPM, FeatureBREAK]>;194 195def FamilyAVR4 : Family<"avr4",196 [FamilyAVR2, FeatureMultiplication, FeatureMOVW,197 FeatureLPMX, FeatureSPM, FeatureBREAK]>;198 199def FamilyAVR5 : Family<"avr5",200 [FamilyAVR3, FeatureMultiplication, FeatureMOVW,201 FeatureLPMX, FeatureSPM, FeatureBREAK]>;202 203def FamilyAVR51 : Family<"avr51", [FamilyAVR5, FeatureELPM, FeatureELPMX]>;204 205def FamilyAVR6 : Family<"avr6", [FamilyAVR51, FeatureEIJMPCALL]>;206 207def FamilyTiny208 : Family<"avrtiny",209 [FamilyAVR0, FeatureBREAK, FeatureSRAM, FeatureTinyEncoding,210 FeatureSmallStack]>;211 212def FamilyXMEGA2 : Family<"xmega2",213 [FamilyAVR0, FeatureLPM, FeatureIJMPCALL,214 FeatureADDSUBIW, FeatureSRAM, FeatureJMPCALL,215 FeatureMultiplication, FeatureMOVW, FeatureLPMX,216 FeatureSPM, FeatureSPMX,217 FeatureBREAK, FeatureLowByteFirst]>;218 219def FamilyXMEGA3 : Family<"xmega3",220 [FamilyAVR0, FeatureLPM, FeatureIJMPCALL,221 FeatureADDSUBIW, FeatureSRAM, FeatureJMPCALL,222 FeatureMultiplication, FeatureMOVW, FeatureLPMX,223 FeatureBREAK, FeatureLowByteFirst]>;224 225def FamilyXMEGA4 : Family<"xmega4",226 [FamilyAVR0, FeatureLPM, FeatureIJMPCALL,227 FeatureADDSUBIW, FeatureSRAM, FeatureJMPCALL,228 FeatureMultiplication, FeatureMOVW, FeatureLPMX,229 FeatureELPM, FeatureELPMX,230 FeatureSPM, FeatureSPMX,231 FeatureBREAK, FeatureLowByteFirst]>;232 233def FamilyXMEGA : Family<"xmega",234 [FamilyAVR0, FeatureLPM, FeatureIJMPCALL,235 FeatureADDSUBIW, FeatureSRAM, FeatureJMPCALL,236 FeatureMultiplication, FeatureMOVW, FeatureLPMX,237 FeatureSPM, FeatureBREAK, FeatureEIJMPCALL,238 FeatureSPMX, FeatureDES, FeatureELPM, FeatureELPMX,239 FeatureLowByteFirst]>;240 241def FamilyXMEGAU : Family<"xmegau", [FamilyXMEGA, FeatureRMW]>;242 243def FeatureSetSpecial244 : FeatureSet<"special",245 "Enable use of the entire instruction "246 "set - used for debugging",247 [248 FeatureSRAM, FeatureJMPCALL, FeatureIJMPCALL,249 FeatureEIJMPCALL, FeatureADDSUBIW, FeatureMOVW, FeatureLPM,250 FeatureLPMX, FeatureELPM, FeatureELPMX, FeatureSPM,251 FeatureSPMX, FeatureDES, FeatureRMW, FeatureMultiplication,252 FeatureBREAK, FeatureMMR253 ]>;254 255//===---------------------------------------------------------------------===//256// AVR microcontrollers supported.257//===---------------------------------------------------------------------===//258 259class Device<string Name, Family Fam, ELFArch Arch,260 list<SubtargetFeature> ExtraFeatures = []>261 : Processor<Name, NoItineraries, !listconcat([Fam, Arch], ExtraFeatures)>;262 263// Generic MCUs264// Note that several versions of GCC has strange ELF architecture265// settings for backwards compatibility - see `gas/config/tc-avr.c`266// in AVR binutils. We do not replicate this.267def : Device<"avr1", FamilyAVR1, ELFArchAVR1>;268def : Device<"avr2", FamilyAVR2, ELFArchAVR2>;269def : Device<"avr25", FamilyAVR25, ELFArchAVR25>;270def : Device<"avr3", FamilyAVR3, ELFArchAVR3>;271def : Device<"avr31", FamilyAVR31, ELFArchAVR31>;272def : Device<"avr35", FamilyAVR35, ELFArchAVR35>;273def : Device<"avr4", FamilyAVR4, ELFArchAVR4>;274def : Device<"avr5", FamilyAVR5, ELFArchAVR5>;275def : Device<"avr51", FamilyAVR51, ELFArchAVR51>;276def : Device<"avr6", FamilyAVR6, ELFArchAVR6>;277def : Device<"avrxmega1", FamilyXMEGA, ELFArchXMEGA1>;278def : Device<"avrxmega2", FamilyXMEGA, ELFArchXMEGA2>;279def : Device<"avrxmega3", FamilyXMEGA3, ELFArchXMEGA3>;280def : Device<"avrxmega4", FamilyXMEGA, ELFArchXMEGA4>;281def : Device<"avrxmega5", FamilyXMEGA, ELFArchXMEGA5>;282def : Device<"avrxmega6", FamilyXMEGA, ELFArchXMEGA6>;283def : Device<"avrxmega7", FamilyXMEGA, ELFArchXMEGA7>;284def : Device<"avrtiny", FamilyTiny, ELFArchTiny>;285 286// Specific MCUs287// NOTE: This list has been synchronized with gcc-avr 5.4.0 and avr-libc 2.0.0.288def : Device<"at90s1200", FamilyAVR0, ELFArchAVR1, [FeatureSmallStack]>;289def : Device<"attiny11", FamilyAVR1, ELFArchAVR1, [FeatureSmallStack]>;290def : Device<"attiny12", FamilyAVR1, ELFArchAVR1, [FeatureSmallStack]>;291def : Device<"attiny15", FamilyAVR1, ELFArchAVR1, [FeatureSmallStack]>;292def : Device<"attiny28", FamilyAVR1, ELFArchAVR1, [FeatureSmallStack]>;293def : Device<"at90s2313", FamilyAVR2, ELFArchAVR2, [FeatureSmallStack]>;294def : Device<"at90s2323", FamilyAVR2, ELFArchAVR2, [FeatureSmallStack]>;295def : Device<"at90s2333", FamilyAVR2, ELFArchAVR2, [FeatureSmallStack]>;296def : Device<"at90s2343", FamilyAVR2, ELFArchAVR2, [FeatureSmallStack]>;297def : Device<"attiny22", FamilyAVR2, ELFArchAVR2, [FeatureSmallStack]>;298def : Device<"attiny26", FamilyAVR2, ELFArchAVR2,299 [FeatureLPMX, FeatureSmallStack]>;300def : Device<"at86rf401", FamilyAVR2, ELFArchAVR25, [FeatureMOVW, FeatureLPMX]>;301def : Device<"at90s4414", FamilyAVR2, ELFArchAVR2, [FeatureSmallStack]>;302def : Device<"at90s4433", FamilyAVR2, ELFArchAVR2, [FeatureSmallStack]>;303def : Device<"at90s4434", FamilyAVR2, ELFArchAVR2, [FeatureSmallStack]>;304def : Device<"at90s8515", FamilyAVR2, ELFArchAVR2, [FeatureWrappingRjmp]>;305def : Device<"at90c8534", FamilyAVR2, ELFArchAVR2, [FeatureWrappingRjmp]>;306def : Device<"at90s8535", FamilyAVR2, ELFArchAVR2, [FeatureWrappingRjmp]>;307def : Device<"ata5272", FamilyAVR25, ELFArchAVR25, [FeatureWrappingRjmp]>;308def : Device<"ata6616c", FamilyAVR25, ELFArchAVR25, [FeatureWrappingRjmp]>;309def : Device<"attiny13", FamilyAVR25, ELFArchAVR25, [FeatureSmallStack]>;310def : Device<"attiny13a", FamilyAVR25, ELFArchAVR25, [FeatureSmallStack]>;311def : Device<"attiny2313", FamilyAVR25, ELFArchAVR25, [FeatureSmallStack]>;312def : Device<"attiny2313a", FamilyAVR25, ELFArchAVR25, [FeatureSmallStack]>;313def : Device<"attiny24", FamilyAVR25, ELFArchAVR25, [FeatureSmallStack]>;314def : Device<"attiny24a", FamilyAVR25, ELFArchAVR25, [FeatureSmallStack]>;315def : Device<"attiny4313", FamilyAVR25, ELFArchAVR25>;316def : Device<"attiny44", FamilyAVR25, ELFArchAVR25>;317def : Device<"attiny44a", FamilyAVR25, ELFArchAVR25>;318def : Device<"attiny84", FamilyAVR25, ELFArchAVR25, [FeatureWrappingRjmp]>;319def : Device<"attiny84a", FamilyAVR25, ELFArchAVR25, [FeatureWrappingRjmp]>;320def : Device<"attiny25", FamilyAVR25, ELFArchAVR25, [FeatureSmallStack]>;321def : Device<"attiny45", FamilyAVR25, ELFArchAVR25>;322def : Device<"attiny85", FamilyAVR25, ELFArchAVR25, [FeatureWrappingRjmp]>;323def : Device<"attiny261", FamilyAVR25, ELFArchAVR25, [FeatureSmallStack]>;324def : Device<"attiny261a", FamilyAVR25, ELFArchAVR25, [FeatureSmallStack]>;325def : Device<"attiny441", FamilyAVR25, ELFArchAVR25>;326def : Device<"attiny461", FamilyAVR25, ELFArchAVR25>;327def : Device<"attiny461a", FamilyAVR25, ELFArchAVR25>;328def : Device<"attiny841", FamilyAVR25, ELFArchAVR25, [FeatureWrappingRjmp]>;329def : Device<"attiny861", FamilyAVR25, ELFArchAVR25, [FeatureWrappingRjmp]>;330def : Device<"attiny861a", FamilyAVR25, ELFArchAVR25, [FeatureWrappingRjmp]>;331def : Device<"attiny87", FamilyAVR25, ELFArchAVR25, [FeatureWrappingRjmp]>;332def : Device<"attiny43u", FamilyAVR25, ELFArchAVR25>;333def : Device<"attiny48", FamilyAVR25, ELFArchAVR25>;334def : Device<"attiny88", FamilyAVR25, ELFArchAVR25, [FeatureWrappingRjmp]>;335def : Device<"attiny828", FamilyAVR25, ELFArchAVR25, [FeatureWrappingRjmp]>;336def : Device<"at43usb355", FamilyAVR3, ELFArchAVR3>;337def : Device<"at76c711", FamilyAVR3, ELFArchAVR3>;338def : Device<"atmega103", FamilyAVR31, ELFArchAVR31>;339def : Device<"at43usb320", FamilyAVR31, ELFArchAVR31>;340def : Device<"attiny167", FamilyAVR35, ELFArchAVR35>;341def : Device<"at90usb82", FamilyAVR35, ELFArchAVR35>;342def : Device<"at90usb162", FamilyAVR35, ELFArchAVR35>;343def : Device<"ata5505", FamilyAVR35, ELFArchAVR35>;344def : Device<"ata6617c", FamilyAVR35, ELFArchAVR35>;345def : Device<"ata664251", FamilyAVR35, ELFArchAVR35>;346def : Device<"atmega8u2", FamilyAVR35, ELFArchAVR35>;347def : Device<"atmega16u2", FamilyAVR35, ELFArchAVR35>;348def : Device<"atmega32u2", FamilyAVR35, ELFArchAVR35>;349def : Device<"attiny1634", FamilyAVR35, ELFArchAVR35>;350def : Device<"atmega8", FamilyAVR2, ELFArchAVR4,351 [FeatureMultiplication, FeatureMOVW, FeatureLPMX, FeatureSPM, FeatureWrappingRjmp]>;352def : Device<"ata6289", FamilyAVR4, ELFArchAVR4>;353def : Device<"atmega8a", FamilyAVR2, ELFArchAVR4,354 [FeatureMultiplication, FeatureMOVW, FeatureLPMX, FeatureSPM, FeatureWrappingRjmp]>;355def : Device<"ata6285", FamilyAVR4, ELFArchAVR4, [FeatureWrappingRjmp]>;356def : Device<"ata6286", FamilyAVR4, ELFArchAVR4>;357def : Device<"ata6612c", FamilyAVR4, ELFArchAVR4>;358def : Device<"atmega48", FamilyAVR4, ELFArchAVR4>;359def : Device<"atmega48a", FamilyAVR4, ELFArchAVR4>;360def : Device<"atmega48pa", FamilyAVR4, ELFArchAVR4>;361def : Device<"atmega48pb", FamilyAVR4, ELFArchAVR4>;362def : Device<"atmega48p", FamilyAVR4, ELFArchAVR4>;363def : Device<"atmega88", FamilyAVR4, ELFArchAVR4>;364def : Device<"atmega88a", FamilyAVR4, ELFArchAVR4>;365def : Device<"atmega88p", FamilyAVR4, ELFArchAVR4>;366def : Device<"atmega88pa", FamilyAVR4, ELFArchAVR4>;367def : Device<"atmega88pb", FamilyAVR4, ELFArchAVR4>;368def : Device<"atmega8515", FamilyAVR2, ELFArchAVR4,369 [FeatureMultiplication, FeatureMOVW, FeatureLPMX, FeatureSPM, FeatureWrappingRjmp]>;370def : Device<"atmega8535", FamilyAVR2, ELFArchAVR4,371 [FeatureMultiplication, FeatureMOVW, FeatureLPMX, FeatureSPM, FeatureWrappingRjmp]>;372def : Device<"atmega8hva", FamilyAVR4, ELFArchAVR4>;373def : Device<"at90pwm1", FamilyAVR4, ELFArchAVR4>;374def : Device<"at90pwm2", FamilyAVR4, ELFArchAVR4>;375def : Device<"at90pwm2b", FamilyAVR4, ELFArchAVR4>;376def : Device<"at90pwm3", FamilyAVR4, ELFArchAVR4>;377def : Device<"at90pwm3b", FamilyAVR4, ELFArchAVR4>;378def : Device<"at90pwm81", FamilyAVR4, ELFArchAVR4>;379def : Device<"ata5702m322", FamilyAVR5, ELFArchAVR5>;380def : Device<"ata5782", FamilyAVR5, ELFArchAVR5>;381def : Device<"ata5790", FamilyAVR5, ELFArchAVR5>;382def : Device<"ata5790n", FamilyAVR5, ELFArchAVR5>;383def : Device<"ata5791", FamilyAVR5, ELFArchAVR5>;384def : Device<"ata5795", FamilyAVR5, ELFArchAVR5>;385def : Device<"ata5831", FamilyAVR5, ELFArchAVR5>;386def : Device<"ata6613c", FamilyAVR5, ELFArchAVR5>;387def : Device<"ata6614q", FamilyAVR5, ELFArchAVR5>;388def : Device<"ata8210", FamilyAVR5, ELFArchAVR5>;389def : Device<"ata8510", FamilyAVR5, ELFArchAVR5>;390def : Device<"atmega16", FamilyAVR5, ELFArchAVR5>;391def : Device<"atmega16a", FamilyAVR5, ELFArchAVR5>;392def : Device<"atmega161", FamilyAVR3, ELFArchAVR5,393 [FeatureMultiplication, FeatureMOVW, FeatureLPMX, FeatureSPM]>;394def : Device<"atmega162", FamilyAVR5, ELFArchAVR5>;395def : Device<"atmega163", FamilyAVR3, ELFArchAVR5,396 [FeatureMultiplication, FeatureMOVW, FeatureLPMX, FeatureSPM]>;397def : Device<"atmega164a", FamilyAVR5, ELFArchAVR5>;398def : Device<"atmega164p", FamilyAVR5, ELFArchAVR5>;399def : Device<"atmega164pa", FamilyAVR5, ELFArchAVR5>;400def : Device<"atmega165", FamilyAVR5, ELFArchAVR5>;401def : Device<"atmega165a", FamilyAVR5, ELFArchAVR5>;402def : Device<"atmega165p", FamilyAVR5, ELFArchAVR5>;403def : Device<"atmega165pa", FamilyAVR5, ELFArchAVR5>;404def : Device<"atmega168", FamilyAVR5, ELFArchAVR5>;405def : Device<"atmega168a", FamilyAVR5, ELFArchAVR5>;406def : Device<"atmega168p", FamilyAVR5, ELFArchAVR5>;407def : Device<"atmega168pa", FamilyAVR5, ELFArchAVR5>;408def : Device<"atmega168pb", FamilyAVR5, ELFArchAVR5>;409def : Device<"atmega169", FamilyAVR5, ELFArchAVR5>;410def : Device<"atmega169a", FamilyAVR5, ELFArchAVR5>;411def : Device<"atmega169p", FamilyAVR5, ELFArchAVR5>;412def : Device<"atmega169pa", FamilyAVR5, ELFArchAVR5>;413def : Device<"atmega32", FamilyAVR5, ELFArchAVR5>;414def : Device<"atmega32a", FamilyAVR5, ELFArchAVR5>;415def : Device<"atmega323", FamilyAVR5, ELFArchAVR5>;416def : Device<"atmega324a", FamilyAVR5, ELFArchAVR5>;417def : Device<"atmega324p", FamilyAVR5, ELFArchAVR5>;418def : Device<"atmega324pa", FamilyAVR5, ELFArchAVR5>;419def : Device<"atmega324pb", FamilyAVR5, ELFArchAVR5>;420def : Device<"atmega325", FamilyAVR5, ELFArchAVR5>;421def : Device<"atmega325a", FamilyAVR5, ELFArchAVR5>;422def : Device<"atmega325p", FamilyAVR5, ELFArchAVR5>;423def : Device<"atmega325pa", FamilyAVR5, ELFArchAVR5>;424def : Device<"atmega3250", FamilyAVR5, ELFArchAVR5>;425def : Device<"atmega3250a", FamilyAVR5, ELFArchAVR5>;426def : Device<"atmega3250p", FamilyAVR5, ELFArchAVR5>;427def : Device<"atmega3250pa", FamilyAVR5, ELFArchAVR5>;428def : Device<"atmega328", FamilyAVR5, ELFArchAVR5>;429def : Device<"atmega328p", FamilyAVR5, ELFArchAVR5>;430def : Device<"atmega328pb", FamilyAVR5, ELFArchAVR5>;431def : Device<"atmega329", FamilyAVR5, ELFArchAVR5>;432def : Device<"atmega329a", FamilyAVR5, ELFArchAVR5>;433def : Device<"atmega329p", FamilyAVR5, ELFArchAVR5>;434def : Device<"atmega329pa", FamilyAVR5, ELFArchAVR5>;435def : Device<"atmega3290", FamilyAVR5, ELFArchAVR5>;436def : Device<"atmega3290a", FamilyAVR5, ELFArchAVR5>;437def : Device<"atmega3290p", FamilyAVR5, ELFArchAVR5>;438def : Device<"atmega3290pa", FamilyAVR5, ELFArchAVR5>;439def : Device<"atmega406", FamilyAVR5, ELFArchAVR5>;440def : Device<"atmega64", FamilyAVR5, ELFArchAVR5>;441def : Device<"atmega64a", FamilyAVR5, ELFArchAVR5>;442def : Device<"atmega640", FamilyAVR5, ELFArchAVR5>;443def : Device<"atmega644", FamilyAVR5, ELFArchAVR5>;444def : Device<"atmega644a", FamilyAVR5, ELFArchAVR5>;445def : Device<"atmega644p", FamilyAVR5, ELFArchAVR5>;446def : Device<"atmega644pa", FamilyAVR5, ELFArchAVR5>;447def : Device<"atmega645", FamilyAVR5, ELFArchAVR5>;448def : Device<"atmega645a", FamilyAVR5, ELFArchAVR5>;449def : Device<"atmega645p", FamilyAVR5, ELFArchAVR5>;450def : Device<"atmega649", FamilyAVR5, ELFArchAVR5>;451def : Device<"atmega649a", FamilyAVR5, ELFArchAVR5>;452def : Device<"atmega649p", FamilyAVR5, ELFArchAVR5>;453def : Device<"atmega6450", FamilyAVR5, ELFArchAVR5>;454def : Device<"atmega6450a", FamilyAVR5, ELFArchAVR5>;455def : Device<"atmega6450p", FamilyAVR5, ELFArchAVR5>;456def : Device<"atmega6490", FamilyAVR5, ELFArchAVR5>;457def : Device<"atmega6490a", FamilyAVR5, ELFArchAVR5>;458def : Device<"atmega6490p", FamilyAVR5, ELFArchAVR5>;459def : Device<"atmega64rfr2", FamilyAVR5, ELFArchAVR5>;460def : Device<"atmega644rfr2", FamilyAVR5, ELFArchAVR5>;461def : Device<"atmega16hva", FamilyAVR5, ELFArchAVR5>;462def : Device<"atmega16hva2", FamilyAVR5, ELFArchAVR5>;463def : Device<"atmega16hvb", FamilyAVR5, ELFArchAVR5>;464def : Device<"atmega16hvbrevb", FamilyAVR5, ELFArchAVR5>;465def : Device<"atmega32hvb", FamilyAVR5, ELFArchAVR5>;466def : Device<"atmega32hvbrevb", FamilyAVR5, ELFArchAVR5>;467def : Device<"atmega64hve", FamilyAVR5, ELFArchAVR5>;468def : Device<"atmega64hve2", FamilyAVR5, ELFArchAVR5>;469def : Device<"at90can32", FamilyAVR5, ELFArchAVR5>;470def : Device<"at90can64", FamilyAVR5, ELFArchAVR5>;471def : Device<"at90pwm161", FamilyAVR5, ELFArchAVR5>;472def : Device<"at90pwm216", FamilyAVR5, ELFArchAVR5>;473def : Device<"at90pwm316", FamilyAVR5, ELFArchAVR5>;474def : Device<"atmega32c1", FamilyAVR5, ELFArchAVR5>;475def : Device<"atmega64c1", FamilyAVR5, ELFArchAVR5>;476def : Device<"atmega16m1", FamilyAVR5, ELFArchAVR5>;477def : Device<"atmega32m1", FamilyAVR5, ELFArchAVR5>;478def : Device<"atmega64m1", FamilyAVR5, ELFArchAVR5>;479def : Device<"atmega16u4", FamilyAVR5, ELFArchAVR5>;480def : Device<"atmega32u4", FamilyAVR5, ELFArchAVR5>;481def : Device<"atmega32u6", FamilyAVR5, ELFArchAVR5>;482def : Device<"at90usb646", FamilyAVR5, ELFArchAVR5>;483def : Device<"at90usb647", FamilyAVR5, ELFArchAVR5>;484def : Device<"at90scr100", FamilyAVR5, ELFArchAVR5>;485def : Device<"at94k", FamilyAVR3, ELFArchAVR5,486 [FeatureMultiplication, FeatureMOVW, FeatureLPMX]>;487def : Device<"m3000", FamilyAVR5, ELFArchAVR5>;488def : Device<"atmega128", FamilyAVR51, ELFArchAVR51>;489def : Device<"atmega128a", FamilyAVR51, ELFArchAVR51>;490def : Device<"atmega1280", FamilyAVR51, ELFArchAVR51>;491def : Device<"atmega1281", FamilyAVR51, ELFArchAVR51>;492def : Device<"atmega1284", FamilyAVR51, ELFArchAVR51>;493def : Device<"atmega1284p", FamilyAVR51, ELFArchAVR51>;494def : Device<"atmega128rfa1", FamilyAVR51, ELFArchAVR51>;495def : Device<"atmega128rfr2", FamilyAVR51, ELFArchAVR51>;496def : Device<"atmega1284rfr2", FamilyAVR51, ELFArchAVR51>;497def : Device<"at90can128", FamilyAVR51, ELFArchAVR51>;498def : Device<"at90usb1286", FamilyAVR51, ELFArchAVR51>;499def : Device<"at90usb1287", FamilyAVR51, ELFArchAVR51>;500def : Device<"atmega2560", FamilyAVR6, ELFArchAVR6>;501def : Device<"atmega2561", FamilyAVR6, ELFArchAVR6>;502def : Device<"atmega256rfr2", FamilyAVR6, ELFArchAVR6>;503def : Device<"atmega2564rfr2", FamilyAVR6, ELFArchAVR6>;504def : Device<"atxmega16a4", FamilyXMEGA, ELFArchXMEGA2>;505def : Device<"atxmega16a4u", FamilyXMEGAU, ELFArchXMEGA2>;506def : Device<"atxmega16c4", FamilyXMEGAU, ELFArchXMEGA2>;507def : Device<"atxmega16d4", FamilyXMEGA, ELFArchXMEGA2>;508def : Device<"atxmega32a4", FamilyXMEGA, ELFArchXMEGA2>;509def : Device<"atxmega32a4u", FamilyXMEGAU, ELFArchXMEGA2>;510def : Device<"atxmega32c3", FamilyXMEGAU, ELFArchXMEGA2>;511def : Device<"atxmega32c4", FamilyXMEGAU, ELFArchXMEGA2>;512def : Device<"atxmega32d3", FamilyXMEGA, ELFArchXMEGA2>;513def : Device<"atxmega32d4", FamilyXMEGA, ELFArchXMEGA2>;514def : Device<"atxmega32e5", FamilyXMEGAU, ELFArchXMEGA2>;515def : Device<"atxmega16e5", FamilyXMEGAU, ELFArchXMEGA2>;516def : Device<"atxmega8e5", FamilyXMEGAU, ELFArchXMEGA2>;517def : Device<"atxmega64a3", FamilyXMEGA, ELFArchXMEGA4>;518def : Device<"atxmega64a3u", FamilyXMEGAU, ELFArchXMEGA4>;519def : Device<"atxmega64a4u", FamilyXMEGAU, ELFArchXMEGA4>;520def : Device<"atxmega64b1", FamilyXMEGAU, ELFArchXMEGA4>;521def : Device<"atxmega64b3", FamilyXMEGAU, ELFArchXMEGA4>;522def : Device<"atxmega64c3", FamilyXMEGAU, ELFArchXMEGA4>;523def : Device<"atxmega64d3", FamilyXMEGA, ELFArchXMEGA4>;524def : Device<"atxmega64d4", FamilyXMEGA, ELFArchXMEGA4>;525def : Device<"atxmega64a1", FamilyXMEGA, ELFArchXMEGA5>;526def : Device<"atxmega64a1u", FamilyXMEGAU, ELFArchXMEGA5>;527def : Device<"atxmega128a3", FamilyXMEGA, ELFArchXMEGA6>;528def : Device<"atxmega128a3u", FamilyXMEGAU, ELFArchXMEGA6>;529def : Device<"atxmega128b1", FamilyXMEGAU, ELFArchXMEGA6>;530def : Device<"atxmega128b3", FamilyXMEGAU, ELFArchXMEGA6>;531def : Device<"atxmega128c3", FamilyXMEGAU, ELFArchXMEGA6>;532def : Device<"atxmega128d3", FamilyXMEGA, ELFArchXMEGA6>;533def : Device<"atxmega128d4", FamilyXMEGA, ELFArchXMEGA6>;534def : Device<"atxmega192a3", FamilyXMEGA, ELFArchXMEGA6>;535def : Device<"atxmega192a3u", FamilyXMEGAU, ELFArchXMEGA6>;536def : Device<"atxmega192c3", FamilyXMEGAU, ELFArchXMEGA6>;537def : Device<"atxmega192d3", FamilyXMEGA, ELFArchXMEGA6>;538def : Device<"atxmega256a3", FamilyXMEGA, ELFArchXMEGA6>;539def : Device<"atxmega256a3u", FamilyXMEGAU, ELFArchXMEGA6>;540def : Device<"atxmega256a3b", FamilyXMEGA, ELFArchXMEGA6>;541def : Device<"atxmega256a3bu", FamilyXMEGAU, ELFArchXMEGA6>;542def : Device<"atxmega256c3", FamilyXMEGAU, ELFArchXMEGA6>;543def : Device<"atxmega256d3", FamilyXMEGA, ELFArchXMEGA6>;544def : Device<"atxmega384c3", FamilyXMEGAU, ELFArchXMEGA6>;545def : Device<"atxmega384d3", FamilyXMEGA, ELFArchXMEGA6>;546def : Device<"atxmega128a1", FamilyXMEGA, ELFArchXMEGA7>;547def : Device<"atxmega128a1u", FamilyXMEGAU, ELFArchXMEGA7>;548def : Device<"atxmega128a4u", FamilyXMEGAU, ELFArchXMEGA7>;549def : Device<"attiny4", FamilyTiny, ELFArchTiny>;550def : Device<"attiny5", FamilyTiny, ELFArchTiny>;551def : Device<"attiny9", FamilyTiny, ELFArchTiny>;552def : Device<"attiny10", FamilyTiny, ELFArchTiny>;553def : Device<"attiny20", FamilyTiny, ELFArchTiny>;554def : Device<"attiny40", FamilyTiny, ELFArchTiny>;555def : Device<"attiny102", FamilyTiny, ELFArchTiny>;556def : Device<"attiny104", FamilyTiny, ELFArchTiny>;557def : Device<"attiny202", FamilyXMEGA3, ELFArchXMEGA3>;558def : Device<"attiny402", FamilyXMEGA3, ELFArchXMEGA3>;559def : Device<"attiny204", FamilyXMEGA3, ELFArchXMEGA3>;560def : Device<"attiny404", FamilyXMEGA3, ELFArchXMEGA3>;561def : Device<"attiny804", FamilyXMEGA3, ELFArchXMEGA3>;562def : Device<"attiny1604", FamilyXMEGA3, ELFArchXMEGA3>;563def : Device<"attiny406", FamilyXMEGA3, ELFArchXMEGA3>;564def : Device<"attiny806", FamilyXMEGA3, ELFArchXMEGA3>;565def : Device<"attiny1606", FamilyXMEGA3, ELFArchXMEGA3>;566def : Device<"attiny807", FamilyXMEGA3, ELFArchXMEGA3>;567def : Device<"attiny1607", FamilyXMEGA3, ELFArchXMEGA3>;568def : Device<"attiny212", FamilyXMEGA3, ELFArchXMEGA3>;569def : Device<"attiny412", FamilyXMEGA3, ELFArchXMEGA3>;570def : Device<"attiny214", FamilyXMEGA3, ELFArchXMEGA3>;571def : Device<"attiny414", FamilyXMEGA3, ELFArchXMEGA3>;572def : Device<"attiny814", FamilyXMEGA3, ELFArchXMEGA3>;573def : Device<"attiny1614", FamilyXMEGA3, ELFArchXMEGA3>;574def : Device<"attiny416", FamilyXMEGA3, ELFArchXMEGA3>;575def : Device<"attiny816", FamilyXMEGA3, ELFArchXMEGA3>;576def : Device<"attiny1616", FamilyXMEGA3, ELFArchXMEGA3>;577def : Device<"attiny3216", FamilyXMEGA3, ELFArchXMEGA3>;578def : Device<"attiny417", FamilyXMEGA3, ELFArchXMEGA3>;579def : Device<"attiny817", FamilyXMEGA3, ELFArchXMEGA3>;580def : Device<"attiny1617", FamilyXMEGA3, ELFArchXMEGA3>;581def : Device<"attiny3217", FamilyXMEGA3, ELFArchXMEGA3>;582def : Device<"attiny1624", FamilyXMEGA3, ELFArchXMEGA3>;583def : Device<"attiny1626", FamilyXMEGA3, ELFArchXMEGA3>;584def : Device<"attiny1627", FamilyXMEGA3, ELFArchXMEGA3>;585def : Device<"attiny3224", FamilyXMEGA3, ELFArchXMEGA3>;586def : Device<"attiny3226", FamilyXMEGA3, ELFArchXMEGA3>;587def : Device<"attiny3227", FamilyXMEGA3, ELFArchXMEGA3>;588def : Device<"atmega808", FamilyXMEGA3, ELFArchXMEGA3>;589def : Device<"atmega809", FamilyXMEGA3, ELFArchXMEGA3>;590def : Device<"atmega1608", FamilyXMEGA3, ELFArchXMEGA3>;591def : Device<"atmega1609", FamilyXMEGA3, ELFArchXMEGA3>;592def : Device<"atmega3208", FamilyXMEGA3, ELFArchXMEGA3>;593def : Device<"atmega3209", FamilyXMEGA3, ELFArchXMEGA3>;594def : Device<"atmega4808", FamilyXMEGA3, ELFArchXMEGA3>;595def : Device<"atmega4809", FamilyXMEGA3, ELFArchXMEGA3>;596 597// Additions from gcc 14:598 599def : Device<"avr64da28", FamilyXMEGA2, ELFArchXMEGA2>;600def : Device<"avr64da32", FamilyXMEGA2, ELFArchXMEGA2>;601def : Device<"avr64da48", FamilyXMEGA2, ELFArchXMEGA2>;602def : Device<"avr64da64", FamilyXMEGA2, ELFArchXMEGA2>;603def : Device<"avr64db28", FamilyXMEGA2, ELFArchXMEGA2>;604def : Device<"avr64db32", FamilyXMEGA2, ELFArchXMEGA2>;605def : Device<"avr64db48", FamilyXMEGA2, ELFArchXMEGA2>;606def : Device<"avr64db64", FamilyXMEGA2, ELFArchXMEGA2>;607def : Device<"avr64dd14", FamilyXMEGA2, ELFArchXMEGA2>;608def : Device<"avr64dd20", FamilyXMEGA2, ELFArchXMEGA2>;609def : Device<"avr64dd28", FamilyXMEGA2, ELFArchXMEGA2>;610def : Device<"avr64dd32", FamilyXMEGA2, ELFArchXMEGA2>;611def : Device<"avr64du28", FamilyXMEGA2, ELFArchXMEGA2>;612def : Device<"avr64du32", FamilyXMEGA2, ELFArchXMEGA2>;613def : Device<"avr64ea28", FamilyXMEGA2, ELFArchXMEGA2>;614def : Device<"avr64ea32", FamilyXMEGA2, ELFArchXMEGA2>;615def : Device<"avr64ea48", FamilyXMEGA2, ELFArchXMEGA2>;616def : Device<"avr64sd28", FamilyXMEGA2, ELFArchXMEGA2>;617def : Device<"avr64sd32", FamilyXMEGA2, ELFArchXMEGA2>;618def : Device<"avr64sd48", FamilyXMEGA2, ELFArchXMEGA2>;619 620def : Device<"avr16dd20", FamilyXMEGA3, ELFArchXMEGA3>;621def : Device<"avr16dd28", FamilyXMEGA3, ELFArchXMEGA3>;622def : Device<"avr16dd32", FamilyXMEGA3, ELFArchXMEGA3>;623def : Device<"avr16du14", FamilyXMEGA3, ELFArchXMEGA3>;624def : Device<"avr16du20", FamilyXMEGA3, ELFArchXMEGA3>;625def : Device<"avr16du28", FamilyXMEGA3, ELFArchXMEGA3>;626def : Device<"avr16du32", FamilyXMEGA3, ELFArchXMEGA3>;627def : Device<"avr32da28", FamilyXMEGA3, ELFArchXMEGA3>;628def : Device<"avr32da32", FamilyXMEGA3, ELFArchXMEGA3>;629def : Device<"avr32da48", FamilyXMEGA3, ELFArchXMEGA3>;630def : Device<"avr32db28", FamilyXMEGA3, ELFArchXMEGA3>;631def : Device<"avr32db32", FamilyXMEGA3, ELFArchXMEGA3>;632def : Device<"avr32db48", FamilyXMEGA3, ELFArchXMEGA3>;633def : Device<"avr32dd14", FamilyXMEGA3, ELFArchXMEGA3>;634def : Device<"avr32dd20", FamilyXMEGA3, ELFArchXMEGA3>;635def : Device<"avr32dd28", FamilyXMEGA3, ELFArchXMEGA3>;636def : Device<"avr32dd32", FamilyXMEGA3, ELFArchXMEGA3>;637def : Device<"avr32du14", FamilyXMEGA3, ELFArchXMEGA3>;638def : Device<"avr32du20", FamilyXMEGA3, ELFArchXMEGA3>;639def : Device<"avr32du28", FamilyXMEGA3, ELFArchXMEGA3>;640def : Device<"avr32du32", FamilyXMEGA3, ELFArchXMEGA3>;641def : Device<"avr16eb14", FamilyXMEGA3, ELFArchXMEGA3>;642def : Device<"avr16eb20", FamilyXMEGA3, ELFArchXMEGA3>;643def : Device<"avr16eb28", FamilyXMEGA3, ELFArchXMEGA3>;644def : Device<"avr16eb32", FamilyXMEGA3, ELFArchXMEGA3>;645def : Device<"avr16ea28", FamilyXMEGA3, ELFArchXMEGA3>;646def : Device<"avr16ea32", FamilyXMEGA3, ELFArchXMEGA3>;647def : Device<"avr16ea48", FamilyXMEGA3, ELFArchXMEGA3>;648def : Device<"avr32ea28", FamilyXMEGA3, ELFArchXMEGA3>;649def : Device<"avr32ea32", FamilyXMEGA3, ELFArchXMEGA3>;650def : Device<"avr32ea48", FamilyXMEGA3, ELFArchXMEGA3>;651def : Device<"avr32sd20", FamilyXMEGA3, ELFArchXMEGA3>;652def : Device<"avr32sd28", FamilyXMEGA3, ELFArchXMEGA3>;653def : Device<"avr32sd32", FamilyXMEGA3, ELFArchXMEGA3>;654def : Device<"avr128da28", FamilyXMEGA4, ELFArchXMEGA4>;655def : Device<"avr128da32", FamilyXMEGA4, ELFArchXMEGA4>;656def : Device<"avr128da48", FamilyXMEGA4, ELFArchXMEGA4>;657def : Device<"avr128da64", FamilyXMEGA4, ELFArchXMEGA4>;658def : Device<"avr128db28", FamilyXMEGA4, ELFArchXMEGA4>;659def : Device<"avr128db32", FamilyXMEGA4, ELFArchXMEGA4>;660def : Device<"avr128db48", FamilyXMEGA4, ELFArchXMEGA4>;661def : Device<"avr128db64", FamilyXMEGA4, ELFArchXMEGA4>;662