[PATCH] D28346: [AVR] Allow specifying the CPU on the command line
This revision was automatically updated to reflect the committed changes. dylanmckay marked an inline comment as done. Closed by commit rL294177: [AVR] Allow specifying the CPU on the command line (authored by dylanmckay). Changed prior to commit: https://reviews.llvm.org/D28346?vs=87172&id=87195#toc Repository: rL LLVM https://reviews.llvm.org/D28346 Files: cfe/trunk/lib/Basic/Targets.cpp cfe/trunk/test/CodeGen/avr/target-cpu-defines/atmega328p.c cfe/trunk/test/CodeGen/avr/target-cpu-defines/attiny104.c cfe/trunk/test/CodeGen/avr/target-cpu-defines/common.c Index: cfe/trunk/test/CodeGen/avr/target-cpu-defines/attiny104.c === --- cfe/trunk/test/CodeGen/avr/target-cpu-defines/attiny104.c +++ cfe/trunk/test/CodeGen/avr/target-cpu-defines/attiny104.c @@ -0,0 +1,6 @@ +// RUN: %clang_cc1 -E -dM -triple avr-unknown-unknown -target-cpu attiny104 /dev/null | FileCheck -match-full-lines %s + +// CHECK: #define AVR 1 +// CHECK: #define __AVR 1 +// CHECK: #define __AVR_ATtiny104 1 +// CHECK: #define __AVR__ 1 Index: cfe/trunk/test/CodeGen/avr/target-cpu-defines/atmega328p.c === --- cfe/trunk/test/CodeGen/avr/target-cpu-defines/atmega328p.c +++ cfe/trunk/test/CodeGen/avr/target-cpu-defines/atmega328p.c @@ -0,0 +1,6 @@ +// RUN: %clang_cc1 -E -dM -triple avr-unknown-unknown -target-cpu atmega328p /dev/null | FileCheck -match-full-lines %s + +// CHECK: #define AVR 1 +// CHECK: #define __AVR 1 +// CHECK: #define __AVR_ATmega328P 1 +// CHECK: #define __AVR__ 1 Index: cfe/trunk/test/CodeGen/avr/target-cpu-defines/common.c === --- cfe/trunk/test/CodeGen/avr/target-cpu-defines/common.c +++ cfe/trunk/test/CodeGen/avr/target-cpu-defines/common.c @@ -0,0 +1,5 @@ +// RUN: %clang_cc1 -E -dM -triple avr-unknown-unknown /dev/null | FileCheck -match-full-lines %s + +// CHECK: #define AVR 1 +// CHECK: #define __AVR 1 +// CHECK: #define __AVR__ 1 Index: cfe/trunk/lib/Basic/Targets.cpp === --- cfe/trunk/lib/Basic/Targets.cpp +++ cfe/trunk/lib/Basic/Targets.cpp @@ -8435,6 +8435,254 @@ } }; +/// Information about a specific microcontroller. +struct MCUInfo { + const char *Name; + const char *DefineName; +}; + +// This list should be kept up-to-date with AVRDevices.td in LLVM. +static ArrayRef AVRMcus = { + { "at90s1200", "__AVR_AT90S1200__" }, + { "attiny11", "__AVR_ATtiny11" }, + { "attiny12", "__AVR_ATtiny12" }, + { "attiny15", "__AVR_ATtiny15" }, + { "attiny28", "__AVR_ATtiny28" }, + { "at90s2313", "__AVR_AT90S2313" }, + { "at90s2323", "__AVR_AT90S2323" }, + { "at90s2333", "__AVR_AT90S2333" }, + { "at90s2343", "__AVR_AT90S2343" }, + { "attiny22", "__AVR_ATtiny22" }, + { "attiny26", "__AVR_ATtiny26" }, + { "at86rf401", "__AVR_AT86RF401" }, + { "at90s4414", "__AVR_AT90S4414" }, + { "at90s4433", "__AVR_AT90S4433" }, + { "at90s4434", "__AVR_AT90S4434" }, + { "at90s8515", "__AVR_AT90S8515" }, + { "at90c8534", "__AVR_AT90c8534" }, + { "at90s8535", "__AVR_AT90S8535" }, + { "ata5272", "__AVR_ATA5272" }, + { "attiny13", "__AVR_ATtiny13" }, + { "attiny13a", "__AVR_ATtiny13A" }, + { "attiny2313", "__AVR_ATtiny2313" }, + { "attiny2313a", "__AVR_ATtiny2313A" }, + { "attiny24", "__AVR_ATtiny24" }, + { "attiny24a", "__AVR_ATtiny24A" }, + { "attiny4313", "__AVR_ATtiny4313" }, + { "attiny44", "__AVR_ATtiny44" }, + { "attiny44a", "__AVR_ATtiny44A" }, + { "attiny84", "__AVR_ATtiny84" }, + { "attiny84a", "__AVR_ATtiny84A" }, + { "attiny25", "__AVR_ATtiny25" }, + { "attiny45", "__AVR_ATtiny45" }, + { "attiny85", "__AVR_ATtiny85" }, + { "attiny261", "__AVR_ATtiny261" }, + { "attiny261a", "__AVR_ATtiny261A" }, + { "attiny461", "__AVR_ATtiny461" }, + { "attiny461a", "__AVR_ATtiny461A" }, + { "attiny861", "__AVR_ATtiny861" }, + { "attiny861a", "__AVR_ATtiny861A" }, + { "attiny87", "__AVR_ATtiny87" }, + { "attiny43u", "__AVR_ATtiny43U" }, + { "attiny48", "__AVR_ATtiny48" }, + { "attiny88", "__AVR_ATtiny88" }, + { "attiny828", "__AVR_ATtiny828" }, + { "at43usb355", "__AVR_AT43USB355" }, + { "at76c711", "__AVR_AT76C711" }, + { "atmega103", "__AVR_ATmega103" }, + { "at43usb320", "__AVR_AT43USB320" }, + { "attiny167", "__AVR_ATtiny167" }, + { "at90usb82", "__AVR_AT90USB82" }, + { "at90usb162", "__AVR_AT90USB162" }, + { "ata5505", "__AVR_ATA5505" }, + { "atmega8u2", "__AVR_ATmega8U2" }, + { "atmega16u2", "__AVR_ATmega16U2" }, + { "atmega32u2", "__AVR_ATmega32U2" }, + { "attiny1634", "__AVR_ATtiny1634" }, + { "atmega8", "__AVR_ATmega8" }, + { "ata6289", "__AVR_ATA6289" }, + { "atmega8a", "__AVR_ATmega8A" }, + { "ata6285", "__AVR_ATA6285" }, + { "ata6286", "__AVR_ATA6286" }, + { "atmega48", "__AVR_ATmega48" }, + { "atmega48a", "__AVR_ATmega48A" }, + { "atmega48pa", "__AVR_ATmega48PA" }, + { "atmega48p", "__AVR_ATmega48P" }, +
[PATCH] D28346: [AVR] Allow specifying the CPU on the command line
asl accepted this revision. asl added a comment. This revision is now accepted and ready to land. LGTM with minor style nit Comment at: lib/Basic/Targets.cpp:8733 + auto It = std::find_if(AVRMcus.begin(), +AVRMcus.end(), +[&](const MCUInfo &Info) { return Info.Name == this->CPU; }); Minor style nit: I'd prefer end() to be on prev. line (like below) https://reviews.llvm.org/D28346 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D28346: [AVR] Allow specifying the CPU on the command line
dylanmckay marked 2 inline comments as done. dylanmckay added inline comments. Comment at: test/CodeGen/avr/target-cpu-defines/atmega328p.c:1 +// RUN: %clang_cc1 -triple avr-unknown-unknown -target-cpu atmega328p -emit-llvm %s -o - | FileCheck %s + asl wrote: > This looks wrong. How you're using FileCheck? Consider dumping pre-built > defines and checking the output. That's a much better idea, fixed https://reviews.llvm.org/D28346 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D28346: [AVR] Allow specifying the CPU on the command line
dylanmckay updated this revision to Diff 87172. dylanmckay added a comment. Clean up the tests - Dump all defines and search for specific ones - Remove some unrelated tests. I will commit them separately, as they don't actually test any behaviour modified in this change. https://reviews.llvm.org/D28346 Files: lib/Basic/Targets.cpp test/CodeGen/avr/target-cpu-defines/atmega328p.c test/CodeGen/avr/target-cpu-defines/attiny104.c test/CodeGen/avr/target-cpu-defines/common.c Index: test/CodeGen/avr/target-cpu-defines/common.c === --- /dev/null +++ test/CodeGen/avr/target-cpu-defines/common.c @@ -0,0 +1,5 @@ +// RUN: %clang_cc1 -E -dM -triple avr-unknown-unknown /dev/null | FileCheck -match-full-lines %s + +// CHECK: #define AVR 1 +// CHECK: #define __AVR 1 +// CHECK: #define __AVR__ 1 Index: test/CodeGen/avr/target-cpu-defines/attiny104.c === --- /dev/null +++ test/CodeGen/avr/target-cpu-defines/attiny104.c @@ -0,0 +1,6 @@ +// RUN: %clang_cc1 -E -dM -triple avr-unknown-unknown -target-cpu attiny104 /dev/null | FileCheck -match-full-lines %s + +// CHECK: #define AVR 1 +// CHECK: #define __AVR 1 +// CHECK: #define __AVR_ATtiny104 1 +// CHECK: #define __AVR__ 1 Index: test/CodeGen/avr/target-cpu-defines/atmega328p.c === --- /dev/null +++ test/CodeGen/avr/target-cpu-defines/atmega328p.c @@ -0,0 +1,6 @@ +// RUN: %clang_cc1 -E -dM -triple avr-unknown-unknown -target-cpu atmega328p /dev/null | FileCheck -match-full-lines %s + +// CHECK: #define AVR 1 +// CHECK: #define __AVR 1 +// CHECK: #define __AVR_ATmega328P 1 +// CHECK: #define __AVR__ 1 Index: lib/Basic/Targets.cpp === --- lib/Basic/Targets.cpp +++ lib/Basic/Targets.cpp @@ -8435,6 +8435,254 @@ } }; +/// Information about a specific microcontroller. +struct MCUInfo { + const char *Name; + const char *DefineName; +}; + +// This list should be kept up-to-date with AVRDevices.td in LLVM. +static ArrayRef AVRMcus = { + { "at90s1200", "__AVR_AT90S1200__" }, + { "attiny11", "__AVR_ATtiny11" }, + { "attiny12", "__AVR_ATtiny12" }, + { "attiny15", "__AVR_ATtiny15" }, + { "attiny28", "__AVR_ATtiny28" }, + { "at90s2313", "__AVR_AT90S2313" }, + { "at90s2323", "__AVR_AT90S2323" }, + { "at90s2333", "__AVR_AT90S2333" }, + { "at90s2343", "__AVR_AT90S2343" }, + { "attiny22", "__AVR_ATtiny22" }, + { "attiny26", "__AVR_ATtiny26" }, + { "at86rf401", "__AVR_AT86RF401" }, + { "at90s4414", "__AVR_AT90S4414" }, + { "at90s4433", "__AVR_AT90S4433" }, + { "at90s4434", "__AVR_AT90S4434" }, + { "at90s8515", "__AVR_AT90S8515" }, + { "at90c8534", "__AVR_AT90c8534" }, + { "at90s8535", "__AVR_AT90S8535" }, + { "ata5272", "__AVR_ATA5272" }, + { "attiny13", "__AVR_ATtiny13" }, + { "attiny13a", "__AVR_ATtiny13A" }, + { "attiny2313", "__AVR_ATtiny2313" }, + { "attiny2313a", "__AVR_ATtiny2313A" }, + { "attiny24", "__AVR_ATtiny24" }, + { "attiny24a", "__AVR_ATtiny24A" }, + { "attiny4313", "__AVR_ATtiny4313" }, + { "attiny44", "__AVR_ATtiny44" }, + { "attiny44a", "__AVR_ATtiny44A" }, + { "attiny84", "__AVR_ATtiny84" }, + { "attiny84a", "__AVR_ATtiny84A" }, + { "attiny25", "__AVR_ATtiny25" }, + { "attiny45", "__AVR_ATtiny45" }, + { "attiny85", "__AVR_ATtiny85" }, + { "attiny261", "__AVR_ATtiny261" }, + { "attiny261a", "__AVR_ATtiny261A" }, + { "attiny461", "__AVR_ATtiny461" }, + { "attiny461a", "__AVR_ATtiny461A" }, + { "attiny861", "__AVR_ATtiny861" }, + { "attiny861a", "__AVR_ATtiny861A" }, + { "attiny87", "__AVR_ATtiny87" }, + { "attiny43u", "__AVR_ATtiny43U" }, + { "attiny48", "__AVR_ATtiny48" }, + { "attiny88", "__AVR_ATtiny88" }, + { "attiny828", "__AVR_ATtiny828" }, + { "at43usb355", "__AVR_AT43USB355" }, + { "at76c711", "__AVR_AT76C711" }, + { "atmega103", "__AVR_ATmega103" }, + { "at43usb320", "__AVR_AT43USB320" }, + { "attiny167", "__AVR_ATtiny167" }, + { "at90usb82", "__AVR_AT90USB82" }, + { "at90usb162", "__AVR_AT90USB162" }, + { "ata5505", "__AVR_ATA5505" }, + { "atmega8u2", "__AVR_ATmega8U2" }, + { "atmega16u2", "__AVR_ATmega16U2" }, + { "atmega32u2", "__AVR_ATmega32U2" }, + { "attiny1634", "__AVR_ATtiny1634" }, + { "atmega8", "__AVR_ATmega8" }, + { "ata6289", "__AVR_ATA6289" }, + { "atmega8a", "__AVR_ATmega8A" }, + { "ata6285", "__AVR_ATA6285" }, + { "ata6286", "__AVR_ATA6286" }, + { "atmega48", "__AVR_ATmega48" }, + { "atmega48a", "__AVR_ATmega48A" }, + { "atmega48pa", "__AVR_ATmega48PA" }, + { "atmega48p", "__AVR_ATmega48P" }, + { "atmega88", "__AVR_ATmega88" }, + { "atmega88a", "__AVR_ATmega88A" }, + { "atmega88p", "__AVR_ATmega88P" }, + { "atmega88pa", "__AVR_ATmega88PA" }, + { "atmega8515", "__AVR_ATmega8515" }, + { "atmega8535", "__AVR_ATmega8535" }, + { "atmega8hva", "__AVR_ATmega8HVA" }, + { "at90pwm1", "__AVR_AT90PWM1" }, + { "at90pw
[PATCH] D28346: [AVR] Allow specifying the CPU on the command line
asl added inline comments. Comment at: test/CodeGen/avr/target-cpu-defines/atmega328p.c:1 +// RUN: %clang_cc1 -triple avr-unknown-unknown -target-cpu atmega328p -emit-llvm %s -o - | FileCheck %s + This looks wrong. How you're using FileCheck? Consider dumping pre-built defines and checking the output. Comment at: test/CodeGen/avr/target-cpu-defines/attiny104.c:1 +// RUN: %clang_cc1 -triple avr-unknown-unknown -target-cpu attiny104 -emit-llvm %s -o - | FileCheck %s + Same issue here and in all the tests. https://reviews.llvm.org/D28346 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D28346: [AVR] Allow specifying the CPU on the command line
dylanmckay added a comment. Ping https://reviews.llvm.org/D28346 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D28346: [AVR] Allow specifying the CPU on the command line
dylanmckay updated this revision to Diff 83496. dylanmckay added a comment. Add tests This also defines the '__AVR' and 'AVR' values for all devices, to match what AVR-GCC does. https://reviews.llvm.org/D28346 Files: lib/Basic/Targets.cpp test/CodeGen/avr/target-cpu-defines/atmega328p.c test/CodeGen/avr/target-cpu-defines/attiny104.c test/CodeGen/avr/target-cpu-defines/common.c test/CodeGen/avr/target-cpu-families.c test/CodeGen/avr/target-cpus.c Index: test/CodeGen/avr/target-cpus.c === --- /dev/null +++ test/CodeGen/avr/target-cpus.c @@ -0,0 +1,8 @@ +// RUN: %clang_cc1 -triple avr-unknown-unknown -target-cpu atmega328p -emit-llvm %s -o - | FileCheck %s --check-prefix=ATMEGA328P +// RUN: %clang_cc1 -triple avr-unknown-unknown -target-cpu atxmega192d3 -emit-llvm %s -o - | FileCheck %s --check-prefix=ATXMEGA192D3 +// RUN: %clang_cc1 -triple avr-unknown-unknown -target-cpu attiny104 -emit-llvm %s -o - | FileCheck %s --check-prefix=ATTINY104 + +// ATMEGA328P: hello_world +// ATXMEGA192D3: hello_world +// ATTINY104: hello_world +void hello_world() { } Index: test/CodeGen/avr/target-cpu-families.c === --- /dev/null +++ test/CodeGen/avr/target-cpu-families.c @@ -0,0 +1,14 @@ +// RUN: %clang_cc1 -triple avr-unknown-unknown -target-cpu avr1 -emit-llvm %s -o - | FileCheck %s --check-prefix=AVR1 +// RUN: %clang_cc1 -triple avr-unknown-unknown -target-cpu avr3 -emit-llvm %s -o - | FileCheck %s --check-prefix=AVR3 +// RUN: %clang_cc1 -triple avr-unknown-unknown -target-cpu avr31 -emit-llvm %s -o - | FileCheck %s --check-prefix=AVR31 +// RUN: %clang_cc1 -triple avr-unknown-unknown -target-cpu avr5 -emit-llvm %s -o - | FileCheck %s --check-prefix=AVR5 +// RUN: %clang_cc1 -triple avr-unknown-unknown -target-cpu avrxmega6 -emit-llvm %s -o - | FileCheck %s --check-prefix=XMEGA6 +// RUN: %clang_cc1 -triple avr-unknown-unknown -target-cpu avrtiny -emit-llvm %s -o - | FileCheck %s --check-prefix=TINY + +// AVR1: hello_world +// AVR3: hello_world +// AVR31: hello_world +// AVR5: hello_world +// XMEGA6: hello_world +// TINY: hello_world +void hello_world() { } Index: test/CodeGen/avr/target-cpu-defines/common.c === --- /dev/null +++ test/CodeGen/avr/target-cpu-defines/common.c @@ -0,0 +1,16 @@ +// RUN: %clang_cc1 -triple avr-unknown-unknown -emit-llvm %s -o - | FileCheck %s + +#ifndef __AVR +#error '__AVR' is not defined +#endif + +#ifndef AVR +#error 'AVR' is not defined +#endif + +#ifndef __AVR__ +#error '__AVR__' is not defind +#endif + +// CHECK-LABEL: hello_world +void hello_world() { } Index: test/CodeGen/avr/target-cpu-defines/attiny104.c === --- /dev/null +++ test/CodeGen/avr/target-cpu-defines/attiny104.c @@ -0,0 +1,8 @@ +// RUN: %clang_cc1 -triple avr-unknown-unknown -target-cpu attiny104 -emit-llvm %s -o - | FileCheck %s + +#ifndef __AVR_ATtiny104 +#error '__AVR_ATtiny104' is not defined +#endif + +// CHECK-LABEL: hello +void hello() { } Index: test/CodeGen/avr/target-cpu-defines/atmega328p.c === --- /dev/null +++ test/CodeGen/avr/target-cpu-defines/atmega328p.c @@ -0,0 +1,8 @@ +// RUN: %clang_cc1 -triple avr-unknown-unknown -target-cpu atmega328p -emit-llvm %s -o - | FileCheck %s + +#ifndef __AVR_ATmega328P +#error '__AVR_ATmega328P' is not defined +#endif + +// CHECK-LABEL: hello +void hello() { } Index: lib/Basic/Targets.cpp === --- lib/Basic/Targets.cpp +++ lib/Basic/Targets.cpp @@ -8385,6 +8385,254 @@ } }; +/// Information about a specific microcontroller. +struct MCUInfo { + const char *Name; + const char *DefineName; +}; + +// This list should be kept up-to-date with AVRDevices.td in LLVM. +static ArrayRef AVRMcus = { + { "at90s1200", "__AVR_AT90S1200__" }, + { "attiny11", "__AVR_ATtiny11" }, + { "attiny12", "__AVR_ATtiny12" }, + { "attiny15", "__AVR_ATtiny15" }, + { "attiny28", "__AVR_ATtiny28" }, + { "at90s2313", "__AVR_AT90S2313" }, + { "at90s2323", "__AVR_AT90S2323" }, + { "at90s2333", "__AVR_AT90S2333" }, + { "at90s2343", "__AVR_AT90S2343" }, + { "attiny22", "__AVR_ATtiny22" }, + { "attiny26", "__AVR_ATtiny26" }, + { "at86rf401", "__AVR_AT86RF401" }, + { "at90s4414", "__AVR_AT90S4414" }, + { "at90s4433", "__AVR_AT90S4433" }, + { "at90s4434", "__AVR_AT90S4434" }, + { "at90s8515", "__AVR_AT90S8515" }, + { "at90c8534", "__AVR_AT90c8534" }, + { "at90s8535", "__AVR_AT90S8535" }, + { "ata5272", "__AVR_ATA5272" }, + { "attiny13", "__AVR_ATtiny13" }, + { "attiny13a", "__AVR_ATtiny13A" }, + { "attiny2313", "__AVR_ATtiny2313" }, + { "attiny2313a", "__AVR_ATtiny2313A" }, + { "attiny24", "__AVR_ATtiny24" }, + { "attiny24a", "__AVR_ATtiny24A" }, + { "attiny4313", "__AVR_ATtiny4313" }, + {
[PATCH] D28346: [AVR] Allow specifying the CPU on the command line
jroelofs added a comment. Testcase? https://reviews.llvm.org/D28346 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D28346: [AVR] Allow specifying the CPU on the command line
dylanmckay created this revision. dylanmckay added a reviewer: jroelofs. dylanmckay added a subscriber: cfe-commits. This tells clang about all of the different AVR microcontrollers. It also adds code to define the correct preprocessor macros for each device. https://reviews.llvm.org/D28346 Files: lib/Basic/Targets.cpp Index: lib/Basic/Targets.cpp === --- lib/Basic/Targets.cpp +++ lib/Basic/Targets.cpp @@ -8385,6 +8385,254 @@ } }; +/// Information about a specific microcontroller. +struct MCUInfo { + const char *Name; + const char *DefineName; +}; + +// This list should be kept up-to-date with AVRDevices.td in LLVM. +static ArrayRef AVRMcus = { + { "at90s1200", "__AVR_AT90S1200__" }, + { "attiny11", "__AVR_ATtiny11" }, + { "attiny12", "__AVR_ATtiny12" }, + { "attiny15", "__AVR_ATtiny15" }, + { "attiny28", "__AVR_ATtiny28" }, + { "at90s2313", "__AVR_AT90S2313" }, + { "at90s2323", "__AVR_AT90S2323" }, + { "at90s2333", "__AVR_AT90S2333" }, + { "at90s2343", "__AVR_AT90S2343" }, + { "attiny22", "__AVR_ATtiny22" }, + { "attiny26", "__AVR_ATtiny26" }, + { "at86rf401", "__AVR_AT86RF401" }, + { "at90s4414", "__AVR_AT90S4414" }, + { "at90s4433", "__AVR_AT90S4433" }, + { "at90s4434", "__AVR_AT90S4434" }, + { "at90s8515", "__AVR_AT90S8515" }, + { "at90c8534", "__AVR_AT90c8534" }, + { "at90s8535", "__AVR_AT90S8535" }, + { "ata5272", "__AVR_ATA5272" }, + { "attiny13", "__AVR_ATtiny13" }, + { "attiny13a", "__AVR_ATtiny13A" }, + { "attiny2313", "__AVR_ATtiny2313" }, + { "attiny2313a", "__AVR_ATtiny2313A" }, + { "attiny24", "__AVR_ATtiny24" }, + { "attiny24a", "__AVR_ATtiny24A" }, + { "attiny4313", "__AVR_ATtiny4313" }, + { "attiny44", "__AVR_ATtiny44" }, + { "attiny44a", "__AVR_ATtiny44A" }, + { "attiny84", "__AVR_ATtiny84" }, + { "attiny84a", "__AVR_ATtiny84A" }, + { "attiny25", "__AVR_ATtiny25" }, + { "attiny45", "__AVR_ATtiny45" }, + { "attiny85", "__AVR_ATtiny85" }, + { "attiny261", "__AVR_ATtiny261" }, + { "attiny261a", "__AVR_ATtiny261A" }, + { "attiny461", "__AVR_ATtiny461" }, + { "attiny461a", "__AVR_ATtiny461A" }, + { "attiny861", "__AVR_ATtiny861" }, + { "attiny861a", "__AVR_ATtiny861A" }, + { "attiny87", "__AVR_ATtiny87" }, + { "attiny43u", "__AVR_ATtiny43U" }, + { "attiny48", "__AVR_ATtiny48" }, + { "attiny88", "__AVR_ATtiny88" }, + { "attiny828", "__AVR_ATtiny828" }, + { "at43usb355", "__AVR_AT43USB355" }, + { "at76c711", "__AVR_AT76C711" }, + { "atmega103", "__AVR_ATmega103" }, + { "at43usb320", "__AVR_AT43USB320" }, + { "attiny167", "__AVR_ATtiny167" }, + { "at90usb82", "__AVR_AT90USB82" }, + { "at90usb162", "__AVR_AT90USB162" }, + { "ata5505", "__AVR_ATA5505" }, + { "atmega8u2", "__AVR_ATmega8U2" }, + { "atmega16u2", "__AVR_ATmega16U2" }, + { "atmega32u2", "__AVR_ATmega32U2" }, + { "attiny1634", "__AVR_ATtiny1634" }, + { "atmega8", "__AVR_ATmega8" }, + { "ata6289", "__AVR_ATA6289" }, + { "atmega8a", "__AVR_ATmega8A" }, + { "ata6285", "__AVR_ATA6285" }, + { "ata6286", "__AVR_ATA6286" }, + { "atmega48", "__AVR_ATmega48" }, + { "atmega48a", "__AVR_ATmega48A" }, + { "atmega48pa", "__AVR_ATmega48PA" }, + { "atmega48p", "__AVR_ATmega48P" }, + { "atmega88", "__AVR_ATmega88" }, + { "atmega88a", "__AVR_ATmega88A" }, + { "atmega88p", "__AVR_ATmega88P" }, + { "atmega88pa", "__AVR_ATmega88PA" }, + { "atmega8515", "__AVR_ATmega8515" }, + { "atmega8535", "__AVR_ATmega8535" }, + { "atmega8hva", "__AVR_ATmega8HVA" }, + { "at90pwm1", "__AVR_AT90PWM1" }, + { "at90pwm2", "__AVR_AT90PWM2" }, + { "at90pwm2b", "__AVR_AT90PWM2B" }, + { "at90pwm3", "__AVR_AT90PWM3" }, + { "at90pwm3b", "__AVR_AT90PWM3B" }, + { "at90pwm81", "__AVR_AT90PWM81" }, + { "ata5790", "__AVR_ATA5790" }, + { "ata5795", "__AVR_ATA5795" }, + { "atmega16", "__AVR_ATmega16" }, + { "atmega16a", "__AVR_ATmega16A" }, + { "atmega161", "__AVR_ATmega161" }, + { "atmega162", "__AVR_ATmega162" }, + { "atmega163", "__AVR_ATmega163" }, + { "atmega164a", "__AVR_ATmega164A" }, + { "atmega164p", "__AVR_ATmega164P" }, + { "atmega164pa", "__AVR_ATmega164PA" }, + { "atmega165", "__AVR_ATmega165" }, + { "atmega165a", "__AVR_ATmega165A" }, + { "atmega165p", "__AVR_ATmega165P" }, + { "atmega165pa", "__AVR_ATmega165PA" }, + { "atmega168", "__AVR_ATmega168" }, + { "atmega168a", "__AVR_ATmega168A" }, + { "atmega168p", "__AVR_ATmega168P" }, + { "atmega168pa", "__AVR_ATmega168PA" }, + { "atmega169", "__AVR_ATmega169" }, + { "atmega169a", "__AVR_ATmega169A" }, + { "atmega169p", "__AVR_ATmega169P" }, + { "atmega169pa", "__AVR_ATmega169PA" }, + { "atmega32", "__AVR_ATmega32" }, + { "atmega32a", "__AVR_ATmega32A" }, + { "atmega323", "__AVR_ATmega323" }, + { "atmega324a", "__AVR_ATmega324A" }, + { "atmega324p", "__AVR_ATmega324P" }, + { "atmega324pa", "__AVR_ATmega324PA" }, + { "atmega325", "__AVR_ATmega325" }, + { "atmega325a", "__AVR_ATmega325A" }, + { "atmega325p", "__AVR_ATmega325P" }, + { "atmega325