-
Notifications
You must be signed in to change notification settings - Fork 14k
[AVR] Add many new AVR MCU model definitions #144229
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
@llvm/pr-subscribers-clang-driver Author: Tom Vijlbrief (tomtor) Changes#143914 failed to compile due to an unchecked late change. Sorry for that. Added the missing XMEGA2 definition. Full diff: https://github.com/llvm/llvm-project/pull/144229.diff 3 Files Affected:
diff --git a/clang/lib/Basic/Targets/AVR.cpp b/clang/lib/Basic/Targets/AVR.cpp
index 85ca4bc30c461..bbe7b01ca036d 100644
--- a/clang/lib/Basic/Targets/AVR.cpp
+++ b/clang/lib/Basic/Targets/AVR.cpp
@@ -336,6 +336,9 @@ static MCUInfo AVRMcus[] = {
{"attiny1624", "__AVR_ATtiny1624__", "103", 1},
{"attiny1626", "__AVR_ATtiny1626__", "103", 1},
{"attiny1627", "__AVR_ATtiny1627__", "103", 1},
+ {"attiny3224", "__AVR_ATtiny3224__", "103", 1},
+ {"attiny3226", "__AVR_ATtiny3226__", "103", 1},
+ {"attiny3227", "__AVR_ATtiny3227__", "103", 1},
{"atmega808", "__AVR_ATmega808__", "103", 1},
{"atmega809", "__AVR_ATmega809__", "103", 1},
{"atmega1608", "__AVR_ATmega1608__", "103", 1},
@@ -344,6 +347,72 @@ static MCUInfo AVRMcus[] = {
{"atmega3209", "__AVR_ATmega3209__", "103", 1},
{"atmega4808", "__AVR_ATmega4808__", "103", 1},
{"atmega4809", "__AVR_ATmega4809__", "103", 1},
+
+ // gcc 14 additions:
+
+ {"avr64da28", "__AVR_AVR64DA28__", "102", 1},
+ {"avr64da32", "__AVR_AVR64DA32__", "102", 1},
+ {"avr64da48", "__AVR_AVR64DA48__", "102", 1},
+ {"avr64da64", "__AVR_AVR64DA64__", "102", 1},
+ {"avr64db28", "__AVR_AVR64DB28__", "102", 1},
+ {"avr64db32", "__AVR_AVR64DB32__", "102", 1},
+ {"avr64db48", "__AVR_AVR64DB48__", "102", 1},
+ {"avr64db64", "__AVR_AVR64DB64__", "102", 1},
+ {"avr64dd14", "__AVR_AVR64DD14__", "102", 1},
+ {"avr64dd20", "__AVR_AVR64DD20__", "102", 1},
+ {"avr64dd28", "__AVR_AVR64DD28__", "102", 1},
+ {"avr64dd32", "__AVR_AVR64DD32__", "102", 1},
+ {"avr64du28", "__AVR_AVR64DU28__", "102", 1},
+ {"avr64du32", "__AVR_AVR64DU32__", "102", 1},
+ {"avr64ea28", "__AVR_AVR64EA28__", "102", 1},
+ {"avr64ea32", "__AVR_AVR64EA32__", "102", 1},
+ {"avr64ea48", "__AVR_AVR64EA48__", "102", 1},
+ {"avr64sd28", "__AVR_AVR64SD28__", "102", 1},
+ {"avr64sd32", "__AVR_AVR64SD32__", "102", 1},
+ {"avr64sd48", "__AVR_AVR64SD48__", "102", 1},
+
+ {"avr16dd20", "__AVR_AVR16DD20__", "103", 1},
+ {"avr16dd28", "__AVR_AVR16DD28__", "103", 1},
+ {"avr16dd32", "__AVR_AVR16DD32__", "103", 1},
+ {"avr16du14", "__AVR_AVR16DU14__", "103", 1},
+ {"avr16du20", "__AVR_AVR16DU20__", "103", 1},
+ {"avr16du28", "__AVR_AVR16DU28__", "103", 1},
+ {"avr16du32", "__AVR_AVR16DU32__", "103", 1},
+ {"avr32da28", "__AVR_AVR32DA28__", "103", 1},
+ {"avr32da32", "__AVR_AVR32DA32__", "103", 1},
+ {"avr32da48", "__AVR_AVR32DA48__", "103", 1},
+ {"avr32db28", "__AVR_AVR32DB28__", "103", 1},
+ {"avr32db32", "__AVR_AVR32DB32__", "103", 1},
+ {"avr32db48", "__AVR_AVR32DB48__", "103", 1},
+ {"avr32dd14", "__AVR_AVR32DD14__", "103", 1},
+ {"avr32dd20", "__AVR_AVR32DD20__", "103", 1},
+ {"avr32dd28", "__AVR_AVR32DD28__", "103", 1},
+ {"avr32dd32", "__AVR_AVR32DD32__", "103", 1},
+ {"avr32du14", "__AVR_AVR32DU14__", "103", 1},
+ {"avr32du20", "__AVR_AVR32DU20__", "103", 1},
+ {"avr32du28", "__AVR_AVR32DU28__", "103", 1},
+ {"avr32du32", "__AVR_AVR32DU32__", "103", 1},
+ {"avr16eb14", "__AVR_AVR16EB14__", "103", 1},
+ {"avr16eb20", "__AVR_AVR16EB20__", "103", 1},
+ {"avr16eb28", "__AVR_AVR16EB28__", "103", 1},
+ {"avr16eb32", "__AVR_AVR16EB32__", "103", 1},
+ {"avr16ea28", "__AVR_AVR16EA28__", "103", 1},
+ {"avr16ea32", "__AVR_AVR16EA32__", "103", 1},
+ {"avr16ea48", "__AVR_AVR16EA48__", "103", 1},
+ {"avr32ea28", "__AVR_AVR32EA28__", "103", 1},
+ {"avr32ea32", "__AVR_AVR32EA32__", "103", 1},
+ {"avr32ea48", "__AVR_AVR32EA48__", "103", 1},
+ {"avr32sd20", "__AVR_AVR32SD20__", "103", 1},
+ {"avr32sd28", "__AVR_AVR32SD28__", "103", 1},
+ {"avr32sd32", "__AVR_AVR32SD32__", "103", 1},
+ {"avr128da28", "__AVR_AVR128DA28__", "104", 2},
+ {"avr128da32", "__AVR_AVR128DA32__", "104", 2},
+ {"avr128da48", "__AVR_AVR128DA48__", "104", 2},
+ {"avr128da64", "__AVR_AVR128DA64__", "104", 2},
+ {"avr128db28", "__AVR_AVR128DB28__", "104", 2},
+ {"avr128db32", "__AVR_AVR128DB32__", "104", 2},
+ {"avr128db48", "__AVR_AVR128DB48__", "104", 2},
+ {"avr128db64", "__AVR_AVR128DB64__", "104", 2},
};
} // namespace targets
diff --git a/clang/lib/Driver/ToolChains/AVR.cpp b/clang/lib/Driver/ToolChains/AVR.cpp
index b0523a7f4e40e..731076d9754a9 100644
--- a/clang/lib/Driver/ToolChains/AVR.cpp
+++ b/clang/lib/Driver/ToolChains/AVR.cpp
@@ -326,8 +326,78 @@ constexpr struct {
{"attiny1624", "avrxmega3", "avrxmega3", 0x803800},
{"attiny1626", "avrxmega3", "avrxmega3", 0x803800},
{"attiny1627", "avrxmega3", "avrxmega3", 0x803800},
+ {"attiny3224", "avrxmega3", "avrxmega3", 0x803400},
+ {"attiny3226", "avrxmega3", "avrxmega3", 0x803400},
+ {"attiny3227", "avrxmega3", "avrxmega3", 0x803400},
{"attiny3216", "avrxmega3", "avrxmega3", 0x803800},
{"attiny3217", "avrxmega3", "avrxmega3", 0x803800},
+
+ // gcc 14 additions:
+
+ {"avr64da28", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64da32", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64da48", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64da64", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64db28", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64db32", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64db48", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64db64", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64dd14", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64dd20", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64dd28", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64dd32", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64du28", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64du32", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64ea28", "avrxmega2", "avrxmega2", 0x806800},
+ {"avr64ea32", "avrxmega2", "avrxmega2", 0x806800},
+ {"avr64ea48", "avrxmega2", "avrxmega2", 0x806800},
+ {"avr64sd28", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64sd32", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64sd48", "avrxmega2", "avrxmega2", 0x806000},
+
+ {"avr16dd20", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16dd28", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16dd32", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16du14", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16du20", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16du28", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16du32", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr32da28", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32da32", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32da48", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32db28", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32db32", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32db48", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32dd14", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32dd20", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32dd28", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32dd32", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32du14", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32du20", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32du28", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32du32", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr16eb14", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16eb20", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16eb28", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16eb32", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16ea28", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16ea32", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16ea48", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr32ea28", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32ea32", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32ea48", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32sd20", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32sd28", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32sd32", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr128da28", "avrxmega4", "avrxmega4", 0x804000},
+ {"avr128da32", "avrxmega4", "avrxmega4", 0x804000},
+ {"avr128da48", "avrxmega4", "avrxmega4", 0x804000},
+ {"avr128da64", "avrxmega4", "avrxmega4", 0x804000},
+ {"avr128db28", "avrxmega4", "avrxmega4", 0x804000},
+ {"avr128db32", "avrxmega4", "avrxmega4", 0x804000},
+ {"avr128db48", "avrxmega4", "avrxmega4", 0x804000},
+ {"avr128db64", "avrxmega4", "avrxmega4", 0x804000},
+
};
std::string GetMCUSubPath(StringRef MCUName) {
diff --git a/llvm/lib/Target/AVR/AVRDevices.td b/llvm/lib/Target/AVR/AVRDevices.td
index 56147bb473bc4..f461dcdcae37e 100644
--- a/llvm/lib/Target/AVR/AVRDevices.td
+++ b/llvm/lib/Target/AVR/AVRDevices.td
@@ -209,12 +209,25 @@ def FamilyTiny
[FamilyAVR0, FeatureBREAK, FeatureSRAM, FeatureTinyEncoding,
FeatureSmallStack]>;
+def FamilyXMEGA2 : Family<"xmega2",
+ [FamilyAVR0, FeatureLPM, FeatureIJMPCALL,
+ FeatureADDSUBIW, FeatureSRAM, FeatureJMPCALL,
+ FeatureMultiplication, FeatureMOVW, FeatureLPMX,
+ FeatureBREAK, FeatureLowByteFirst]>;
+
def FamilyXMEGA3 : Family<"xmega3",
[FamilyAVR0, FeatureLPM, FeatureIJMPCALL,
FeatureADDSUBIW, FeatureSRAM, FeatureJMPCALL,
FeatureMultiplication, FeatureMOVW, FeatureLPMX,
FeatureBREAK, FeatureLowByteFirst]>;
+def FamilyXMEGA4 : Family<"xmega4",
+ [FamilyAVR0, FeatureLPM, FeatureIJMPCALL,
+ FeatureADDSUBIW, FeatureSRAM, FeatureJMPCALL,
+ FeatureMultiplication, FeatureMOVW, FeatureLPMX,
+ FeatureELPM,
+ FeatureBREAK, FeatureLowByteFirst]>;
+
def FamilyXMEGA : Family<"xmega",
[FamilyAVR0, FeatureLPM, FeatureIJMPCALL,
FeatureADDSUBIW, FeatureSRAM, FeatureJMPCALL,
@@ -567,6 +580,9 @@ def : Device<"attiny3217", FamilyXMEGA3, ELFArchXMEGA3>;
def : Device<"attiny1624", FamilyXMEGA3, ELFArchXMEGA3>;
def : Device<"attiny1626", FamilyXMEGA3, ELFArchXMEGA3>;
def : Device<"attiny1627", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"attiny3224", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"attiny3226", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"attiny3227", FamilyXMEGA3, ELFArchXMEGA3>;
def : Device<"atmega808", FamilyXMEGA3, ELFArchXMEGA3>;
def : Device<"atmega809", FamilyXMEGA3, ELFArchXMEGA3>;
def : Device<"atmega1608", FamilyXMEGA3, ELFArchXMEGA3>;
@@ -575,3 +591,69 @@ def : Device<"atmega3208", FamilyXMEGA3, ELFArchXMEGA3>;
def : Device<"atmega3209", FamilyXMEGA3, ELFArchXMEGA3>;
def : Device<"atmega4808", FamilyXMEGA3, ELFArchXMEGA3>;
def : Device<"atmega4809", FamilyXMEGA3, ELFArchXMEGA3>;
+
+// Additions from gcc 14:
+
+def : Device<"avr64da28", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64da32", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64da48", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64da64", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64db28", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64db32", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64db48", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64db64", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64dd14", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64dd20", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64dd28", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64dd32", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64du28", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64du32", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64ea28", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64ea32", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64ea48", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64sd28", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64sd32", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64sd48", FamilyXMEGA2, ELFArchXMEGA2>;
+
+def : Device<"avr16dd20", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16dd28", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16dd32", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16du14", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16du20", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16du28", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16du32", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32da28", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32da32", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32da48", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32db28", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32db32", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32db48", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32dd14", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32dd20", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32dd28", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32dd32", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32du14", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32du20", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32du28", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32du32", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16eb14", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16eb20", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16eb28", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16eb32", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16ea28", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16ea32", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16ea48", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32ea28", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32ea32", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32ea48", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32sd20", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32sd28", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32sd32", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr128da28", FamilyXMEGA4, ELFArchXMEGA4>;
+def : Device<"avr128da32", FamilyXMEGA4, ELFArchXMEGA4>;
+def : Device<"avr128da48", FamilyXMEGA4, ELFArchXMEGA4>;
+def : Device<"avr128da64", FamilyXMEGA4, ELFArchXMEGA4>;
+def : Device<"avr128db28", FamilyXMEGA4, ELFArchXMEGA4>;
+def : Device<"avr128db32", FamilyXMEGA4, ELFArchXMEGA4>;
+def : Device<"avr128db48", FamilyXMEGA4, ELFArchXMEGA4>;
+def : Device<"avr128db64", FamilyXMEGA4, ELFArchXMEGA4>;
|
@llvm/pr-subscribers-clang Author: Tom Vijlbrief (tomtor) Changes#143914 failed to compile due to an unchecked late change. Sorry for that. Added the missing XMEGA2 definition. Full diff: https://github.com/llvm/llvm-project/pull/144229.diff 3 Files Affected:
diff --git a/clang/lib/Basic/Targets/AVR.cpp b/clang/lib/Basic/Targets/AVR.cpp
index 85ca4bc30c461..bbe7b01ca036d 100644
--- a/clang/lib/Basic/Targets/AVR.cpp
+++ b/clang/lib/Basic/Targets/AVR.cpp
@@ -336,6 +336,9 @@ static MCUInfo AVRMcus[] = {
{"attiny1624", "__AVR_ATtiny1624__", "103", 1},
{"attiny1626", "__AVR_ATtiny1626__", "103", 1},
{"attiny1627", "__AVR_ATtiny1627__", "103", 1},
+ {"attiny3224", "__AVR_ATtiny3224__", "103", 1},
+ {"attiny3226", "__AVR_ATtiny3226__", "103", 1},
+ {"attiny3227", "__AVR_ATtiny3227__", "103", 1},
{"atmega808", "__AVR_ATmega808__", "103", 1},
{"atmega809", "__AVR_ATmega809__", "103", 1},
{"atmega1608", "__AVR_ATmega1608__", "103", 1},
@@ -344,6 +347,72 @@ static MCUInfo AVRMcus[] = {
{"atmega3209", "__AVR_ATmega3209__", "103", 1},
{"atmega4808", "__AVR_ATmega4808__", "103", 1},
{"atmega4809", "__AVR_ATmega4809__", "103", 1},
+
+ // gcc 14 additions:
+
+ {"avr64da28", "__AVR_AVR64DA28__", "102", 1},
+ {"avr64da32", "__AVR_AVR64DA32__", "102", 1},
+ {"avr64da48", "__AVR_AVR64DA48__", "102", 1},
+ {"avr64da64", "__AVR_AVR64DA64__", "102", 1},
+ {"avr64db28", "__AVR_AVR64DB28__", "102", 1},
+ {"avr64db32", "__AVR_AVR64DB32__", "102", 1},
+ {"avr64db48", "__AVR_AVR64DB48__", "102", 1},
+ {"avr64db64", "__AVR_AVR64DB64__", "102", 1},
+ {"avr64dd14", "__AVR_AVR64DD14__", "102", 1},
+ {"avr64dd20", "__AVR_AVR64DD20__", "102", 1},
+ {"avr64dd28", "__AVR_AVR64DD28__", "102", 1},
+ {"avr64dd32", "__AVR_AVR64DD32__", "102", 1},
+ {"avr64du28", "__AVR_AVR64DU28__", "102", 1},
+ {"avr64du32", "__AVR_AVR64DU32__", "102", 1},
+ {"avr64ea28", "__AVR_AVR64EA28__", "102", 1},
+ {"avr64ea32", "__AVR_AVR64EA32__", "102", 1},
+ {"avr64ea48", "__AVR_AVR64EA48__", "102", 1},
+ {"avr64sd28", "__AVR_AVR64SD28__", "102", 1},
+ {"avr64sd32", "__AVR_AVR64SD32__", "102", 1},
+ {"avr64sd48", "__AVR_AVR64SD48__", "102", 1},
+
+ {"avr16dd20", "__AVR_AVR16DD20__", "103", 1},
+ {"avr16dd28", "__AVR_AVR16DD28__", "103", 1},
+ {"avr16dd32", "__AVR_AVR16DD32__", "103", 1},
+ {"avr16du14", "__AVR_AVR16DU14__", "103", 1},
+ {"avr16du20", "__AVR_AVR16DU20__", "103", 1},
+ {"avr16du28", "__AVR_AVR16DU28__", "103", 1},
+ {"avr16du32", "__AVR_AVR16DU32__", "103", 1},
+ {"avr32da28", "__AVR_AVR32DA28__", "103", 1},
+ {"avr32da32", "__AVR_AVR32DA32__", "103", 1},
+ {"avr32da48", "__AVR_AVR32DA48__", "103", 1},
+ {"avr32db28", "__AVR_AVR32DB28__", "103", 1},
+ {"avr32db32", "__AVR_AVR32DB32__", "103", 1},
+ {"avr32db48", "__AVR_AVR32DB48__", "103", 1},
+ {"avr32dd14", "__AVR_AVR32DD14__", "103", 1},
+ {"avr32dd20", "__AVR_AVR32DD20__", "103", 1},
+ {"avr32dd28", "__AVR_AVR32DD28__", "103", 1},
+ {"avr32dd32", "__AVR_AVR32DD32__", "103", 1},
+ {"avr32du14", "__AVR_AVR32DU14__", "103", 1},
+ {"avr32du20", "__AVR_AVR32DU20__", "103", 1},
+ {"avr32du28", "__AVR_AVR32DU28__", "103", 1},
+ {"avr32du32", "__AVR_AVR32DU32__", "103", 1},
+ {"avr16eb14", "__AVR_AVR16EB14__", "103", 1},
+ {"avr16eb20", "__AVR_AVR16EB20__", "103", 1},
+ {"avr16eb28", "__AVR_AVR16EB28__", "103", 1},
+ {"avr16eb32", "__AVR_AVR16EB32__", "103", 1},
+ {"avr16ea28", "__AVR_AVR16EA28__", "103", 1},
+ {"avr16ea32", "__AVR_AVR16EA32__", "103", 1},
+ {"avr16ea48", "__AVR_AVR16EA48__", "103", 1},
+ {"avr32ea28", "__AVR_AVR32EA28__", "103", 1},
+ {"avr32ea32", "__AVR_AVR32EA32__", "103", 1},
+ {"avr32ea48", "__AVR_AVR32EA48__", "103", 1},
+ {"avr32sd20", "__AVR_AVR32SD20__", "103", 1},
+ {"avr32sd28", "__AVR_AVR32SD28__", "103", 1},
+ {"avr32sd32", "__AVR_AVR32SD32__", "103", 1},
+ {"avr128da28", "__AVR_AVR128DA28__", "104", 2},
+ {"avr128da32", "__AVR_AVR128DA32__", "104", 2},
+ {"avr128da48", "__AVR_AVR128DA48__", "104", 2},
+ {"avr128da64", "__AVR_AVR128DA64__", "104", 2},
+ {"avr128db28", "__AVR_AVR128DB28__", "104", 2},
+ {"avr128db32", "__AVR_AVR128DB32__", "104", 2},
+ {"avr128db48", "__AVR_AVR128DB48__", "104", 2},
+ {"avr128db64", "__AVR_AVR128DB64__", "104", 2},
};
} // namespace targets
diff --git a/clang/lib/Driver/ToolChains/AVR.cpp b/clang/lib/Driver/ToolChains/AVR.cpp
index b0523a7f4e40e..731076d9754a9 100644
--- a/clang/lib/Driver/ToolChains/AVR.cpp
+++ b/clang/lib/Driver/ToolChains/AVR.cpp
@@ -326,8 +326,78 @@ constexpr struct {
{"attiny1624", "avrxmega3", "avrxmega3", 0x803800},
{"attiny1626", "avrxmega3", "avrxmega3", 0x803800},
{"attiny1627", "avrxmega3", "avrxmega3", 0x803800},
+ {"attiny3224", "avrxmega3", "avrxmega3", 0x803400},
+ {"attiny3226", "avrxmega3", "avrxmega3", 0x803400},
+ {"attiny3227", "avrxmega3", "avrxmega3", 0x803400},
{"attiny3216", "avrxmega3", "avrxmega3", 0x803800},
{"attiny3217", "avrxmega3", "avrxmega3", 0x803800},
+
+ // gcc 14 additions:
+
+ {"avr64da28", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64da32", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64da48", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64da64", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64db28", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64db32", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64db48", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64db64", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64dd14", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64dd20", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64dd28", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64dd32", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64du28", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64du32", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64ea28", "avrxmega2", "avrxmega2", 0x806800},
+ {"avr64ea32", "avrxmega2", "avrxmega2", 0x806800},
+ {"avr64ea48", "avrxmega2", "avrxmega2", 0x806800},
+ {"avr64sd28", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64sd32", "avrxmega2", "avrxmega2", 0x806000},
+ {"avr64sd48", "avrxmega2", "avrxmega2", 0x806000},
+
+ {"avr16dd20", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16dd28", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16dd32", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16du14", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16du20", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16du28", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16du32", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr32da28", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32da32", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32da48", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32db28", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32db32", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32db48", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32dd14", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32dd20", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32dd28", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32dd32", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32du14", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32du20", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32du28", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32du32", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr16eb14", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16eb20", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16eb28", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16eb32", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16ea28", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16ea32", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr16ea48", "avrxmega3", "avrxmega3", 0x807800},
+ {"avr32ea28", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32ea32", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32ea48", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32sd20", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32sd28", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr32sd32", "avrxmega3", "avrxmega3", 0x807000},
+ {"avr128da28", "avrxmega4", "avrxmega4", 0x804000},
+ {"avr128da32", "avrxmega4", "avrxmega4", 0x804000},
+ {"avr128da48", "avrxmega4", "avrxmega4", 0x804000},
+ {"avr128da64", "avrxmega4", "avrxmega4", 0x804000},
+ {"avr128db28", "avrxmega4", "avrxmega4", 0x804000},
+ {"avr128db32", "avrxmega4", "avrxmega4", 0x804000},
+ {"avr128db48", "avrxmega4", "avrxmega4", 0x804000},
+ {"avr128db64", "avrxmega4", "avrxmega4", 0x804000},
+
};
std::string GetMCUSubPath(StringRef MCUName) {
diff --git a/llvm/lib/Target/AVR/AVRDevices.td b/llvm/lib/Target/AVR/AVRDevices.td
index 56147bb473bc4..f461dcdcae37e 100644
--- a/llvm/lib/Target/AVR/AVRDevices.td
+++ b/llvm/lib/Target/AVR/AVRDevices.td
@@ -209,12 +209,25 @@ def FamilyTiny
[FamilyAVR0, FeatureBREAK, FeatureSRAM, FeatureTinyEncoding,
FeatureSmallStack]>;
+def FamilyXMEGA2 : Family<"xmega2",
+ [FamilyAVR0, FeatureLPM, FeatureIJMPCALL,
+ FeatureADDSUBIW, FeatureSRAM, FeatureJMPCALL,
+ FeatureMultiplication, FeatureMOVW, FeatureLPMX,
+ FeatureBREAK, FeatureLowByteFirst]>;
+
def FamilyXMEGA3 : Family<"xmega3",
[FamilyAVR0, FeatureLPM, FeatureIJMPCALL,
FeatureADDSUBIW, FeatureSRAM, FeatureJMPCALL,
FeatureMultiplication, FeatureMOVW, FeatureLPMX,
FeatureBREAK, FeatureLowByteFirst]>;
+def FamilyXMEGA4 : Family<"xmega4",
+ [FamilyAVR0, FeatureLPM, FeatureIJMPCALL,
+ FeatureADDSUBIW, FeatureSRAM, FeatureJMPCALL,
+ FeatureMultiplication, FeatureMOVW, FeatureLPMX,
+ FeatureELPM,
+ FeatureBREAK, FeatureLowByteFirst]>;
+
def FamilyXMEGA : Family<"xmega",
[FamilyAVR0, FeatureLPM, FeatureIJMPCALL,
FeatureADDSUBIW, FeatureSRAM, FeatureJMPCALL,
@@ -567,6 +580,9 @@ def : Device<"attiny3217", FamilyXMEGA3, ELFArchXMEGA3>;
def : Device<"attiny1624", FamilyXMEGA3, ELFArchXMEGA3>;
def : Device<"attiny1626", FamilyXMEGA3, ELFArchXMEGA3>;
def : Device<"attiny1627", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"attiny3224", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"attiny3226", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"attiny3227", FamilyXMEGA3, ELFArchXMEGA3>;
def : Device<"atmega808", FamilyXMEGA3, ELFArchXMEGA3>;
def : Device<"atmega809", FamilyXMEGA3, ELFArchXMEGA3>;
def : Device<"atmega1608", FamilyXMEGA3, ELFArchXMEGA3>;
@@ -575,3 +591,69 @@ def : Device<"atmega3208", FamilyXMEGA3, ELFArchXMEGA3>;
def : Device<"atmega3209", FamilyXMEGA3, ELFArchXMEGA3>;
def : Device<"atmega4808", FamilyXMEGA3, ELFArchXMEGA3>;
def : Device<"atmega4809", FamilyXMEGA3, ELFArchXMEGA3>;
+
+// Additions from gcc 14:
+
+def : Device<"avr64da28", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64da32", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64da48", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64da64", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64db28", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64db32", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64db48", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64db64", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64dd14", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64dd20", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64dd28", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64dd32", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64du28", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64du32", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64ea28", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64ea32", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64ea48", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64sd28", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64sd32", FamilyXMEGA2, ELFArchXMEGA2>;
+def : Device<"avr64sd48", FamilyXMEGA2, ELFArchXMEGA2>;
+
+def : Device<"avr16dd20", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16dd28", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16dd32", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16du14", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16du20", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16du28", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16du32", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32da28", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32da32", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32da48", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32db28", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32db32", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32db48", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32dd14", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32dd20", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32dd28", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32dd32", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32du14", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32du20", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32du28", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32du32", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16eb14", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16eb20", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16eb28", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16eb32", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16ea28", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16ea32", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr16ea48", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32ea28", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32ea32", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32ea48", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32sd20", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32sd28", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr32sd32", FamilyXMEGA3, ELFArchXMEGA3>;
+def : Device<"avr128da28", FamilyXMEGA4, ELFArchXMEGA4>;
+def : Device<"avr128da32", FamilyXMEGA4, ELFArchXMEGA4>;
+def : Device<"avr128da48", FamilyXMEGA4, ELFArchXMEGA4>;
+def : Device<"avr128da64", FamilyXMEGA4, ELFArchXMEGA4>;
+def : Device<"avr128db28", FamilyXMEGA4, ELFArchXMEGA4>;
+def : Device<"avr128db32", FamilyXMEGA4, ELFArchXMEGA4>;
+def : Device<"avr128db48", FamilyXMEGA4, ELFArchXMEGA4>;
+def : Device<"avr128db64", FamilyXMEGA4, ELFArchXMEGA4>;
|
@Patryk27 @benshi001 @kazutakahirata Oops, as you noticed I did not recompile after adding the avr64* models. Sorry for that, changes are almost never trivial....
|
Hmm. I just tried your patch, but I didn't seem the same error. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM. Thank you for updating the patch!
Thanks! I am now rebuilding after:
|
My local tree build OK... |
@tomtor https://github.com/llvm/llvm-project/actions/runs/15653757180/job/44101995731?pr=144229 is showing:
I also see the same thing with |
@kazutakahirata Thanks again! I noticed the failling check but could not find the cause in the enormous log file. Wondered if it could be caused by a timeout on the build, but it was this failing check. Added new test patterns for the new MCUs. Did not manage to run these tests locally yet, but will figure that out. |
In the CI check I find one
but this is unrelated? (Flang, fortran) |
This flang failure did not relate to your AVR patch, just omit it. |
For future reference, the avr16/avr32 devices do have SPM and SPMX features, but the current xmega3 definition has not. Xmega3 is also used for modern attiny series which do not have SPM(X), so that is correct. The avr64 devices use xmega2 which has SPM(X) defined, so that is also ok. I prefer to leave the avr16/avr32 devices unchanged (using xmega3 to be in sync with gcc definitions), because the SPM instructions write flash and users can use asm if they want that feature. In addition LLVM will never generate these? For me this PR is complete now. @benshi001 add this comment to the commit message? |
@tomtor @benshi001 I just tried your latest revision on the top of tree, and both |
Thanks for your help ! |
It is OK to keep in sync with gcc, thanks. llvm-avr never generate unsupported features for devices. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
#143914 failed to compile due to an unchecked late change. Sorry for that.
Added the missing XMEGA2 definition.
Should fix #116116