diff mbox

[avr] : Add more devices

Message ID 511A60AA.7080400@gjlay.de
State New
Headers show

Commit Message

Georg-Johann Lay Feb. 12, 2013, 3:32 p.m. UTC
This patch adds more devices to avr-mcus.def and regenerates depending files.

There is a new spec function that is the worker for ASM_SPEC and that
transforms -mmcu=device to -mmcu=arch for avr-as.

This transformation was already performed for avr25, avr31, avr35 and avr51 and
is now performed for all devices so that avr-as only need to support -mmcu=arch.

Rationale is to reduce tool dependencies:  as need not to know what device it
compiles for, the core is enough.  The only cases where the core arch is no
enough is

- Tell whether the device suffers from skip silicon bug
- Tell whether the device supporte DES, XCH, LAS, LAC, LAT instruction.

The first case is handled by device_to_as that issues -mno-skip-bug as needed.

The second case is not handled.  Binutils is agnostic w.r.t. availability of
these instructions if the exact device is supplied.  If binutils will wver be
extended to know about these instructions, the preferred way is as described in

http://sourceware.org/PR15043

i.e. add new ISA options to binutils.  That way, tools dependencies can be
disentangled and binutils need not to be changed for every new device.

Ok for trunk?

Even though this is new feature, I'd propose to backport the additions to
avr-mcus.def to 4.7.  The changes to avr-mcus.def are obvious enough, IMO.

Okay to backport avr-mcus.def and docs part to 4.7 then?

Johann

	* config/avr/avr-arch.h (avr_arch_t) <arch_for_as>: New component.
	* config/avr/avr-devices.c: Initialize it.
	* config/avr/avr.h (device_to_arch): Rename to device_to_ld.
	(avr_device_to_arch): Rename to avr_device_to_ld.
	(avr_device_to_as): New prototype.
	(EXTRA_SPEC_FUNCTIONS): Add device_to_as.
	(ASM_SPEC): Use device_to_as to get -mmcu= and -mno-skip-bug=.
	* config/avr/driver-avr.c (avr_device_to_as): New.
	(avr_device_to_arch): Rename to avr_device_to_ld.
	* avr/avr-mcus.def (ata5272, ata5505, attiny1634, ata6285)
	(ata6286, atmega8a, atmega48pa, ata5790, ata5790n, ata5795)
	(atmega164pa, atmega165pa, atmega168pa, atmega16hva, atmega16hvb)
	(atmega16hvbrevb, atmega16m1, atmega16u4, atmega26hvg, atmega32a)
	(atmega32a, atmega3250pa, atmega3290pa, atmega32c1, atmega32m1)
	(atmega32u4, atmega32u6, atmega64a, atmega6490a, atmega6490p)
	(atmega64c1, atmega64m1, atmega64rfa2, atmega64rfr2, atmega32hvb)
	(atmega32hvbrevb, atmega16hva2, atmega48hvf, at90pwm161)
	(atmega128a, atmega1284, atmxt112sl, atmxt224, atmxt224e)
	(atmxt336s, atxmega16a4u, atxmega16c4, atxmega32a4u, atxmega32c4)
	(atxmega32e5, atxmega64a3u, atxmega64a4u, atxmega64b1, atxmega64b3)
	(atxmega64c3, atxmega64d4, atxmega128a3u, atxmega128b1)
	(atxmega128b3, atxmega128c3, atxmega128d4, atmxt540s, atmxt540sreva)
	(atxmega192a3u, atxmega192c3, atxmega256a3u, atxmega256c3)
	(atxmega384c3, atxmega384d3, atxmega128a4u): New AVR_MCU.
	(avrxmega6): Increase max flash segments from 5 to 6.
	* config/avr/t-multilib: Regenerate.
	* config/avr/avr-tables.opt: Regenerate.
	* doc/avr-mmcu.texi: Regenerate.

Comments

Georg-Johann Lay Feb. 13, 2013, 10:05 a.m. UTC | #1
Let me drop this, I was thinking too complicated.

src/gas/config/tc-avr.c

reads:

static struct mcu_type_s mcu_types[] =
{
  {"avr1",       AVR_ISA_AVR1,    bfd_mach_avr1},
/* TODO: insruction set for avr2 architecture should be AVR_ISA_AVR2,
 but set to AVR_ISA_AVR25 for some following version
 of GCC (from 4.3) for backward compatibility.  */
  {"avr2",       AVR_ISA_AVR25,   bfd_mach_avr2},
  {"avr25",      AVR_ISA_AVR25,   bfd_mach_avr25},
/* TODO: insruction set for avr3 architecture should be AVR_ISA_AVR3,
 but set to AVR_ISA_AVR3_ALL for some following version
 of GCC (from 4.3) for backward compatibility.  */
  {"avr3",       AVR_ISA_AVR3_ALL, bfd_mach_avr3},
  {"avr31",      AVR_ISA_AVR31,   bfd_mach_avr31},
  {"avr35",      AVR_ISA_AVR35,   bfd_mach_avr35},
  {"avr4",       AVR_ISA_AVR4,    bfd_mach_avr4},
/* TODO: insruction set for avr5 architecture should be AVR_ISA_AVR5,
 but set to AVR_ISA_AVR51 for some following version
 of GCC (from 4.3) for backward compatibility.  */
  {"avr5",       AVR_ISA_AVR51,   bfd_mach_avr5},
  {"avr51",      AVR_ISA_AVR51,   bfd_mach_avr51},
  {"avr6",       AVR_ISA_AVR6,    bfd_mach_avr6},

This means that cores liek avr31, avr35 etc. are supported by binutils and
there is no more the need for avr-gcc to do mappings like avr31 -> avr3.

It appears that avr-gcc implemented these mappings to overcome missing binutils
support for specific cores, and in turn binutils arranged for that kludge...

This means that avr_arch_t need not to be extended to hold the arch mapping for
gas calls and the gas call can use the core name from avr_arch_t.


I broke the patch into two parts:

1/2:  New devices
2/2:  Map device to core to disentangle gcc/binutils interdependencies.

Okay for trunk and 4.7 backport?

Johann


	* avr/avr-mcus.def (ata5272, ata5505, attiny1634, ata6285)
	(ata6286, atmega8a, atmega48pa, ata5790, ata5790n, ata5795)
	(atmega164pa, atmega165pa, atmega168pa, atmega16hva, atmega16hvb)
	(atmega16hvbrevb, atmega16m1, atmega16u4, atmega26hvg, atmega32a)
	(atmega32a, atmega3250pa, atmega3290pa, atmega32c1, atmega32m1)
	(atmega32u4, atmega32u6, atmega64a, atmega6490a, atmega6490p)
	(atmega64c1, atmega64m1, atmega64rfa2, atmega64rfr2, atmega32hvb)
	(atmega32hvbrevb, atmega16hva2, atmega48hvf, at90pwm161)
	(atmega128a, atmega1284, atmxt112sl, atmxt224, atmxt224e)
	(atmxt336s, atxmega16a4u, atxmega16c4, atxmega32a4u, atxmega32c4)
	(atxmega32e5, atxmega64a3u, atxmega64a4u, atxmega64b1, atxmega64b3)
	(atxmega64c3, atxmega64d4, atxmega128a3u, atxmega128b1)
	(atxmega128b3, atxmega128c3, atxmega128d4, atmxt540s, atmxt540sreva)
	(atxmega192a3u, atxmega192c3, atxmega256a3u, atxmega256c3)
	(atxmega384c3, atxmega384d3, atxmega128a4u): New AVR_MCU.
	(avrxmega6): Increase max flash segments from 5 to 6.
	* config/avr/t-multilib: Regenerate.
	* config/avr/avr-tables.opt: Regenerate.
	* doc/avr-mmcu.texi: Regenerate.


Georg-Johann Lay wrote:
> This patch adds more devices to avr-mcus.def and regenerates depending files.
> 
> There is a new spec function that is the worker for ASM_SPEC and that
> transforms -mmcu=device to -mmcu=arch for avr-as.
> 
> This transformation was already performed for avr25, avr31, avr35 and avr51 and
> is now performed for all devices so that avr-as only need to support -mmcu=arch.
> 
> Rationale is to reduce tool dependencies:  as need not to know what device it
> compiles for, the core is enough.  The only cases where the core arch is no
> enough is
> 
> - Tell whether the device suffers from skip silicon bug
> - Tell whether the device supporte DES, XCH, LAS, LAC, LAT instruction.
> 
> The first case is handled by device_to_as that issues -mno-skip-bug as needed.
> 
> The second case is not handled.  Binutils is agnostic w.r.t. availability of
> these instructions if the exact device is supplied.  If binutils will wver be
> extended to know about these instructions, the preferred way is as described in
> 
> http://sourceware.org/PR15043
> 
> i.e. add new ISA options to binutils.  That way, tools dependencies can be
> disentangled and binutils need not to be changed for every new device.
> 
> Ok for trunk?
> 
> Even though this is new feature, I'd propose to backport the additions to
> avr-mcus.def to 4.7.  The changes to avr-mcus.def are obvious enough, IMO.
> 
> Okay to backport avr-mcus.def and docs part to 4.7 then?
> 
> Johann
> 
> 	* config/avr/avr-arch.h (avr_arch_t) <arch_for_as>: New component.
> 	* config/avr/avr-devices.c: Initialize it.
> 	* config/avr/avr.h (device_to_arch): Rename to device_to_ld.
> 	(avr_device_to_arch): Rename to avr_device_to_ld.
> 	(avr_device_to_as): New prototype.
> 	(EXTRA_SPEC_FUNCTIONS): Add device_to_as.
> 	(ASM_SPEC): Use device_to_as to get -mmcu= and -mno-skip-bug=.
> 	* config/avr/driver-avr.c (avr_device_to_as): New.
> 	(avr_device_to_arch): Rename to avr_device_to_ld.
> 	* avr/avr-mcus.def (ata5272, ata5505, attiny1634, ata6285)
> 	(ata6286, atmega8a, atmega48pa, ata5790, ata5790n, ata5795)
> 	(atmega164pa, atmega165pa, atmega168pa, atmega16hva, atmega16hvb)
> 	(atmega16hvbrevb, atmega16m1, atmega16u4, atmega26hvg, atmega32a)
> 	(atmega32a, atmega3250pa, atmega3290pa, atmega32c1, atmega32m1)
> 	(atmega32u4, atmega32u6, atmega64a, atmega6490a, atmega6490p)
> 	(atmega64c1, atmega64m1, atmega64rfa2, atmega64rfr2, atmega32hvb)
> 	(atmega32hvbrevb, atmega16hva2, atmega48hvf, at90pwm161)
> 	(atmega128a, atmega1284, atmxt112sl, atmxt224, atmxt224e)
> 	(atmxt336s, atxmega16a4u, atxmega16c4, atxmega32a4u, atxmega32c4)
> 	(atxmega32e5, atxmega64a3u, atxmega64a4u, atxmega64b1, atxmega64b3)
> 	(atxmega64c3, atxmega64d4, atxmega128a3u, atxmega128b1)
> 	(atxmega128b3, atxmega128c3, atxmega128d4, atmxt540s, atmxt540sreva)
> 	(atxmega192a3u, atxmega192c3, atxmega256a3u, atxmega256c3)
> 	(atxmega384c3, atxmega384d3, atxmega128a4u): New AVR_MCU.
> 	(avrxmega6): Increase max flash segments from 5 to 6.
> 	* config/avr/t-multilib: Regenerate.
> 	* config/avr/avr-tables.opt: Regenerate.
> 	* doc/avr-mmcu.texi: Regenerate.
diff mbox

Patch

Index: config/avr/t-multilib
===================================================================
--- config/avr/t-multilib	(revision 195877)
+++ config/avr/t-multilib	(working copy)
@@ -53,6 +53,7 @@  MULTILIB_MATCHES = \
 	mmcu?avr2=mmcu?at90c8534 \
 	mmcu?avr2=mmcu?at90s8535 \
 	mmcu?avr25=mmcu?ata6289 \
+	mmcu?avr25=mmcu?ata5272 \
 	mmcu?avr25=mmcu?attiny13 \
 	mmcu?avr25=mmcu?attiny13a \
 	mmcu?avr25=mmcu?attiny2313 \
@@ -82,16 +83,22 @@  MULTILIB_MATCHES = \
 	mmcu?avr3=mmcu?at76c711 \
 	mmcu?avr31=mmcu?atmega103 \
 	mmcu?avr31=mmcu?at43usb320 \
+	mmcu?avr35=mmcu?ata5505 \
 	mmcu?avr35=mmcu?at90usb82 \
 	mmcu?avr35=mmcu?at90usb162 \
 	mmcu?avr35=mmcu?atmega8u2 \
 	mmcu?avr35=mmcu?atmega16u2 \
 	mmcu?avr35=mmcu?atmega32u2 \
 	mmcu?avr35=mmcu?attiny167 \
+	mmcu?avr35=mmcu?attiny1634 \
+	mmcu?avr4=mmcu?ata6285 \
+	mmcu?avr4=mmcu?ata6286 \
 	mmcu?avr4=mmcu?atmega8 \
+	mmcu?avr4=mmcu?atmega8a \
 	mmcu?avr4=mmcu?atmega48 \
 	mmcu?avr4=mmcu?atmega48a \
 	mmcu?avr4=mmcu?atmega48p \
+	mmcu?avr4=mmcu?atmega48pa \
 	mmcu?avr4=mmcu?atmega88 \
 	mmcu?avr4=mmcu?atmega88a \
 	mmcu?avr4=mmcu?atmega88p \
@@ -105,6 +112,9 @@  MULTILIB_MATCHES = \
 	mmcu?avr4=mmcu?at90pwm3 \
 	mmcu?avr4=mmcu?at90pwm3b \
 	mmcu?avr4=mmcu?at90pwm81 \
+	mmcu?avr5=mmcu?ata5790 \
+	mmcu?avr5=mmcu?ata5790n \
+	mmcu?avr5=mmcu?ata5795 \
 	mmcu?avr5=mmcu?atmega16 \
 	mmcu?avr5=mmcu?atmega16a \
 	mmcu?avr5=mmcu?atmega161 \
@@ -112,17 +122,28 @@  MULTILIB_MATCHES = \
 	mmcu?avr5=mmcu?atmega163 \
 	mmcu?avr5=mmcu?atmega164a \
 	mmcu?avr5=mmcu?atmega164p \
+	mmcu?avr5=mmcu?atmega164pa \
 	mmcu?avr5=mmcu?atmega165 \
 	mmcu?avr5=mmcu?atmega165a \
 	mmcu?avr5=mmcu?atmega165p \
+	mmcu?avr5=mmcu?atmega165pa \
 	mmcu?avr5=mmcu?atmega168 \
 	mmcu?avr5=mmcu?atmega168a \
 	mmcu?avr5=mmcu?atmega168p \
+	mmcu?avr5=mmcu?atmega168pa \
 	mmcu?avr5=mmcu?atmega169 \
 	mmcu?avr5=mmcu?atmega169a \
 	mmcu?avr5=mmcu?atmega169p \
 	mmcu?avr5=mmcu?atmega169pa \
+	mmcu?avr5=mmcu?atmega16hva \
+	mmcu?avr5=mmcu?atmega16hvb \
+	mmcu?avr5=mmcu?atmega16hvbrevb \
+	mmcu?avr5=mmcu?atmega16m1 \
+	mmcu?avr5=mmcu?atmega16u4 \
+	mmcu?avr5=mmcu?atmega26hvg \
+	mmcu?avr5=mmcu?atmega32a \
 	mmcu?avr5=mmcu?atmega32 \
+	mmcu?avr5=mmcu?atmega32a \
 	mmcu?avr5=mmcu?atmega323 \
 	mmcu?avr5=mmcu?atmega324a \
 	mmcu?avr5=mmcu?atmega324p \
@@ -133,6 +154,7 @@  MULTILIB_MATCHES = \
 	mmcu?avr5=mmcu?atmega3250 \
 	mmcu?avr5=mmcu?atmega3250a \
 	mmcu?avr5=mmcu?atmega3250p \
+	mmcu?avr5=mmcu?atmega3250pa \
 	mmcu?avr5=mmcu?atmega328 \
 	mmcu?avr5=mmcu?atmega328p \
 	mmcu?avr5=mmcu?atmega329 \
@@ -142,8 +164,14 @@  MULTILIB_MATCHES = \
 	mmcu?avr5=mmcu?atmega3290 \
 	mmcu?avr5=mmcu?atmega3290a \
 	mmcu?avr5=mmcu?atmega3290p \
+	mmcu?avr5=mmcu?atmega3290pa \
+	mmcu?avr5=mmcu?atmega32c1 \
+	mmcu?avr5=mmcu?atmega32m1 \
+	mmcu?avr5=mmcu?atmega32u4 \
+	mmcu?avr5=mmcu?atmega32u6 \
 	mmcu?avr5=mmcu?atmega406 \
 	mmcu?avr5=mmcu?atmega64 \
+	mmcu?avr5=mmcu?atmega64a \
 	mmcu?avr5=mmcu?atmega640 \
 	mmcu?avr5=mmcu?atmega644 \
 	mmcu?avr5=mmcu?atmega644a \
@@ -163,9 +191,20 @@  MULTILIB_MATCHES = \
 	mmcu?avr5=mmcu?atmega16hva2 \
 	mmcu?avr5=mmcu?atmega16hvb \
 	mmcu?avr5=mmcu?atmega32hvb \
+	mmcu?avr5=mmcu?atmega6490a \
+	mmcu?avr5=mmcu?atmega6490p \
+	mmcu?avr5=mmcu?atmega64c1 \
+	mmcu?avr5=mmcu?atmega64m1 \
 	mmcu?avr5=mmcu?atmega64hve \
+	mmcu?avr5=mmcu?atmega64rfa2 \
+	mmcu?avr5=mmcu?atmega64rfr2 \
+	mmcu?avr5=mmcu?atmega32hvb \
+	mmcu?avr5=mmcu?atmega32hvbrevb \
+	mmcu?avr5=mmcu?atmega16hva2 \
+	mmcu?avr5=mmcu?atmega48hvf \
 	mmcu?avr5=mmcu?at90can32 \
 	mmcu?avr5=mmcu?at90can64 \
+	mmcu?avr5=mmcu?at90pwm161 \
 	mmcu?avr5=mmcu?at90pwm216 \
 	mmcu?avr5=mmcu?at90pwm316 \
 	mmcu?avr5=mmcu?atmega32c1 \
@@ -182,8 +221,10 @@  MULTILIB_MATCHES = \
 	mmcu?avr5=mmcu?at94k \
 	mmcu?avr5=mmcu?m3000 \
 	mmcu?avr51=mmcu?atmega128 \
+	mmcu?avr51=mmcu?atmega128a \
 	mmcu?avr51=mmcu?atmega1280 \
 	mmcu?avr51=mmcu?atmega1281 \
+	mmcu?avr51=mmcu?atmega1284 \
 	mmcu?avr51=mmcu?atmega1284p \
 	mmcu?avr51=mmcu?atmega128rfa1 \
 	mmcu?avr51=mmcu?at90can128 \
@@ -197,8 +238,23 @@  MULTILIB_MATCHES = \
 	mmcu?avrxmega2=mmcu?atxmega32a4 \
 	mmcu?avrxmega2=mmcu?atxmega32d4 \
 	mmcu?avrxmega2=mmcu?atxmega32x1 \
+	mmcu?avrxmega2=mmcu?atmxt112sl \
+	mmcu?avrxmega2=mmcu?atmxt224 \
+	mmcu?avrxmega2=mmcu?atmxt224e \
+	mmcu?avrxmega2=mmcu?atmxt336s \
+	mmcu?avrxmega2=mmcu?atxmega16a4u \
+	mmcu?avrxmega2=mmcu?atxmega16c4 \
+	mmcu?avrxmega2=mmcu?atxmega32a4u \
+	mmcu?avrxmega2=mmcu?atxmega32c4 \
+	mmcu?avrxmega2=mmcu?atxmega32e5 \
 	mmcu?avrxmega4=mmcu?atxmega64a3 \
 	mmcu?avrxmega4=mmcu?atxmega64d3 \
+	mmcu?avrxmega4=mmcu?atxmega64a3u \
+	mmcu?avrxmega4=mmcu?atxmega64a4u \
+	mmcu?avrxmega4=mmcu?atxmega64b1 \
+	mmcu?avrxmega4=mmcu?atxmega64b3 \
+	mmcu?avrxmega4=mmcu?atxmega64c3 \
+	mmcu?avrxmega4=mmcu?atxmega64d4 \
 	mmcu?avrxmega5=mmcu?atxmega64a1 \
 	mmcu?avrxmega5=mmcu?atxmega64a1u \
 	mmcu?avrxmega6=mmcu?atxmega128a3 \
@@ -209,5 +265,19 @@  MULTILIB_MATCHES = \
 	mmcu?avrxmega6=mmcu?atxmega256a3b \
 	mmcu?avrxmega6=mmcu?atxmega256a3bu \
 	mmcu?avrxmega6=mmcu?atxmega256d3 \
+	mmcu?avrxmega6=mmcu?atxmega128a3u \
+	mmcu?avrxmega6=mmcu?atxmega128b1 \
+	mmcu?avrxmega6=mmcu?atxmega128b3 \
+	mmcu?avrxmega6=mmcu?atxmega128c3 \
+	mmcu?avrxmega6=mmcu?atxmega128d4 \
+	mmcu?avrxmega6=mmcu?atmxt540s \
+	mmcu?avrxmega6=mmcu?atmxt540sreva \
+	mmcu?avrxmega6=mmcu?atxmega192a3u \
+	mmcu?avrxmega6=mmcu?atxmega192c3 \
+	mmcu?avrxmega6=mmcu?atxmega256a3u \
+	mmcu?avrxmega6=mmcu?atxmega256c3 \
+	mmcu?avrxmega6=mmcu?atxmega384c3 \
+	mmcu?avrxmega6=mmcu?atxmega384d3 \
 	mmcu?avrxmega7=mmcu?atxmega128a1 \
-	mmcu?avrxmega7=mmcu?atxmega128a1u
+	mmcu?avrxmega7=mmcu?atxmega128a1u \
+	mmcu?avrxmega7=mmcu?atxmega128a4u
Index: config/avr/avr-devices.c
===================================================================
--- config/avr/avr-devices.c	(revision 195877)
+++ config/avr/avr-devices.c	(working copy)
@@ -31,29 +31,29 @@  const avr_arch_t
 avr_arch_types[] =
 {
   /* unknown device specified */
-  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0060, 32, NULL,              "avr2"  },
+  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0060, 32, NULL, "avr2",   ARCH_AVR2 },
   /*
-    A  M  J  LM E  E  E  X  R   d S   S O   A
-    S  U  M  PO L  L  I  M  A   a t   F ff  r
+    A  M  J  LM E  E  E  X  R   d S   S O   A    -mmcu=      -mmcu=
+    S  U  M  PO L  L  I  M  A   a t   F ff  r     for gcc     for as
     M  L  P  MV P  P  J  E  M   t a   R s   c
-             XW M  M  M  G  P   a r     e   h
-                   X  P  A  D     t     t   ID   */
-  { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x0060, 32, "1",   "avr1"  },
-  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0060, 32, "2",   "avr2"  },
-  { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0x0060, 32, "25",  "avr25" },
-  { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0x0060, 32, "3",   "avr3"  },
-  { 0, 0, 1, 0, 1, 0, 0, 0, 0, 0x0060, 32, "31",  "avr31" },
-  { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0x0060, 32, "35",  "avr35" },
-  { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0x0060, 32, "4",   "avr4"  },
-  { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0x0060, 32, "5",   "avr5"  },
-  { 0, 1, 1, 1, 1, 1, 0, 0, 0, 0x0060, 32, "51",  "avr51" },
-  { 0, 1, 1, 1, 1, 1, 1, 0, 0, 0x0060, 32, "6",   "avr6"  },
+             XW M  M  M  G  P   a r     e   h    -m
+                   X  P  A  D     t     t   ID    for ld              */
+  { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x0060, 32, "1",   "avr1",  ARCH_AVR1 },
+  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0060, 32, "2",   "avr2",  ARCH_AVR2 },
+  { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0x0060, 32, "25",  "avr25", ARCH_AVR2 },
+  { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0x0060, 32, "3",   "avr3",  ARCH_AVR3 },
+  { 0, 0, 1, 0, 1, 0, 0, 0, 0, 0x0060, 32, "31",  "avr31", ARCH_AVR3 },
+  { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0x0060, 32, "35",  "avr35", ARCH_AVR3 },
+  { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0x0060, 32, "4",   "avr4",  ARCH_AVR4 },
+  { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0x0060, 32, "5",   "avr5",  ARCH_AVR5 },
+  { 0, 1, 1, 1, 1, 1, 0, 0, 0, 0x0060, 32, "51",  "avr51", ARCH_AVR5 },
+  { 0, 1, 1, 1, 1, 1, 1, 0, 0, 0x0060, 32, "6",   "avr6",  ARCH_AVR6 },
 
-  { 0, 1, 1, 1, 0, 0, 0, 1, 0, 0x2000,  0, "102", "avrxmega2" },
-  { 0, 1, 1, 1, 1, 1, 0, 1, 0, 0x2000,  0, "104", "avrxmega4" },
-  { 0, 1, 1, 1, 1, 1, 0, 1, 1, 0x2000,  0, "105", "avrxmega5" },
-  { 0, 1, 1, 1, 1, 1, 1, 1, 0, 0x2000,  0, "106", "avrxmega6" },
-  { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0x2000,  0, "107", "avrxmega7" }
+  { 0, 1, 1, 1, 0, 0, 0, 1, 0, 0x2000, 0, "102", "avrxmega2", ARCH_AVRXMEGA2 },
+  { 0, 1, 1, 1, 1, 1, 0, 1, 0, 0x2000, 0, "104", "avrxmega4", ARCH_AVRXMEGA4 },
+  { 0, 1, 1, 1, 1, 1, 0, 1, 1, 0x2000, 0, "105", "avrxmega5", ARCH_AVRXMEGA5 },
+  { 0, 1, 1, 1, 1, 1, 1, 1, 0, 0x2000, 0, "106", "avrxmega6", ARCH_AVRXMEGA6 },
+  { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0x2000, 0, "107", "avrxmega7", ARCH_AVRXMEGA7 }
 };
 
 const avr_arch_info_t
Index: config/avr/avr-arch.h
===================================================================
--- config/avr/avr-arch.h	(revision 195877)
+++ config/avr/avr-arch.h	(working copy)
@@ -87,6 +87,9 @@  typedef struct
 
   /* Architecture name.  */
   const char *const arch_name;
+
+  /* Index in avr_arch_types[] to get -mmcu for as.  */
+  enum avr_arch arch_for_as;
 } avr_arch_t;
 
 
Index: config/avr/avr-mcus.def
===================================================================
--- config/avr/avr-mcus.def	(revision 195877)
+++ config/avr/avr-mcus.def	(working copy)
@@ -28,11 +28,8 @@ 
    -  $(srcdir)/doc/avr-mmcu.texi
 
    After that, rebuild everything and check-in the new sources to the repo.
-   The device list below has to be kept in sync with the following places:
+   The device list below has to be kept in sync with AVR-LibC.
 
-   -  here
-   -  gas/config/tc-avr.c
-   -  avr-libc
 
    Before including this file, define a macro:
 
@@ -79,6 +76,7 @@  AVR_MCU ("at90s8535",            ARCH_AV
 /* Classic + MOVW, <= 8K.  */
 AVR_MCU ("avr25",                ARCH_AVR25, NULL,                       0, 0, 0x0060, 1, "tn85")
 AVR_MCU ("ata6289",              ARCH_AVR25, "__AVR_ATA6289__",          0, 0, 0x0100, 1, "a6289")
+AVR_MCU ("ata5272",              ARCH_AVR25, "__AVR_ATA5272__",          0, 0, 0x0100, 1, "a5272")
 AVR_MCU ("attiny13",             ARCH_AVR25, "__AVR_ATtiny13__",         1, 0, 0x0060, 1, "tn13")
 AVR_MCU ("attiny13a",            ARCH_AVR25, "__AVR_ATtiny13A__",        1, 0, 0x0060, 1, "tn13a")
 AVR_MCU ("attiny2313",           ARCH_AVR25, "__AVR_ATtiny2313__",       1, 0, 0x0060, 1, "tn2313")
@@ -114,18 +112,24 @@  AVR_MCU ("atmega103",            ARCH_AV
 AVR_MCU ("at43usb320",           ARCH_AVR31, "__AVR_AT43USB320__",       0, 0, 0x0060, 2, "43320")
 /* Classic + MOVW + JMP/CALL.  */
 AVR_MCU ("avr35",                ARCH_AVR35, NULL,                       0, 0, 0x0100, 1, "usb162")
+AVR_MCU ("ata5505",              ARCH_AVR35, "__AVR_ATA5505__",          0, 0, 0x0100, 1, "a5505")
 AVR_MCU ("at90usb82",            ARCH_AVR35, "__AVR_AT90USB82__",        0, 0, 0x0100, 1, "usb82")
 AVR_MCU ("at90usb162",           ARCH_AVR35, "__AVR_AT90USB162__",       0, 0, 0x0100, 1, "usb162")
 AVR_MCU ("atmega8u2",            ARCH_AVR35, "__AVR_ATmega8U2__",        0, 0, 0x0100, 1, "m8u2")
 AVR_MCU ("atmega16u2",           ARCH_AVR35, "__AVR_ATmega16U2__",       0, 0, 0x0100, 1, "m16u2")
 AVR_MCU ("atmega32u2",           ARCH_AVR35, "__AVR_ATmega32U2__",       0, 0, 0x0100, 1, "m32u2")
 AVR_MCU ("attiny167",            ARCH_AVR35, "__AVR_ATtiny167__",        0, 0, 0x0100, 1, "tn167")
+AVR_MCU ("attiny1634",           ARCH_AVR35, "__AVR_ATtiny1634__",       0, 0, 0x0100, 1, "tn1634")
 /* Enhanced, <= 8K.  */
 AVR_MCU ("avr4",                 ARCH_AVR4, NULL,                        0, 0, 0x0060, 1, "m8")
+AVR_MCU ("ata6285",              ARCH_AVR4, "__AVR_ATA6285__",           0, 0, 0x0100, 1, "a6285")
+AVR_MCU ("ata6286",              ARCH_AVR4, "__AVR_ATA6286__",           0, 0, 0x0100, 1, "a6286")
 AVR_MCU ("atmega8",              ARCH_AVR4, "__AVR_ATmega8__",           0, 0, 0x0060, 1, "m8")
+AVR_MCU ("atmega8a",             ARCH_AVR4, "__AVR_ATmega8A__",          0, 0, 0x0060, 1, "m8a")
 AVR_MCU ("atmega48",             ARCH_AVR4, "__AVR_ATmega48__",          0, 0, 0x0100, 1, "m48")
 AVR_MCU ("atmega48a",            ARCH_AVR4, "__AVR_ATmega48A__",         0, 0, 0x0100, 1, "m48a")
 AVR_MCU ("atmega48p",            ARCH_AVR4, "__AVR_ATmega48P__",         0, 0, 0x0100, 1, "m48p")
+AVR_MCU ("atmega48pa",           ARCH_AVR4, "__AVR_ATmega48PA__",        0, 0, 0x0100, 1, "m48pa")
 AVR_MCU ("atmega88",             ARCH_AVR4, "__AVR_ATmega88__",          0, 0, 0x0100, 1, "m88")
 AVR_MCU ("atmega88a",            ARCH_AVR4, "__AVR_ATmega88A__",         0, 0, 0x0100, 1, "m88a")
 AVR_MCU ("atmega88p",            ARCH_AVR4, "__AVR_ATmega88P__",         0, 0, 0x0100, 1, "m88p")
@@ -141,6 +145,9 @@  AVR_MCU ("at90pwm3b",            ARCH_AV
 AVR_MCU ("at90pwm81",            ARCH_AVR4, "__AVR_AT90PWM81__",         0, 0, 0x0100, 1, "90pwm81")
 /* Enhanced, > 8K, <= 64K.  */
 AVR_MCU ("avr5",                 ARCH_AVR5, NULL,                        0, 0, 0x0060, 1, "m16")
+AVR_MCU ("ata5790",              ARCH_AVR5, "__AVR_ATA5790__",           0, 0, 0x0100, 1, "a5790")
+AVR_MCU ("ata5790n",             ARCH_AVR5, "__AVR_ATA5790N__",          0, 0, 0x0100, 1, "a5790n")
+AVR_MCU ("ata5795",              ARCH_AVR5, "__AVR_ATA5795__",           0, 0, 0x0100, 1, "a5795")
 AVR_MCU ("atmega16",             ARCH_AVR5, "__AVR_ATmega16__",          0, 0, 0x0060, 1, "m16")
 AVR_MCU ("atmega16a",            ARCH_AVR5, "__AVR_ATmega16A__",         0, 0, 0x0060, 1, "m16a")
 AVR_MCU ("atmega161",            ARCH_AVR5, "__AVR_ATmega161__",         0, 0, 0x0060, 1, "m161")
@@ -148,17 +155,28 @@  AVR_MCU ("atmega162",            ARCH_AV
 AVR_MCU ("atmega163",            ARCH_AVR5, "__AVR_ATmega163__",         0, 0, 0x0060, 1, "m163")
 AVR_MCU ("atmega164a",           ARCH_AVR5, "__AVR_ATmega164A__",        0, 0, 0x0100, 1, "m164a")
 AVR_MCU ("atmega164p",           ARCH_AVR5, "__AVR_ATmega164P__",        0, 0, 0x0100, 1, "m164p")
+AVR_MCU ("atmega164pa",          ARCH_AVR5, "__AVR_ATmega164PA__",       0, 0, 0x0100, 1, "m164pa")
 AVR_MCU ("atmega165",            ARCH_AVR5, "__AVR_ATmega165__",         0, 0, 0x0100, 1, "m165")
 AVR_MCU ("atmega165a",           ARCH_AVR5, "__AVR_ATmega165A__",        0, 0, 0x0100, 1, "m165a")
 AVR_MCU ("atmega165p",           ARCH_AVR5, "__AVR_ATmega165P__",        0, 0, 0x0100, 1, "m165p")
+AVR_MCU ("atmega165pa",          ARCH_AVR5, "__AVR_ATmega165PA__",       0, 0, 0x0100, 1, "m165pa")
 AVR_MCU ("atmega168",            ARCH_AVR5, "__AVR_ATmega168__",         0, 0, 0x0100, 1, "m168")
 AVR_MCU ("atmega168a",           ARCH_AVR5, "__AVR_ATmega168A__",        0, 0, 0x0100, 1, "m168a")
 AVR_MCU ("atmega168p",           ARCH_AVR5, "__AVR_ATmega168P__",        0, 0, 0x0100, 1, "m168p")
+AVR_MCU ("atmega168pa",          ARCH_AVR5, "__AVR_ATmega168PA__",       0, 0, 0x0100, 1, "m168pa")
 AVR_MCU ("atmega169",            ARCH_AVR5, "__AVR_ATmega169__",         0, 0, 0x0100, 1, "m169")
 AVR_MCU ("atmega169a",           ARCH_AVR5, "__AVR_ATmega169A__",        0, 0, 0x0100, 1, "m169a")
 AVR_MCU ("atmega169p",           ARCH_AVR5, "__AVR_ATmega169P__",        0, 0, 0x0100, 1, "m169p")
 AVR_MCU ("atmega169pa",          ARCH_AVR5, "__AVR_ATmega169PA__",       0, 0, 0x0100, 1, "m169pa")
+AVR_MCU ("atmega16hva",          ARCH_AVR5, "__AVR_ATmega16HVA__",       0, 0, 0x0100, 1, "m16hva")
+AVR_MCU ("atmega16hvb",          ARCH_AVR5, "__AVR_ATmega16HVB__",       0, 0, 0x0100, 1, "m16hvb")
+AVR_MCU ("atmega16hvbrevb",      ARCH_AVR5, "__AVR_ATmega16HVBREVB__",   0, 0, 0x0100, 1, "m16hvbrevb")
+AVR_MCU ("atmega16m1",           ARCH_AVR5, "__AVR_ATmega16M1__",        0, 0, 0x0100, 1, "m16m1")
+AVR_MCU ("atmega16u4",           ARCH_AVR5, "__AVR_ATmega16U4__",        0, 0, 0x0100, 1, "m16u4")
+AVR_MCU ("atmega26hvg",          ARCH_AVR5, "__AVR_ATmega26HVG__",       0, 0, 0x0100, 1, "m26hvg")
+AVR_MCU ("atmega32a",            ARCH_AVR5, "__AVR_ATmega32A__",         0, 0, 0x0060, 1, "m32a")
 AVR_MCU ("atmega32",             ARCH_AVR5, "__AVR_ATmega32__",          0, 0, 0x0060, 1, "m32")
+AVR_MCU ("atmega32a",            ARCH_AVR5, "__AVR_ATmega32A__",         0, 0, 0x0060, 1, "m32a")
 AVR_MCU ("atmega323",            ARCH_AVR5, "__AVR_ATmega323__",         0, 0, 0x0060, 1, "m323")
 AVR_MCU ("atmega324a",           ARCH_AVR5, "__AVR_ATmega324A__",        0, 0, 0x0100, 1, "m324a")
 AVR_MCU ("atmega324p",           ARCH_AVR5, "__AVR_ATmega324P__",        0, 0, 0x0100, 1, "m324p")
@@ -169,6 +187,7 @@  AVR_MCU ("atmega325p",           ARCH_AV
 AVR_MCU ("atmega3250",           ARCH_AVR5, "__AVR_ATmega3250__",        0, 0, 0x0100, 1, "m3250")
 AVR_MCU ("atmega3250a",          ARCH_AVR5, "__AVR_ATmega3250A__",       0, 0, 0x0100, 1, "m3250a")
 AVR_MCU ("atmega3250p",          ARCH_AVR5, "__AVR_ATmega3250P__",       0, 0, 0x0100, 1, "m3250p")
+AVR_MCU ("atmega3250pa",         ARCH_AVR5, "__AVR_ATmega3250PA__",      0, 0, 0x0100, 1, "m3250pa")
 AVR_MCU ("atmega328",            ARCH_AVR5, "__AVR_ATmega328__",         0, 0, 0x0100, 1, "m328")
 AVR_MCU ("atmega328p",           ARCH_AVR5, "__AVR_ATmega328P__",        0, 0, 0x0100, 1, "m328p")
 AVR_MCU ("atmega329",            ARCH_AVR5, "__AVR_ATmega329__",         0, 0, 0x0100, 1, "m329")
@@ -178,8 +197,14 @@  AVR_MCU ("atmega329pa",          ARCH_AV
 AVR_MCU ("atmega3290",           ARCH_AVR5, "__AVR_ATmega3290__",        0, 0, 0x0100, 1, "m3290")
 AVR_MCU ("atmega3290a",          ARCH_AVR5, "__AVR_ATmega3290A__",       0, 0, 0x0100, 1, "m3290a")
 AVR_MCU ("atmega3290p",          ARCH_AVR5, "__AVR_ATmega3290P__",       0, 0, 0x0100, 1, "m3290p")
+AVR_MCU ("atmega3290pa",         ARCH_AVR5, "__AVR_ATmega3290PA__",      0, 0, 0x0100, 1, "m3290pa")
+AVR_MCU ("atmega32c1",           ARCH_AVR5, "__AVR_ATmega32C1__",        0, 0, 0x0100, 1, "m32c1")
+AVR_MCU ("atmega32m1",           ARCH_AVR5, "__AVR_ATmega32M1__",        0, 0, 0x0100, 1, "m32m1")
+AVR_MCU ("atmega32u4",           ARCH_AVR5, "__AVR_ATmega32U4__",        0, 0, 0x0100, 1, "m32u4")
+AVR_MCU ("atmega32u6",           ARCH_AVR5, "__AVR_ATmega32U6__",        0, 0, 0x0100, 1, "m32u6")
 AVR_MCU ("atmega406",            ARCH_AVR5, "__AVR_ATmega406__",         0, 0, 0x0100, 1, "m406")
 AVR_MCU ("atmega64",             ARCH_AVR5, "__AVR_ATmega64__",          0, 0, 0x0100, 1, "m64")
+AVR_MCU ("atmega64a",            ARCH_AVR5, "__AVR_ATmega64A__",         0, 0, 0x0100, 1, "m64a")
 AVR_MCU ("atmega640",            ARCH_AVR5, "__AVR_ATmega640__",         0, 0, 0x0200, 1, "m640")
 AVR_MCU ("atmega644",            ARCH_AVR5, "__AVR_ATmega644__",         0, 0, 0x0100, 1, "m644")
 AVR_MCU ("atmega644a",           ARCH_AVR5, "__AVR_ATmega644A__",        0, 0, 0x0100, 1, "m644a")
@@ -199,9 +224,20 @@  AVR_MCU ("atmega16hva",          ARCH_AV
 AVR_MCU ("atmega16hva2",         ARCH_AVR5, "__AVR_ATmega16HVA2__",      0, 0, 0x0100, 1, "m16hva2")
 AVR_MCU ("atmega16hvb",          ARCH_AVR5, "__AVR_ATmega16HVB__",       0, 0, 0x0100, 1, "m16hvb")
 AVR_MCU ("atmega32hvb",          ARCH_AVR5, "__AVR_ATmega32HVB__",       0, 0, 0x0100, 1, "m32hvb")
+AVR_MCU ("atmega6490a",          ARCH_AVR5, "__AVR_ATmega6490A__",       0, 0, 0x0100, 1, "m6490a")
+AVR_MCU ("atmega6490p",          ARCH_AVR5, "__AVR_ATmega6490P__",       0, 0, 0x0100, 1, "m6490p")
+AVR_MCU ("atmega64c1",           ARCH_AVR5, "__AVR_ATmega64C1__",        0, 0, 0x0100, 1, "m64c1")
+AVR_MCU ("atmega64m1",           ARCH_AVR5, "__AVR_ATmega64M1__",        0, 0, 0x0100, 1, "m64m1")
 AVR_MCU ("atmega64hve",          ARCH_AVR5, "__AVR_ATmega64HVE__",       0, 0, 0x0100, 1, "m64hve")
+AVR_MCU ("atmega64rfa2",         ARCH_AVR5, "__AVR_ATmega64RFA2__",      0, 0, 0x0200, 1, "m64rfa2")
+AVR_MCU ("atmega64rfr2",         ARCH_AVR5, "__AVR_ATmega64RFR2__",      0, 0, 0x0200, 1, "m64rfr2")
+AVR_MCU ("atmega32hvb",          ARCH_AVR5, "__AVR_ATmega32HVB__",       0, 0, 0x0100, 1, "m32hvb")
+AVR_MCU ("atmega32hvbrevb",      ARCH_AVR5, "__AVR_ATmega32HVBREVB__",   0, 0, 0x0100, 1, "m32hvbrevb")
+AVR_MCU ("atmega16hva2",         ARCH_AVR5, "__AVR_ATmega16HVA2__",      0, 0, 0x0100, 1, "m16hva2")
+AVR_MCU ("atmega48hvf",          ARCH_AVR5, "__AVR_ATmega48HVF__",       0, 0, 0x0100, 1, "m48hvf")
 AVR_MCU ("at90can32",            ARCH_AVR5, "__AVR_AT90CAN32__",         0, 0, 0x0100, 1, "can32")
 AVR_MCU ("at90can64",            ARCH_AVR5, "__AVR_AT90CAN64__",         0, 0, 0x0100, 1, "can64")
+AVR_MCU ("at90pwm161",           ARCH_AVR5, "__AVR_AT90PWM161__",        0, 0, 0x0100, 1, "90pwm161")
 AVR_MCU ("at90pwm216",           ARCH_AVR5, "__AVR_AT90PWM216__",        0, 0, 0x0100, 1, "90pwm216")
 AVR_MCU ("at90pwm316",           ARCH_AVR5, "__AVR_AT90PWM316__",        0, 0, 0x0100, 1, "90pwm316")
 AVR_MCU ("atmega32c1",           ARCH_AVR5, "__AVR_ATmega32C1__",        0, 0, 0x0100, 1, "m32c1")
@@ -220,8 +256,10 @@  AVR_MCU ("m3000",                ARCH_AV
 /* Enhanced, == 128K.  */
 AVR_MCU ("avr51",                ARCH_AVR51, NULL,                       0, 0, 0x0100, 2, "m128")
 AVR_MCU ("atmega128",            ARCH_AVR51, "__AVR_ATmega128__",        0, 0, 0x0100, 2, "m128")
+AVR_MCU ("atmega128a",           ARCH_AVR51, "__AVR_ATmega128A__",       0, 0, 0x0100, 2, "m128a")
 AVR_MCU ("atmega1280",           ARCH_AVR51, "__AVR_ATmega1280__",       0, 0, 0x0200, 2, "m1280")
 AVR_MCU ("atmega1281",           ARCH_AVR51, "__AVR_ATmega1281__",       0, 0, 0x0200, 2, "m1281")
+AVR_MCU ("atmega1284",           ARCH_AVR51, "__AVR_ATmega1284__",       0, 0, 0x0100, 2, "m1284")
 AVR_MCU ("atmega1284p",          ARCH_AVR51, "__AVR_ATmega1284P__",      0, 0, 0x0100, 2, "m1284p")
 AVR_MCU ("atmega128rfa1",        ARCH_AVR51, "__AVR_ATmega128RFA1__",    0, 0, 0x0200, 2, "m128rfa1")
 AVR_MCU ("at90can128",           ARCH_AVR51, "__AVR_AT90CAN128__",       0, 0, 0x0100, 2, "can128")
@@ -239,16 +277,31 @@  AVR_MCU ("atxmega16x1",      ARCH_AVRXME
 AVR_MCU ("atxmega32a4",      ARCH_AVRXMEGA2, "__AVR_ATxmega32A4__",      0, 0, 0x2000, 1, "x32a4")
 AVR_MCU ("atxmega32d4",      ARCH_AVRXMEGA2, "__AVR_ATxmega32D4__",      0, 0, 0x2000, 1, "x32d4")
 AVR_MCU ("atxmega32x1",      ARCH_AVRXMEGA2, "__AVR_ATxmega32X1__",      0, 0, 0x2000, 1, "x32x1")
+AVR_MCU ("atmxt112sl",       ARCH_AVRXMEGA2, "__AVR_ATMXT112SL__",       0, 0, 0x2000, 1, "mxt112sl")
+AVR_MCU ("atmxt224",         ARCH_AVRXMEGA2, "__AVR_ATMXT224__",         0, 0, 0x2000, 1, "mxt224")
+AVR_MCU ("atmxt224e",        ARCH_AVRXMEGA2, "__AVR_ATMXT224E__",        0, 0, 0x2000, 1, "mxt224e")
+AVR_MCU ("atmxt336s",        ARCH_AVRXMEGA2, "__AVR_ATMXT336S__",        0, 0, 0x2000, 1, "mxt336s")
+AVR_MCU ("atxmega16a4u",     ARCH_AVRXMEGA2, "__AVR_ATxmega16A4U__",     0, 0, 0x2000, 1, "x16a4u")
+AVR_MCU ("atxmega16c4",      ARCH_AVRXMEGA2, "__AVR_ATxmega16C4__",      0, 0, 0x2000, 1, "x16c4")
+AVR_MCU ("atxmega32a4u",     ARCH_AVRXMEGA2, "__AVR_ATxmega32A4U__",     0, 0, 0x2000, 1, "x32a4u")
+AVR_MCU ("atxmega32c4",      ARCH_AVRXMEGA2, "__AVR_ATxmega32C4__",      0, 0, 0x2000, 1, "x32c4")
+AVR_MCU ("atxmega32e5",      ARCH_AVRXMEGA2, "__AVR_ATxmega32E5__",      0, 0, 0x2000, 1, "x32e5")
 /* Xmega, 64K < Flash <= 128K, RAM <= 64K */
 AVR_MCU ("avrxmega4",        ARCH_AVRXMEGA4, NULL,                       0, 0, 0x2000, 2, "x64a4")
 AVR_MCU ("atxmega64a3",      ARCH_AVRXMEGA4, "__AVR_ATxmega64A3__",      0, 0, 0x2000, 2, "x64a3")
 AVR_MCU ("atxmega64d3",      ARCH_AVRXMEGA4, "__AVR_ATxmega64D3__",      0, 0, 0x2000, 2, "x64d3")
+AVR_MCU ("atxmega64a3u",     ARCH_AVRXMEGA4, "__AVR_ATxmega64A3U__",     0, 0, 0x2000, 2, "x64a3u")
+AVR_MCU ("atxmega64a4u",     ARCH_AVRXMEGA4, "__AVR_ATxmega64A4U__",     0, 0, 0x2000, 2, "x64a4u")
+AVR_MCU ("atxmega64b1",      ARCH_AVRXMEGA4, "__AVR_ATxmega64B1__",      0, 0, 0x2000, 2, "x64b1")
+AVR_MCU ("atxmega64b3",      ARCH_AVRXMEGA4, "__AVR_ATxmega64B3__",      0, 0, 0x2000, 2, "x64b3")
+AVR_MCU ("atxmega64c3",      ARCH_AVRXMEGA4, "__AVR_ATxmega64C3__",      0, 0, 0x2000, 2, "x64c3")
+AVR_MCU ("atxmega64d4",      ARCH_AVRXMEGA4, "__AVR_ATxmega64D4__",      0, 0, 0x2000, 2, "x64d4")
 /* Xmega, 64K < Flash <= 128K, RAM > 64K */
 AVR_MCU ("avrxmega5",        ARCH_AVRXMEGA5, NULL,                       0, 0, 0x2000, 2, "x64a1")
 AVR_MCU ("atxmega64a1",      ARCH_AVRXMEGA5, "__AVR_ATxmega64A1__",      0, 0, 0x2000, 2, "x64a1")
 AVR_MCU ("atxmega64a1u",     ARCH_AVRXMEGA5, "__AVR_ATxmega64A1U__",     0, 0, 0x2000, 2, "x64a1u")
 /* Xmega, 128K < Flash, RAM <= 64K */
-AVR_MCU ("avrxmega6",        ARCH_AVRXMEGA6, NULL,                       0, 0, 0x2000, 5, "x128a3")
+AVR_MCU ("avrxmega6",        ARCH_AVRXMEGA6, NULL,                       0, 0, 0x2000, 6, "x128a3")
 AVR_MCU ("atxmega128a3",     ARCH_AVRXMEGA6, "__AVR_ATxmega128A3__",     0, 0, 0x2000, 3, "x128a3")
 AVR_MCU ("atxmega128d3",     ARCH_AVRXMEGA6, "__AVR_ATxmega128D3__",     0, 0, 0x2000, 3, "x128d3")
 AVR_MCU ("atxmega192a3",     ARCH_AVRXMEGA6, "__AVR_ATxmega192A3__",     0, 0, 0x2000, 4, "x192a3")
@@ -257,10 +310,24 @@  AVR_MCU ("atxmega256a3",     ARCH_AVRXME
 AVR_MCU ("atxmega256a3b",    ARCH_AVRXMEGA6, "__AVR_ATxmega256A3B__",    0, 0, 0x2000, 5, "x256a3b")
 AVR_MCU ("atxmega256a3bu",   ARCH_AVRXMEGA6, "__AVR_ATxmega256A3BU__",   0, 0, 0x2000, 5, "x256a3bu")
 AVR_MCU ("atxmega256d3",     ARCH_AVRXMEGA6, "__AVR_ATxmega256D3__",     0, 0, 0x2000, 5, "x256d3")
+AVR_MCU ("atxmega128a3u",    ARCH_AVRXMEGA6, "__AVR_ATxmega128A3U__",    0, 0, 0x2000, 3, "x128a3u")
+AVR_MCU ("atxmega128b1",     ARCH_AVRXMEGA6, "__AVR_ATxmega128B1__",     0, 0, 0x2000, 3, "x128b1")
+AVR_MCU ("atxmega128b3",     ARCH_AVRXMEGA6, "__AVR_ATxmega128B3__",     0, 0, 0x2000, 3, "x128b3")
+AVR_MCU ("atxmega128c3",     ARCH_AVRXMEGA6, "__AVR_ATxmega128C3__",     0, 0, 0x2000, 3, "x128c3")
+AVR_MCU ("atxmega128d4",     ARCH_AVRXMEGA6, "__AVR_ATxmega128D4__",     0, 0, 0x2000, 3, "x128d4")
+AVR_MCU ("atmxt540s",        ARCH_AVRXMEGA6, "__AVR_ATMXT540S__",        0, 0, 0x2000, 2, "mxt540s")
+AVR_MCU ("atmxt540sreva",    ARCH_AVRXMEGA6, "__AVR_ATMXT540SREVA__",    0, 0, 0x2000, 2, "mxt540sreva")
+AVR_MCU ("atxmega192a3u",    ARCH_AVRXMEGA6, "__AVR_ATxmega192A3U__",    0, 0, 0x2000, 4, "x192a3u")
+AVR_MCU ("atxmega192c3",     ARCH_AVRXMEGA6, "__AVR_ATxmega192C3__",     0, 0, 0x2000, 4, "x192c3")
+AVR_MCU ("atxmega256a3u",    ARCH_AVRXMEGA6, "__AVR_ATxmega256A3U__",    0, 0, 0x2000, 5, "x256a3u")
+AVR_MCU ("atxmega256c3",     ARCH_AVRXMEGA6, "__AVR_ATxmega256C3__",     0, 0, 0x2000, 5, "x256c3")
+AVR_MCU ("atxmega384c3",     ARCH_AVRXMEGA6, "__AVR_ATxmega384C3__",     0, 0, 0x2000, 6, "x384c3")
+AVR_MCU ("atxmega384d3",     ARCH_AVRXMEGA6, "__AVR_ATxmega384D3__",     0, 0, 0x2000, 6, "x384d3")
 /* Xmega, 128K < Flash, RAM > 64K RAM.  */
 AVR_MCU ("avrxmega7",        ARCH_AVRXMEGA7, NULL,                       0, 0, 0x2000, 3, "x128a1")
 AVR_MCU ("atxmega128a1",     ARCH_AVRXMEGA7, "__AVR_ATxmega128A1__",     0, 0, 0x2000, 3, "x128a1")
 AVR_MCU ("atxmega128a1u",    ARCH_AVRXMEGA7, "__AVR_ATxmega128A1U__",    0, 0, 0x2000, 3, "x128a1u")
+AVR_MCU ("atxmega128a4u",    ARCH_AVRXMEGA7, "__AVR_ATxmega128A4U__",    0, 0, 0x2000, 3, "x128a4u")
 /* Assembler only.  */
 AVR_MCU ("avr1",                 ARCH_AVR1, NULL,                        0, 0, 0x0060, 1, "s1200")
 AVR_MCU ("at90s1200",            ARCH_AVR1, "__AVR_AT90S1200__",         0, 0, 0x0060, 1, "s1200")
Index: config/avr/avr-tables.opt
===================================================================
--- config/avr/avr-tables.opt	(revision 195877)
+++ config/avr/avr-tables.opt	(working copy)
@@ -69,530 +69,740 @@  EnumValue
 Enum(avr_mcu) String(ata6289) Value(14)
 
 EnumValue
-Enum(avr_mcu) String(attiny13) Value(15)
+Enum(avr_mcu) String(ata5272) Value(15)
 
 EnumValue
-Enum(avr_mcu) String(attiny13a) Value(16)
+Enum(avr_mcu) String(attiny13) Value(16)
 
 EnumValue
-Enum(avr_mcu) String(attiny2313) Value(17)
+Enum(avr_mcu) String(attiny13a) Value(17)
 
 EnumValue
-Enum(avr_mcu) String(attiny2313a) Value(18)
+Enum(avr_mcu) String(attiny2313) Value(18)
 
 EnumValue
-Enum(avr_mcu) String(attiny24) Value(19)
+Enum(avr_mcu) String(attiny2313a) Value(19)
 
 EnumValue
-Enum(avr_mcu) String(attiny24a) Value(20)
+Enum(avr_mcu) String(attiny24) Value(20)
 
 EnumValue
-Enum(avr_mcu) String(attiny4313) Value(21)
+Enum(avr_mcu) String(attiny24a) Value(21)
 
 EnumValue
-Enum(avr_mcu) String(attiny44) Value(22)
+Enum(avr_mcu) String(attiny4313) Value(22)
 
 EnumValue
-Enum(avr_mcu) String(attiny44a) Value(23)
+Enum(avr_mcu) String(attiny44) Value(23)
 
 EnumValue
-Enum(avr_mcu) String(attiny84) Value(24)
+Enum(avr_mcu) String(attiny44a) Value(24)
 
 EnumValue
-Enum(avr_mcu) String(attiny84a) Value(25)
+Enum(avr_mcu) String(attiny84) Value(25)
 
 EnumValue
-Enum(avr_mcu) String(attiny25) Value(26)
+Enum(avr_mcu) String(attiny84a) Value(26)
 
 EnumValue
-Enum(avr_mcu) String(attiny45) Value(27)
+Enum(avr_mcu) String(attiny25) Value(27)
 
 EnumValue
-Enum(avr_mcu) String(attiny85) Value(28)
+Enum(avr_mcu) String(attiny45) Value(28)
 
 EnumValue
-Enum(avr_mcu) String(attiny261) Value(29)
+Enum(avr_mcu) String(attiny85) Value(29)
 
 EnumValue
-Enum(avr_mcu) String(attiny261a) Value(30)
+Enum(avr_mcu) String(attiny261) Value(30)
 
 EnumValue
-Enum(avr_mcu) String(attiny461) Value(31)
+Enum(avr_mcu) String(attiny261a) Value(31)
 
 EnumValue
-Enum(avr_mcu) String(attiny461a) Value(32)
+Enum(avr_mcu) String(attiny461) Value(32)
 
 EnumValue
-Enum(avr_mcu) String(attiny861) Value(33)
+Enum(avr_mcu) String(attiny461a) Value(33)
 
 EnumValue
-Enum(avr_mcu) String(attiny861a) Value(34)
+Enum(avr_mcu) String(attiny861) Value(34)
 
 EnumValue
-Enum(avr_mcu) String(attiny43u) Value(35)
+Enum(avr_mcu) String(attiny861a) Value(35)
 
 EnumValue
-Enum(avr_mcu) String(attiny87) Value(36)
+Enum(avr_mcu) String(attiny43u) Value(36)
 
 EnumValue
-Enum(avr_mcu) String(attiny48) Value(37)
+Enum(avr_mcu) String(attiny87) Value(37)
 
 EnumValue
-Enum(avr_mcu) String(attiny88) Value(38)
+Enum(avr_mcu) String(attiny48) Value(38)
 
 EnumValue
-Enum(avr_mcu) String(at86rf401) Value(39)
+Enum(avr_mcu) String(attiny88) Value(39)
 
 EnumValue
-Enum(avr_mcu) String(avr3) Value(40)
+Enum(avr_mcu) String(at86rf401) Value(40)
 
 EnumValue
-Enum(avr_mcu) String(at43usb355) Value(41)
+Enum(avr_mcu) String(avr3) Value(41)
 
 EnumValue
-Enum(avr_mcu) String(at76c711) Value(42)
+Enum(avr_mcu) String(at43usb355) Value(42)
 
 EnumValue
-Enum(avr_mcu) String(avr31) Value(43)
+Enum(avr_mcu) String(at76c711) Value(43)
 
 EnumValue
-Enum(avr_mcu) String(atmega103) Value(44)
+Enum(avr_mcu) String(avr31) Value(44)
 
 EnumValue
-Enum(avr_mcu) String(at43usb320) Value(45)
+Enum(avr_mcu) String(atmega103) Value(45)
 
 EnumValue
-Enum(avr_mcu) String(avr35) Value(46)
+Enum(avr_mcu) String(at43usb320) Value(46)
 
 EnumValue
-Enum(avr_mcu) String(at90usb82) Value(47)
+Enum(avr_mcu) String(avr35) Value(47)
 
 EnumValue
-Enum(avr_mcu) String(at90usb162) Value(48)
+Enum(avr_mcu) String(ata5505) Value(48)
 
 EnumValue
-Enum(avr_mcu) String(atmega8u2) Value(49)
+Enum(avr_mcu) String(at90usb82) Value(49)
 
 EnumValue
-Enum(avr_mcu) String(atmega16u2) Value(50)
+Enum(avr_mcu) String(at90usb162) Value(50)
 
 EnumValue
-Enum(avr_mcu) String(atmega32u2) Value(51)
+Enum(avr_mcu) String(atmega8u2) Value(51)
 
 EnumValue
-Enum(avr_mcu) String(attiny167) Value(52)
+Enum(avr_mcu) String(atmega16u2) Value(52)
 
 EnumValue
-Enum(avr_mcu) String(avr4) Value(53)
+Enum(avr_mcu) String(atmega32u2) Value(53)
 
 EnumValue
-Enum(avr_mcu) String(atmega8) Value(54)
+Enum(avr_mcu) String(attiny167) Value(54)
 
 EnumValue
-Enum(avr_mcu) String(atmega48) Value(55)
+Enum(avr_mcu) String(attiny1634) Value(55)
 
 EnumValue
-Enum(avr_mcu) String(atmega48a) Value(56)
+Enum(avr_mcu) String(avr4) Value(56)
 
 EnumValue
-Enum(avr_mcu) String(atmega48p) Value(57)
+Enum(avr_mcu) String(ata6285) Value(57)
 
 EnumValue
-Enum(avr_mcu) String(atmega88) Value(58)
+Enum(avr_mcu) String(ata6286) Value(58)
 
 EnumValue
-Enum(avr_mcu) String(atmega88a) Value(59)
+Enum(avr_mcu) String(atmega8) Value(59)
 
 EnumValue
-Enum(avr_mcu) String(atmega88p) Value(60)
+Enum(avr_mcu) String(atmega8a) Value(60)
 
 EnumValue
-Enum(avr_mcu) String(atmega88pa) Value(61)
+Enum(avr_mcu) String(atmega48) Value(61)
 
 EnumValue
-Enum(avr_mcu) String(atmega8515) Value(62)
+Enum(avr_mcu) String(atmega48a) Value(62)
 
 EnumValue
-Enum(avr_mcu) String(atmega8535) Value(63)
+Enum(avr_mcu) String(atmega48p) Value(63)
 
 EnumValue
-Enum(avr_mcu) String(atmega8hva) Value(64)
+Enum(avr_mcu) String(atmega48pa) Value(64)
 
 EnumValue
-Enum(avr_mcu) String(at90pwm1) Value(65)
+Enum(avr_mcu) String(atmega88) Value(65)
 
 EnumValue
-Enum(avr_mcu) String(at90pwm2) Value(66)
+Enum(avr_mcu) String(atmega88a) Value(66)
 
 EnumValue
-Enum(avr_mcu) String(at90pwm2b) Value(67)
+Enum(avr_mcu) String(atmega88p) Value(67)
 
 EnumValue
-Enum(avr_mcu) String(at90pwm3) Value(68)
+Enum(avr_mcu) String(atmega88pa) Value(68)
 
 EnumValue
-Enum(avr_mcu) String(at90pwm3b) Value(69)
+Enum(avr_mcu) String(atmega8515) Value(69)
 
 EnumValue
-Enum(avr_mcu) String(at90pwm81) Value(70)
+Enum(avr_mcu) String(atmega8535) Value(70)
 
 EnumValue
-Enum(avr_mcu) String(avr5) Value(71)
+Enum(avr_mcu) String(atmega8hva) Value(71)
 
 EnumValue
-Enum(avr_mcu) String(atmega16) Value(72)
+Enum(avr_mcu) String(at90pwm1) Value(72)
 
 EnumValue
-Enum(avr_mcu) String(atmega16a) Value(73)
+Enum(avr_mcu) String(at90pwm2) Value(73)
 
 EnumValue
-Enum(avr_mcu) String(atmega161) Value(74)
+Enum(avr_mcu) String(at90pwm2b) Value(74)
 
 EnumValue
-Enum(avr_mcu) String(atmega162) Value(75)
+Enum(avr_mcu) String(at90pwm3) Value(75)
 
 EnumValue
-Enum(avr_mcu) String(atmega163) Value(76)
+Enum(avr_mcu) String(at90pwm3b) Value(76)
 
 EnumValue
-Enum(avr_mcu) String(atmega164a) Value(77)
+Enum(avr_mcu) String(at90pwm81) Value(77)
 
 EnumValue
-Enum(avr_mcu) String(atmega164p) Value(78)
+Enum(avr_mcu) String(avr5) Value(78)
 
 EnumValue
-Enum(avr_mcu) String(atmega165) Value(79)
+Enum(avr_mcu) String(ata5790) Value(79)
 
 EnumValue
-Enum(avr_mcu) String(atmega165a) Value(80)
+Enum(avr_mcu) String(ata5790n) Value(80)
 
 EnumValue
-Enum(avr_mcu) String(atmega165p) Value(81)
+Enum(avr_mcu) String(ata5795) Value(81)
 
 EnumValue
-Enum(avr_mcu) String(atmega168) Value(82)
+Enum(avr_mcu) String(atmega16) Value(82)
 
 EnumValue
-Enum(avr_mcu) String(atmega168a) Value(83)
+Enum(avr_mcu) String(atmega16a) Value(83)
 
 EnumValue
-Enum(avr_mcu) String(atmega168p) Value(84)
+Enum(avr_mcu) String(atmega161) Value(84)
 
 EnumValue
-Enum(avr_mcu) String(atmega169) Value(85)
+Enum(avr_mcu) String(atmega162) Value(85)
 
 EnumValue
-Enum(avr_mcu) String(atmega169a) Value(86)
+Enum(avr_mcu) String(atmega163) Value(86)
 
 EnumValue
-Enum(avr_mcu) String(atmega169p) Value(87)
+Enum(avr_mcu) String(atmega164a) Value(87)
 
 EnumValue
-Enum(avr_mcu) String(atmega169pa) Value(88)
+Enum(avr_mcu) String(atmega164p) Value(88)
 
 EnumValue
-Enum(avr_mcu) String(atmega32) Value(89)
+Enum(avr_mcu) String(atmega164pa) Value(89)
 
 EnumValue
-Enum(avr_mcu) String(atmega323) Value(90)
+Enum(avr_mcu) String(atmega165) Value(90)
 
 EnumValue
-Enum(avr_mcu) String(atmega324a) Value(91)
+Enum(avr_mcu) String(atmega165a) Value(91)
 
 EnumValue
-Enum(avr_mcu) String(atmega324p) Value(92)
+Enum(avr_mcu) String(atmega165p) Value(92)
 
 EnumValue
-Enum(avr_mcu) String(atmega324pa) Value(93)
+Enum(avr_mcu) String(atmega165pa) Value(93)
 
 EnumValue
-Enum(avr_mcu) String(atmega325) Value(94)
+Enum(avr_mcu) String(atmega168) Value(94)
 
 EnumValue
-Enum(avr_mcu) String(atmega325a) Value(95)
+Enum(avr_mcu) String(atmega168a) Value(95)
 
 EnumValue
-Enum(avr_mcu) String(atmega325p) Value(96)
+Enum(avr_mcu) String(atmega168p) Value(96)
 
 EnumValue
-Enum(avr_mcu) String(atmega3250) Value(97)
+Enum(avr_mcu) String(atmega168pa) Value(97)
 
 EnumValue
-Enum(avr_mcu) String(atmega3250a) Value(98)
+Enum(avr_mcu) String(atmega169) Value(98)
 
 EnumValue
-Enum(avr_mcu) String(atmega3250p) Value(99)
+Enum(avr_mcu) String(atmega169a) Value(99)
 
 EnumValue
-Enum(avr_mcu) String(atmega328) Value(100)
+Enum(avr_mcu) String(atmega169p) Value(100)
 
 EnumValue
-Enum(avr_mcu) String(atmega328p) Value(101)
+Enum(avr_mcu) String(atmega169pa) Value(101)
 
 EnumValue
-Enum(avr_mcu) String(atmega329) Value(102)
+Enum(avr_mcu) String(atmega16hva) Value(102)
 
 EnumValue
-Enum(avr_mcu) String(atmega329a) Value(103)
+Enum(avr_mcu) String(atmega16hvb) Value(103)
 
 EnumValue
-Enum(avr_mcu) String(atmega329p) Value(104)
+Enum(avr_mcu) String(atmega16hvbrevb) Value(104)
 
 EnumValue
-Enum(avr_mcu) String(atmega329pa) Value(105)
+Enum(avr_mcu) String(atmega16m1) Value(105)
 
 EnumValue
-Enum(avr_mcu) String(atmega3290) Value(106)
+Enum(avr_mcu) String(atmega16u4) Value(106)
 
 EnumValue
-Enum(avr_mcu) String(atmega3290a) Value(107)
+Enum(avr_mcu) String(atmega26hvg) Value(107)
 
 EnumValue
-Enum(avr_mcu) String(atmega3290p) Value(108)
+Enum(avr_mcu) String(atmega32a) Value(108)
 
 EnumValue
-Enum(avr_mcu) String(atmega406) Value(109)
+Enum(avr_mcu) String(atmega32) Value(109)
 
 EnumValue
-Enum(avr_mcu) String(atmega64) Value(110)
+Enum(avr_mcu) String(atmega32a) Value(110)
 
 EnumValue
-Enum(avr_mcu) String(atmega640) Value(111)
+Enum(avr_mcu) String(atmega323) Value(111)
 
 EnumValue
-Enum(avr_mcu) String(atmega644) Value(112)
+Enum(avr_mcu) String(atmega324a) Value(112)
 
 EnumValue
-Enum(avr_mcu) String(atmega644a) Value(113)
+Enum(avr_mcu) String(atmega324p) Value(113)
 
 EnumValue
-Enum(avr_mcu) String(atmega644p) Value(114)
+Enum(avr_mcu) String(atmega324pa) Value(114)
 
 EnumValue
-Enum(avr_mcu) String(atmega644pa) Value(115)
+Enum(avr_mcu) String(atmega325) Value(115)
 
 EnumValue
-Enum(avr_mcu) String(atmega645) Value(116)
+Enum(avr_mcu) String(atmega325a) Value(116)
 
 EnumValue
-Enum(avr_mcu) String(atmega645a) Value(117)
+Enum(avr_mcu) String(atmega325p) Value(117)
 
 EnumValue
-Enum(avr_mcu) String(atmega645p) Value(118)
+Enum(avr_mcu) String(atmega3250) Value(118)
 
 EnumValue
-Enum(avr_mcu) String(atmega6450) Value(119)
+Enum(avr_mcu) String(atmega3250a) Value(119)
 
 EnumValue
-Enum(avr_mcu) String(atmega6450a) Value(120)
+Enum(avr_mcu) String(atmega3250p) Value(120)
 
 EnumValue
-Enum(avr_mcu) String(atmega6450p) Value(121)
+Enum(avr_mcu) String(atmega3250pa) Value(121)
 
 EnumValue
-Enum(avr_mcu) String(atmega649) Value(122)
+Enum(avr_mcu) String(atmega328) Value(122)
 
 EnumValue
-Enum(avr_mcu) String(atmega649a) Value(123)
+Enum(avr_mcu) String(atmega328p) Value(123)
 
 EnumValue
-Enum(avr_mcu) String(atmega649p) Value(124)
+Enum(avr_mcu) String(atmega329) Value(124)
 
 EnumValue
-Enum(avr_mcu) String(atmega6490) Value(125)
+Enum(avr_mcu) String(atmega329a) Value(125)
 
 EnumValue
-Enum(avr_mcu) String(atmega16hva) Value(126)
+Enum(avr_mcu) String(atmega329p) Value(126)
 
 EnumValue
-Enum(avr_mcu) String(atmega16hva2) Value(127)
+Enum(avr_mcu) String(atmega329pa) Value(127)
 
 EnumValue
-Enum(avr_mcu) String(atmega16hvb) Value(128)
+Enum(avr_mcu) String(atmega3290) Value(128)
 
 EnumValue
-Enum(avr_mcu) String(atmega32hvb) Value(129)
+Enum(avr_mcu) String(atmega3290a) Value(129)
 
 EnumValue
-Enum(avr_mcu) String(atmega64hve) Value(130)
+Enum(avr_mcu) String(atmega3290p) Value(130)
 
 EnumValue
-Enum(avr_mcu) String(at90can32) Value(131)
+Enum(avr_mcu) String(atmega3290pa) Value(131)
 
 EnumValue
-Enum(avr_mcu) String(at90can64) Value(132)
+Enum(avr_mcu) String(atmega32c1) Value(132)
 
 EnumValue
-Enum(avr_mcu) String(at90pwm216) Value(133)
+Enum(avr_mcu) String(atmega32m1) Value(133)
 
 EnumValue
-Enum(avr_mcu) String(at90pwm316) Value(134)
+Enum(avr_mcu) String(atmega32u4) Value(134)
 
 EnumValue
-Enum(avr_mcu) String(atmega32c1) Value(135)
+Enum(avr_mcu) String(atmega32u6) Value(135)
 
 EnumValue
-Enum(avr_mcu) String(atmega64c1) Value(136)
+Enum(avr_mcu) String(atmega406) Value(136)
 
 EnumValue
-Enum(avr_mcu) String(atmega16m1) Value(137)
+Enum(avr_mcu) String(atmega64) Value(137)
 
 EnumValue
-Enum(avr_mcu) String(atmega32m1) Value(138)
+Enum(avr_mcu) String(atmega64a) Value(138)
 
 EnumValue
-Enum(avr_mcu) String(atmega64m1) Value(139)
+Enum(avr_mcu) String(atmega640) Value(139)
 
 EnumValue
-Enum(avr_mcu) String(atmega16u4) Value(140)
+Enum(avr_mcu) String(atmega644) Value(140)
 
 EnumValue
-Enum(avr_mcu) String(atmega32u4) Value(141)
+Enum(avr_mcu) String(atmega644a) Value(141)
 
 EnumValue
-Enum(avr_mcu) String(atmega32u6) Value(142)
+Enum(avr_mcu) String(atmega644p) Value(142)
 
 EnumValue
-Enum(avr_mcu) String(at90scr100) Value(143)
+Enum(avr_mcu) String(atmega644pa) Value(143)
 
 EnumValue
-Enum(avr_mcu) String(at90usb646) Value(144)
+Enum(avr_mcu) String(atmega645) Value(144)
 
 EnumValue
-Enum(avr_mcu) String(at90usb647) Value(145)
+Enum(avr_mcu) String(atmega645a) Value(145)
 
 EnumValue
-Enum(avr_mcu) String(at94k) Value(146)
+Enum(avr_mcu) String(atmega645p) Value(146)
 
 EnumValue
-Enum(avr_mcu) String(m3000) Value(147)
+Enum(avr_mcu) String(atmega6450) Value(147)
 
 EnumValue
-Enum(avr_mcu) String(avr51) Value(148)
+Enum(avr_mcu) String(atmega6450a) Value(148)
 
 EnumValue
-Enum(avr_mcu) String(atmega128) Value(149)
+Enum(avr_mcu) String(atmega6450p) Value(149)
 
 EnumValue
-Enum(avr_mcu) String(atmega1280) Value(150)
+Enum(avr_mcu) String(atmega649) Value(150)
 
 EnumValue
-Enum(avr_mcu) String(atmega1281) Value(151)
+Enum(avr_mcu) String(atmega649a) Value(151)
 
 EnumValue
-Enum(avr_mcu) String(atmega1284p) Value(152)
+Enum(avr_mcu) String(atmega649p) Value(152)
 
 EnumValue
-Enum(avr_mcu) String(atmega128rfa1) Value(153)
+Enum(avr_mcu) String(atmega6490) Value(153)
 
 EnumValue
-Enum(avr_mcu) String(at90can128) Value(154)
+Enum(avr_mcu) String(atmega16hva) Value(154)
 
 EnumValue
-Enum(avr_mcu) String(at90usb1286) Value(155)
+Enum(avr_mcu) String(atmega16hva2) Value(155)
 
 EnumValue
-Enum(avr_mcu) String(at90usb1287) Value(156)
+Enum(avr_mcu) String(atmega16hvb) Value(156)
 
 EnumValue
-Enum(avr_mcu) String(avr6) Value(157)
+Enum(avr_mcu) String(atmega32hvb) Value(157)
 
 EnumValue
-Enum(avr_mcu) String(atmega2560) Value(158)
+Enum(avr_mcu) String(atmega6490a) Value(158)
 
 EnumValue
-Enum(avr_mcu) String(atmega2561) Value(159)
+Enum(avr_mcu) String(atmega6490p) Value(159)
 
 EnumValue
-Enum(avr_mcu) String(avrxmega2) Value(160)
+Enum(avr_mcu) String(atmega64c1) Value(160)
 
 EnumValue
-Enum(avr_mcu) String(atxmega16a4) Value(161)
+Enum(avr_mcu) String(atmega64m1) Value(161)
 
 EnumValue
-Enum(avr_mcu) String(atxmega16d4) Value(162)
+Enum(avr_mcu) String(atmega64hve) Value(162)
 
 EnumValue
-Enum(avr_mcu) String(atxmega16x1) Value(163)
+Enum(avr_mcu) String(atmega64rfa2) Value(163)
 
 EnumValue
-Enum(avr_mcu) String(atxmega32a4) Value(164)
+Enum(avr_mcu) String(atmega64rfr2) Value(164)
 
 EnumValue
-Enum(avr_mcu) String(atxmega32d4) Value(165)
+Enum(avr_mcu) String(atmega32hvb) Value(165)
 
 EnumValue
-Enum(avr_mcu) String(atxmega32x1) Value(166)
+Enum(avr_mcu) String(atmega32hvbrevb) Value(166)
 
 EnumValue
-Enum(avr_mcu) String(avrxmega4) Value(167)
+Enum(avr_mcu) String(atmega16hva2) Value(167)
 
 EnumValue
-Enum(avr_mcu) String(atxmega64a3) Value(168)
+Enum(avr_mcu) String(atmega48hvf) Value(168)
 
 EnumValue
-Enum(avr_mcu) String(atxmega64d3) Value(169)
+Enum(avr_mcu) String(at90can32) Value(169)
 
 EnumValue
-Enum(avr_mcu) String(avrxmega5) Value(170)
+Enum(avr_mcu) String(at90can64) Value(170)
 
 EnumValue
-Enum(avr_mcu) String(atxmega64a1) Value(171)
+Enum(avr_mcu) String(at90pwm161) Value(171)
 
 EnumValue
-Enum(avr_mcu) String(atxmega64a1u) Value(172)
+Enum(avr_mcu) String(at90pwm216) Value(172)
 
 EnumValue
-Enum(avr_mcu) String(avrxmega6) Value(173)
+Enum(avr_mcu) String(at90pwm316) Value(173)
 
 EnumValue
-Enum(avr_mcu) String(atxmega128a3) Value(174)
+Enum(avr_mcu) String(atmega32c1) Value(174)
 
 EnumValue
-Enum(avr_mcu) String(atxmega128d3) Value(175)
+Enum(avr_mcu) String(atmega64c1) Value(175)
 
 EnumValue
-Enum(avr_mcu) String(atxmega192a3) Value(176)
+Enum(avr_mcu) String(atmega16m1) Value(176)
 
 EnumValue
-Enum(avr_mcu) String(atxmega192d3) Value(177)
+Enum(avr_mcu) String(atmega32m1) Value(177)
 
 EnumValue
-Enum(avr_mcu) String(atxmega256a3) Value(178)
+Enum(avr_mcu) String(atmega64m1) Value(178)
 
 EnumValue
-Enum(avr_mcu) String(atxmega256a3b) Value(179)
+Enum(avr_mcu) String(atmega16u4) Value(179)
 
 EnumValue
-Enum(avr_mcu) String(atxmega256a3bu) Value(180)
+Enum(avr_mcu) String(atmega32u4) Value(180)
 
 EnumValue
-Enum(avr_mcu) String(atxmega256d3) Value(181)
+Enum(avr_mcu) String(atmega32u6) Value(181)
 
 EnumValue
-Enum(avr_mcu) String(avrxmega7) Value(182)
+Enum(avr_mcu) String(at90scr100) Value(182)
 
 EnumValue
-Enum(avr_mcu) String(atxmega128a1) Value(183)
+Enum(avr_mcu) String(at90usb646) Value(183)
 
 EnumValue
-Enum(avr_mcu) String(atxmega128a1u) Value(184)
+Enum(avr_mcu) String(at90usb647) Value(184)
 
 EnumValue
-Enum(avr_mcu) String(avr1) Value(185)
+Enum(avr_mcu) String(at94k) Value(185)
 
 EnumValue
-Enum(avr_mcu) String(at90s1200) Value(186)
+Enum(avr_mcu) String(m3000) Value(186)
 
 EnumValue
-Enum(avr_mcu) String(attiny11) Value(187)
+Enum(avr_mcu) String(avr51) Value(187)
 
 EnumValue
-Enum(avr_mcu) String(attiny12) Value(188)
+Enum(avr_mcu) String(atmega128) Value(188)
 
 EnumValue
-Enum(avr_mcu) String(attiny15) Value(189)
+Enum(avr_mcu) String(atmega128a) Value(189)
 
 EnumValue
-Enum(avr_mcu) String(attiny28) Value(190)
+Enum(avr_mcu) String(atmega1280) Value(190)
+
+EnumValue
+Enum(avr_mcu) String(atmega1281) Value(191)
+
+EnumValue
+Enum(avr_mcu) String(atmega1284) Value(192)
+
+EnumValue
+Enum(avr_mcu) String(atmega1284p) Value(193)
+
+EnumValue
+Enum(avr_mcu) String(atmega128rfa1) Value(194)
+
+EnumValue
+Enum(avr_mcu) String(at90can128) Value(195)
+
+EnumValue
+Enum(avr_mcu) String(at90usb1286) Value(196)
+
+EnumValue
+Enum(avr_mcu) String(at90usb1287) Value(197)
+
+EnumValue
+Enum(avr_mcu) String(avr6) Value(198)
+
+EnumValue
+Enum(avr_mcu) String(atmega2560) Value(199)
+
+EnumValue
+Enum(avr_mcu) String(atmega2561) Value(200)
+
+EnumValue
+Enum(avr_mcu) String(avrxmega2) Value(201)
+
+EnumValue
+Enum(avr_mcu) String(atxmega16a4) Value(202)
+
+EnumValue
+Enum(avr_mcu) String(atxmega16d4) Value(203)
+
+EnumValue
+Enum(avr_mcu) String(atxmega16x1) Value(204)
+
+EnumValue
+Enum(avr_mcu) String(atxmega32a4) Value(205)
+
+EnumValue
+Enum(avr_mcu) String(atxmega32d4) Value(206)
+
+EnumValue
+Enum(avr_mcu) String(atxmega32x1) Value(207)
+
+EnumValue
+Enum(avr_mcu) String(atmxt112sl) Value(208)
+
+EnumValue
+Enum(avr_mcu) String(atmxt224) Value(209)
+
+EnumValue
+Enum(avr_mcu) String(atmxt224e) Value(210)
+
+EnumValue
+Enum(avr_mcu) String(atmxt336s) Value(211)
+
+EnumValue
+Enum(avr_mcu) String(atxmega16a4u) Value(212)
+
+EnumValue
+Enum(avr_mcu) String(atxmega16c4) Value(213)
+
+EnumValue
+Enum(avr_mcu) String(atxmega32a4u) Value(214)
+
+EnumValue
+Enum(avr_mcu) String(atxmega32c4) Value(215)
+
+EnumValue
+Enum(avr_mcu) String(atxmega32e5) Value(216)
+
+EnumValue
+Enum(avr_mcu) String(avrxmega4) Value(217)
+
+EnumValue
+Enum(avr_mcu) String(atxmega64a3) Value(218)
+
+EnumValue
+Enum(avr_mcu) String(atxmega64d3) Value(219)
+
+EnumValue
+Enum(avr_mcu) String(atxmega64a3u) Value(220)
+
+EnumValue
+Enum(avr_mcu) String(atxmega64a4u) Value(221)
+
+EnumValue
+Enum(avr_mcu) String(atxmega64b1) Value(222)
+
+EnumValue
+Enum(avr_mcu) String(atxmega64b3) Value(223)
+
+EnumValue
+Enum(avr_mcu) String(atxmega64c3) Value(224)
+
+EnumValue
+Enum(avr_mcu) String(atxmega64d4) Value(225)
+
+EnumValue
+Enum(avr_mcu) String(avrxmega5) Value(226)
+
+EnumValue
+Enum(avr_mcu) String(atxmega64a1) Value(227)
+
+EnumValue
+Enum(avr_mcu) String(atxmega64a1u) Value(228)
+
+EnumValue
+Enum(avr_mcu) String(avrxmega6) Value(229)
+
+EnumValue
+Enum(avr_mcu) String(atxmega128a3) Value(230)
+
+EnumValue
+Enum(avr_mcu) String(atxmega128d3) Value(231)
+
+EnumValue
+Enum(avr_mcu) String(atxmega192a3) Value(232)
+
+EnumValue
+Enum(avr_mcu) String(atxmega192d3) Value(233)
+
+EnumValue
+Enum(avr_mcu) String(atxmega256a3) Value(234)
+
+EnumValue
+Enum(avr_mcu) String(atxmega256a3b) Value(235)
+
+EnumValue
+Enum(avr_mcu) String(atxmega256a3bu) Value(236)
+
+EnumValue
+Enum(avr_mcu) String(atxmega256d3) Value(237)
+
+EnumValue
+Enum(avr_mcu) String(atxmega128a3u) Value(238)
+
+EnumValue
+Enum(avr_mcu) String(atxmega128b1) Value(239)
+
+EnumValue
+Enum(avr_mcu) String(atxmega128b3) Value(240)
+
+EnumValue
+Enum(avr_mcu) String(atxmega128c3) Value(241)
+
+EnumValue
+Enum(avr_mcu) String(atxmega128d4) Value(242)
+
+EnumValue
+Enum(avr_mcu) String(atmxt540s) Value(243)
+
+EnumValue
+Enum(avr_mcu) String(atmxt540sreva) Value(244)
+
+EnumValue
+Enum(avr_mcu) String(atxmega192a3u) Value(245)
+
+EnumValue
+Enum(avr_mcu) String(atxmega192c3) Value(246)
+
+EnumValue
+Enum(avr_mcu) String(atxmega256a3u) Value(247)
+
+EnumValue
+Enum(avr_mcu) String(atxmega256c3) Value(248)
+
+EnumValue
+Enum(avr_mcu) String(atxmega384c3) Value(249)
+
+EnumValue
+Enum(avr_mcu) String(atxmega384d3) Value(250)
+
+EnumValue
+Enum(avr_mcu) String(avrxmega7) Value(251)
+
+EnumValue
+Enum(avr_mcu) String(atxmega128a1) Value(252)
+
+EnumValue
+Enum(avr_mcu) String(atxmega128a1u) Value(253)
+
+EnumValue
+Enum(avr_mcu) String(atxmega128a4u) Value(254)
+
+EnumValue
+Enum(avr_mcu) String(avr1) Value(255)
+
+EnumValue
+Enum(avr_mcu) String(at90s1200) Value(256)
+
+EnumValue
+Enum(avr_mcu) String(attiny11) Value(257)
+
+EnumValue
+Enum(avr_mcu) String(attiny12) Value(258)
+
+EnumValue
+Enum(avr_mcu) String(attiny15) Value(259)
+
+EnumValue
+Enum(avr_mcu) String(attiny28) Value(260)
 
Index: config/avr/driver-avr.c
===================================================================
--- config/avr/driver-avr.c	(revision 195877)
+++ config/avr/driver-avr.c	(working copy)
@@ -48,10 +48,27 @@  avr_set_current_device (const char *name
   avr_current_arch = &avr_arch_types[avr_current_device->arch];
 }
 
-/* Returns command line parameters that describe the device architecture.  */
+/* Returns command line parameters to pass to as.  */
 
-const char *
-avr_device_to_arch (int argc, const char **argv)
+const char*
+avr_device_to_as (int argc, const char **argv)
+{
+  if (0 == argc)
+    return NULL;
+
+  avr_set_current_device (argv[0]);
+
+  enum avr_arch arch_for_as = avr_current_arch->arch_for_as;
+
+  return concat ("-mmcu=", avr_arch_types[arch_for_as].arch_name,
+                 avr_current_device->errata_skip ? "" : " -mno-skip-bug",
+                 NULL);
+}
+
+/* Returns command line parameters to pass to ld.  */
+
+const char*
+avr_device_to_ld (int argc, const char **argv)
 {
   if (0 == argc)
     return NULL;
Index: config/avr/avr.h
===================================================================
--- config/avr/avr.h	(revision 195877)
+++ config/avr/avr.h	(working copy)
@@ -486,14 +486,16 @@  typedef struct avr_args
 #define ADJUST_INSN_LENGTH(INSN, LENGTH)                \
     (LENGTH = avr_adjust_insn_length (INSN, LENGTH))
 
-extern const char *avr_device_to_arch (int argc, const char **argv);
+extern const char *avr_device_to_as (int argc, const char **argv);
+extern const char *avr_device_to_ld (int argc, const char **argv);
 extern const char *avr_device_to_data_start (int argc, const char **argv);
 extern const char *avr_device_to_startfiles (int argc, const char **argv);
 extern const char *avr_device_to_devicelib (int argc, const char **argv);
 extern const char *avr_device_to_sp8 (int argc, const char **argv);
 
 #define EXTRA_SPEC_FUNCTIONS                            \
-  { "device_to_arch", avr_device_to_arch },             \
+  { "device_to_as", avr_device_to_as },                 \
+  { "device_to_ld", avr_device_to_ld },                 \
   { "device_to_data_start", avr_device_to_data_start }, \
   { "device_to_startfile", avr_device_to_startfiles },  \
   { "device_to_devicelib", avr_device_to_devicelib },   \
@@ -507,14 +509,9 @@  extern const char *avr_device_to_sp8 (in
 #define CC1PLUS_SPEC "%{!frtti:-fno-rtti} \
     %{!fenforce-eh-specs:-fno-enforce-eh-specs} \
     %{!fexceptions:-fno-exceptions}"
-/* A C string constant that tells the GCC driver program options to
-   pass to `cc1plus'.  */
-
-#define ASM_SPEC "%{mmcu=avr25:-mmcu=avr2;mmcu=avr35:-mmcu=avr3;mmcu=avr31:-mmcu=avr3;mmcu=avr51:-mmcu=avr5;\
-mmcu=*:-mmcu=%*} \
-%{mmcu=*:%{!mmcu=avr2:%{!mmcu=at90s8515:%{!mmcu=avr31:%{!mmcu=atmega103:\
--mno-skip-bug}}}}}"
 
+#define ASM_SPEC "%:device_to_as(%{mmcu=*:%*}) "
+  
 #define LINK_SPEC "\
 %{mrelax:--relax\
          %{mpmem-wrap-around:%{mmcu=at90usb8*:--pmem-wrap-around=8k}\
@@ -524,7 +521,7 @@  mmcu=*:-mmcu=%*} \
                              %{mmcu=atmega64*|\
                                mmcu=at90can64*|\
                                mmcu=at90usb64*:--pmem-wrap-around=64k}}}\
-%:device_to_arch(%{mmcu=*:%*})\
+%:device_to_as(%{mmcu=*:%*})\
 %:device_to_data_start(%{mmcu=*:%*})"
 
 #define LIB_SPEC \
Index: doc/avr-mmcu.texi
===================================================================
--- doc/avr-mmcu.texi	(revision 195736)
+++ doc/avr-mmcu.texi	(working copy)
@@ -18,7 +18,7 @@ 
 
 @item avr25
 ``Classic'' devices with up to 8@tie{}KiB of program memory and with the @code{MOVW} instruction.
-@*@var{mcu}@tie{}= @code{ata6289}, @code{attiny13}, @code{attiny13a}, @code{attiny2313}, @code{attiny2313a}, @code{attiny24}, @code{attiny24a}, @code{attiny25}, @code{attiny261}, @code{attiny261a}, @code{attiny43u}, @code{attiny4313}, @code{attiny44}, @code{attiny44a}, @code{attiny45}, @code{attiny461}, @code{attiny461a}, @code{attiny48}, @code{attiny84}, @code{attiny84a}, @code{attiny85}, @code{attiny861}, @code{attiny861a}, @code{attiny87}, @code{attiny88}, @code{at86rf401}.
+@*@var{mcu}@tie{}= @code{ata5272}, @code{ata6289}, @code{attiny13}, @code{attiny13a}, @code{attiny2313}, @code{attiny2313a}, @code{attiny24}, @code{attiny24a}, @code{attiny25}, @code{attiny261}, @code{attiny261a}, @code{attiny43u}, @code{attiny4313}, @code{attiny44}, @code{attiny44a}, @code{attiny45}, @code{attiny461}, @code{attiny461a}, @code{attiny48}, @code{attiny84}, @code{attiny84a}, @code{attiny85}, @code{attiny861}, @code{attiny861a}, @code{attiny87}, @code{attiny88}, @code{at86rf401}.
 
 @item avr3
 ``Classic'' devices with 16@tie{}KiB up to 64@tie{}KiB of  program memory.
@@ -30,19 +30,19 @@ 
 
 @item avr35
 ``Classic'' devices with 16@tie{}KiB up to 64@tie{}KiB of program memory and with the @code{MOVW} instruction.
-@*@var{mcu}@tie{}= @code{atmega16u2}, @code{atmega32u2}, @code{atmega8u2}, @code{attiny167}, @code{at90usb162}, @code{at90usb82}.
+@*@var{mcu}@tie{}= @code{ata5505}, @code{atmega16u2}, @code{atmega32u2}, @code{atmega8u2}, @code{attiny1634}, @code{attiny167}, @code{at90usb162}, @code{at90usb82}.
 
 @item avr4
 ``Enhanced'' devices with up to 8@tie{}KiB of program memory.
-@*@var{mcu}@tie{}= @code{atmega48}, @code{atmega48a}, @code{atmega48p}, @code{atmega8}, @code{atmega8hva}, @code{atmega8515}, @code{atmega8535}, @code{atmega88}, @code{atmega88a}, @code{atmega88p}, @code{atmega88pa}, @code{at90pwm1}, @code{at90pwm2}, @code{at90pwm2b}, @code{at90pwm3}, @code{at90pwm3b}, @code{at90pwm81}.
+@*@var{mcu}@tie{}= @code{ata6285}, @code{ata6286}, @code{atmega48}, @code{atmega48a}, @code{atmega48p}, @code{atmega48pa}, @code{atmega8}, @code{atmega8a}, @code{atmega8hva}, @code{atmega8515}, @code{atmega8535}, @code{atmega88}, @code{atmega88a}, @code{atmega88p}, @code{atmega88pa}, @code{at90pwm1}, @code{at90pwm2}, @code{at90pwm2b}, @code{at90pwm3}, @code{at90pwm3b}, @code{at90pwm81}.
 
 @item avr5
 ``Enhanced'' devices with 16@tie{}KiB up to 64@tie{}KiB of program memory.
-@*@var{mcu}@tie{}= @code{atmega16}, @code{atmega16a}, @code{atmega16hva}, @code{atmega16hva2}, @code{atmega16hvb}, @code{atmega16m1}, @code{atmega16u4}, @code{atmega161}, @code{atmega162}, @code{atmega163}, @code{atmega164a}, @code{atmega164p}, @code{atmega165}, @code{atmega165a}, @code{atmega165p}, @code{atmega168}, @code{atmega168a}, @code{atmega168p}, @code{atmega169}, @code{atmega169a}, @code{atmega169p}, @code{atmega169pa}, @code{atmega32}, @code{atmega32c1}, @code{atmega32hvb}, @code{atmega32m1}, @code{atmega32u4}, @code{atmega32u6}, @code{atmega323}, @code{atmega324a}, @code{atmega324p}, @code{atmega324pa}, @code{atmega325}, @code{atmega325a}, @code{atmega325p}, @code{atmega3250}, @code{atmega3250a}, @code{atmega3250p}, @code{atmega328}, @code{atmega328p}, @code{atmega329}, @code{atmega329a}, @code{atmega329p}, @code{atmega329pa}, @code{atmega3290}, @code{atmega3290a}, @code{atmega3290p}, @code{atmega406}, @code{atmega64}, @code{atmega64c1}, @code{atmega64hve}, @code{atmega64m1}, @code{atmega640}, @code{atmega644}, @code{atmega644a}, @code{atmega644p}, @code{atmega644pa}, @code{atmega645}, @code{atmega645a}, @code{atmega645p}, @code{atmega6450}, @code{atmega6450a}, @code{atmega6450p}, @code{atmega649}, @code{atmega649a}, @code{atmega649p}, @code{atmega6490}, @code{at90can32}, @code{at90can64}, @code{at90pwm216}, @code{at90pwm316}, @code{at90scr100}, @code{at90usb646}, @code{at90usb647}, @code{at94k}, @code{m3000}.
+@*@var{mcu}@tie{}= @code{ata5790}, @code{ata5790n}, @code{ata5795}, @code{atmega16}, @code{atmega16a}, @code{atmega16hva}, @code{atmega16hva}, @code{atmega16hva2}, @code{atmega16hva2}, @code{atmega16hvb}, @code{atmega16hvb}, @code{atmega16hvbrevb}, @code{atmega16m1}, @code{atmega16m1}, @code{atmega16u4}, @code{atmega16u4}, @code{atmega161}, @code{atmega162}, @code{atmega163}, @code{atmega164a}, @code{atmega164p}, @code{atmega164pa}, @code{atmega165}, @code{atmega165a}, @code{atmega165p}, @code{atmega165pa}, @code{atmega168}, @code{atmega168a}, @code{atmega168p}, @code{atmega168pa}, @code{atmega169}, @code{atmega169a}, @code{atmega169p}, @code{atmega169pa}, @code{atmega26hvg}, @code{atmega32}, @code{atmega32a}, @code{atmega32a}, @code{atmega32c1}, @code{atmega32c1}, @code{atmega32hvb}, @code{atmega32hvb}, @code{atmega32hvbrevb}, @code{atmega32m1}, @code{atmega32m1}, @code{atmega32u4}, @code{atmega32u4}, @code{atmega32u6}, @code{atmega32u6}, @code{atmega323}, @code{atmega324a}, @code{atmega324p}, @code{atmega324pa}, @code{atmega325}, @code{atmega325a}, @code{atmega325p}, @code{atmega3250}, @code{atmega3250a}, @code{atmega3250p}, @code{atmega3250pa}, @code{atmega328}, @code{atmega328p}, @code{atmega329}, @code{atmega329a}, @code{atmega329p}, @code{atmega329pa}, @code{atmega3290}, @code{atmega3290a}, @code{atmega3290p}, @code{atmega3290pa}, @code{atmega406}, @code{atmega48hvf}, @code{atmega64}, @code{atmega64a}, @code{atmega64c1}, @code{atmega64c1}, @code{atmega64hve}, @code{atmega64m1}, @code{atmega64m1}, @code{atmega64rfa2}, @code{atmega64rfr2}, @code{atmega640}, @code{atmega644}, @code{atmega644a}, @code{atmega644p}, @code{atmega644pa}, @code{atmega645}, @code{atmega645a}, @code{atmega645p}, @code{atmega6450}, @code{atmega6450a}, @code{atmega6450p}, @code{atmega649}, @code{atmega649a}, @code{atmega649p}, @code{atmega6490}, @code{atmega6490a}, @code{atmega6490p}, @code{at90can32}, @code{at90can64}, @code{at90pwm161}, @code{at90pwm216}, @code{at90pwm316}, @code{at90scr100}, @code{at90usb646}, @code{at90usb647}, @code{at94k}, @code{m3000}.
 
 @item avr51
 ``Enhanced'' devices with 128@tie{}KiB of program memory.
-@*@var{mcu}@tie{}= @code{atmega128}, @code{atmega128rfa1}, @code{atmega1280}, @code{atmega1281}, @code{atmega1284p}, @code{at90can128}, @code{at90usb1286}, @code{at90usb1287}.
+@*@var{mcu}@tie{}= @code{atmega128}, @code{atmega128a}, @code{atmega128rfa1}, @code{atmega1280}, @code{atmega1281}, @code{atmega1284}, @code{atmega1284p}, @code{at90can128}, @code{at90usb1286}, @code{at90usb1287}.
 
 @item avr6
 ``Enhanced'' devices with 3-byte PC, i.e.@: with more than 128@tie{}KiB of program memory.
@@ -50,11 +50,11 @@ 
 
 @item avrxmega2
 ``XMEGA'' devices with more than 8@tie{}KiB and up to 64@tie{}KiB of program memory.
-@*@var{mcu}@tie{}= @code{atxmega16a4}, @code{atxmega16d4}, @code{atxmega16x1}, @code{atxmega32a4}, @code{atxmega32d4}, @code{atxmega32x1}.
+@*@var{mcu}@tie{}= @code{atmxt112sl}, @code{atmxt224}, @code{atmxt224e}, @code{atmxt336s}, @code{atxmega16a4}, @code{atxmega16a4u}, @code{atxmega16c4}, @code{atxmega16d4}, @code{atxmega16x1}, @code{atxmega32a4}, @code{atxmega32a4u}, @code{atxmega32c4}, @code{atxmega32d4}, @code{atxmega32e5}, @code{atxmega32x1}.
 
 @item avrxmega4
 ``XMEGA'' devices with more than 64@tie{}KiB and up to 128@tie{}KiB of program memory.
-@*@var{mcu}@tie{}= @code{atxmega64a3}, @code{atxmega64d3}.
+@*@var{mcu}@tie{}= @code{atxmega64a3}, @code{atxmega64a3u}, @code{atxmega64a4u}, @code{atxmega64b1}, @code{atxmega64b3}, @code{atxmega64c3}, @code{atxmega64d3}, @code{atxmega64d4}.
 
 @item avrxmega5
 ``XMEGA'' devices with more than 64@tie{}KiB and up to 128@tie{}KiB of program memory and more than 64@tie{}KiB of RAM.
@@ -62,11 +62,11 @@ 
 
 @item avrxmega6
 ``XMEGA'' devices with more than 128@tie{}KiB of program memory.
-@*@var{mcu}@tie{}= @code{atxmega128a3}, @code{atxmega128d3}, @code{atxmega192a3}, @code{atxmega192d3}, @code{atxmega256a3}, @code{atxmega256a3b}, @code{atxmega256a3bu}, @code{atxmega256d3}.
+@*@var{mcu}@tie{}= @code{atmxt540s}, @code{atmxt540sreva}, @code{atxmega128a3}, @code{atxmega128a3u}, @code{atxmega128b1}, @code{atxmega128b3}, @code{atxmega128c3}, @code{atxmega128d3}, @code{atxmega128d4}, @code{atxmega192a3}, @code{atxmega192a3u}, @code{atxmega192c3}, @code{atxmega192d3}, @code{atxmega256a3}, @code{atxmega256a3b}, @code{atxmega256a3bu}, @code{atxmega256a3u}, @code{atxmega256c3}, @code{atxmega256d3}, @code{atxmega384c3}, @code{atxmega384d3}.
 
 @item avrxmega7
 ``XMEGA'' devices with more than 128@tie{}KiB of program memory and more than 64@tie{}KiB of RAM.
-@*@var{mcu}@tie{}= @code{atxmega128a1}, @code{atxmega128a1u}.
+@*@var{mcu}@tie{}= @code{atxmega128a1}, @code{atxmega128a1u}, @code{atxmega128a4u}.
 
 @item avr1
 This ISA is implemented by the minimal AVR core and supported for assembler only.