diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c --- gcc/config/avr/avr-devices.c 2011-06-24 10:37:25.000000000 +0530 +++ gcc/config/avr/avr-devices.c 2011-06-24 10:36:43.000000000 +0530 @@ -55,7 +55,7 @@ const struct base_arch_s avr_arch_types[ - avr-libc. */ const struct mcu_type_s avr_mcu_types[] = { - /* Classic, <= 8K. */ + /* Classic, <= 8K, 2-byte PC. */ { "avr2", ARCH_AVR2, NULL, 0, 0x0060, "s8515" }, { "at90s2313", ARCH_AVR2, "__AVR_AT90S2313__", 1, 0x0060, "s2313" }, { "at90s2323", ARCH_AVR2, "__AVR_AT90S2323__", 1, 0x0060, "s2323" }, @@ -69,7 +69,7 @@ const struct mcu_type_s avr_mcu_types[] { "at90s8515", ARCH_AVR2, "__AVR_AT90S8515__", 0, 0x0060, "s8515" }, { "at90c8534", ARCH_AVR2, "__AVR_AT90C8534__", 0, 0x0060, "c8534" }, { "at90s8535", ARCH_AVR2, "__AVR_AT90S8535__", 0, 0x0060, "s8535" }, - /* Classic + MOVW, <= 8K. */ + /* Classic, <= 8K + 2-byte PC + { MOVW/LPMX }. */ { "avr25", ARCH_AVR25, NULL, 0, 0x0060, "tn85" }, { "ata6289", ARCH_AVR25, "__AVR_ATA6289__", 0, 0x0100, "a6289" }, { "attiny13", ARCH_AVR25, "__AVR_ATtiny13__", 1, 0x0060, "tn13" }, @@ -97,15 +97,15 @@ const struct mcu_type_s avr_mcu_types[] { "attiny48", ARCH_AVR25, "__AVR_ATtiny48__", 0, 0x0100, "tn48" }, { "attiny88", ARCH_AVR25, "__AVR_ATtiny88__", 0, 0x0100, "tn88" }, { "at86rf401", ARCH_AVR25, "__AVR_AT86RF401__", 1, 0x0060, "86401" }, - /* Classic, > 8K, <= 64K. */ + /* Classic, > 8K, <= 64K +2-byte PC + { JMP/CALL }. */ { "avr3", ARCH_AVR3, NULL, 0, 0x0060, "43355" }, { "at43usb355", ARCH_AVR3, "__AVR_AT43USB355__", 0, 0x0060, "43355" }, { "at76c711", ARCH_AVR3, "__AVR_AT76C711__", 0, 0x0060, "76711" }, - /* Classic, == 128K. */ + /* Classic, == 128K + 2-byte PC + { JMP/CALL, ELPM }. */ { "avr31", ARCH_AVR31, NULL, 0, 0x0060, "m103" }, { "atmega103", ARCH_AVR31, "__AVR_ATmega103__", 0, 0x0060, "m103" }, { "at43usb320", ARCH_AVR31, "__AVR_AT43USB320__", 0, 0x0060, "43320" }, - /* Classic + MOVW + JMP/CALL. */ + /* Classic, >=16K, <=64K + 2-byte PC + { MOVW/LPMX + JMP/CALL }. */ { "avr35", ARCH_AVR35, NULL, 0, 0x0100, "usb162" }, { "at90usb82", ARCH_AVR35, "__AVR_AT90USB82__", 0, 0x0100, "usb82" }, { "at90usb162", ARCH_AVR35, "__AVR_AT90USB162__", 0, 0x0100, "usb162" }, @@ -114,7 +114,7 @@ const struct mcu_type_s avr_mcu_types[] { "atmega32u2", ARCH_AVR35, "__AVR_ATmega32U2__", 0, 0x0100, "m32u2" }, { "attiny167", ARCH_AVR35, "__AVR_ATtiny167__", 0, 0x0100, "tn167" }, { "attiny1634", ARCH_AVR35, "__AVR_ATtiny1634__", 0, 0x0100, "tn1634" }, - /* Enhanced, <= 8K. */ + /* Enhanced, <= 8K + 2-byte PC + { MOVW/LPMX, MUL }. */ { "avr4", ARCH_AVR4, NULL, 0, 0x0060, "m8" }, { "atmega8", ARCH_AVR4, "__AVR_ATmega8__", 0, 0x0060, "m8" }, { "atmega48", ARCH_AVR4, "__AVR_ATmega48__", 0, 0x0100, "m48" }, @@ -134,7 +134,8 @@ const struct mcu_type_s avr_mcu_types[] { "at90pwm3", ARCH_AVR4, "__AVR_AT90PWM3__", 0, 0x0100, "90pwm3" }, { "at90pwm3b", ARCH_AVR4, "__AVR_AT90PWM3B__", 0, 0x0100, "90pwm3b" }, { "at90pwm81", ARCH_AVR4, "__AVR_AT90PWM81__", 0, 0x0100, "90pwm81" }, - /* Enhanced, > 8K, <= 64K. */ + /* Enhanced, > 8K, <= 64K + 2-byte PC + + { MOVW/LPMX, JMP/CALL, MUL }. */ { "avr5", ARCH_AVR5, NULL, 0, 0x0060, "m16" }, { "at90pwm161", ARCH_AVR5, "__AVR_AT90PWM161__", 1, 0x0100, "90pwm161" }, @@ -229,7 +230,8 @@ const struct mcu_type_s avr_mcu_types[] { "at90usb647", ARCH_AVR5, "__AVR_AT90USB647__", 0, 0x0100, "usb647" }, { "at94k", ARCH_AVR5, "__AVR_AT94K__", 0, 0x0060, "at94k" }, { "m3000", ARCH_AVR5, "__AVR_M3000__", 0, 0x1000, "m3000" }, - /* Enhanced, == 128K. */ + /* Enhanced, == 128K + 2-byte PC + + { MOVW/LPMX, JMP/CALL, MUL, ELPM, ELPMX }. */ { "avr51", ARCH_AVR51, NULL, 0, 0x0100, "m128" }, { "atmega128", ARCH_AVR51, "__AVR_ATmega128__", 0, 0x0100, "m128" }, { "atmega1280", ARCH_AVR51, "__AVR_ATmega1280__", 0, 0x0200, "m1280" }, @@ -239,7 +241,8 @@ const struct mcu_type_s avr_mcu_types[] { "at90can128", ARCH_AVR51, "__AVR_AT90CAN128__", 0, 0x0100, "can128" }, { "at90usb1286", ARCH_AVR51, "__AVR_AT90USB1286__", 0, 0x0100, "usb1286" }, { "at90usb1287", ARCH_AVR51, "__AVR_AT90USB1287__", 0, 0x0100, "usb1286" }, - /* 3-Byte PC. */ +/* Enhanced, ==256K + 3-Byte PC + + { MOVW/LPMX, JMP/CALL, MUL, ELPM, ELPMX }. */ { "avr6", ARCH_AVR6, NULL, 0, 0x0200, "m2561" }, { "atmega2560", ARCH_AVR6, "__AVR_ATmega2560__", 0, 0x0200, "m2560" }, { "atmega2561", ARCH_AVR6, "__AVR_ATmega2561__", 0, 0x0200, "m2561" }, @@ -248,8 +251,10 @@ const struct mcu_type_s avr_mcu_types[] /* Xmega, > 8K, <= 64K FLASH, <= 64K RAM. */ { "avrxmega2", ARCH_AVRXMEGA2, NULL, 0, 0x2000, "x32a4" }, { "atxmega16a4", ARCH_AVRXMEGA2, "__AVR_ATxmega16A4__", 0, 0x2000, "x16a4" }, + { "atxmega16a4u", ARCH_AVRXMEGA2, "__AVR_ATxmega16A4U__", 0, 0x2000, "x16a4u" }, { "atxmega16d4", ARCH_AVRXMEGA2, "__AVR_ATxmega16D4__", 0, 0x2000, "x16d4" }, { "atxmega32a4", ARCH_AVRXMEGA2, "__AVR_ATxmega32A4__", 0, 0x2000, "x32a4" }, + { "atxmega32a4u", ARCH_AVRXMEGA2, "__AVR_ATxmega32A4U__", 0, 0x2000, "x32a4u" }, { "atxmega32d4", ARCH_AVRXMEGA2, "__AVR_ATxmega32D4__", 0, 0x2000, "x32d4" }, { "atxmega32x1", ARCH_AVRXMEGA2, "__AVR_ATxmega32X1__", 0, 0x2000, "x32x1" }, /* Xmega, > 8K, <= 64K FLASH, > 64K RAM. */ @@ -273,7 +278,7 @@ const struct mcu_type_s avr_mcu_types[] { "atxmega256a3b",ARCH_AVRXMEGA6, "__AVR_ATxmega256A3B__", 0, 0x2000, "x256a3b" }, { "atxmega256a3bu", ARCH_AVRXMEGA6, "__AVR_ATxmega256A3BU__", 0, 0x2000, "x256a3bu" }, { "atxmega256d3", ARCH_AVRXMEGA6, "__AVR_ATxmega256D3__", 0, 0x2000, "x256d3" }, - /* Xmega, > 128K, <= 256K FLASH, > 64K RAM. */ + /* Xmega, >= 128K, <= 256K FLASH, > 64K RAM. */ { "avrxmega7", ARCH_AVRXMEGA7, NULL, 0, 0x2000, "x128a1" }, { "atxmega128a1", ARCH_AVRXMEGA7, "__AVR_ATxmega128A1__", 0, 0x2000, "x128a1" }, { "atxmega128a1u", ARCH_AVRXMEGA7, "__AVR_ATxmega128A1U__", 0, 0x2000, "x128a1u" }, diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr --- gcc/config/avr/t-avr 2011-06-24 10:37:25.000000000 +0530 +++ gcc/config/avr/t-avr 2011-06-24 10:36:43.000000000 +0530 @@ -265,9 +265,11 @@ MULTILIB_MATCHES = \ mmcu?avr6=mmcu?atmega2560 \ mmcu?avr6=mmcu?atmega2561 \ mmcu?avrxmega2=mmcu?atxmega16a4 \ + mmcu?avrxmega2=mmcu?atxmega16a4u \ mmcu?avrxmega2=mmcu?atxmega16d4 \ mmcu?avrxmega2=mmcu?atxmega32d4 \ mmcu?avrxmega2=mmcu?atxmega32a4 \ + mmcu?avrxmega2=mmcu?atxmega32a4u \ mmcu?avrxmega2=mmcu?atxmega32x1 \ mmcu?avrxmega4=mmcu?atxmega64a3 \ mmcu?avrxmega4=mmcu?atxmega64d3 \