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