Skip to content

Commit 10bc17f

Browse files
authored
[AVR] Add support for many new AVR MCUs (#143914)
fixes #116116
1 parent ff295d2 commit 10bc17f

File tree

3 files changed

+215
-0
lines changed

3 files changed

+215
-0
lines changed

clang/lib/Basic/Targets/AVR.cpp

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,9 @@ static MCUInfo AVRMcus[] = {
336336
{"attiny1624", "__AVR_ATtiny1624__", "103", 1},
337337
{"attiny1626", "__AVR_ATtiny1626__", "103", 1},
338338
{"attiny1627", "__AVR_ATtiny1627__", "103", 1},
339+
{"attiny3224", "__AVR_ATtiny3224__", "103", 1},
340+
{"attiny3226", "__AVR_ATtiny3226__", "103", 1},
341+
{"attiny3227", "__AVR_ATtiny3227__", "103", 1},
339342
{"atmega808", "__AVR_ATmega808__", "103", 1},
340343
{"atmega809", "__AVR_ATmega809__", "103", 1},
341344
{"atmega1608", "__AVR_ATmega1608__", "103", 1},
@@ -344,6 +347,72 @@ static MCUInfo AVRMcus[] = {
344347
{"atmega3209", "__AVR_ATmega3209__", "103", 1},
345348
{"atmega4808", "__AVR_ATmega4808__", "103", 1},
346349
{"atmega4809", "__AVR_ATmega4809__", "103", 1},
350+
351+
// gcc 14 additions:
352+
353+
{"avr64da28", "__AVR_AVR64DA28__", "102", 1},
354+
{"avr64da32", "__AVR_AVR64DA32__", "102", 1},
355+
{"avr64da48", "__AVR_AVR64DA48__", "102", 1},
356+
{"avr64da64", "__AVR_AVR64DA64__", "102", 1},
357+
{"avr64db28", "__AVR_AVR64DB28__", "102", 1},
358+
{"avr64db32", "__AVR_AVR64DB32__", "102", 1},
359+
{"avr64db48", "__AVR_AVR64DB48__", "102", 1},
360+
{"avr64db64", "__AVR_AVR64DB64__", "102", 1},
361+
{"avr64dd14", "__AVR_AVR64DD14__", "102", 1},
362+
{"avr64dd20", "__AVR_AVR64DD20__", "102", 1},
363+
{"avr64dd28", "__AVR_AVR64DD28__", "102", 1},
364+
{"avr64dd32", "__AVR_AVR64DD32__", "102", 1},
365+
{"avr64du28", "__AVR_AVR64DU28__", "102", 1},
366+
{"avr64du32", "__AVR_AVR64DU32__", "102", 1},
367+
{"avr64ea28", "__AVR_AVR64EA28__", "102", 1},
368+
{"avr64ea32", "__AVR_AVR64EA32__", "102", 1},
369+
{"avr64ea48", "__AVR_AVR64EA48__", "102", 1},
370+
{"avr64sd28", "__AVR_AVR64SD28__", "102", 1},
371+
{"avr64sd32", "__AVR_AVR64SD32__", "102", 1},
372+
{"avr64sd48", "__AVR_AVR64SD48__", "102", 1},
373+
374+
{"avr16dd20", "__AVR_AVR16DD20__", "103", 1},
375+
{"avr16dd28", "__AVR_AVR16DD28__", "103", 1},
376+
{"avr16dd32", "__AVR_AVR16DD32__", "103", 1},
377+
{"avr16du14", "__AVR_AVR16DU14__", "103", 1},
378+
{"avr16du20", "__AVR_AVR16DU20__", "103", 1},
379+
{"avr16du28", "__AVR_AVR16DU28__", "103", 1},
380+
{"avr16du32", "__AVR_AVR16DU32__", "103", 1},
381+
{"avr32da28", "__AVR_AVR32DA28__", "103", 1},
382+
{"avr32da32", "__AVR_AVR32DA32__", "103", 1},
383+
{"avr32da48", "__AVR_AVR32DA48__", "103", 1},
384+
{"avr32db28", "__AVR_AVR32DB28__", "103", 1},
385+
{"avr32db32", "__AVR_AVR32DB32__", "103", 1},
386+
{"avr32db48", "__AVR_AVR32DB48__", "103", 1},
387+
{"avr32dd14", "__AVR_AVR32DD14__", "103", 1},
388+
{"avr32dd20", "__AVR_AVR32DD20__", "103", 1},
389+
{"avr32dd28", "__AVR_AVR32DD28__", "103", 1},
390+
{"avr32dd32", "__AVR_AVR32DD32__", "103", 1},
391+
{"avr32du14", "__AVR_AVR32DU14__", "103", 1},
392+
{"avr32du20", "__AVR_AVR32DU20__", "103", 1},
393+
{"avr32du28", "__AVR_AVR32DU28__", "103", 1},
394+
{"avr32du32", "__AVR_AVR32DU32__", "103", 1},
395+
{"avr16eb14", "__AVR_AVR16EB14__", "103", 1},
396+
{"avr16eb20", "__AVR_AVR16EB20__", "103", 1},
397+
{"avr16eb28", "__AVR_AVR16EB28__", "103", 1},
398+
{"avr16eb32", "__AVR_AVR16EB32__", "103", 1},
399+
{"avr16ea28", "__AVR_AVR16EA28__", "103", 1},
400+
{"avr16ea32", "__AVR_AVR16EA32__", "103", 1},
401+
{"avr16ea48", "__AVR_AVR16EA48__", "103", 1},
402+
{"avr32ea28", "__AVR_AVR32EA28__", "103", 1},
403+
{"avr32ea32", "__AVR_AVR32EA32__", "103", 1},
404+
{"avr32ea48", "__AVR_AVR32EA48__", "103", 1},
405+
{"avr32sd20", "__AVR_AVR32SD20__", "103", 1},
406+
{"avr32sd28", "__AVR_AVR32SD28__", "103", 1},
407+
{"avr32sd32", "__AVR_AVR32SD32__", "103", 1},
408+
{"avr128da28", "__AVR_AVR128DA28__", "104", 2},
409+
{"avr128da32", "__AVR_AVR128DA32__", "104", 2},
410+
{"avr128da48", "__AVR_AVR128DA48__", "104", 2},
411+
{"avr128da64", "__AVR_AVR128DA64__", "104", 2},
412+
{"avr128db28", "__AVR_AVR128DB28__", "104", 2},
413+
{"avr128db32", "__AVR_AVR128DB32__", "104", 2},
414+
{"avr128db48", "__AVR_AVR128DB48__", "104", 2},
415+
{"avr128db64", "__AVR_AVR128DB64__", "104", 2},
347416
};
348417

349418
} // namespace targets

clang/lib/Driver/ToolChains/AVR.cpp

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,8 +326,78 @@ constexpr struct {
326326
{"attiny1624", "avrxmega3", "avrxmega3", 0x803800},
327327
{"attiny1626", "avrxmega3", "avrxmega3", 0x803800},
328328
{"attiny1627", "avrxmega3", "avrxmega3", 0x803800},
329+
{"attiny3224", "avrxmega3", "avrxmega3", 0x803400},
330+
{"attiny3226", "avrxmega3", "avrxmega3", 0x803400},
331+
{"attiny3227", "avrxmega3", "avrxmega3", 0x803400},
329332
{"attiny3216", "avrxmega3", "avrxmega3", 0x803800},
330333
{"attiny3217", "avrxmega3", "avrxmega3", 0x803800},
334+
335+
// gcc 14 additions:
336+
337+
{"avr64da28", "avrxmega2", "avrxmega2", 0x806000},
338+
{"avr64da32", "avrxmega2", "avrxmega2", 0x806000},
339+
{"avr64da48", "avrxmega2", "avrxmega2", 0x806000},
340+
{"avr64da64", "avrxmega2", "avrxmega2", 0x806000},
341+
{"avr64db28", "avrxmega2", "avrxmega2", 0x806000},
342+
{"avr64db32", "avrxmega2", "avrxmega2", 0x806000},
343+
{"avr64db48", "avrxmega2", "avrxmega2", 0x806000},
344+
{"avr64db64", "avrxmega2", "avrxmega2", 0x806000},
345+
{"avr64dd14", "avrxmega2", "avrxmega2", 0x806000},
346+
{"avr64dd20", "avrxmega2", "avrxmega2", 0x806000},
347+
{"avr64dd28", "avrxmega2", "avrxmega2", 0x806000},
348+
{"avr64dd32", "avrxmega2", "avrxmega2", 0x806000},
349+
{"avr64du28", "avrxmega2", "avrxmega2", 0x806000},
350+
{"avr64du32", "avrxmega2", "avrxmega2", 0x806000},
351+
{"avr64ea28", "avrxmega2", "avrxmega2", 0x806800},
352+
{"avr64ea32", "avrxmega2", "avrxmega2", 0x806800},
353+
{"avr64ea48", "avrxmega2", "avrxmega2", 0x806800},
354+
{"avr64sd28", "avrxmega2", "avrxmega2", 0x806000},
355+
{"avr64sd32", "avrxmega2", "avrxmega2", 0x806000},
356+
{"avr64sd48", "avrxmega2", "avrxmega2", 0x806000},
357+
358+
{"avr16dd20", "avrxmega3", "avrxmega3", 0x807800},
359+
{"avr16dd28", "avrxmega3", "avrxmega3", 0x807800},
360+
{"avr16dd32", "avrxmega3", "avrxmega3", 0x807800},
361+
{"avr16du14", "avrxmega3", "avrxmega3", 0x807800},
362+
{"avr16du20", "avrxmega3", "avrxmega3", 0x807800},
363+
{"avr16du28", "avrxmega3", "avrxmega3", 0x807800},
364+
{"avr16du32", "avrxmega3", "avrxmega3", 0x807800},
365+
{"avr32da28", "avrxmega3", "avrxmega3", 0x807000},
366+
{"avr32da32", "avrxmega3", "avrxmega3", 0x807000},
367+
{"avr32da48", "avrxmega3", "avrxmega3", 0x807000},
368+
{"avr32db28", "avrxmega3", "avrxmega3", 0x807000},
369+
{"avr32db32", "avrxmega3", "avrxmega3", 0x807000},
370+
{"avr32db48", "avrxmega3", "avrxmega3", 0x807000},
371+
{"avr32dd14", "avrxmega3", "avrxmega3", 0x807000},
372+
{"avr32dd20", "avrxmega3", "avrxmega3", 0x807000},
373+
{"avr32dd28", "avrxmega3", "avrxmega3", 0x807000},
374+
{"avr32dd32", "avrxmega3", "avrxmega3", 0x807000},
375+
{"avr32du14", "avrxmega3", "avrxmega3", 0x807000},
376+
{"avr32du20", "avrxmega3", "avrxmega3", 0x807000},
377+
{"avr32du28", "avrxmega3", "avrxmega3", 0x807000},
378+
{"avr32du32", "avrxmega3", "avrxmega3", 0x807000},
379+
{"avr16eb14", "avrxmega3", "avrxmega3", 0x807800},
380+
{"avr16eb20", "avrxmega3", "avrxmega3", 0x807800},
381+
{"avr16eb28", "avrxmega3", "avrxmega3", 0x807800},
382+
{"avr16eb32", "avrxmega3", "avrxmega3", 0x807800},
383+
{"avr16ea28", "avrxmega3", "avrxmega3", 0x807800},
384+
{"avr16ea32", "avrxmega3", "avrxmega3", 0x807800},
385+
{"avr16ea48", "avrxmega3", "avrxmega3", 0x807800},
386+
{"avr32ea28", "avrxmega3", "avrxmega3", 0x807000},
387+
{"avr32ea32", "avrxmega3", "avrxmega3", 0x807000},
388+
{"avr32ea48", "avrxmega3", "avrxmega3", 0x807000},
389+
{"avr32sd20", "avrxmega3", "avrxmega3", 0x807000},
390+
{"avr32sd28", "avrxmega3", "avrxmega3", 0x807000},
391+
{"avr32sd32", "avrxmega3", "avrxmega3", 0x807000},
392+
{"avr128da28", "avrxmega4", "avrxmega4", 0x804000},
393+
{"avr128da32", "avrxmega4", "avrxmega4", 0x804000},
394+
{"avr128da48", "avrxmega4", "avrxmega4", 0x804000},
395+
{"avr128da64", "avrxmega4", "avrxmega4", 0x804000},
396+
{"avr128db28", "avrxmega4", "avrxmega4", 0x804000},
397+
{"avr128db32", "avrxmega4", "avrxmega4", 0x804000},
398+
{"avr128db48", "avrxmega4", "avrxmega4", 0x804000},
399+
{"avr128db64", "avrxmega4", "avrxmega4", 0x804000},
400+
331401
};
332402

333403
std::string GetMCUSubPath(StringRef MCUName) {

llvm/lib/Target/AVR/AVRDevices.td

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,13 @@ def FamilyXMEGA3 : Family<"xmega3",
215215
FeatureMultiplication, FeatureMOVW, FeatureLPMX,
216216
FeatureBREAK, FeatureLowByteFirst]>;
217217

218+
def FamilyXMEGA4 : Family<"xmega4",
219+
[FamilyAVR0, FeatureLPM, FeatureIJMPCALL,
220+
FeatureADDSUBIW, FeatureSRAM, FeatureJMPCALL,
221+
FeatureMultiplication, FeatureMOVW, FeatureLPMX,
222+
FeatureELPM,
223+
FeatureBREAK, FeatureLowByteFirst]>;
224+
218225
def FamilyXMEGA : Family<"xmega",
219226
[FamilyAVR0, FeatureLPM, FeatureIJMPCALL,
220227
FeatureADDSUBIW, FeatureSRAM, FeatureJMPCALL,
@@ -567,6 +574,9 @@ def : Device<"attiny3217", FamilyXMEGA3, ELFArchXMEGA3>;
567574
def : Device<"attiny1624", FamilyXMEGA3, ELFArchXMEGA3>;
568575
def : Device<"attiny1626", FamilyXMEGA3, ELFArchXMEGA3>;
569576
def : Device<"attiny1627", FamilyXMEGA3, ELFArchXMEGA3>;
577+
def : Device<"attiny3224", FamilyXMEGA3, ELFArchXMEGA3>;
578+
def : Device<"attiny3226", FamilyXMEGA3, ELFArchXMEGA3>;
579+
def : Device<"attiny3227", FamilyXMEGA3, ELFArchXMEGA3>;
570580
def : Device<"atmega808", FamilyXMEGA3, ELFArchXMEGA3>;
571581
def : Device<"atmega809", FamilyXMEGA3, ELFArchXMEGA3>;
572582
def : Device<"atmega1608", FamilyXMEGA3, ELFArchXMEGA3>;
@@ -575,3 +585,69 @@ def : Device<"atmega3208", FamilyXMEGA3, ELFArchXMEGA3>;
575585
def : Device<"atmega3209", FamilyXMEGA3, ELFArchXMEGA3>;
576586
def : Device<"atmega4808", FamilyXMEGA3, ELFArchXMEGA3>;
577587
def : Device<"atmega4809", FamilyXMEGA3, ELFArchXMEGA3>;
588+
589+
// Additions from gcc 14:
590+
591+
def : Device<"avr64da28", FamilyXMEGA2, ELFArchXMEGA2>;
592+
def : Device<"avr64da32", FamilyXMEGA2, ELFArchXMEGA2>;
593+
def : Device<"avr64da48", FamilyXMEGA2, ELFArchXMEGA2>;
594+
def : Device<"avr64da64", FamilyXMEGA2, ELFArchXMEGA2>;
595+
def : Device<"avr64db28", FamilyXMEGA2, ELFArchXMEGA2>;
596+
def : Device<"avr64db32", FamilyXMEGA2, ELFArchXMEGA2>;
597+
def : Device<"avr64db48", FamilyXMEGA2, ELFArchXMEGA2>;
598+
def : Device<"avr64db64", FamilyXMEGA2, ELFArchXMEGA2>;
599+
def : Device<"avr64dd14", FamilyXMEGA2, ELFArchXMEGA2>;
600+
def : Device<"avr64dd20", FamilyXMEGA2, ELFArchXMEGA2>;
601+
def : Device<"avr64dd28", FamilyXMEGA2, ELFArchXMEGA2>;
602+
def : Device<"avr64dd32", FamilyXMEGA2, ELFArchXMEGA2>;
603+
def : Device<"avr64du28", FamilyXMEGA2, ELFArchXMEGA2>;
604+
def : Device<"avr64du32", FamilyXMEGA2, ELFArchXMEGA2>;
605+
def : Device<"avr64ea28", FamilyXMEGA2, ELFArchXMEGA2>;
606+
def : Device<"avr64ea32", FamilyXMEGA2, ELFArchXMEGA2>;
607+
def : Device<"avr64ea48", FamilyXMEGA2, ELFArchXMEGA2>;
608+
def : Device<"avr64sd28", FamilyXMEGA2, ELFArchXMEGA2>;
609+
def : Device<"avr64sd32", FamilyXMEGA2, ELFArchXMEGA2>;
610+
def : Device<"avr64sd48", FamilyXMEGA2, ELFArchXMEGA2>;
611+
612+
def : Device<"avr16dd20", FamilyXMEGA3, ELFArchXMEGA3>;
613+
def : Device<"avr16dd28", FamilyXMEGA3, ELFArchXMEGA3>;
614+
def : Device<"avr16dd32", FamilyXMEGA3, ELFArchXMEGA3>;
615+
def : Device<"avr16du14", FamilyXMEGA3, ELFArchXMEGA3>;
616+
def : Device<"avr16du20", FamilyXMEGA3, ELFArchXMEGA3>;
617+
def : Device<"avr16du28", FamilyXMEGA3, ELFArchXMEGA3>;
618+
def : Device<"avr16du32", FamilyXMEGA3, ELFArchXMEGA3>;
619+
def : Device<"avr32da28", FamilyXMEGA3, ELFArchXMEGA3>;
620+
def : Device<"avr32da32", FamilyXMEGA3, ELFArchXMEGA3>;
621+
def : Device<"avr32da48", FamilyXMEGA3, ELFArchXMEGA3>;
622+
def : Device<"avr32db28", FamilyXMEGA3, ELFArchXMEGA3>;
623+
def : Device<"avr32db32", FamilyXMEGA3, ELFArchXMEGA3>;
624+
def : Device<"avr32db48", FamilyXMEGA3, ELFArchXMEGA3>;
625+
def : Device<"avr32dd14", FamilyXMEGA3, ELFArchXMEGA3>;
626+
def : Device<"avr32dd20", FamilyXMEGA3, ELFArchXMEGA3>;
627+
def : Device<"avr32dd28", FamilyXMEGA3, ELFArchXMEGA3>;
628+
def : Device<"avr32dd32", FamilyXMEGA3, ELFArchXMEGA3>;
629+
def : Device<"avr32du14", FamilyXMEGA3, ELFArchXMEGA3>;
630+
def : Device<"avr32du20", FamilyXMEGA3, ELFArchXMEGA3>;
631+
def : Device<"avr32du28", FamilyXMEGA3, ELFArchXMEGA3>;
632+
def : Device<"avr32du32", FamilyXMEGA3, ELFArchXMEGA3>;
633+
def : Device<"avr16eb14", FamilyXMEGA3, ELFArchXMEGA3>;
634+
def : Device<"avr16eb20", FamilyXMEGA3, ELFArchXMEGA3>;
635+
def : Device<"avr16eb28", FamilyXMEGA3, ELFArchXMEGA3>;
636+
def : Device<"avr16eb32", FamilyXMEGA3, ELFArchXMEGA3>;
637+
def : Device<"avr16ea28", FamilyXMEGA3, ELFArchXMEGA3>;
638+
def : Device<"avr16ea32", FamilyXMEGA3, ELFArchXMEGA3>;
639+
def : Device<"avr16ea48", FamilyXMEGA3, ELFArchXMEGA3>;
640+
def : Device<"avr32ea28", FamilyXMEGA3, ELFArchXMEGA3>;
641+
def : Device<"avr32ea32", FamilyXMEGA3, ELFArchXMEGA3>;
642+
def : Device<"avr32ea48", FamilyXMEGA3, ELFArchXMEGA3>;
643+
def : Device<"avr32sd20", FamilyXMEGA3, ELFArchXMEGA3>;
644+
def : Device<"avr32sd28", FamilyXMEGA3, ELFArchXMEGA3>;
645+
def : Device<"avr32sd32", FamilyXMEGA3, ELFArchXMEGA3>;
646+
def : Device<"avr128da28", FamilyXMEGA4, ELFArchXMEGA4>;
647+
def : Device<"avr128da32", FamilyXMEGA4, ELFArchXMEGA4>;
648+
def : Device<"avr128da48", FamilyXMEGA4, ELFArchXMEGA4>;
649+
def : Device<"avr128da64", FamilyXMEGA4, ELFArchXMEGA4>;
650+
def : Device<"avr128db28", FamilyXMEGA4, ELFArchXMEGA4>;
651+
def : Device<"avr128db32", FamilyXMEGA4, ELFArchXMEGA4>;
652+
def : Device<"avr128db48", FamilyXMEGA4, ELFArchXMEGA4>;
653+
def : Device<"avr128db64", FamilyXMEGA4, ELFArchXMEGA4>;

0 commit comments

Comments
 (0)