Skip to content

Commit 3e070f4

Browse files
committed
Add support for many new AVR mcus like AVR128DB28
1 parent c95bc41 commit 3e070f4

File tree

3 files changed

+143
-0
lines changed

3 files changed

+143
-0
lines changed

clang/lib/Basic/Targets/AVR.cpp

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,51 @@ static MCUInfo AVRMcus[] = {
344344
{"atmega3209", "__AVR_ATmega3209__", "103", 1},
345345
{"atmega4808", "__AVR_ATmega4808__", "103", 1},
346346
{"atmega4809", "__AVR_ATmega4809__", "103", 1},
347+
348+
// gcc 14 additions:
349+
350+
{"avr16dd20", "__AVR_AVR16DD20__", "103", 1},
351+
{"avr16dd28", "__AVR_AVR16DD28__", "103", 1},
352+
{"avr16dd32", "__AVR_AVR16DD32__", "103", 1},
353+
{"avr16du14", "__AVR_AVR16DU14__", "103", 1},
354+
{"avr16du20", "__AVR_AVR16DU20__", "103", 1},
355+
{"avr16du28", "__AVR_AVR16DU28__", "103", 1},
356+
{"avr16du32", "__AVR_AVR16DU32__", "103", 1},
357+
{"avr32da28", "__AVR_AVR32DA28__", "103", 1},
358+
{"avr32da32", "__AVR_AVR32DA32__", "103", 1},
359+
{"avr32da48", "__AVR_AVR32DA48__", "103", 1},
360+
{"avr32db28", "__AVR_AVR32DB28__", "103", 1},
361+
{"avr32db32", "__AVR_AVR32DB32__", "103", 1},
362+
{"avr32db48", "__AVR_AVR32DB48__", "103", 1},
363+
{"avr32dd14", "__AVR_AVR32DD14__", "103", 1},
364+
{"avr32dd20", "__AVR_AVR32DD20__", "103", 1},
365+
{"avr32dd28", "__AVR_AVR32DD28__", "103", 1},
366+
{"avr32dd32", "__AVR_AVR32DD32__", "103", 1},
367+
{"avr32du14", "__AVR_AVR32DU14__", "103", 1},
368+
{"avr32du20", "__AVR_AVR32DU20__", "103", 1},
369+
{"avr32du28", "__AVR_AVR32DU28__", "103", 1},
370+
{"avr32du32", "__AVR_AVR32DU32__", "103", 1},
371+
{"avr16eb14", "__AVR_AVR16EB14__", "103", 1},
372+
{"avr16eb20", "__AVR_AVR16EB20__", "103", 1},
373+
{"avr16eb28", "__AVR_AVR16EB28__", "103", 1},
374+
{"avr16eb32", "__AVR_AVR16EB32__", "103", 1},
375+
{"avr16ea28", "__AVR_AVR16EA28__", "103", 1},
376+
{"avr16ea32", "__AVR_AVR16EA32__", "103", 1},
377+
{"avr16ea48", "__AVR_AVR16EA48__", "103", 1},
378+
{"avr32ea28", "__AVR_AVR32EA28__", "103", 1},
379+
{"avr32ea32", "__AVR_AVR32EA32__", "103", 1},
380+
{"avr32ea48", "__AVR_AVR32EA48__", "103", 1},
381+
{"avr32sd20", "__AVR_AVR32SD20__", "103", 1},
382+
{"avr32sd28", "__AVR_AVR32SD28__", "103", 1},
383+
{"avr32sd32", "__AVR_AVR32SD32__", "103", 1},
384+
{"avr128da28", "__AVR_AVR128DA28__", "104", 2},
385+
{"avr128da32", "__AVR_AVR128DA32__", "104", 2},
386+
{"avr128da48", "__AVR_AVR128DA48__", "104", 2},
387+
{"avr128da64", "__AVR_AVR128DA64__", "104", 2},
388+
{"avr128db28", "__AVR_AVR128DB28__", "104", 2},
389+
{"avr128db32", "__AVR_AVR128DB32__", "104", 2},
390+
{"avr128db48", "__AVR_AVR128DB48__", "104", 2},
391+
{"avr128db64", "__AVR_AVR128DB64__", "104", 2},
347392
};
348393

349394
} // namespace targets

clang/lib/Driver/ToolChains/AVR.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,52 @@ constexpr struct {
328328
{"attiny1627", "avrxmega3", "avrxmega3", 0x803800},
329329
{"attiny3216", "avrxmega3", "avrxmega3", 0x803800},
330330
{"attiny3217", "avrxmega3", "avrxmega3", 0x803800},
331+
332+
// gcc 14 additions:
333+
334+
{"avr16dd20", "avrxmega3", "avrxmega3", 0x807800},
335+
{"avr16dd28", "avrxmega3", "avrxmega3", 0x807800},
336+
{"avr16dd32", "avrxmega3", "avrxmega3", 0x807800},
337+
{"avr16du14", "avrxmega3", "avrxmega3", 0x807800},
338+
{"avr16du20", "avrxmega3", "avrxmega3", 0x807800},
339+
{"avr16du28", "avrxmega3", "avrxmega3", 0x807800},
340+
{"avr16du32", "avrxmega3", "avrxmega3", 0x807800},
341+
{"avr32da28", "avrxmega3", "avrxmega3", 0x807000},
342+
{"avr32da32", "avrxmega3", "avrxmega3", 0x807000},
343+
{"avr32da48", "avrxmega3", "avrxmega3", 0x807000},
344+
{"avr32db28", "avrxmega3", "avrxmega3", 0x807000},
345+
{"avr32db32", "avrxmega3", "avrxmega3", 0x807000},
346+
{"avr32db48", "avrxmega3", "avrxmega3", 0x807000},
347+
{"avr32dd14", "avrxmega3", "avrxmega3", 0x807000},
348+
{"avr32dd20", "avrxmega3", "avrxmega3", 0x807000},
349+
{"avr32dd28", "avrxmega3", "avrxmega3", 0x807000},
350+
{"avr32dd32", "avrxmega3", "avrxmega3", 0x807000},
351+
{"avr32du14", "avrxmega3", "avrxmega3", 0x807000},
352+
{"avr32du20", "avrxmega3", "avrxmega3", 0x807000},
353+
{"avr32du28", "avrxmega3", "avrxmega3", 0x807000},
354+
{"avr32du32", "avrxmega3", "avrxmega3", 0x807000},
355+
{"avr16eb14", "avrxmega3", "avrxmega3", 0x807800},
356+
{"avr16eb20", "avrxmega3", "avrxmega3", 0x807800},
357+
{"avr16eb28", "avrxmega3", "avrxmega3", 0x807800},
358+
{"avr16eb32", "avrxmega3", "avrxmega3", 0x807800},
359+
{"avr16ea28", "avrxmega3", "avrxmega3", 0x807800},
360+
{"avr16ea32", "avrxmega3", "avrxmega3", 0x807800},
361+
{"avr16ea48", "avrxmega3", "avrxmega3", 0x807800},
362+
{"avr32ea28", "avrxmega3", "avrxmega3", 0x807000},
363+
{"avr32ea32", "avrxmega3", "avrxmega3", 0x807000},
364+
{"avr32ea48", "avrxmega3", "avrxmega3", 0x807000},
365+
{"avr32sd20", "avrxmega3", "avrxmega3", 0x807000},
366+
{"avr32sd28", "avrxmega3", "avrxmega3", 0x807000},
367+
{"avr32sd32", "avrxmega3", "avrxmega3", 0x807000},
368+
{"avr128da28", "avrxmega4", "avrxmega4", 0x804000},
369+
{"avr128da32", "avrxmega4", "avrxmega4", 0x804000},
370+
{"avr128da48", "avrxmega4", "avrxmega4", 0x804000},
371+
{"avr128da64", "avrxmega4", "avrxmega4", 0x804000},
372+
{"avr128db28", "avrxmega4", "avrxmega4", 0x804000},
373+
{"avr128db32", "avrxmega4", "avrxmega4", 0x804000},
374+
{"avr128db48", "avrxmega4", "avrxmega4", 0x804000},
375+
{"avr128db64", "avrxmega4", "avrxmega4", 0x804000},
376+
331377
};
332378

333379
std::string GetMCUSubPath(StringRef MCUName) {

llvm/lib/Target/AVR/AVRDevices.td

Lines changed: 52 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+
FeatureEIJMPCALL, FeatureELPM,
223+
FeatureBREAK, FeatureLowByteFirst]>;
224+
218225
def FamilyXMEGA : Family<"xmega",
219226
[FamilyAVR0, FeatureLPM, FeatureIJMPCALL,
220227
FeatureADDSUBIW, FeatureSRAM, FeatureJMPCALL,
@@ -575,3 +582,48 @@ def : Device<"atmega3208", FamilyXMEGA3, ELFArchXMEGA3>;
575582
def : Device<"atmega3209", FamilyXMEGA3, ELFArchXMEGA3>;
576583
def : Device<"atmega4808", FamilyXMEGA3, ELFArchXMEGA3>;
577584
def : Device<"atmega4809", FamilyXMEGA3, ELFArchXMEGA3>;
585+
586+
// Additions from gcc 14:
587+
588+
def : Device<"avr16dd20", FamilyXMEGA3, ELFArchXMEGA3>;
589+
def : Device<"avr16dd28", FamilyXMEGA3, ELFArchXMEGA3>;
590+
def : Device<"avr16dd32", FamilyXMEGA3, ELFArchXMEGA3>;
591+
def : Device<"avr16du14", FamilyXMEGA3, ELFArchXMEGA3>;
592+
def : Device<"avr16du20", FamilyXMEGA3, ELFArchXMEGA3>;
593+
def : Device<"avr16du28", FamilyXMEGA3, ELFArchXMEGA3>;
594+
def : Device<"avr16du32", FamilyXMEGA3, ELFArchXMEGA3>;
595+
def : Device<"avr32da28", FamilyXMEGA3, ELFArchXMEGA3>;
596+
def : Device<"avr32da32", FamilyXMEGA3, ELFArchXMEGA3>;
597+
def : Device<"avr32da48", FamilyXMEGA3, ELFArchXMEGA3>;
598+
def : Device<"avr32db28", FamilyXMEGA3, ELFArchXMEGA3>;
599+
def : Device<"avr32db32", FamilyXMEGA3, ELFArchXMEGA3>;
600+
def : Device<"avr32db48", FamilyXMEGA3, ELFArchXMEGA3>;
601+
def : Device<"avr32dd14", FamilyXMEGA3, ELFArchXMEGA3>;
602+
def : Device<"avr32dd20", FamilyXMEGA3, ELFArchXMEGA3>;
603+
def : Device<"avr32dd28", FamilyXMEGA3, ELFArchXMEGA3>;
604+
def : Device<"avr32dd32", FamilyXMEGA3, ELFArchXMEGA3>;
605+
def : Device<"avr32du14", FamilyXMEGA3, ELFArchXMEGA3>;
606+
def : Device<"avr32du20", FamilyXMEGA3, ELFArchXMEGA3>;
607+
def : Device<"avr32du28", FamilyXMEGA3, ELFArchXMEGA3>;
608+
def : Device<"avr32du32", FamilyXMEGA3, ELFArchXMEGA3>;
609+
def : Device<"avr16eb14", FamilyXMEGA3, ELFArchXMEGA3>;
610+
def : Device<"avr16eb20", FamilyXMEGA3, ELFArchXMEGA3>;
611+
def : Device<"avr16eb28", FamilyXMEGA3, ELFArchXMEGA3>;
612+
def : Device<"avr16eb32", FamilyXMEGA3, ELFArchXMEGA3>;
613+
def : Device<"avr16ea28", FamilyXMEGA3, ELFArchXMEGA3>;
614+
def : Device<"avr16ea32", FamilyXMEGA3, ELFArchXMEGA3>;
615+
def : Device<"avr16ea48", FamilyXMEGA3, ELFArchXMEGA3>;
616+
def : Device<"avr32ea28", FamilyXMEGA3, ELFArchXMEGA3>;
617+
def : Device<"avr32ea32", FamilyXMEGA3, ELFArchXMEGA3>;
618+
def : Device<"avr32ea48", FamilyXMEGA3, ELFArchXMEGA3>;
619+
def : Device<"avr32sd20", FamilyXMEGA3, ELFArchXMEGA3>;
620+
def : Device<"avr32sd28", FamilyXMEGA3, ELFArchXMEGA3>;
621+
def : Device<"avr32sd32", FamilyXMEGA3, ELFArchXMEGA3>;
622+
def : Device<"avr128da28", FamilyXMEGA4, ELFArchXMEGA4>;
623+
def : Device<"avr128da32", FamilyXMEGA4, ELFArchXMEGA4>;
624+
def : Device<"avr128da48", FamilyXMEGA4, ELFArchXMEGA4>;
625+
def : Device<"avr128da64", FamilyXMEGA4, ELFArchXMEGA4>;
626+
def : Device<"avr128db28", FamilyXMEGA4, ELFArchXMEGA4>;
627+
def : Device<"avr128db32", FamilyXMEGA4, ELFArchXMEGA4>;
628+
def : Device<"avr128db48", FamilyXMEGA4, ELFArchXMEGA4>;
629+
def : Device<"avr128db64", FamilyXMEGA4, ELFArchXMEGA4>;

0 commit comments

Comments
 (0)