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