[packages/crossavr-gcc] Revert "- synchronized patches with official AVR toolchain 3.4.1.830"
baggins
baggins at pld-linux.org
Wed Jun 5 20:23:14 CEST 2013
commit 08a89ff7d38fe715000d058382a9175711f7ddf5
Author: Jan Rękorajski <baggins at pld-linux.org>
Date: Wed Jun 5 20:21:16 2013 +0200
Revert "- synchronized patches with official AVR toolchain 3.4.1.830"
This reverts commit ab7f78a4a6b0448f315db017e24209b62c772e22.
tail of buildlog:
../../../../libgcc/../gcc/libgcc2.c: In function '__mulvhi3':
../../../../libgcc/../gcc/libgcc2.c:161:1: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
302-gcc-avrtiny10.patch | 20 +-
307-gcc-avrtc536.patch | 28 -
308-gcc-avrtc537.patch | 31 -
433-gcc-attiny841.patch => 409-gcc-attiny80.patch | 20 +-
410-gcc-atxmega128a4u.patch | 4 +-
411-gcc-atxmega64d4.patch | 4 +-
412-gcc-atmega164pa_168pa_32a_64a.patch | 14 +-
413-gcc-atxmega64_128_b3.patch | 8 +-
414-gcc-atxmega64b1.patch | 4 +-
415-gcc-atmega_8a_128a_1284.patch | 8 +-
416-gcc-atxmega64a4u.patch | 6 +-
417-gcc-atxmega128d4.patch | 4 +-
418-gcc-atmxt336s.patch | 4 +-
419-gcc-atxmega16c4_32c4_128c3_256c3.patch | 12 +-
420-gcc-atxmega384d3.patch | 4 +-
421-gcc-atmega48hvf.patch | 4 +-
422-gcc-atmega26hvg.patch | 4 +-
423-gcc-atmxt224_224e.patch | 4 +-
424-gcc-atxmega192c3.patch | 4 +-
425-gcc-atmxt112sl.patch | 4 +-
426-gcc-atxmega64c3.patch | 4 +-
427-gcc-ata6285_6286.patch | 4 +-
428-gcc-attiny828.patch | 16 +-
429-gcc-ata5790_5790n_5795.patch | 4 +-
430-gcc-ata5272_ata5505.patch | 4 +-
431-gcc-atmxt540s.patch | 24 -
432-gcc-ata5831.patch | 54 -
434-gcc-atxmega32_16_8e5.patch | 26 -
501-gcc-avrtiny10-bug-12510.patch | 10 +-
503-gcc-bug13789.patch | 18 +-
504-gcc-conditional-register.patch | 10 +-
506-gcc-avrtc541.patch | 42 -
507-gcc-avrtc-518.patch | 23 -
508-gcc-avrtc514-tiny.patch | 12 -
509-gcc-AVRTC-544-call-used-registers-tiny10.patch | 173 --
510-gcc-avrtc496-tiny.patch | 42 -
511-gcc-avrtc539-backported.patch | 44 -
512-gcc-avrtc542.patch | 2753 --------------------
513-gcc-avrtc556-tiny-same-base-and-dest.patch | 130 -
514-gcc-avrtc558.patch | 46 -
515-gcc-avrtc446.patch | 38 -
crossavr-gcc.spec | 108 +-
42 files changed, 139 insertions(+), 3637 deletions(-)
---
diff --git a/crossavr-gcc.spec b/crossavr-gcc.spec
index be8f6ce..fe84950 100644
--- a/crossavr-gcc.spec
+++ b/crossavr-gcc.spec
@@ -10,10 +10,10 @@ Summary(pt_BR.UTF-8): Utilitários para desenvolvimento de binários da GNU - AV
Summary(tr.UTF-8): GNU geliştirme araçları - AVR gcc
Name: crossavr-gcc
Version: 4.6.2
-Release: 5
+Release: 4
Epoch: 1
Patch1: gcc-bug51969.patch
-# Patches 1xx are taken form Atmel official AVR8-GNU toolchain version 3.4.1.830
+# Patches 1xx are taken form Atmel official AVR8-GNU toolchain version 3.4.0.663.
Patch100: 200-gcc-libiberty-Makefile.in.patch
Patch101: 300-gcc-fixedpoint-3-4-2010.patch
Patch102: 301-gcc-xmega-v14.patch
@@ -22,58 +22,43 @@ Patch104: 303-gcc-osmain.patch
Patch105: 304-gcc-builtins-v6.patch
Patch106: 305-gcc-avrtiny10-non-fixedpoint.patch
Patch107: 306-gcc-option-list-devices.patch
-Patch108: 307-gcc-avrtc536.patch
-Patch109: 308-gcc-avrtc537.patch
-Patch110: 400-gcc-new-devices.patch
-Patch111: 401-gcc-atmega32_5_50_90_pa.patch
-Patch112: 402-gcc-attiny1634.patch
-Patch113: 403-gcc-atmega48pa.patch
-Patch114: 404-gcc-atxmega_16_32_a4u.patch
-Patch115: 405-gcc-atxmega64_128_192_256a3u.patch
-Patch116: 406-gcc-atmegarfr2_a2.patch
-Patch117: 407-gcc-atmega165pa.patch
-Patch118: 408-gcc-atxmega384c3.patch
-Patch119: 410-gcc-atxmega128a4u.patch
-Patch120: 411-gcc-atxmega64d4.patch
-Patch121: 412-gcc-atmega164pa_168pa_32a_64a.patch
-Patch122: 413-gcc-atxmega64_128_b3.patch
-Patch123: 414-gcc-atxmega64b1.patch
-Patch124: 415-gcc-atmega_8a_128a_1284.patch
-Patch125: 416-gcc-atxmega64a4u.patch
-Patch126: 417-gcc-atxmega128d4.patch
-Patch127: 418-gcc-atmxt336s.patch
-Patch128: 419-gcc-atxmega16c4_32c4_128c3_256c3.patch
-Patch129: 420-gcc-atxmega384d3.patch
-Patch130: 421-gcc-atmega48hvf.patch
-Patch131: 422-gcc-atmega26hvg.patch
-Patch132: 423-gcc-atmxt224_224e.patch
-Patch133: 424-gcc-atxmega192c3.patch
-Patch134: 425-gcc-atmxt112sl.patch
-Patch135: 426-gcc-atxmega64c3.patch
-Patch136: 427-gcc-ata6285_6286.patch
-Patch137: 428-gcc-attiny828.patch
-Patch138: 429-gcc-ata5790_5790n_5795.patch
-Patch139: 430-gcc-ata5272_ata5505.patch
-Patch140: 431-gcc-atmxt540s.patch
-Patch141: 432-gcc-ata5831.patch
-Patch142: 433-gcc-attiny841.patch
-Patch143: 434-gcc-atxmega32_16_8e5.patch
-Patch144: 500-gcc-bug13473.patch
-Patch145: 501-gcc-avrtiny10-bug-12510.patch
-Patch146: 502-gcc-bug12915.patch
-Patch147: 503-gcc-bug13789.patch
-Patch148: 504-gcc-conditional-register.patch
-Patch149: 505-gcc-avrtc381-tiny.patch
-Patch150: 506-gcc-avrtc541.patch
-Patch151: 507-gcc-avrtc-518.patch
-Patch152: 508-gcc-avrtc514-tiny.patch
-Patch153: 509-gcc-AVRTC-544-call-used-registers-tiny10.patch
-Patch154: 510-gcc-avrtc496-tiny.patch
-Patch155: 511-gcc-avrtc539-backported.patch
-Patch156: 512-gcc-avrtc542.patch
-Patch157: 513-gcc-avrtc556-tiny-same-base-and-dest.patch
-Patch158: 514-gcc-avrtc558.patch
-Patch159: 515-gcc-avrtc446.patch
+Patch108: 400-gcc-new-devices.patch
+Patch109: 401-gcc-atmega32_5_50_90_pa.patch
+Patch110: 402-gcc-attiny1634.patch
+Patch111: 403-gcc-atmega48pa.patch
+Patch112: 404-gcc-atxmega_16_32_a4u.patch
+Patch113: 405-gcc-atxmega64_128_192_256a3u.patch
+Patch114: 406-gcc-atmegarfr2_a2.patch
+Patch115: 407-gcc-atmega165pa.patch
+Patch116: 408-gcc-atxmega384c3.patch
+Patch117: 409-gcc-attiny80.patch
+Patch118: 410-gcc-atxmega128a4u.patch
+Patch119: 411-gcc-atxmega64d4.patch
+Patch120: 412-gcc-atmega164pa_168pa_32a_64a.patch
+Patch121: 413-gcc-atxmega64_128_b3.patch
+Patch122: 414-gcc-atxmega64b1.patch
+Patch123: 415-gcc-atmega_8a_128a_1284.patch
+Patch124: 416-gcc-atxmega64a4u.patch
+Patch125: 417-gcc-atxmega128d4.patch
+Patch126: 418-gcc-atmxt336s.patch
+Patch127: 419-gcc-atxmega16c4_32c4_128c3_256c3.patch
+Patch128: 420-gcc-atxmega384d3.patch
+Patch129: 421-gcc-atmega48hvf.patch
+Patch130: 422-gcc-atmega26hvg.patch
+Patch131: 423-gcc-atmxt224_224e.patch
+Patch132: 424-gcc-atxmega192c3.patch
+Patch133: 425-gcc-atmxt112sl.patch
+Patch134: 426-gcc-atxmega64c3.patch
+Patch135: 427-gcc-ata6285_6286.patch
+Patch136: 428-gcc-attiny828.patch
+Patch137: 429-gcc-ata5790_5790n_5795.patch
+Patch138: 430-gcc-ata5272_ata5505.patch
+Patch139: 500-gcc-bug13473.patch
+Patch140: 501-gcc-avrtiny10-bug-12510.patch
+Patch141: 502-gcc-bug12915.patch
+Patch142: 503-gcc-bug13789.patch
+Patch143: 504-gcc-conditional-register.patch
+Patch144: 505-gcc-avrtc381-tiny.patch
License: GPL
Group: Development/Languages
Source0: ftp://gcc.gnu.org/pub/gcc/releases/gcc-%{version}/gcc-%{version}.tar.bz2
@@ -178,21 +163,6 @@ cd gcc/config/%{target} && %undos -f c,h && cd -
%patch142 -p0
%patch143 -p0
%patch144 -p0
-%patch145 -p0
-%patch146 -p0
-%patch147 -p0
-%patch148 -p0
-%patch149 -p0
-%patch150 -p0
-%patch151 -p0
-%patch152 -p0
-%patch153 -p0
-%patch154 -p0
-%patch155 -p0
-%patch156 -p0
-%patch157 -p0
-%patch158 -p0
-%patch159 -p0
%build
rm -rf obj-%{target}
diff --git a/302-gcc-avrtiny10.patch b/302-gcc-avrtiny10.patch
index 2bab2a4..98ed7ff 100644
--- a/302-gcc-avrtiny10.patch
+++ b/302-gcc-avrtiny10.patch
@@ -217,7 +217,7 @@ diff -Naurp gcc/config/avr/avr.c gcc/config/avr/avr.c
+ AS2 (ld,__tmp_reg__,Y+) CR_TAB
+ AS2 (ld,%B0,Y) CR_TAB
+ AS2 (subi,%A2,lo8(%o1+1)) CR_TAB
-+ AS2 (sbci,%B2,hi8(%o1+1)) CR_TAB
++ AS2 (subi,%B2,hi8(%o1+1)) CR_TAB
+ AS2 (mov,%A0,__tmp_reg__))
+ : (AS2 (ldd,__tmp_reg__,%A1) CR_TAB
+ AS2 (ldd,%B0,%B1) CR_TAB
@@ -228,7 +228,7 @@ diff -Naurp gcc/config/avr/avr.c gcc/config/avr/avr.c
+ AS2 (ld,__tmp_reg__,Z+) CR_TAB
+ AS2 (ld,%B0,Z) CR_TAB
+ AS2 (subi,%A2,lo8(%o1+1)) CR_TAB
-+ AS2 (sbci,%B2,hi8(%o1+1)) CR_TAB
++ AS2 (subi,%B2,hi8(%o1+1)) CR_TAB
+ AS2 (mov,%A0,__tmp_reg__))
+ : (AS2 (ldd,__tmp_reg__,%A1) CR_TAB
AS2 (ldd,%B0,%B1) CR_TAB
@@ -246,7 +246,7 @@ diff -Naurp gcc/config/avr/avr.c gcc/config/avr/avr.c
+ AS2 (ld,%A0,Y+) CR_TAB
+ AS2 (ld,%B0,Y) CR_TAB
+ AS2 (subi,%A2,lo8(%o1+1)) CR_TAB
-+ AS2 (sbci,%B2,hi8(%o1+1)))
++ AS2 (subi,%B2,hi8(%o1+1)))
+ : (AS2 (ldd,%A0,%A1) CR_TAB
+ AS2 (ldd,%B0,%B1));
+ if(REGNO(op[2]) == REG_Z)
@@ -255,7 +255,7 @@ diff -Naurp gcc/config/avr/avr.c gcc/config/avr/avr.c
+ AS2 (ld,%A0,Z+) CR_TAB
+ AS2 (ld,%B0,Z) CR_TAB
+ AS2 (subi,%A2,lo8(%o1+1)) CR_TAB
-+ AS2 (sbci,%B2,hi8(%o1+1)))
++ AS2 (subi,%B2,hi8(%o1+1)))
+ : (AS2 (ldd,%A0,%A1) CR_TAB
AS2 (ldd,%B0,%B1));
+
@@ -571,7 +571,7 @@ diff -Naurp gcc/config/avr/avr.c gcc/config/avr/avr.c
+
+ if(REGNO(op[2]) == REG_Y)
+ return *l=5, AVR_TINY ? (AS2 (subi,%A2,lo8(-(%o1))) CR_TAB
-+ AS2 (sbci,%B2,hi8(-(%o1))) CR_TAB
++ AS2 (subi,%B2,hi8(-(%o1))) CR_TAB
+ AS2 (ld,%A0,Y+) CR_TAB
+ AS2 (ld,%B0,Y+) CR_TAB
+ AS2 (ld,__tmp_reg__,Y+) CR_TAB
@@ -587,7 +587,7 @@ diff -Naurp gcc/config/avr/avr.c gcc/config/avr/avr.c
- return *l=4, (AS2 (ldd,%A0,%A1) CR_TAB
+ if(REGNO(op[2]) == REG_Z)
+ return *l=5, AVR_TINY ? (AS2 (subi,%A2,lo8(-(%o1))) CR_TAB
-+ AS2 (sbci,%B2,hi8(-(%o1))) CR_TAB
++ AS2 (subi,%B2,hi8(-(%o1))) CR_TAB
+ AS2 (ld,%A0,Z+) CR_TAB
+ AS2 (ld,%B0,Z+) CR_TAB
+ AS2 (ld,__tmp_reg__,Z+) CR_TAB
@@ -604,7 +604,7 @@ diff -Naurp gcc/config/avr/avr.c gcc/config/avr/avr.c
+ op[2] = XEXP(base, 0);
+ if(REGNO(op[2]) == REG_Y)
+ return *l=4, AVR_TINY ? (AS2 (subi,%A2,lo8(-(%o1))) CR_TAB
-+ AS2 (sbci,%B2,hi8(-(%o1))) CR_TAB
++ AS2 (subi,%B2,hi8(-(%o1))) CR_TAB
+ AS2 (ld,%A0,Y+) CR_TAB
+ AS2 (ld,%B0,Y+) CR_TAB
+ AS2 (ld,%C0,Y+) CR_TAB
@@ -617,7 +617,7 @@ diff -Naurp gcc/config/avr/avr.c gcc/config/avr/avr.c
+ AS2 (ldd,%D0,%D1));
+ if(REGNO(op[2]) == REG_Z)
+ return *l=4, AVR_TINY ? (AS2 (subi,%A2,lo8(-(%o1))) CR_TAB
-+ AS2 (sbci,%B2,hi8(-(%o1))) CR_TAB
++ AS2 (subi,%B2,hi8(-(%o1))) CR_TAB
+ AS2 (ld,%A0,Z+) CR_TAB
+ AS2 (ld,%B0,Z+) CR_TAB
+ AS2 (ld,%C0,Z+) CR_TAB
@@ -1203,8 +1203,8 @@ diff -Naurp gcc/config/avr/avr.c gcc/config/avr/avr.c
+ : (AS2 (std,%B0,%B1) CR_TAB
AS2 (std,%A0,%A1));
+ if(REGNO(op[2]) == REG_Z)
-+ return *l=2, AVR_TINY ? (AS2 (subi,%A2,lo8(-(%o0+2))) CR_TAB
-+ AS2 (sbci,%B2,hi8(-(%o0+2))) CR_TAB
++ return *l=2, AVR_TINY ? (AS2 (subi,%A2,lo8(-(%o0+1))) CR_TAB
++ AS2 (sbci,%B2,hi8(-(%o0+1))) CR_TAB
+ AS2 (st,-Z,%B1) CR_TAB
+ AS2 (st,-Z,%A1) CR_TAB
+ AS2 (subi,%A2,lo8(%o0)) CR_TAB
diff --git a/307-gcc-avrtc536.patch b/307-gcc-avrtc536.patch
deleted file mode 100644
index e520a9d..0000000
--- a/307-gcc-avrtc536.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-diff -Naurp gcc/config/avr/avr-c.c gcc/config/avr/avr-c.c
---- gcc/config/avr/avr-c.c 2012-05-30 14:46:12.000000000 +0530
-+++ gcc/config/avr/avr-c.c 2012-06-06 13:00:15.000000000 +0530
-@@ -95,8 +95,22 @@ avr_cpu_cpp_builtins (struct cpp_reader
- }
-
- if (avr_current_arch->avrtiny)
-- {
-+ {
- cpp_define (pfile, "__AVR_TINY__");
-- }
-+
-+ /*
-+ Define macro "__AVR_TINY_PM_BASE_ADDRESS__" with mapped program memory
-+ start address. This macro shall be referred where mapped program memory
-+ is accessed. (Eg. copying data section (do_copy_data) contents to data
-+ memory region.
-+ NOTE:
-+ Program memory of AVR_TINY devices can not be accessed directly, it has
-+ been mapped to the data memory. For AVR_TINY devices (ATtiny4/ 5/ 9/ 10/
-+ 20 and 40) mapped program memory starts at 0x4000.
-+ */
-+ cpp_define (pfile, "__AVR_TINY_PM_BASE_ADDRESS__=0x4000");
-+ }
-+
-+
- }
-
diff --git a/308-gcc-avrtc537.patch b/308-gcc-avrtc537.patch
deleted file mode 100644
index 676a892..0000000
--- a/308-gcc-avrtc537.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-diff -Naurp gcc/config/avr/libgcc.S gcc/config/avr/libgcc.S
---- gcc/config/avr/libgcc.S 2012-05-29 16:32:53.000000000 +0530
-+++ gcc/config/avr/libgcc.S 2012-06-04 18:31:55.000000000 +0530
-@@ -782,7 +782,26 @@ __tablejump__:
- #endif /* defined (L_tablejump) */
- #endif
-
--#if !defined(__AVR_TINY__)
-+#if defined(__AVR_TINY__)
-+#ifdef L_copy_data
-+ .section .init4,"ax", at progbits
-+ .global __do_copy_data
-+__do_copy_data:
-+ ldi r18, hi8(__data_end)
-+ ldi r26, lo8(__data_start)
-+ ldi r27, hi8(__data_start)
-+ ldi r30, lo8(__data_load_start + __AVR_TINY_PM_BASE_ADDRESS__)
-+ ldi r31, hi8(__data_load_start + __AVR_TINY_PM_BASE_ADDRESS__)
-+ rjmp .L__do_copy_data_start
-+.L__do_copy_data_loop:
-+ ld r19, z+
-+ st X+, r19
-+.L__do_copy_data_start:
-+ cpi r26, lo8(__data_end)
-+ cpc r27, r18
-+ brne .L__do_copy_data_loop
-+#endif
-+#else
- #ifdef L_copy_data
- .section .init4,"ax", at progbits
- .global __do_copy_data
diff --git a/433-gcc-attiny841.patch b/409-gcc-attiny80.patch
similarity index 54%
rename from 433-gcc-attiny841.patch
rename to 409-gcc-attiny80.patch
index f846bfd..c109b09 100644
--- a/433-gcc-attiny841.patch
+++ b/409-gcc-attiny80.patch
@@ -1,22 +1,22 @@
diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
---- gcc/config/avr/avr-devices.c 2012-06-12 11:41:02.000000000 +0530
-+++ gcc/config/avr/avr-devices.c 2012-06-12 11:48:03.000000000 +0530
-@@ -99,6 +99,7 @@ const struct mcu_type_s avr_mcu_types[]
+--- gcc/config/avr/avr-devices.c 2011-10-28 11:44:14.000000000 +0530
++++ gcc/config/avr/avr-devices.c 2011-10-28 11:55:44.000000000 +0530
+@@ -96,6 +96,7 @@ const struct mcu_type_s avr_mcu_types[]
+ { "attiny87", ARCH_AVR25, "__AVR_ATtiny87__", 0, 0x0100, "tn87" },
{ "attiny48", ARCH_AVR25, "__AVR_ATtiny48__", 0, 0x0100, "tn48" },
{ "attiny88", ARCH_AVR25, "__AVR_ATtiny88__", 0, 0x0100, "tn88" },
- { "attiny828", ARCH_AVR25, "__AVR_ATtiny828__", 0, 0x0100, "tn828" },
-+ { "attiny841", ARCH_AVR25, "__AVR_ATtiny841__", 0, 0x0100, "tn841" },
++ { "attiny80", ARCH_AVR25, "__AVR_ATtiny80__", 0, 0x0100, "tn80" },
{ "at86rf401", ARCH_AVR25, "__AVR_AT86RF401__", 1, 0x0060, "86401" },
/* Classic, > 8K, <= 64K +2-byte PC + { JMP/CALL }. */
{ "avr3", ARCH_AVR3, NULL, 0, 0x0060, "43355" },
diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
---- gcc/config/avr/t-avr 2012-06-12 11:41:02.000000000 +0530
-+++ gcc/config/avr/t-avr 2012-06-12 11:45:26.000000000 +0530
-@@ -140,6 +140,7 @@ MULTILIB_MATCHES = \
+--- gcc/config/avr/t-avr 2011-10-28 11:40:24.000000000 +0530
++++ gcc/config/avr/t-avr 2011-10-28 11:55:44.000000000 +0530
+@@ -138,6 +138,7 @@ MULTILIB_MATCHES = \
+ mmcu?avr25=mmcu?attiny87 \
mmcu?avr25=mmcu?attiny48 \
mmcu?avr25=mmcu?attiny88 \
- mmcu?avr25=mmcu?attiny828 \
-+ mmcu?avr25=mmcu?attiny841 \
++ mmcu?avr25=mmcu?attiny80 \
mmcu?avr25=mmcu?at86rf401 \
mmcu?avr3=mmcu?at43usb355 \
mmcu?avr3=mmcu?at76c711 \
diff --git a/410-gcc-atxmega128a4u.patch b/410-gcc-atxmega128a4u.patch
index 000880e..0f5be09 100644
--- a/410-gcc-atxmega128a4u.patch
+++ b/410-gcc-atxmega128a4u.patch
@@ -1,7 +1,7 @@
diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
--- gcc/config/avr/avr-devices.c 2011-10-28 11:55:44.000000000 +0530
+++ gcc/config/avr/avr-devices.c 2011-10-28 12:00:41.000000000 +0530
-@@ -294,6 +294,7 @@ const struct mcu_type_s avr_mcu_types[]
+@@ -295,6 +295,7 @@ const struct mcu_type_s avr_mcu_types[]
{ "avrxmega7", ARCH_AVRXMEGA7, NULL, 0, 0x2000, "x128a1" },
{ "atxmega128a1", ARCH_AVRXMEGA7, "__AVR_ATxmega128A1__", 0, 0x2000, "x128a1" },
{ "atxmega128a1u", ARCH_AVRXMEGA7, "__AVR_ATxmega128A1U__", 0, 0x2000, "x128a1u" },
@@ -12,7 +12,7 @@ diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
--- gcc/config/avr/t-avr 2011-10-28 11:55:44.000000000 +0530
+++ gcc/config/avr/t-avr 2011-10-28 12:00:41.000000000 +0530
-@@ -298,6 +298,7 @@ MULTILIB_MATCHES = \
+@@ -299,6 +299,7 @@ MULTILIB_MATCHES = \
mmcu?avrxmega6=mmcu?atxmega384c3 \
mmcu?avrxmega7=mmcu?atxmega128a1 \
mmcu?avrxmega7=mmcu?atxmega128a1u \
diff --git a/411-gcc-atxmega64d4.patch b/411-gcc-atxmega64d4.patch
index d1f625d..320397d 100644
--- a/411-gcc-atxmega64d4.patch
+++ b/411-gcc-atxmega64d4.patch
@@ -1,7 +1,7 @@
diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
--- gcc/config/avr/avr-devices.c 2011-10-28 12:00:41.000000000 +0530
+++ gcc/config/avr/avr-devices.c 2011-10-28 12:06:09.000000000 +0530
-@@ -271,6 +271,7 @@ const struct mcu_type_s avr_mcu_types[]
+@@ -272,6 +272,7 @@ const struct mcu_type_s avr_mcu_types[]
{ "atxmega64a3", ARCH_AVRXMEGA4, "__AVR_ATxmega64A3__", 0, 0x2000, "x64a3" },
{ "atxmega64a3u", ARCH_AVRXMEGA4, "__AVR_ATxmega64A3U__", 0, 0x2000, "x64a3u"},
{ "atxmega64d3", ARCH_AVRXMEGA4, "__AVR_ATxmega64D3__", 0, 0x2000, "x64d3" },
@@ -12,7 +12,7 @@ diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
--- gcc/config/avr/t-avr 2011-10-28 12:00:41.000000000 +0530
+++ gcc/config/avr/t-avr 2011-10-28 12:04:00.000000000 +0530
-@@ -281,6 +281,7 @@ MULTILIB_MATCHES = \
+@@ -282,6 +282,7 @@ MULTILIB_MATCHES = \
mmcu?avrxmega4=mmcu?atxmega64a3 \
mmcu?avrxmega4=mmcu?atxmega64a3u \
mmcu?avrxmega4=mmcu?atxmega64d3 \
diff --git a/412-gcc-atmega164pa_168pa_32a_64a.patch b/412-gcc-atmega164pa_168pa_32a_64a.patch
index 6d07827..0a08fe8 100644
--- a/412-gcc-atmega164pa_168pa_32a_64a.patch
+++ b/412-gcc-atmega164pa_168pa_32a_64a.patch
@@ -1,7 +1,7 @@
diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
--- gcc/config/avr/avr-devices.c 2011-10-28 12:06:09.000000000 +0530
+++ gcc/config/avr/avr-devices.c 2011-10-28 12:15:49.000000000 +0530
-@@ -146,6 +146,7 @@ const struct mcu_type_s avr_mcu_types[]
+@@ -147,6 +147,7 @@ const struct mcu_type_s avr_mcu_types[]
{ "atmega163", ARCH_AVR5, "__AVR_ATmega163__", 0, 0x0060, "m163" },
{ "atmega164a", ARCH_AVR5, "__AVR_ATmega164A__", 0, 0x0100, "m164a" },
{ "atmega164p", ARCH_AVR5, "__AVR_ATmega164P__", 0, 0x0100, "m164p" },
@@ -9,7 +9,7 @@ diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
{ "atmega165", ARCH_AVR5, "__AVR_ATmega165__", 0, 0x0100, "m165" },
{ "atmega165a", ARCH_AVR5, "__AVR_ATmega165A__", 0, 0x0100, "m165a" },
{ "atmega165p", ARCH_AVR5, "__AVR_ATmega165P__", 0, 0x0100, "m165p" },
-@@ -153,6 +154,7 @@ const struct mcu_type_s avr_mcu_types[]
+@@ -154,6 +155,7 @@ const struct mcu_type_s avr_mcu_types[]
{ "atmega168", ARCH_AVR5, "__AVR_ATmega168__", 0, 0x0100, "m168" },
{ "atmega168a", ARCH_AVR5, "__AVR_ATmega168A__", 0, 0x0100, "m168a" },
{ "atmega168p", ARCH_AVR5, "__AVR_ATmega168P__", 0, 0x0100, "m168p" },
@@ -17,7 +17,7 @@ diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
{ "atmega169", ARCH_AVR5, "__AVR_ATmega169__", 0, 0x0100, "m169" },
{ "atmega169a", ARCH_AVR5, "__AVR_ATmega169A__", 0, 0x0100, "m169a" },
{ "atmega169p", ARCH_AVR5, "__AVR_ATmega169P__", 0, 0x0100, "m169p" },
-@@ -163,6 +165,7 @@ const struct mcu_type_s avr_mcu_types[]
+@@ -164,6 +166,7 @@ const struct mcu_type_s avr_mcu_types[]
{ "atmega16m1", ARCH_AVR5, "__AVR_ATmega16M1__", 0, 0x0100, "m16m1" },
{ "atmega16u4", ARCH_AVR5, "__AVR_ATmega16U4__", 0, 0x0100, "m16u4" },
{ "atmega32", ARCH_AVR5, "__AVR_ATmega32__", 0, 0x0060, "m32" },
@@ -25,7 +25,7 @@ diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
{ "atmega323", ARCH_AVR5, "__AVR_ATmega323__", 0, 0x0060, "m323" },
{ "atmega324a", ARCH_AVR5, "__AVR_ATmega324A__", 0, 0x0100, "m324a" },
{ "atmega324p", ARCH_AVR5, "__AVR_ATmega324P__", 0, 0x0100, "m324p" },
-@@ -191,6 +194,7 @@ const struct mcu_type_s avr_mcu_types[]
+@@ -192,6 +195,7 @@ const struct mcu_type_s avr_mcu_types[]
{ "atmega32u6", ARCH_AVR5, "__AVR_ATmega32U6__", 0, 0x0100, "m32u6" },
{ "atmega406", ARCH_AVR5, "__AVR_ATmega406__", 0, 0x0100, "m406" },
{ "atmega64", ARCH_AVR5, "__AVR_ATmega64__", 0, 0x0100, "m64" },
@@ -36,7 +36,7 @@ diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
--- gcc/config/avr/t-avr 2011-10-28 12:04:00.000000000 +0530
+++ gcc/config/avr/t-avr 2011-10-28 12:15:49.000000000 +0530
-@@ -177,6 +177,7 @@ MULTILIB_MATCHES = \
+@@ -178,6 +178,7 @@ MULTILIB_MATCHES = \
mmcu?avr5=mmcu?atmega163 \
mmcu?avr5=mmcu?atmega164a \
mmcu?avr5=mmcu?atmega164p \
@@ -44,7 +44,7 @@ diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
mmcu?avr5=mmcu?atmega165 \
mmcu?avr5=mmcu?atmega165a \
mmcu?avr5=mmcu?atmega165p \
-@@ -184,11 +185,13 @@ MULTILIB_MATCHES = \
+@@ -185,11 +186,13 @@ MULTILIB_MATCHES = \
mmcu?avr5=mmcu?atmega168 \
mmcu?avr5=mmcu?atmega168a \
mmcu?avr5=mmcu?atmega168p \
@@ -58,7 +58,7 @@ diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
mmcu?avr5=mmcu?atmega323 \
mmcu?avr5=mmcu?atmega324a \
mmcu?avr5=mmcu?atmega324p \
-@@ -215,6 +218,7 @@ MULTILIB_MATCHES = \
+@@ -216,6 +219,7 @@ MULTILIB_MATCHES = \
mmcu?avr5=mmcu?atmega64rfa2 \
mmcu?avr5=mmcu?atmega64rfr2 \
mmcu?avr5=mmcu?atmega64 \
diff --git a/413-gcc-atxmega64_128_b3.patch b/413-gcc-atxmega64_128_b3.patch
index 63a414b..3f3bb54 100644
--- a/413-gcc-atxmega64_128_b3.patch
+++ b/413-gcc-atxmega64_128_b3.patch
@@ -1,7 +1,7 @@
diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
--- gcc/config/avr/avr-devices.c 2011-10-28 12:15:49.000000000 +0530
+++ gcc/config/avr/avr-devices.c 2011-10-28 14:31:05.000000000 +0530
-@@ -274,6 +274,7 @@ const struct mcu_type_s avr_mcu_types[]
+@@ -275,6 +275,7 @@ const struct mcu_type_s avr_mcu_types[]
{ "avrxmega4", ARCH_AVRXMEGA4, NULL, 0, 0x2000, "x64d3" },
{ "atxmega64a3", ARCH_AVRXMEGA4, "__AVR_ATxmega64A3__", 0, 0x2000, "x64a3" },
{ "atxmega64a3u", ARCH_AVRXMEGA4, "__AVR_ATxmega64A3U__", 0, 0x2000, "x64a3u"},
@@ -9,7 +9,7 @@ diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
{ "atxmega64d3", ARCH_AVRXMEGA4, "__AVR_ATxmega64D3__", 0, 0x2000, "x64d3" },
{ "atxmega64d4", ARCH_AVRXMEGA4, "__AVR_ATxmega64D4__", 0, 0x2000, "x64d4" },
/* Xmega, > 64K, <= 128K FLASH, > 64K RAM. */
-@@ -285,6 +286,7 @@ const struct mcu_type_s avr_mcu_types[]
+@@ -286,6 +287,7 @@ const struct mcu_type_s avr_mcu_types[]
{ "atxmega128a3", ARCH_AVRXMEGA6, "__AVR_ATxmega128A3__", 0, 0x2000, "x128a3" },
{ "atxmega128a3u",ARCH_AVRXMEGA6, "__AVR_ATxmega128A3U__", 0, 0x2000, "x128a3u"},
{ "atxmega128b1", ARCH_AVRXMEGA6, "__AVR_ATxmega128B1__", 0, 0x2000, "x128b1" },
@@ -20,7 +20,7 @@ diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
--- gcc/config/avr/t-avr 2011-10-28 12:15:49.000000000 +0530
+++ gcc/config/avr/t-avr 2011-10-28 14:31:05.000000000 +0530
-@@ -284,6 +284,7 @@ MULTILIB_MATCHES = \
+@@ -285,6 +285,7 @@ MULTILIB_MATCHES = \
mmcu?avrxmega2=mmcu?atxmega32x1 \
mmcu?avrxmega4=mmcu?atxmega64a3 \
mmcu?avrxmega4=mmcu?atxmega64a3u \
@@ -28,7 +28,7 @@ diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
mmcu?avrxmega4=mmcu?atxmega64d3 \
mmcu?avrxmega4=mmcu?atxmega64d4 \
mmcu?avrxmega5=mmcu?atxmega64a1 \
-@@ -291,6 +292,7 @@ MULTILIB_MATCHES = \
+@@ -292,6 +293,7 @@ MULTILIB_MATCHES = \
mmcu?avrxmega6=mmcu?atxmega128a3 \
mmcu?avrxmega6=mmcu?atxmega128a3u \
mmcu?avrxmega6=mmcu?atxmega128b1 \
diff --git a/414-gcc-atxmega64b1.patch b/414-gcc-atxmega64b1.patch
index 12302b3..8a65026 100644
--- a/414-gcc-atxmega64b1.patch
+++ b/414-gcc-atxmega64b1.patch
@@ -1,7 +1,7 @@
diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
--- gcc/config/avr/avr-devices.c 2011-10-28 14:31:05.000000000 +0530
+++ gcc/config/avr/avr-devices.c 2011-10-28 14:34:49.000000000 +0530
-@@ -274,6 +274,7 @@ const struct mcu_type_s avr_mcu_types[]
+@@ -275,6 +275,7 @@ const struct mcu_type_s avr_mcu_types[]
{ "avrxmega4", ARCH_AVRXMEGA4, NULL, 0, 0x2000, "x64d3" },
{ "atxmega64a3", ARCH_AVRXMEGA4, "__AVR_ATxmega64A3__", 0, 0x2000, "x64a3" },
{ "atxmega64a3u", ARCH_AVRXMEGA4, "__AVR_ATxmega64A3U__", 0, 0x2000, "x64a3u"},
@@ -12,7 +12,7 @@ diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
--- gcc/config/avr/t-avr 2011-10-28 14:31:05.000000000 +0530
+++ gcc/config/avr/t-avr 2011-10-28 14:34:49.000000000 +0530
-@@ -284,6 +284,7 @@ MULTILIB_MATCHES = \
+@@ -285,6 +285,7 @@ MULTILIB_MATCHES = \
mmcu?avrxmega2=mmcu?atxmega32x1 \
mmcu?avrxmega4=mmcu?atxmega64a3 \
mmcu?avrxmega4=mmcu?atxmega64a3u \
diff --git a/415-gcc-atmega_8a_128a_1284.patch b/415-gcc-atmega_8a_128a_1284.patch
index 034f664..98c9d40 100644
--- a/415-gcc-atmega_8a_128a_1284.patch
+++ b/415-gcc-atmega_8a_128a_1284.patch
@@ -1,7 +1,7 @@
diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
--- gcc/config/avr/avr-devices.c 2011-10-28 14:34:49.000000000 +0530
+++ gcc/config/avr/avr-devices.c 2011-10-28 14:39:27.000000000 +0530
-@@ -117,6 +117,7 @@ const struct mcu_type_s avr_mcu_types[]
+@@ -118,6 +118,7 @@ const struct mcu_type_s avr_mcu_types[]
/* Enhanced, <= 8K + 2-byte PC + { MOVW/LPMX, MUL }. */
{ "avr4", ARCH_AVR4, NULL, 0, 0x0060, "m8" },
{ "atmega8", ARCH_AVR4, "__AVR_ATmega8__", 0, 0x0060, "m8" },
@@ -9,7 +9,7 @@ diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
{ "atmega48", ARCH_AVR4, "__AVR_ATmega48__", 0, 0x0100, "m48" },
{ "atmega48a", ARCH_AVR4, "__AVR_ATmega48A__", 0, 0x0100, "m48a" },
{ "atmega48pa", ARCH_AVR4, "__AVR_ATmega48PA__", 0, 0x0100, "m48pa" },
-@@ -241,8 +242,10 @@ const struct mcu_type_s avr_mcu_types[]
+@@ -242,8 +243,10 @@ const struct mcu_type_s avr_mcu_types[]
{ MOVW/LPMX, JMP/CALL, MUL, ELPM, ELPMX }. */
{ "avr51", ARCH_AVR51, NULL, 0, 0x0100, "m128" },
{ "atmega128", ARCH_AVR51, "__AVR_ATmega128__", 0, 0x0100, "m128" },
@@ -23,7 +23,7 @@ diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
--- gcc/config/avr/t-avr 2011-10-28 14:55:08.000000000 +0530
+++ gcc/config/avr/t-avr 2011-10-28 14:52:10.000000000 +0530
-@@ -156,6 +156,7 @@ MULTILIB_MATCHES = \
+@@ -157,6 +157,7 @@ MULTILIB_MATCHES = \
mmcu?avr4=mmcu?atmega48pa \
mmcu?avr4=mmcu?atmega48p \
mmcu?avr4=mmcu?atmega8 \
@@ -31,7 +31,7 @@ diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
mmcu?avr4=mmcu?atmega8515 \
mmcu?avr4=mmcu?atmega8535 \
mmcu?avr4=mmcu?atmega88 \
-@@ -262,8 +263,10 @@ MULTILIB_MATCHES = \
+@@ -263,8 +264,10 @@ MULTILIB_MATCHES = \
mmcu?avr5=mmcu?at94k \
mmcu?avr5=mmcu?m3000 \
mmcu?avr51=mmcu?atmega128 \
diff --git a/416-gcc-atxmega64a4u.patch b/416-gcc-atxmega64a4u.patch
index 7c997d1..03dde6b 100644
--- a/416-gcc-atxmega64a4u.patch
+++ b/416-gcc-atxmega64a4u.patch
@@ -1,7 +1,7 @@
diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
--- gcc/config/avr/avr-devices.c 2011-10-28 14:39:27.000000000 +0530
+++ gcc/config/avr/avr-devices.c 2011-10-28 14:59:12.000000000 +0530
-@@ -277,6 +277,7 @@ const struct mcu_type_s avr_mcu_types[]
+@@ -278,6 +278,7 @@ const struct mcu_type_s avr_mcu_types[]
{ "avrxmega4", ARCH_AVRXMEGA4, NULL, 0, 0x2000, "x64d3" },
{ "atxmega64a3", ARCH_AVRXMEGA4, "__AVR_ATxmega64A3__", 0, 0x2000, "x64a3" },
{ "atxmega64a3u", ARCH_AVRXMEGA4, "__AVR_ATxmega64A3U__", 0, 0x2000, "x64a3u"},
@@ -12,7 +12,7 @@ diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
--- gcc/config/avr/t-avr 2011-10-28 14:52:10.000000000 +0530
+++ gcc/config/avr/t-avr 2011-10-28 14:59:12.000000000 +0530
-@@ -287,6 +287,7 @@ MULTILIB_MATCHES = \
+@@ -288,6 +288,7 @@ MULTILIB_MATCHES = \
mmcu?avrxmega2=mmcu?atxmega32x1 \
mmcu?avrxmega4=mmcu?atxmega64a3 \
mmcu?avrxmega4=mmcu?atxmega64a3u \
@@ -20,5 +20,3 @@ diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
mmcu?avrxmega4=mmcu?atxmega64b1 \
mmcu?avrxmega4=mmcu?atxmega64b3 \
mmcu?avrxmega4=mmcu?atxmega64d3 \
-
-4
diff --git a/417-gcc-atxmega128d4.patch b/417-gcc-atxmega128d4.patch
index 0f5d94d..af9222b 100644
--- a/417-gcc-atxmega128d4.patch
+++ b/417-gcc-atxmega128d4.patch
@@ -1,7 +1,7 @@
diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
--- gcc/config/avr/avr-devices.c 2011-10-28 14:59:12.000000000 +0530
+++ gcc/config/avr/avr-devices.c 2011-10-28 15:04:23.000000000 +0530
-@@ -293,6 +293,7 @@ const struct mcu_type_s avr_mcu_types[]
+@@ -294,6 +294,7 @@ const struct mcu_type_s avr_mcu_types[]
{ "atxmega128b1", ARCH_AVRXMEGA6, "__AVR_ATxmega128B1__", 0, 0x2000, "x128b1" },
{ "atxmega128b3", ARCH_AVRXMEGA6, "__AVR_ATxmega128B3__", 0, 0x2000, "x128b3" },
{ "atxmega128d3", ARCH_AVRXMEGA6, "__AVR_ATxmega128D3__", 0, 0x2000, "x128d3" },
@@ -12,7 +12,7 @@ diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
--- gcc/config/avr/t-avr 2011-10-28 14:59:12.000000000 +0530
+++ gcc/config/avr/t-avr 2011-10-28 15:04:23.000000000 +0530
-@@ -299,6 +299,7 @@ MULTILIB_MATCHES = \
+@@ -300,6 +300,7 @@ MULTILIB_MATCHES = \
mmcu?avrxmega6=mmcu?atxmega128b1 \
mmcu?avrxmega6=mmcu?atxmega128b3 \
mmcu?avrxmega6=mmcu?atxmega128d3 \
diff --git a/418-gcc-atmxt336s.patch b/418-gcc-atmxt336s.patch
index f82160b..e906720 100644
--- a/418-gcc-atmxt336s.patch
+++ b/418-gcc-atmxt336s.patch
@@ -1,7 +1,7 @@
diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
--- gcc/config/avr/avr-devices.c 2011-10-28 15:04:23.000000000 +0530
+++ gcc/config/avr/avr-devices.c 2011-10-28 15:06:36.000000000 +0530
-@@ -264,6 +264,7 @@ const struct mcu_type_s avr_mcu_types[]
+@@ -265,6 +265,7 @@ const struct mcu_type_s avr_mcu_types[]
/* Xmega, <= 8K FLASH. */
/* Xmega, > 8K, <= 64K FLASH, <= 64K RAM. */
{ "avrxmega2", ARCH_AVRXMEGA2, NULL, 0, 0x2000, "x32a4" },
@@ -12,7 +12,7 @@ diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
--- gcc/config/avr/t-avr 2011-10-28 15:04:23.000000000 +0530
+++ gcc/config/avr/t-avr 2011-10-28 15:06:36.000000000 +0530
-@@ -278,6 +278,7 @@ MULTILIB_MATCHES = \
+@@ -279,6 +279,7 @@ MULTILIB_MATCHES = \
mmcu?avr6=mmcu?atmega256rfr2 \
mmcu?avr6=mmcu?atmega2560 \
mmcu?avr6=mmcu?atmega2561 \
diff --git a/419-gcc-atxmega16c4_32c4_128c3_256c3.patch b/419-gcc-atxmega16c4_32c4_128c3_256c3.patch
index ac09038..46bc2d9 100644
--- a/419-gcc-atxmega16c4_32c4_128c3_256c3.patch
+++ b/419-gcc-atxmega16c4_32c4_128c3_256c3.patch
@@ -1,7 +1,7 @@
diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
--- gcc/config/avr/avr-devices.c 2011-11-08 17:00:35.000000000 +0530
+++ gcc/config/avr/avr-devices.c 2011-11-08 17:04:10.000000000 +0530
-@@ -267,9 +267,11 @@ const struct mcu_type_s avr_mcu_types[]
+@@ -268,9 +268,11 @@ const struct mcu_type_s avr_mcu_types[]
{ "atmxt336s", ARCH_AVRXMEGA2, "__AVR_ATMXT336S__", 0, 0x2000, "mxt336s"},
{ "atxmega16a4", ARCH_AVRXMEGA2, "__AVR_ATxmega16A4__", 0, 0x2000, "x16a4" },
{ "atxmega16a4u", ARCH_AVRXMEGA2, "__AVR_ATxmega16A4U__", 0, 0x2000, "x16a4u" },
@@ -13,7 +13,7 @@ diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
{ "atxmega32d4", ARCH_AVRXMEGA2, "__AVR_ATxmega32D4__", 0, 0x2000, "x32d4" },
{ "atxmega32x1", ARCH_AVRXMEGA2, "__AVR_ATxmega32X1__", 0, 0x2000, "x32x1" },
/* Xmega, > 8K, <= 64K FLASH, > 64K RAM. */
-@@ -293,6 +295,7 @@ const struct mcu_type_s avr_mcu_types[]
+@@ -294,6 +296,7 @@ const struct mcu_type_s avr_mcu_types[]
{ "atxmega128a3u",ARCH_AVRXMEGA6, "__AVR_ATxmega128A3U__", 0, 0x2000, "x128a3u"},
{ "atxmega128b1", ARCH_AVRXMEGA6, "__AVR_ATxmega128B1__", 0, 0x2000, "x128b1" },
{ "atxmega128b3", ARCH_AVRXMEGA6, "__AVR_ATxmega128B3__", 0, 0x2000, "x128b3" },
@@ -21,7 +21,7 @@ diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
{ "atxmega128d3", ARCH_AVRXMEGA6, "__AVR_ATxmega128D3__", 0, 0x2000, "x128d3" },
{ "atxmega128d4", ARCH_AVRXMEGA6, "__AVR_ATxmega128D4__", 0, 0x2000, "x128d4" },
{ "atxmega192a3", ARCH_AVRXMEGA6, "__AVR_ATxmega192A3__", 0, 0x2000, "x192a3" },
-@@ -302,6 +305,7 @@ const struct mcu_type_s avr_mcu_types[]
+@@ -303,6 +306,7 @@ const struct mcu_type_s avr_mcu_types[]
{ "atxmega256a3u",ARCH_AVRXMEGA6, "__AVR_ATxmega256A3U__", 0, 0x2000, "x256a3u"},
{ "atxmega256a3b",ARCH_AVRXMEGA6, "__AVR_ATxmega256A3B__", 0, 0x2000, "x256a3b" },
{ "atxmega256a3bu", ARCH_AVRXMEGA6, "__AVR_ATxmega256A3BU__", 0, 0x2000, "x256a3bu" },
@@ -32,7 +32,7 @@ diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
--- gcc/config/avr/t-avr 2011-11-08 17:00:35.000000000 +0530
+++ gcc/config/avr/t-avr 2011-11-08 17:02:00.000000000 +0530
-@@ -281,7 +281,9 @@ MULTILIB_MATCHES = \
+@@ -282,7 +282,9 @@ MULTILIB_MATCHES = \
mmcu?avrxmega2=mmcu?atmxt336s \
mmcu?avrxmega2=mmcu?atxmega16a4 \
mmcu?avrxmega2=mmcu?atxmega16a4u \
@@ -42,7 +42,7 @@ diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
mmcu?avrxmega2=mmcu?atxmega32d4 \
mmcu?avrxmega2=mmcu?atxmega32a4 \
mmcu?avrxmega2=mmcu?atxmega32a4u \
-@@ -299,6 +301,7 @@ MULTILIB_MATCHES = \
+@@ -300,6 +302,7 @@ MULTILIB_MATCHES = \
mmcu?avrxmega6=mmcu?atxmega128a3u \
mmcu?avrxmega6=mmcu?atxmega128b1 \
mmcu?avrxmega6=mmcu?atxmega128b3 \
@@ -50,7 +50,7 @@ diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
mmcu?avrxmega6=mmcu?atxmega128d3 \
mmcu?avrxmega6=mmcu?atxmega128d4 \
mmcu?avrxmega6=mmcu?atxmega192a3 \
-@@ -308,6 +311,7 @@ MULTILIB_MATCHES = \
+@@ -309,6 +312,7 @@ MULTILIB_MATCHES = \
mmcu?avrxmega6=mmcu?atxmega256a3u \
mmcu?avrxmega6=mmcu?atxmega256a3b \
mmcu?avrxmega6=mmcu?atxmega256a3bu \
diff --git a/420-gcc-atxmega384d3.patch b/420-gcc-atxmega384d3.patch
index 24adf88..6e51f55 100644
--- a/420-gcc-atxmega384d3.patch
+++ b/420-gcc-atxmega384d3.patch
@@ -1,7 +1,7 @@
diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
--- gcc/config/avr/avr-devices.c 2011-11-08 17:37:12.000000000 +0530
+++ gcc/config/avr/avr-devices.c 2011-11-08 17:38:18.000000000 +0530
-@@ -308,6 +308,7 @@ const struct mcu_type_s avr_mcu_types[]
+@@ -309,6 +309,7 @@ const struct mcu_type_s avr_mcu_types[]
{ "atxmega256c3", ARCH_AVRXMEGA6, "__AVR_ATxmega256C3__", 0, 0x2000, "x256c3" },
{ "atxmega256d3", ARCH_AVRXMEGA6, "__AVR_ATxmega256D3__", 0, 0x2000, "x256d3" },
{ "atxmega384c3", ARCH_AVRXMEGA6, "__AVR_ATxmega384C3__", 0, 0x2000, "x384c3" },
@@ -12,7 +12,7 @@ diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
--- gcc/config/avr/t-avr 2011-11-08 17:37:12.000000000 +0530
+++ gcc/config/avr/t-avr 2011-11-08 17:38:18.000000000 +0530
-@@ -314,6 +314,7 @@ MULTILIB_MATCHES = \
+@@ -315,6 +315,7 @@ MULTILIB_MATCHES = \
mmcu?avrxmega6=mmcu?atxmega256c3 \
mmcu?avrxmega6=mmcu?atxmega256d3 \
mmcu?avrxmega6=mmcu?atxmega384c3 \
diff --git a/421-gcc-atmega48hvf.patch b/421-gcc-atmega48hvf.patch
index c05b174..9ba627e 100644
--- a/421-gcc-atmega48hvf.patch
+++ b/421-gcc-atmega48hvf.patch
@@ -1,7 +1,7 @@
diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
--- gcc/config/avr/avr-devices.c 2011-11-16 18:28:11.000000000 +0530
+++ gcc/config/avr/avr-devices.c 2011-11-16 18:33:39.000000000 +0530
-@@ -221,6 +221,7 @@ const struct mcu_type_s avr_mcu_types[]
+@@ -222,6 +222,7 @@ const struct mcu_type_s avr_mcu_types[]
{ "atmega32hvb", ARCH_AVR5, "__AVR_ATmega32HVB__", 0, 0x0100, "m32hvb" },
{ "atmega32hvbrevb", ARCH_AVR5, "__AVR_ATmega32HVBREVB__", 1, 0x0100, "m32hvbrevb" },
{ "atmega16hva2", ARCH_AVR5, "__AVR_ATmega16HVA2__", 0, 0x0100, "m16hva2" },
@@ -12,7 +12,7 @@ diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
--- gcc/config/avr/t-avr 2011-11-16 18:28:11.000000000 +0530
+++ gcc/config/avr/t-avr 2011-11-16 18:34:34.000000000 +0530
-@@ -244,6 +244,7 @@ MULTILIB_MATCHES = \
+@@ -245,6 +245,7 @@ MULTILIB_MATCHES = \
mmcu?avr5=mmcu?atmega32hvb \
mmcu?avr5=mmcu?atmega32hvbrevb \
mmcu?avr5=mmcu?atmega64hve \
diff --git a/422-gcc-atmega26hvg.patch b/422-gcc-atmega26hvg.patch
index 5af18e7..1df4acc 100644
--- a/422-gcc-atmega26hvg.patch
+++ b/422-gcc-atmega26hvg.patch
@@ -1,7 +1,7 @@
diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
--- gcc/config/avr/avr-devices.c 2011-12-08 14:24:48.000000000 +0530
+++ gcc/config/avr/avr-devices.c 2011-12-08 14:38:53.000000000 +0530
-@@ -165,6 +165,7 @@ const struct mcu_type_s avr_mcu_types[]
+@@ -166,6 +166,7 @@ const struct mcu_type_s avr_mcu_types[]
{ "atmega16hvbrevb", ARCH_AVR5, "__AVR_ATmega16HVBREVB__", 1, 0x0100, "m16hvbrevb" },
{ "atmega16m1", ARCH_AVR5, "__AVR_ATmega16M1__", 0, 0x0100, "m16m1" },
{ "atmega16u4", ARCH_AVR5, "__AVR_ATmega16U4__", 0, 0x0100, "m16u4" },
@@ -12,7 +12,7 @@ diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
--- gcc/config/avr/t-avr 2011-12-08 14:24:48.000000000 +0530
+++ gcc/config/avr/t-avr 2011-12-08 14:41:10.000000000 +0530
-@@ -191,6 +191,7 @@ MULTILIB_MATCHES = \
+@@ -192,6 +192,7 @@ MULTILIB_MATCHES = \
mmcu?avr5=mmcu?atmega169a \
mmcu?avr5=mmcu?atmega169p \
mmcu?avr5=mmcu?atmega169pa \
diff --git a/423-gcc-atmxt224_224e.patch b/423-gcc-atmxt224_224e.patch
index f897533..5d1f041 100644
--- a/423-gcc-atmxt224_224e.patch
+++ b/423-gcc-atmxt224_224e.patch
@@ -1,7 +1,7 @@
diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
--- gcc/config/avr/avr-devices.c 2012-02-10 20:08:47.000000000 +0530
+++ gcc/config/avr/avr-devices.c 2012-02-10 20:16:45.000000000 +0530
-@@ -266,6 +266,8 @@ const struct mcu_type_s avr_mcu_types[]
+@@ -267,6 +267,8 @@ const struct mcu_type_s avr_mcu_types[]
/* Xmega, <= 8K FLASH. */
/* Xmega, > 8K, <= 64K FLASH, <= 64K RAM. */
{ "avrxmega2", ARCH_AVRXMEGA2, NULL, 0, 0x2000, "x32a4" },
@@ -13,7 +13,7 @@ diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
--- gcc/config/avr/t-avr 2012-02-10 20:08:47.000000000 +0530
+++ gcc/config/avr/t-avr 2012-02-10 20:16:45.000000000 +0530
-@@ -280,6 +280,8 @@ MULTILIB_MATCHES = \
+@@ -281,6 +281,8 @@ MULTILIB_MATCHES = \
mmcu?avr6=mmcu?atmega256rfr2 \
mmcu?avr6=mmcu?atmega2560 \
mmcu?avr6=mmcu?atmega2561 \
diff --git a/424-gcc-atxmega192c3.patch b/424-gcc-atxmega192c3.patch
index d145ece..5fe2f79 100644
--- a/424-gcc-atxmega192c3.patch
+++ b/424-gcc-atxmega192c3.patch
@@ -1,7 +1,7 @@
diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
--- gcc/config/avr/avr-devices.c 2012-02-10 20:20:51.000000000 +0530
+++ gcc/config/avr/avr-devices.c 2012-02-10 20:21:25.000000000 +0530
-@@ -304,6 +304,7 @@ const struct mcu_type_s avr_mcu_types[]
+@@ -305,6 +305,7 @@ const struct mcu_type_s avr_mcu_types[]
{ "atxmega128d4", ARCH_AVRXMEGA6, "__AVR_ATxmega128D4__", 0, 0x2000, "x128d4" },
{ "atxmega192a3", ARCH_AVRXMEGA6, "__AVR_ATxmega192A3__", 0, 0x2000, "x192a3" },
{ "atxmega192a3u",ARCH_AVRXMEGA6, "__AVR_ATxmega192A3U__", 0, 0x2000, "x192a3u"},
@@ -12,7 +12,7 @@ diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
--- gcc/config/avr/t-avr 2012-02-10 20:20:51.000000000 +0530
+++ gcc/config/avr/t-avr 2012-02-10 20:21:25.000000000 +0530
-@@ -310,6 +310,7 @@ MULTILIB_MATCHES = \
+@@ -311,6 +311,7 @@ MULTILIB_MATCHES = \
mmcu?avrxmega6=mmcu?atxmega128d4 \
mmcu?avrxmega6=mmcu?atxmega192a3 \
mmcu?avrxmega6=mmcu?atxmega192a3u \
diff --git a/425-gcc-atmxt112sl.patch b/425-gcc-atmxt112sl.patch
index 618d4b3..7881478 100644
--- a/425-gcc-atmxt112sl.patch
+++ b/425-gcc-atmxt112sl.patch
@@ -1,7 +1,7 @@
diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
--- gcc/config/avr/avr-devices.c 2012-02-10 20:23:45.000000000 +0530
+++ gcc/config/avr/avr-devices.c 2012-02-10 20:24:34.000000000 +0530
-@@ -266,6 +266,7 @@ const struct mcu_type_s avr_mcu_types[]
+@@ -267,6 +267,7 @@ const struct mcu_type_s avr_mcu_types[]
/* Xmega, <= 8K FLASH. */
/* Xmega, > 8K, <= 64K FLASH, <= 64K RAM. */
{ "avrxmega2", ARCH_AVRXMEGA2, NULL, 0, 0x2000, "x32a4" },
@@ -12,7 +12,7 @@ diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
--- gcc/config/avr/t-avr 2012-02-10 20:23:45.000000000 +0530
+++ gcc/config/avr/t-avr 2012-02-10 20:24:34.000000000 +0530
-@@ -280,6 +280,7 @@ MULTILIB_MATCHES = \
+@@ -281,6 +281,7 @@ MULTILIB_MATCHES = \
mmcu?avr6=mmcu?atmega256rfr2 \
mmcu?avr6=mmcu?atmega2560 \
mmcu?avr6=mmcu?atmega2561 \
diff --git a/426-gcc-atxmega64c3.patch b/426-gcc-atxmega64c3.patch
index 41a67b8..6810501 100644
--- a/426-gcc-atxmega64c3.patch
+++ b/426-gcc-atxmega64c3.patch
@@ -1,7 +1,7 @@
diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
--- gcc/config/avr/avr-devices.c 2012-02-10 20:28:58.000000000 +0530
+++ gcc/config/avr/avr-devices.c 2012-02-10 20:29:40.000000000 +0530
-@@ -288,6 +288,7 @@ const struct mcu_type_s avr_mcu_types[]
+@@ -289,6 +289,7 @@ const struct mcu_type_s avr_mcu_types[]
{ "atxmega64a4u", ARCH_AVRXMEGA4, "__AVR_ATxmega64A4U__", 0, 0x2000, "x64a4u"},
{ "atxmega64b1", ARCH_AVRXMEGA4, "__AVR_ATxmega64B1__", 0, 0x2000, "x64b1" },
{ "atxmega64b3", ARCH_AVRXMEGA4, "__AVR_ATxmega64B3__", 0, 0x2000, "x64b3"},
@@ -12,7 +12,7 @@ diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
--- gcc/config/avr/t-avr 2012-02-10 20:28:58.000000000 +0530
+++ gcc/config/avr/t-avr 2012-02-10 20:29:40.000000000 +0530
-@@ -298,6 +298,7 @@ MULTILIB_MATCHES = \
+@@ -299,6 +299,7 @@ MULTILIB_MATCHES = \
mmcu?avrxmega4=mmcu?atxmega64a4u \
mmcu?avrxmega4=mmcu?atxmega64b1 \
mmcu?avrxmega4=mmcu?atxmega64b3 \
diff --git a/427-gcc-ata6285_6286.patch b/427-gcc-ata6285_6286.patch
index a74328a..857d206 100644
--- a/427-gcc-ata6285_6286.patch
+++ b/427-gcc-ata6285_6286.patch
@@ -1,7 +1,7 @@
diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
--- gcc/config/avr/avr-devices.c 2012-02-15 14:00:53.000000000 +0530
+++ gcc/config/avr/avr-devices.c 2012-02-17 11:04:27.000000000 +0530
-@@ -116,6 +116,8 @@ const struct mcu_type_s avr_mcu_types[]
+@@ -117,6 +117,8 @@ const struct mcu_type_s avr_mcu_types[]
{ "attiny1634", ARCH_AVR35, "__AVR_ATtiny1634__", 0, 0x0100, "tn1634" },
/* Enhanced, <= 8K + 2-byte PC + { MOVW/LPMX, MUL }. */
{ "avr4", ARCH_AVR4, NULL, 0, 0x0060, "m8" },
@@ -13,7 +13,7 @@ diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
--- gcc/config/avr/t-avr 2012-02-15 14:00:53.000000000 +0530
+++ gcc/config/avr/t-avr 2012-02-17 11:30:56.000000000 +0530
-@@ -151,6 +151,8 @@ MULTILIB_MATCHES = \
+@@ -152,6 +152,8 @@ MULTILIB_MATCHES = \
mmcu?avr35=mmcu?attiny167 \
mmcu?avr35=mmcu?attiny1634 \
mmcu?avr35=mmcu?attiny327 \
diff --git a/428-gcc-attiny828.patch b/428-gcc-attiny828.patch
index e8765b9..907fa03 100644
--- a/428-gcc-attiny828.patch
+++ b/428-gcc-attiny828.patch
@@ -1,21 +1,21 @@
diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
---- gcc/config/avr/avr-devices.c 2012-05-31 14:44:29.000000000 +0530
-+++ gcc/config/avr/avr-devices.c 2012-05-31 14:44:40.000000000 +0530
-@@ -96,6 +96,7 @@ const struct mcu_type_s avr_mcu_types[]
- { "attiny87", ARCH_AVR25, "__AVR_ATtiny87__", 0, 0x0100, "tn87" },
+--- gcc/config/avr/avr-devices.c 2012-02-23 15:24:34.000000000 +0530
++++ gcc/config/avr/avr-devices.c 2012-02-23 15:28:51.000000000 +0530
+@@ -97,6 +97,7 @@ const struct mcu_type_s avr_mcu_types[]
{ "attiny48", ARCH_AVR25, "__AVR_ATtiny48__", 0, 0x0100, "tn48" },
{ "attiny88", ARCH_AVR25, "__AVR_ATtiny88__", 0, 0x0100, "tn88" },
+ { "attiny80", ARCH_AVR25, "__AVR_ATtiny80__", 0, 0x0100, "tn80" },
+ { "attiny828", ARCH_AVR25, "__AVR_ATtiny828__", 0, 0x0100, "tn828" },
{ "at86rf401", ARCH_AVR25, "__AVR_AT86RF401__", 1, 0x0060, "86401" },
/* Classic, > 8K, <= 64K +2-byte PC + { JMP/CALL }. */
{ "avr3", ARCH_AVR3, NULL, 0, 0x0060, "43355" },
diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
---- gcc/config/avr/t-avr 2012-05-31 14:44:29.000000000 +0530
-+++ gcc/config/avr/t-avr 2012-05-31 14:44:40.000000000 +0530
-@@ -138,6 +138,7 @@ MULTILIB_MATCHES = \
- mmcu?avr25=mmcu?attiny87 \
+--- gcc/config/avr/t-avr 2012-02-23 15:24:34.000000000 +0530
++++ gcc/config/avr/t-avr 2012-02-23 15:29:11.000000000 +0530
+@@ -139,6 +139,7 @@ MULTILIB_MATCHES = \
mmcu?avr25=mmcu?attiny48 \
mmcu?avr25=mmcu?attiny88 \
+ mmcu?avr25=mmcu?attiny80 \
+ mmcu?avr25=mmcu?attiny828 \
mmcu?avr25=mmcu?at86rf401 \
mmcu?avr3=mmcu?at43usb355 \
diff --git a/429-gcc-ata5790_5790n_5795.patch b/429-gcc-ata5790_5790n_5795.patch
index 1a5b336..ac4e275 100644
--- a/429-gcc-ata5790_5790n_5795.patch
+++ b/429-gcc-ata5790_5790n_5795.patch
@@ -1,7 +1,7 @@
diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
--- gcc/config/avr/avr-devices.c 2012-02-27 09:26:40.000000000 +0530
+++ gcc/config/avr/avr-devices.c 2012-02-27 09:27:37.000000000 +0530
-@@ -143,6 +143,9 @@ const struct mcu_type_s avr_mcu_types[]
+@@ -144,6 +144,9 @@ const struct mcu_type_s avr_mcu_types[]
{ "avr5", ARCH_AVR5, NULL, 0, 0x0060, "m16" },
{ "at90pwm161", ARCH_AVR5, "__AVR_AT90PWM161__", 1, 0x0100, "90pwm161" },
@@ -14,7 +14,7 @@ diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
--- gcc/config/avr/t-avr 2012-02-27 09:26:40.000000000 +0530
+++ gcc/config/avr/t-avr 2012-02-27 09:27:37.000000000 +0530
-@@ -174,6 +174,9 @@ MULTILIB_MATCHES = \
+@@ -175,6 +175,9 @@ MULTILIB_MATCHES = \
mmcu?avr4=mmcu?at90pwm3b \
mmcu?avr4=mmcu?at90pwm81 \
mmcu?avr5=mmcu?at90pwm161 \
diff --git a/430-gcc-ata5272_ata5505.patch b/430-gcc-ata5272_ata5505.patch
index 5f53481..b7deac1 100644
--- a/430-gcc-ata5272_ata5505.patch
+++ b/430-gcc-ata5272_ata5505.patch
@@ -9,7 +9,7 @@ diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
{ "attiny13", ARCH_AVR25, "__AVR_ATtiny13__", 1, 0x0060, "tn13" },
{ "attiny13a", ARCH_AVR25, "__AVR_ATtiny13A__", 1, 0x0060, "tn13a" },
{ "attiny2313", ARCH_AVR25, "__AVR_ATtiny2313__", 1, 0x0060, "tn2313" },
-@@ -108,6 +109,7 @@ const struct mcu_type_s avr_mcu_types[]
+@@ -109,6 +110,7 @@ const struct mcu_type_s avr_mcu_types[]
{ "at43usb320", ARCH_AVR31, "__AVR_AT43USB320__", 0, 0x0060, "43320" },
/* Classic, >=16K, <=64K + 2-byte PC + { MOVW/LPMX + JMP/CALL }. */
{ "avr35", ARCH_AVR35, NULL, 0, 0x0100, "usb162" },
@@ -28,7 +28,7 @@ diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
mmcu?avr25=mmcu?ata6289 \
mmcu?avr25=mmcu?attiny13 \
mmcu?avr25=mmcu?attiny13a \
-@@ -146,6 +147,7 @@ MULTILIB_MATCHES = \
+@@ -147,6 +148,7 @@ MULTILIB_MATCHES = \
mmcu?avr31=mmcu?at43usb320 \
mmcu?avr35=mmcu?at90usb82 \
mmcu?avr35=mmcu?at90usb162 \
diff --git a/431-gcc-atmxt540s.patch b/431-gcc-atmxt540s.patch
deleted file mode 100644
index d3b8a39..0000000
--- a/431-gcc-atmxt540s.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-diff -Naurp gcc/config/avr/avr-devices.c config/avr/avr-devices.c
---- gcc/config/avr/avr-devices.c 2012-06-28 16:20:39.000000000 +0530
-+++ gcc/config/avr/avr-devices.c 2012-06-28 16:23:31.000000000 +0530
-@@ -312,6 +312,8 @@ const struct mcu_type_s avr_mcu_types[]
- { "atxmega128c3", ARCH_AVRXMEGA6, "__AVR_ATxmega128C3__", 0, 0x2000, "x128c3" },
- { "atxmega128d3", ARCH_AVRXMEGA6, "__AVR_ATxmega128D3__", 0, 0x2000, "x128d3" },
- { "atxmega128d4", ARCH_AVRXMEGA6, "__AVR_ATxmega128D4__", 0, 0x2000, "x128d4" },
-+ { "atmxt540s", ARCH_AVRXMEGA6, "__AVR_ATMXT540S__", 0, 0x2000, "mxt540s"},
-+ { "atmxt540sreva", ARCH_AVRXMEGA6, "__AVR_ATMXT540SREVA__", 0, 0x2000, "mxt540sreva"},
- { "atxmega192a3", ARCH_AVRXMEGA6, "__AVR_ATxmega192A3__", 0, 0x2000, "x192a3" },
- { "atxmega192a3u",ARCH_AVRXMEGA6, "__AVR_ATxmega192A3U__", 0, 0x2000, "x192a3u"},
- { "atxmega192c3", ARCH_AVRXMEGA6, "__AVR_ATxmega192C3__", 0, 0x2000, "x192c3" },
-diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
---- gcc/config/avr/t-avr 2012-06-28 16:20:39.000000000 +0530
-+++ gcc/config/avr/t-avr 2012-06-28 16:37:18.000000000 +0530
-@@ -318,6 +318,8 @@ MULTILIB_MATCHES = \
- mmcu?avrxmega6=mmcu?atxmega128c3 \
- mmcu?avrxmega6=mmcu?atxmega128d3 \
- mmcu?avrxmega6=mmcu?atxmega128d4 \
-+ mmcu?avrxmega6=mmcu?atmxt540s \
-+ mmcu?avrxmega6=mmcu?atmxt540sreva \
- mmcu?avrxmega6=mmcu?atxmega192a3 \
- mmcu?avrxmega6=mmcu?atxmega192a3u \
- mmcu?avrxmega6=mmcu?atxmega192c3 \
diff --git a/432-gcc-ata5831.patch b/432-gcc-ata5831.patch
deleted file mode 100644
index fadd66b..0000000
--- a/432-gcc-ata5831.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
---- gcc/config/avr/avr-devices.c 2012-04-20 18:52:19.000000000 +0530
-+++ gcc/config/avr/avr-devices.c 2012-04-20 18:52:59.000000000 +0530
-@@ -37,6 +37,7 @@ const struct base_arch_s avr_arch_types[
- { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0x0060, "__AVR_ARCH__=5", "avr5" },
- { 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0x0060, "__AVR_ARCH__=51", "avr51" },
- { 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0x0060, "__AVR_ARCH__=6", "avr6" },
-+ { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0x0200, "__AVR_ARCH__=7", "avr7" },
- { 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0x2000, "__AVR_ARCH__=101", "avrxmega1" },
- { 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0x2000, "__AVR_ARCH__=102", "avrxmega2" },
- { 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0x2000, "__AVR_ARCH__=103", "avrxmega3" },
-@@ -270,6 +271,9 @@ const struct mcu_type_s avr_mcu_types[]
- { "atmega2561", ARCH_AVR6, "__AVR_ATmega2561__", 0, 0x0200, "m2561" },
- { "atmega256rfa2", ARCH_AVR6, "__AVR_ATmega256RFA2__", 0, 0x0200, "m256rfa2" },
- { "atmega256rfr2", ARCH_AVR6, "__AVR_ATmega256RFR2__", 0, 0x0200, "m256rfr2" },
-+ /* Enhanced, == 20K starts at 0x8000 */
-+ { "avr7", ARCH_AVR7, NULL, 0, 0x0200, "a5831" },
-+ { "ata5831", ARCH_AVR7, "__AVR_ATA5831__", 0, 0x0200, "a5831" },
- /* Enhanced, == 256K. */
- /* Xmega, <= 8K FLASH. */
- /* Xmega, > 8K, <= 64K FLASH, <= 64K RAM. */
-diff -Naurp gcc/config/avr/avr.h gcc-4.6.2-src/gcc/config/avr/avr.h
---- gcc/config/avr/avr.h 2012-04-20 18:52:19.000000000 +0530
-+++ gcc/config/avr/avr.h 2012-04-20 18:52:59.000000000 +0530
-@@ -79,6 +79,7 @@ enum avr_arch
- ARCH_AVR5,
- ARCH_AVR51,
- ARCH_AVR6,
-+ ARCH_AVR7,
- ARCH_AVRXMEGA1,
- ARCH_AVRXMEGA2,
- ARCH_AVRXMEGA3,
-diff -Naurp gcc-4.6.2-base/gcc/config/avr/t-avr gcc-4.6.2-src/gcc/config/avr/t-avr
---- gcc/config/avr/t-avr 2012-04-20 18:52:19.000000000 +0530
-+++ gcc/config/avr/t-avr 2012-04-20 18:52:59.000000000 +0530
-@@ -107,8 +107,8 @@ fp-bit.c: $(srcdir)/config/fp-bit.c $(sr
-
- FPBIT = fp-bit.c
-
--MULTILIB_OPTIONS = mmcu=avr2/mmcu=avr25/mmcu=avr3/mmcu=avr31/mmcu=avr35/mmcu=avr4/mmcu=avr5/mmcu=avr51/mmcu=avr6/mmcu=avrxmega2/mmcu=avrxmega4/mmcu=avrxmega5/mmcu=avrxmega6/mmcu=avrxmega7/mmcu=avrtiny10
--MULTILIB_DIRNAMES = avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6 avrxmega2 avrxmega4 avrxmega5 avrxmega6 avrxmega7 avrtiny10
-+MULTILIB_OPTIONS = mmcu=avr2/mmcu=avr25/mmcu=avr3/mmcu=avr31/mmcu=avr35/mmcu=avr4/mmcu=avr5/mmcu=avr51/mmcu=avr6/mmcu=avr7/mmcu=avrxmega2/mmcu=avrxmega4/mmcu=avrxmega5/mmcu=avrxmega6/mmcu=avrxmega7/mmcu=avrtiny10
-+MULTILIB_DIRNAMES = avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6 avr7 avrxmega2 avrxmega4 avrxmega5 avrxmega6 avrxmega7 avrtiny10
-
- # The many avr2 matches are not listed here - this is the default.
- MULTILIB_MATCHES = \
-@@ -288,6 +288,7 @@ MULTILIB_MATCHES = \
- mmcu?avr6=mmcu?atmega256rfr2 \
- mmcu?avr6=mmcu?atmega2560 \
- mmcu?avr6=mmcu?atmega2561 \
-+ mmcu?avr7=mmcu?ata5831 \
- mmcu?avrxmega2=mmcu?atmxt112sl \
- mmcu?avrxmega2=mmcu?atmxt224 \
- mmcu?avrxmega2=mmcu?atmxt224e \
diff --git a/434-gcc-atxmega32_16_8e5.patch b/434-gcc-atxmega32_16_8e5.patch
deleted file mode 100644
index b66709a..0000000
--- a/434-gcc-atxmega32_16_8e5.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
---- gcc/config/avr/avr-devices.c 2012-10-16 16:56:11.000000000 +0530
-+++ gcc/config/avr/avr-devices.c 2012-10-16 16:55:50.000000000 +0530
-@@ -291,6 +291,9 @@ const struct mcu_type_s avr_mcu_types[]
- { "atxmega32a4u", ARCH_AVRXMEGA2, "__AVR_ATxmega32A4U__", 0, 0x2000, "x32a4u" },
- { "atxmega32c4", ARCH_AVRXMEGA2, "__AVR_ATxmega32C4__", 0, 0x2000, "x32c4" },
- { "atxmega32d4", ARCH_AVRXMEGA2, "__AVR_ATxmega32D4__", 0, 0x2000, "x32d4" },
-+ { "atxmega16e5", ARCH_AVRXMEGA2, "__AVR_ATxmega16E5__", 0, 0x2000, "x16e5" },
-+ { "atxmega8e5", ARCH_AVRXMEGA2, "__AVR_ATxmega8E5__", 0, 0x2000, "x8e5" },
-+ { "atxmega32e5", ARCH_AVRXMEGA2, "__AVR_ATxmega32E5__", 0, 0x2000, "x32e5" },
- { "atxmega32x1", ARCH_AVRXMEGA2, "__AVR_ATxmega32X1__", 0, 0x2000, "x32x1" },
- /* Xmega, > 8K, <= 64K FLASH, > 64K RAM. */
- /* { "avrxmega3", ARCH_AVRXMEGA3, NULL }, */
-diff -Naurp gcc/config/avr/t-avr gcc/config/avr/t-avr
---- gcc/config/avr/t-avr 2012-10-16 16:56:11.000000000 +0530
-+++ gcc/config/avr/t-avr 2012-10-16 16:55:50.000000000 +0530
-@@ -300,6 +300,9 @@ MULTILIB_MATCHES = \
- mmcu?avrxmega2=mmcu?atxmega16d4 \
- mmcu?avrxmega2=mmcu?atxmega32c4 \
- mmcu?avrxmega2=mmcu?atxmega32d4 \
-+ mmcu?avrxmega2=mmcu?atxmega32e5 \
-+ mmcu?avrxmega2=mmcu?atxmega16e5 \
-+ mmcu?avrxmega2=mmcu?atxmega8e5 \
- mmcu?avrxmega2=mmcu?atxmega32a4 \
- mmcu?avrxmega2=mmcu?atxmega32a4u \
- mmcu?avrxmega2=mmcu?atxmega32x1 \
diff --git a/501-gcc-avrtiny10-bug-12510.patch b/501-gcc-avrtiny10-bug-12510.patch
index 36d31f1..eecd478 100644
--- a/501-gcc-avrtiny10-bug-12510.patch
+++ b/501-gcc-avrtiny10-bug-12510.patch
@@ -1,7 +1,7 @@
diff -Naurp gcc/config/avr/avr.h gcc/config/avr/avr.h
---- gcc/config/avr/avr.h 2012-04-23 11:17:05.000000000 +0530
-+++ gcc/config/avr/avr.h 2012-04-23 11:17:24.000000000 +0530
-@@ -137,7 +137,7 @@ extern GTY(()) section *progmem_section;
+--- gcc/config/avr/avr.h 2011-06-22 10:28:47.000000000 +0530
++++ gcc/config/avr/avr.h 2011-06-22 10:35:08.000000000 +0530
+@@ -136,7 +136,7 @@ extern GTY(()) section *progmem_section;
#define AVR_2_BYTE_PC (!AVR_HAVE_EIJMP_EICALL)
#define AVR_3_BYTE_PC (AVR_HAVE_EIJMP_EICALL)
@@ -11,8 +11,8 @@ diff -Naurp gcc/config/avr/avr.h gcc/config/avr/avr.h
#define AVR_RAMPX_ADDR (AVR_XMEGA ? 0x39 : 0)
#define AVR_RAMPY_ADDR (AVR_XMEGA ? 0x3A : 0)
diff -Naurp gcc/config/avr/predicates.md gcc/config/avr/predicates.md
---- gcc/config/avr/predicates.md 2012-04-23 11:07:59.000000000 +0530
-+++ gcc/config/avr/predicates.md 2012-04-23 11:17:24.000000000 +0530
+--- gcc/config/avr/predicates.md 2011-06-22 10:25:29.000000000 +0530
++++ gcc/config/avr/predicates.md 2011-06-22 10:35:08.000000000 +0530
@@ -50,21 +50,24 @@
;; Return true if OP is a valid address for lower half of I/O space.
(define_predicate "low_io_address_operand"
diff --git a/503-gcc-bug13789.patch b/503-gcc-bug13789.patch
index e488771..bfccc05 100644
--- a/503-gcc-bug13789.patch
+++ b/503-gcc-bug13789.patch
@@ -1,11 +1,11 @@
diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
---- gcc/config/avr/avr-devices.c 2012-03-27 16:11:43.000000000 +0530
-+++ gcc/config/avr/avr-devices.c 2012-03-28 11:36:52.000000000 +0530
-@@ -38,14 +38,14 @@ const struct base_arch_s avr_arch_types[
+--- gcc/config/avr/avr-devices.c 2011-06-22 10:26:14.000000000 +0530
++++ gcc/config/avr/avr-devices.c 2011-06-22 10:48:05.000000000 +0530
+@@ -37,14 +37,14 @@ const struct base_arch_s avr_arch_types[
+ { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0x0060, "__AVR_ARCH__=5", "avr5" },
{ 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0x0060, "__AVR_ARCH__=51", "avr51" },
{ 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0x0060, "__AVR_ARCH__=6", "avr6" },
- { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0x0200, "__AVR_ARCH__=7", "avr7" },
-+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0x0040, "__AVR_ARCH__=100", "avrtiny10" },
++ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0x0040, "__AVR_ARCH__=100", "avrtiny10" },
{ 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0x2000, "__AVR_ARCH__=101", "avrxmega1" },
{ 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0x2000, "__AVR_ARCH__=102", "avrxmega2" },
{ 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0x2000, "__AVR_ARCH__=103", "avrxmega3" },
@@ -19,12 +19,12 @@ diff -Naurp gcc/config/avr/avr-devices.c gcc/config/avr/avr-devices.c
/* List of all known AVR MCU types - if updated, it has to be kept
diff -Naurp gcc/config/avr/avr.h gcc/config/avr/avr.h
---- gcc/config/avr/avr.h 2012-03-27 16:44:27.000000000 +0530
-+++ gcc/config/avr/avr.h 2012-03-28 11:38:15.000000000 +0530
-@@ -80,14 +80,14 @@ enum avr_arch
+--- gcc/config/avr/avr.h 2011-06-22 10:36:29.000000000 +0530
++++ gcc/config/avr/avr.h 2011-06-22 10:48:05.000000000 +0530
+@@ -79,14 +79,14 @@ enum avr_arch
+ ARCH_AVR5,
ARCH_AVR51,
ARCH_AVR6,
- ARCH_AVR7,
+ ARCH_AVRTINY10,
ARCH_AVRXMEGA1,
ARCH_AVRXMEGA2,
diff --git a/504-gcc-conditional-register.patch b/504-gcc-conditional-register.patch
index acab4d2..1dd01c1 100644
--- a/504-gcc-conditional-register.patch
+++ b/504-gcc-conditional-register.patch
@@ -1,6 +1,6 @@
diff -Naurp gcc/config/avr/avr.c gcc/config/avr/avr.c
---- gcc/config/avr/avr.c 2012-04-23 11:22:39.000000000 +0530
-+++ gcc/config/avr/avr.c 2012-04-23 11:26:15.000000000 +0530
+--- gcc/config/avr/avr.c 2011-10-28 16:28:16.000000000 +0530
++++ gcc/config/avr/avr.c 2011-10-28 16:40:20.000000000 +0530
@@ -96,6 +96,7 @@ static struct machine_function * avr_ini
static void avr_init_builtins (void);
static rtx avr_expand_builtin (tree, rtx, rtx, enum machine_mode, int);
@@ -39,9 +39,9 @@ diff -Naurp gcc/config/avr/avr.c gcc/config/avr/avr.c
registers (for a define_peephole2) in the current function. */
diff -Naurp gcc/config/avr/avr.h gcc/config/avr/avr.h
---- gcc/config/avr/avr.h 2012-04-23 11:25:46.000000000 +0530
-+++ gcc/config/avr/avr.h 2012-04-23 11:26:15.000000000 +0530
-@@ -314,41 +314,6 @@ enum reg_class {
+--- gcc/config/avr/avr.h 2011-10-28 16:29:55.000000000 +0530
++++ gcc/config/avr/avr.h 2011-10-28 16:40:20.000000000 +0530
+@@ -313,41 +313,6 @@ enum reg_class {
{0xffffffff,0x00000003} /* ALL_REGS */ \
}
diff --git a/506-gcc-avrtc541.patch b/506-gcc-avrtc541.patch
deleted file mode 100644
index 2675251..0000000
--- a/506-gcc-avrtc541.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-diff -Naurp gcc/config/avr/libgcc.S gcc/config/avr/libgcc.S
---- gcc/config/avr/libgcc.S 2012-06-12 12:43:40.000000000 +0530
-+++ gcc/config/avr/libgcc.S 2012-06-12 12:44:08.000000000 +0530
-@@ -862,6 +862,12 @@ __do_copy_data:
- cpc r27, r17
- brne .L__do_copy_data_loop
- #endif /* !defined(__AVR_HAVE_ELPMX__) && !defined(__AVR_HAVE_ELPM__) */
-+
-+;Clear RAMPZ in case it was set during copy_data
-+#if defined(__AVR_HAVE_ELPMX__ ) || defined(__AVR_HAVE_ELPM__)
-+ out __RAMPZ__, __zero_reg__
-+#endif
-+
- #endif /* L_copy_data */
- #endif
-
-@@ -941,6 +947,12 @@ __do_global_ctors:
- cpc r29, r17
- brne .L__do_global_ctors_loop
- #endif /* defined(__AVR_HAVE_RAMPZ__) */
-+
-+;Clear RAMPZ in case it was set
-+#if defined(__AVR_HAVE_RAMPZ__)
-+ out __RAMPZ__, __zero_reg__
-+#endif
-+
- #endif /* L_ctors */
-
- #ifdef L_dtors
-@@ -992,6 +1004,12 @@ __do_global_dtors:
- cpc r29, r17
- brne .L__do_global_dtors_loop
- #endif /* defined(__AVR_HAVE_RAMPZ__) */
-+
-+;Clear RAMPZ in case it was set
-+#if defined(__AVR_HAVE_RAMPZ__)
-+ out __RAMPZ__, __zero_reg__
-+#endif
-+
- #endif /* L_dtors */
-
- #if !defined (__AVR_TINY__)
diff --git a/507-gcc-avrtc-518.patch b/507-gcc-avrtc-518.patch
deleted file mode 100644
index 07b2a87..0000000
--- a/507-gcc-avrtc-518.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-diff -Naurp gcc/config/avr/avr.c gcc/config/avr/avr.c
---- gcc/config/avr/avr.c 2012-05-31 11:55:38.000000000 +0530
-+++ gcc/config/avr/avr.c 2012-06-15 12:10:49.000000000 +0530
-@@ -738,7 +738,8 @@ expand_prologue (void)
- && !cfun->machine->is_signal
- && !cfun->machine->is_OS_task
- && !cfun->machine->is_OS_main
-- && live_seq);
-+ && live_seq
-+ && !AVR_TINY);
-
- if (cfun->machine->is_interrupt || cfun->machine->is_signal)
- {
-@@ -1068,7 +1069,8 @@ expand_epilogue (void)
- && !cfun->machine->is_signal
- && !cfun->machine->is_OS_task
- && !cfun->machine->is_OS_main
-- && live_seq);
-+ && live_seq
-+ && !AVR_TINY);
-
- if (minimize && (frame_pointer_needed || live_seq > 4))
- {
diff --git a/508-gcc-avrtc514-tiny.patch b/508-gcc-avrtc514-tiny.patch
deleted file mode 100644
index 5e91123..0000000
--- a/508-gcc-avrtc514-tiny.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -Naurp gcc/config/avr/avr.h gcc/config/avr/avr.h
---- gcc/config/avr/avr.h 2012-06-27 15:36:22.000000000 +0530
-+++ gcc/config/avr/avr.h 2012-06-27 15:38:34.000000000 +0530
-@@ -369,7 +369,7 @@ enum reg_class {
-
- #define ARG_POINTER_REGNUM 34
-
--#define STATIC_CHAIN_REGNUM 2
-+#define STATIC_CHAIN_REGNUM ((AVR_TINY)?18:2)
-
- #define ELIMINABLE_REGS { \
- {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \
diff --git a/509-gcc-AVRTC-544-call-used-registers-tiny10.patch b/509-gcc-AVRTC-544-call-used-registers-tiny10.patch
deleted file mode 100644
index 8ef99f7..0000000
--- a/509-gcc-AVRTC-544-call-used-registers-tiny10.patch
+++ /dev/null
@@ -1,173 +0,0 @@
-diff -Naurp gcc/config/avr/avr.c gcc/config/avr/avr.c
---- gcc/config/avr/avr.c 2012-06-22 15:29:05.000000000 +0530
-+++ gcc/config/avr/avr.c 2012-06-28 12:50:23.000000000 +0530
-@@ -111,6 +111,9 @@ static void avr_help (void);
- /* Allocate registers from r25 to r8 for parameters for function calls. */
- #define FIRST_CUM_REG 26
-
-+/* Last call saved register */
-+#define LAST_CALLEE_SAVED_REG (AVR_TINY ? 21 : 17)
-+
- /* Temporary register RTX (gen_rtx_REG (QImode, TMP_REGNO)) */
- static GTY(()) rtx tmp_reg_rtx;
-
-@@ -611,7 +614,7 @@ sequent_regs_live (void)
- int live_seq=0;
- int cur_seq=0;
-
-- for (reg = 0; reg < 18; ++reg)
-+ for (reg = 0; reg <= LAST_CALLEE_SAVED_REG; ++reg)
- {
- if (fixed_regs[reg])
- {
-@@ -838,11 +841,11 @@ expand_prologue (void)
-
- /* Note that live_seq always contains r28+r29, but the other
- registers to be saved are all below 18. */
-- first_reg = 18 - (live_seq - 2);
-+ first_reg = (LAST_CALLEE_SAVED_REG + 1) - (live_seq - 2);
-
- for (reg = 29, offset = -live_seq + 1;
- reg >= first_reg;
-- reg = (reg == 28 ? 17 : reg - 1), ++offset)
-+ reg = (reg == 28 ? (LAST_CALLEE_SAVED_REG) : reg - 1), ++offset)
- {
- rtx m, r;
-
-@@ -6375,6 +6378,17 @@ order_regs_for_local_alloc (void)
- 0,1,
- 32,33,34,35
- };
-+ static const int tiny_order_0[] = {
-+ 24,25,
-+ 22,23,
-+ 30,31,
-+ 26,27,
-+ 28,29,
-+ 21,20,19,18,
-+ 16,17,
-+ 32,33,34,35,
-+ 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
-+ };
- static const int order_1[] = {
- 18,19,
- 20,21,
-@@ -6387,6 +6401,17 @@ order_regs_for_local_alloc (void)
- 0,1,
- 32,33,34,35
- };
-+ static const int tiny_order_1[] = {
-+ 22,23,
-+ 24,25,
-+ 30,31,
-+ 26,27,
-+ 28,29,
-+ 21,20,19,18,
-+ 16,17,
-+ 32,33,34,35,
-+ 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
-+ };
- static const int order_2[] = {
- 25,24,
- 23,22,
-@@ -6400,10 +6425,15 @@ order_regs_for_local_alloc (void)
- 1,0,
- 32,33,34,35
- };
--
-- const int *order = (TARGET_ORDER_1 ? order_1 :
-- TARGET_ORDER_2 ? order_2 :
-- order_0);
-+
-+ /*
-+ Select specific register allocation order. Tiny Core (attiny4/5/9/10/20/40)
-+ devices has only 16 registers, so different allocation order should be used
-+ */
-+ const int *order = (TARGET_ORDER_1 ? (AVR_TINY ? tiny_order_1 : order_1) :
-+ TARGET_ORDER_2 ? (AVR_TINY ? tiny_order_1 : order_2) :
-+ (AVR_TINY ? tiny_order_0 : order_0));
-+
- for (i=0; i < ARRAY_SIZE (order_0); ++i)
- reg_alloc_order[i] = order[i];
- }
-@@ -7395,15 +7425,45 @@ avr_output_addr_vec_elt (FILE *stream, i
-
- static void
- avr_conditional_register_usage(void) {
-- if (AVR_TINY) {
-- int i;
-- for (i = 0; i <= 17; i++) {
-- fixed_regs[i] = 1;
-- call_used_regs[i] = 1;
-- }
-- CLEAR_HARD_REG_SET(reg_class_contents[(int)ADDW_REGS]);
-- CLEAR_HARD_REG_SET(reg_class_contents[(int)NO_LD_REGS]);
-- }
-+ if (AVR_TINY) {
-+ int i;
-+
-+ const int tiny_reg_alloc_order[] = {
-+ 24,25,
-+ 22,23,
-+ 30,31,
-+ 26,27,
-+ 28,29,
-+ 21,20,19,18,
-+ 16,17,
-+ 32,33,34,35,
-+ 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
-+ };
-+
-+ /* Set R0-R17 as fixed registers. Reset R0-R17 in call used register list
-+ - R0-R15 are not available in Tiny Core devices
-+ - R16 and R17 are fixed registers
-+ */
-+ for (i = 0; i <= 17; i++) {
-+ fixed_regs[i] = 1;
-+ call_used_regs[i] = 1;
-+ }
-+
-+ /* Set R18 to R21 as call used register
-+ - R18, R19, R20 and R21 are the call used registers in Tiny Core devices
-+ */
-+ for (i = 18; i <= LAST_CALLEE_SAVED_REG; i++) {
-+ call_used_regs[i] = 0;
-+ }
-+
-+ /*update register allocation order for Tiny Core devices */
-+ for (i=0; i < ARRAY_SIZE (tiny_reg_alloc_order); i++) {
-+ reg_alloc_order[i] = tiny_reg_alloc_order[i];
-+ }
-+
-+ CLEAR_HARD_REG_SET(reg_class_contents[(int)ADDW_REGS]);
-+ CLEAR_HARD_REG_SET(reg_class_contents[(int)NO_LD_REGS]);
-+ }
- }
-
- /* Returns true if SCRATCH are safe to be allocated as a scratch
-@@ -7553,13 +7613,20 @@ avr_asm_out_dtor (rtx symbol, int priori
- static bool
- avr_return_in_memory (const_tree type, const_tree fntype ATTRIBUTE_UNUSED)
- {
-- if (TYPE_MODE (type) == BLKmode)
-- {
-- HOST_WIDE_INT size = int_size_in_bytes (type);
-- return (size == -1 || size > 8);
-- }
-+ HOST_WIDE_INT size = int_size_in_bytes (type);
-+ HOST_WIDE_INT ret_size_limit = AVR_TINY ? 4 : 8;
-+
-+ /* In avr, there are 8 return registers. But, for Tiny Core
-+ (attiny4/5/9/10/20/40) devices, only 4 registers available.
-+ Return true if size is unknown or greater than the limit */
-+ if ((size == -1) || (size > ret_size_limit))
-+ {
-+ return true;
-+ }
- else
-+ {
- return false;
-+ }
- }
-
- /* Worker function for CASE_VALUES_THRESHOLD. */
diff --git a/510-gcc-avrtc496-tiny.patch b/510-gcc-avrtc496-tiny.patch
deleted file mode 100644
index 2bcc7f6..0000000
--- a/510-gcc-avrtc496-tiny.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-diff -Naurp gcc/config/avr/avr.c gcc/config/avr/avr.c
---- gcc/config/avr/avr.c 2012-06-27 15:41:23.000000000 +0530
-+++ gcc/config/avr/avr.c 2012-06-27 15:42:02.000000000 +0530
-@@ -751,15 +751,15 @@ expand_prologue (void)
- emit_insn (gen_enable_interrupt ());
-
- /* Push zero reg. */
-- emit_push_byte (ZERO_REGNO, true);
-+ emit_push_byte ((AVR_TINY)?ZERO_REGNO_AVRTINY10:ZERO_REGNO, true);
-
- /* Push tmp reg. */
-- emit_push_byte (TMP_REGNO, true);
-+ emit_push_byte ((AVR_TINY)?TMP_REGNO_AVRTINY10:TMP_REGNO, true);
-
- /* Push SREG. */
- /* ??? There's no dwarf2 column reserved for SREG. */
- emit_move_insn (tmp_reg_rtx, gen_rtx_MEM (QImode, GEN_INT (AVR_SREG_ADDR)));
-- emit_push_byte (TMP_REGNO, false);
-+ emit_push_byte ((AVR_TINY)?TMP_REGNO_AVRTINY10:TMP_REGNO, false);
-
- /* Push RAMPD, RAMPX, RAMPY. */
- /*
-@@ -1217,16 +1217,16 @@ expand_epilogue (void)
- }
-
- /* Restore SREG using tmp reg as scratch. */
-- emit_pop_byte (TMP_REGNO);
-+ emit_pop_byte ((AVR_TINY)?TMP_REGNO_AVRTINY10:TMP_REGNO);
-
- emit_move_insn (gen_rtx_MEM (QImode, GEN_INT (AVR_SREG_ADDR)),
- tmp_reg_rtx);
-
- /* Restore tmp REG. */
-- emit_pop_byte (TMP_REGNO);
-+ emit_pop_byte ((AVR_TINY)?TMP_REGNO_AVRTINY10:TMP_REGNO);
-
- /* Restore zero REG. */
-- emit_pop_byte (ZERO_REGNO);
-+ emit_pop_byte ((AVR_TINY)?ZERO_REGNO_AVRTINY10:ZERO_REGNO);
- }
-
- emit_jump_insn (gen_return ());
diff --git a/511-gcc-avrtc539-backported.patch b/511-gcc-avrtc539-backported.patch
deleted file mode 100644
index 20d01db..0000000
--- a/511-gcc-avrtc539-backported.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-diff -Naurp gcc/combine.c gcc/combine.c
---- gcc/combine.c 2011-07-29 14:05:59.000000000 +0530
-+++ gcc/combine.c 2012-06-28 15:51:12.000000000 +0530
-@@ -1666,6 +1666,7 @@ can_combine_p (rtx insn, rtx i3, rtx pre
- rtx link;
- #endif
- bool all_adjacent = true;
-+ int (*is_volatile_p) (const_rtx);
-
- if (succ)
- {
-@@ -1914,11 +1915,17 @@ can_combine_p (rtx insn, rtx i3, rtx pre
- && REG_P (dest) && REGNO (dest) < FIRST_PSEUDO_REGISTER)
- return 0;
-
-- /* If there are any volatile insns between INSN and I3, reject, because
-- they might affect machine state. */
--
-+ /* If INSN contains volatile references (specifically volatile MEMs),
-+ we cannot combine across any other volatile references.
-+ Even if INSN doesn't contain volatile references, any intervening
-+ volatile insn might affect machine state. */
-+
-+ is_volatile_p = volatile_refs_p (PATTERN (insn))
-+ ? volatile_refs_p
-+ : volatile_insn_p;
-+
- for (p = NEXT_INSN (insn); p != i3; p = NEXT_INSN (p))
-- if (INSN_P (p) && p != succ && p != succ2 && volatile_insn_p (PATTERN (p)))
-+ if (INSN_P (p) && p != succ && p != succ2 && is_volatile_p (PATTERN (p)))
- return 0;
-
- /* If INSN contains an autoincrement or autodecrement, make sure that
-diff -Naurp gcc/config/avr/avr.c gcc/config/avr/avr.c
---- gcc/config/avr/avr.c 2012-06-28 15:47:34.000000000 +0530
-+++ gcc/config/avr/avr.c 2012-06-28 15:51:12.000000000 +0530
-@@ -6307,6 +6307,7 @@ avr_encode_section_info (tree decl, rtx
- if (new_decl_p
- && decl && DECL_P (decl)
- && NULL_TREE == DECL_INITIAL (decl)
-+ && !DECL_EXTERNAL (decl)
- && avr_progmem_p (decl, DECL_ATTRIBUTES (decl)))
- {
- warning (OPT_Wuninitialized,
diff --git a/512-gcc-avrtc542.patch b/512-gcc-avrtc542.patch
deleted file mode 100644
index 9c23ed8..0000000
--- a/512-gcc-avrtc542.patch
+++ /dev/null
@@ -1,2753 +0,0 @@
-diff -Naurp gcc/config/avr/avr.c gcc/config/avr/avr.c
---- gcc/config/avr/avr.c 2012-07-05 14:23:46.000000000 +0530
-+++ gcc/config/avr/avr.c 2012-07-06 17:30:38.000000000 +0530
-@@ -2191,19 +2191,28 @@ out_movqi_r_mr (rtx insn, rtx op[], int
- fatal_insn ("incorrect insn:",insn);
-
- if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (src)))
-- return *l = 3, AVR_TINY ? (AS2 (subi,r28,lo8(-(%o1-63))) CR_TAB
-- AS2 (sbci,r29,hi8(-(%o1-63))) CR_TAB
-- AS2 (subi,r28,lo8(-63)) CR_TAB
-- AS2 (sbci,r29,hi8(-63)) CR_TAB
-- AS2 (ld,%0,Y) CR_TAB
-- AS2 (subi,r28,lo8(63)) CR_TAB
-- AS2 (sbci,r29,hi8(63)) CR_TAB
-- AS2 (subi,r28,lo8(%o1-63)) CR_TAB
-- AS2 (sbci,r29,hi8(%o1-63)))
-- : (AS2 (adiw,r28,%o1-63) CR_TAB
-- AS2 (ldd,%0,Y+63) CR_TAB
-- AS2 (sbiw,r28,%o1-63));
--
-+ {
-+ if (AVR_TINY)
-+ {
-+ *l = 9;
-+ return (AS2 (subi,r28,lo8(-(%o1-63))) CR_TAB
-+ AS2 (sbci,r29,hi8(-(%o1-63))) CR_TAB
-+ AS2 (subi,r28,lo8(-63)) CR_TAB
-+ AS2 (sbci,r29,hi8(-63)) CR_TAB
-+ AS2 (ld,%0,Y) CR_TAB
-+ AS2 (subi,r28,lo8(63)) CR_TAB
-+ AS2 (sbci,r29,hi8(63)) CR_TAB
-+ AS2 (subi,r28,lo8(%o1-63)) CR_TAB
-+ AS2 (sbci,r29,hi8(%o1-63)));
-+ }
-+ else
-+ {
-+ *l = 3;
-+ return (AS2 (adiw,r28,%o1-63) CR_TAB
-+ AS2 (ldd,%0,Y+63) CR_TAB
-+ AS2 (sbiw,r28,%o1-63));
-+ }
-+ }
-
- return *l = 5, (AS2 (subi,r28,lo8(-%o1)) CR_TAB
- AS2 (sbci,r29,hi8(-%o1)) CR_TAB
-@@ -2217,38 +2226,75 @@ out_movqi_r_mr (rtx insn, rtx op[], int
- it but I have this situation with extremal optimizing options. */
- if (reg_overlap_mentioned_p (dest, XEXP (x,0))
- || reg_unused_after (insn, XEXP (x,0)))
-- return *l = 2, AVR_TINY ? (AS2 (subi,r26,lo8(-(%o1))) CR_TAB
-- AS2 (sbci,r27,hi8(-(%o1))) CR_TAB
-- AS2 (ld,%0,X))
-- : (AS2 (adiw,r26,%o1) CR_TAB
-- AS2 (ld,%0,X));
--
-- return *l = 3, AVR_TINY ? (AS2 (subi,r26,lo8(-(%o1))) CR_TAB
-- AS2 (sbci,r27,hi8(-(%o1))) CR_TAB
-- AS2 (ld,%0,X) CR_TAB
-- AS2 (subi,r26,lo8(%o1)) CR_TAB
-- AS2 (sbci,r27,hi8(%o1)))
-- : (AS2 (adiw,r26,%o1) CR_TAB
-- AS2 (ld,%0,X) CR_TAB
-- AS2 (sbiw,r26,%o1));
-+ {
-+ if (AVR_TINY)
-+ {
-+ *l = 3;
-+ return (AS2 (subi,r26,lo8(-(%o1))) CR_TAB
-+ AS2 (sbci,r27,hi8(-(%o1))) CR_TAB
-+ AS2 (ld,%0,X));
-+ }
-+ else
-+ {
-+ *l = 2;
-+ return (AS2 (adiw,r26,%o1) CR_TAB
-+ AS2 (ld,%0,X));
-+ }
-+ }
-+
-+ if (AVR_TINY)
-+ {
-+ *l = 5;
-+ return (AS2 (subi,r26,lo8(-(%o1))) CR_TAB
-+ AS2 (sbci,r27,hi8(-(%o1))) CR_TAB
-+ AS2 (ld,%0,X) CR_TAB
-+ AS2 (subi,r26,lo8(%o1)) CR_TAB
-+ AS2 (sbci,r27,hi8(%o1)));
-+ }
-+ else
-+ {
-+ *l = 3;
-+ return (AS2 (adiw,r26,%o1) CR_TAB
-+ AS2 (ld,%0,X) CR_TAB
-+ AS2 (sbiw,r26,%o1));
-+ }
- }
-
-- *l = 1;
- op[2] = XEXP(x, 0);
- if(REGNO(op[2]) == REG_Y)
-- return AVR_TINY ? ( AS2 (subi,%A2,lo8(-(%o1))) CR_TAB
-- AS2 (sbci,%B2,hi8(-(%o1))) CR_TAB
-- AS2 (ld,%0,Y) CR_TAB
-- AS2 (subi,%A2,lo8(%o1)) CR_TAB
-- AS2 (sbci,%B2,hi8(%o1)))
-- : AS2 (ldd,%0,%1);
-+ {
-+ if (AVR_TINY)
-+ {
-+ *l = 5;
-+ return (AS2 (subi,%A2,lo8(-(%o1))) CR_TAB
-+ AS2 (sbci,%B2,hi8(-(%o1))) CR_TAB
-+ AS2 (ld,%0,Y) CR_TAB
-+ AS2 (subi,%A2,lo8(%o1)) CR_TAB
-+ AS2 (sbci,%B2,hi8(%o1)));
-+ }
-+ else
-+ {
-+ *l = 1;
-+ return (AS2 (ldd,%0,%1));
-+ }
-+ }
- if(REGNO(op[2]) == REG_Z)
-- return AVR_TINY ? ( AS2 (subi,%A2,lo8(-(%o1))) CR_TAB
-- AS2 (sbci,%B2,hi8(-(%o1))) CR_TAB
-- AS2 (ld,%0,Z) CR_TAB
-- AS2 (subi,%A2,lo8(%o1)) CR_TAB
-- AS2 (sbci,%B2,hi8(%o1)))
-- : AS2 (ldd,%0,%1);
-+ {
-+ if (AVR_TINY)
-+ {
-+ *l = 5;
-+ return (AS2 (subi,%A2,lo8(-(%o1))) CR_TAB
-+ AS2 (sbci,%B2,hi8(-(%o1))) CR_TAB
-+ AS2 (ld,%0,Z) CR_TAB
-+ AS2 (subi,%A2,lo8(%o1)) CR_TAB
-+ AS2 (sbci,%B2,hi8(%o1)));
-+ }
-+ else
-+ {
-+ *l = 1;
-+ return (AS2 (ldd,%0,%1));
-+ }
-+ }
- }
- *l = 1;
- return AS2 (ld,%0,%1);
-@@ -2287,36 +2333,57 @@ out_movhi_r_mr (rtx insn, rtx op[], int
- return (AS2 (ld,%A0,X+) CR_TAB
- AS2 (ld,%B0,X));
- }
-- *l = 3;
-- return AVR_TINY ? (AS2 (ld,%A0,X+) CR_TAB
-- AS2 (ld,%B0,X) CR_TAB
-- AS2 (subi,r26,lo8(1)) CR_TAB
-- AS2 (sbci,r27,hi8(1)))
-- : (AS2 (ld,%A0,X+) CR_TAB
-- AS2 (ld,%B0,X) CR_TAB
-- AS2 (sbiw,r26,1));
-+
-+ if (AVR_TINY)
-+ {
-+ *l = 4;
-+ return (AS2 (ld,%A0,X+) CR_TAB
-+ AS2 (ld,%B0,X) CR_TAB
-+ AS2 (subi,r26,lo8(1)) CR_TAB
-+ AS2 (sbci,r27,hi8(1)));
-+ }
-+ else
-+ {
-+ *l = 3;
-+ return (AS2 (ld,%A0,X+) CR_TAB
-+ AS2 (ld,%B0,X) CR_TAB
-+ AS2 (sbiw,r26,1));
-+ }
- }
- else /* (R) */
- {
-- *l = 2;
- if(reg_base == REG_Y)
-- return AVR_TINY ? (AS2 (ld,%A0,%1) CR_TAB
-- AS2 (subi,r28,lo8((-1))) CR_TAB
-- AS2 (sbci,r29,hi8((-1))) CR_TAB
-- AS2 (ld,%B0,%1) CR_TAB
-- AS2 (subi,r28,lo8(1)) CR_TAB
-- AS2 (sbci,r29,hi8(1)))
-- : (AS2 (ld,%A0,%1) CR_TAB
-- AS2 (ldd,%B0,%1+1));
-+ {
-+ if (AVR_TINY) {
-+ *l = 6;
-+ return (AS2 (ld,%A0,%1) CR_TAB
-+ AS2 (subi,r28,lo8((-1))) CR_TAB
-+ AS2 (sbci,r29,hi8((-1))) CR_TAB
-+ AS2 (ld,%B0,%1) CR_TAB
-+ AS2 (subi,r28,lo8(1)) CR_TAB
-+ AS2 (sbci,r29,hi8(1)));
-+ } else {
-+ *l = 2;
-+ return (AS2 (ld,%A0,%1) CR_TAB
-+ AS2 (ldd,%B0,%1+1));
-+ }
-+ }
- if(reg_base == REG_Z)
-- return AVR_TINY ? (AS2 (ld,%A0,%1) CR_TAB
-- AS2 (subi,r30,lo8((-1))) CR_TAB
-- AS2 (sbci,r31,hi8((-1))) CR_TAB
-- AS2 (ld,%B0,%1) CR_TAB
-- AS2 (subi,r30,lo8(1)) CR_TAB
-- AS2 (sbci,r31,hi8(1)))
-- : (AS2 (ld,%A0,%1) CR_TAB
-- AS2 (ldd,%B0,%1+1));
-+ {
-+ if (AVR_TINY) {
-+ *l = 6;
-+ return (AS2 (ld,%A0,%1) CR_TAB
-+ AS2 (subi,r30,lo8((-1))) CR_TAB
-+ AS2 (sbci,r31,hi8((-1))) CR_TAB
-+ AS2 (ld,%B0,%1) CR_TAB
-+ AS2 (subi,r30,lo8(1)) CR_TAB
-+ AS2 (sbci,r31,hi8(1)));
-+ } else {
-+ *l = 2;
-+ return (AS2 (ld,%A0,%1) CR_TAB
-+ AS2 (ldd,%B0,%1+1));
-+ }
-+ }
- }
- }
- else if (GET_CODE (base) == PLUS) /* (R + i) */
-@@ -2330,35 +2397,47 @@ out_movhi_r_mr (rtx insn, rtx op[], int
- fatal_insn ("incorrect insn:",insn);
-
- if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (src)))
-- return *l = 4, AVR_TINY ? (AS2 (subi,r28,lo8(-(%o1-62))) CR_TAB
-- AS2 (sbci,r29,hi8(-(%o1-62))) CR_TAB
-- AS2 (subi,r28,lo8(-62)) CR_TAB
-- AS2 (sbci,r29,hi8(-62)) CR_TAB
-- AS2 (ld,%A0,Y+) CR_TAB
-- AS2 (ld,%B0,Y) CR_TAB
-- AS2 (subi,r28,lo8(63)) CR_TAB
-- AS2 (sbci,r29,hi8(63)) CR_TAB
-- AS2 (subi,r28,lo8(%o1-62)) CR_TAB
-- AS2 (sbci,r29,hi8(%o1-62)))
-- : (AS2 (adiw,r28,%o1-62) CR_TAB
-- AS2 (ldd,%A0,Y+62) CR_TAB
-- AS2 (ldd,%B0,Y+63) CR_TAB
-- AS2 (sbiw,r28,%o1-62));
--
-- return *l = 6, AVR_TINY ? (AS2 (subi,r28,lo8(-%o1)) CR_TAB
-- AS2 (sbci,r29,hi8(-%o1)) CR_TAB
-- AS2 (ld,%A0,Y+) CR_TAB
-- AS2 (ld,%B0,Y) CR_TAB
-- AS2 (subi,r28,lo8(1)) CR_TAB
-- AS2 (sbci,r29,hi8(1)) CR_TAB
-- AS2 (subi,r28,lo8(%o1)) CR_TAB
-- AS2 (sbci,r29,hi8(%o1)))
-- : (AS2 (subi,r28,lo8(-%o1)) CR_TAB
-- AS2 (sbci,r29,hi8(-%o1)) CR_TAB
-- AS2 (ld,%A0,Y) CR_TAB
-- AS2 (ldd,%B0,Y+1) CR_TAB
-- AS2 (subi,r28,lo8(%o1)) CR_TAB
-- AS2 (sbci,r29,hi8(%o1)));
-+ {
-+ if (AVR_TINY) {
-+ *l = 10;
-+ return (AS2 (subi,r28,lo8(-(%o1-62))) CR_TAB
-+ AS2 (sbci,r29,hi8(-(%o1-62))) CR_TAB
-+ AS2 (subi,r28,lo8(-62)) CR_TAB
-+ AS2 (sbci,r29,hi8(-62)) CR_TAB
-+ AS2 (ld,%A0,Y+) CR_TAB
-+ AS2 (ld,%B0,Y) CR_TAB
-+ AS2 (subi,r28,lo8(63)) CR_TAB
-+ AS2 (sbci,r29,hi8(63)) CR_TAB
-+ AS2 (subi,r28,lo8(%o1-62)) CR_TAB
-+ AS2 (sbci,r29,hi8(%o1-62)));
-+ } else {
-+ *l = 4;
-+ return (AS2 (adiw,r28,%o1-62) CR_TAB
-+ AS2 (ldd,%A0,Y+62) CR_TAB
-+ AS2 (ldd,%B0,Y+63) CR_TAB
-+ AS2 (sbiw,r28,%o1-62));
-+ }
-+ }
-+
-+ if (AVR_TINY) {
-+ *l = 8;
-+ return (AS2 (subi,r28,lo8(-%o1)) CR_TAB
-+ AS2 (sbci,r29,hi8(-%o1)) CR_TAB
-+ AS2 (ld,%A0,Y+) CR_TAB
-+ AS2 (ld,%B0,Y) CR_TAB
-+ AS2 (subi,r28,lo8(1)) CR_TAB
-+ AS2 (sbci,r29,hi8(1)) CR_TAB
-+ AS2 (subi,r28,lo8(%o1)) CR_TAB
-+ AS2 (sbci,r29,hi8(%o1)));
-+ } else {
-+ *l = 6;
-+ return (AS2 (subi,r28,lo8(-%o1)) CR_TAB
-+ AS2 (sbci,r29,hi8(-%o1)) CR_TAB
-+ AS2 (ld,%A0,Y) CR_TAB
-+ AS2 (ldd,%B0,Y+1) CR_TAB
-+ AS2 (subi,r28,lo8(%o1)) CR_TAB
-+ AS2 (sbci,r29,hi8(%o1)));
-+ }
- }
- if (reg_base == REG_X)
- {
-@@ -2366,80 +2445,114 @@ out_movhi_r_mr (rtx insn, rtx op[], int
- it but I have this situation with extremal
- optimization options. */
-
-- *l = 4;
-- if (reg_base == reg_dest)
-- return AVR_TINY ? (AS2 (subi,r26,lo8(-%o1)) CR_TAB
-- AS2 (sbci,r27,hi8(-%o1)) CR_TAB
-- AS2 (ld,__tmp_reg__,X+) CR_TAB
-- AS2 (ld,%B0,X) CR_TAB
-- AS2 (mov,%A0,__tmp_reg__))
-- : (AS2 (adiw,r26,%o1) CR_TAB
-- AS2 (ld,__tmp_reg__,X+) CR_TAB
-- AS2 (ld,%B0,X) CR_TAB
-- AS2 (mov,%A0,__tmp_reg__));
--
-- return AVR_TINY ? (AS2 (subi,r26,lo8(-%o1)) CR_TAB
-- AS2 (sbci,r27,hi8(-%o1)) CR_TAB
-- AS2 (ld,%A0,X+) CR_TAB
-- AS2 (ld,%B0,X) CR_TAB
-- AS2 (subi,r26,lo8(%o1+1)) CR_TAB
-- AS2 (sbci,r27,hi8(%o1+1)))
-- : (AS2 (adiw,r26,%o1) CR_TAB
-- AS2 (ld,%A0,X+) CR_TAB
-- AS2 (ld,%B0,X) CR_TAB
-- AS2 (sbiw,r26,%o1+1));
-+ if (reg_base == reg_dest) {
-+ if (AVR_TINY) {
-+ *l = 5;
-+ return (AS2 (subi,r26,lo8(-%o1)) CR_TAB
-+ AS2 (sbci,r27,hi8(-%o1)) CR_TAB
-+ AS2 (ld,__tmp_reg__,X+) CR_TAB
-+ AS2 (ld,%B0,X) CR_TAB
-+ AS2 (mov,%A0,__tmp_reg__));
-+ } else {
-+ *l = 4;
-+ return (AS2 (adiw,r26,%o1) CR_TAB
-+ AS2 (ld,__tmp_reg__,X+) CR_TAB
-+ AS2 (ld,%B0,X) CR_TAB
-+ AS2 (mov,%A0,__tmp_reg__));
-+ }
-+ }
-+
-+ if (AVR_TINY) {
-+ *l = 6;
-+ return (AS2 (subi,r26,lo8(-%o1)) CR_TAB
-+ AS2 (sbci,r27,hi8(-%o1)) CR_TAB
-+ AS2 (ld,%A0,X+) CR_TAB
-+ AS2 (ld,%B0,X) CR_TAB
-+ AS2 (subi,r26,lo8(%o1+1)) CR_TAB
-+ AS2 (sbci,r27,hi8(%o1+1)));
-+ } else {
-+ *l = 4;
-+ return (AS2 (adiw,r26,%o1) CR_TAB
-+ AS2 (ld,%A0,X+) CR_TAB
-+ AS2 (ld,%B0,X) CR_TAB
-+ AS2 (sbiw,r26,%o1+1));
-+ }
- }
-
- if (reg_base == reg_dest)
- {
-- *l = 3;
- op[2] = XEXP(base, 0);
-
-- if(REGNO(op[2]) == REG_Y)
-- return AVR_TINY ? ( AS2 (subi,%A2,lo8(-(%o1))) CR_TAB
-- AS2 (sbci,%B2,hi8(-(%o1))) CR_TAB
-- AS2 (ld,__tmp_reg__,Y+) CR_TAB
-- AS2 (ld,%B0,Y) CR_TAB
-- AS2 (subi,%A2,lo8(%o1+1)) CR_TAB
-- AS2 (sbci,%B2,hi8(%o1+1)) CR_TAB
-- AS2 (mov,%A0,__tmp_reg__))
-- : (AS2 (ldd,__tmp_reg__,%A1) CR_TAB
-- AS2 (ldd,%B0,%B1) CR_TAB
-- AS2 (mov,%A0,__tmp_reg__));
-- if(REGNO(op[2]) == REG_Z)
-- return AVR_TINY ? ( AS2 (subi,%A2,lo8(-(%o1))) CR_TAB
-- AS2 (sbci,%B2,hi8(-(%o1))) CR_TAB
-- AS2 (ld,__tmp_reg__,Z+) CR_TAB
-- AS2 (ld,%B0,Z) CR_TAB
-- AS2 (subi,%A2,lo8(%o1+1)) CR_TAB
-- AS2 (sbci,%B2,hi8(%o1+1)) CR_TAB
-- AS2 (mov,%A0,__tmp_reg__))
-- : (AS2 (ldd,__tmp_reg__,%A1) CR_TAB
-- AS2 (ldd,%B0,%B1) CR_TAB
-- AS2 (mov,%A0,__tmp_reg__));
-+ if(REGNO(op[2]) == REG_Y) {
-+ if (AVR_TINY) {
-+ *l = 7;
-+ return (AS2 (subi,%A2,lo8(-(%o1))) CR_TAB
-+ AS2 (sbci,%B2,hi8(-(%o1))) CR_TAB
-+ AS2 (ld,__tmp_reg__,Y+) CR_TAB
-+ AS2 (ld,%B0,Y) CR_TAB
-+ AS2 (subi,%A2,lo8(%o1+1)) CR_TAB
-+ AS2 (sbci,%B2,hi8(%o1+1)) CR_TAB
-+ AS2 (mov,%A0,__tmp_reg__));
-+ } else {
-+ *l = 3;
-+ return (AS2 (ldd,__tmp_reg__,%A1) CR_TAB
-+ AS2 (ldd,%B0,%B1) CR_TAB
-+ AS2 (mov,%A0,__tmp_reg__));
-+ }
-+ }
-+ if(REGNO(op[2]) == REG_Z) {
-+ if (AVR_TINY) {
-+ *l = 7;
-+ return (AS2 (subi,%A2,lo8(-(%o1))) CR_TAB
-+ AS2 (sbci,%B2,hi8(-(%o1))) CR_TAB
-+ AS2 (ld,__tmp_reg__,Z+) CR_TAB
-+ AS2 (ld,%B0,Z) CR_TAB
-+ AS2 (subi,%A2,lo8(%o1+1)) CR_TAB
-+ AS2 (sbci,%B2,hi8(%o1+1)) CR_TAB
-+ AS2 (mov,%A0,__tmp_reg__));
-+ } else {
-+ *l = 3;
-+ return (AS2 (ldd,__tmp_reg__,%A1) CR_TAB
-+ AS2 (ldd,%B0,%B1) CR_TAB
-+ AS2 (mov,%A0,__tmp_reg__));
-+ }
-+ }
- }
-- *l = 2;
-
- op[2] = XEXP(base, 0);
-
- if(REGNO(op[2]) == REG_Y)
-- return AVR_TINY ? ( AS2 (subi,%A2,lo8(-(%o1))) CR_TAB
-- AS2 (sbci,%B2,hi8(-(%o1))) CR_TAB
-- AS2 (ld,%A0,Y+) CR_TAB
-- AS2 (ld,%B0,Y) CR_TAB
-- AS2 (subi,%A2,lo8(%o1+1)) CR_TAB
-- AS2 (sbci,%B2,hi8(%o1+1)))
-- : (AS2 (ldd,%A0,%A1) CR_TAB
-- AS2 (ldd,%B0,%B1));
-+ {
-+ if (AVR_TINY) {
-+ *l = 6;
-+ return (AS2 (subi,%A2,lo8(-(%o1))) CR_TAB
-+ AS2 (sbci,%B2,hi8(-(%o1))) CR_TAB
-+ AS2 (ld,%A0,Y+) CR_TAB
-+ AS2 (ld,%B0,Y) CR_TAB
-+ AS2 (subi,%A2,lo8(%o1+1)) CR_TAB
-+ AS2 (sbci,%B2,hi8(%o1+1)));
-+ } else {
-+ *l = 2;
-+ return (AS2 (ldd,%A0,%A1) CR_TAB
-+ AS2 (ldd,%B0,%B1));
-+ }
-+ }
- if(REGNO(op[2]) == REG_Z)
-- return AVR_TINY ? ( AS2 (subi,%A2,lo8(-(%o1))) CR_TAB
-- AS2 (sbci,%B2,hi8(-(%o1))) CR_TAB
-- AS2 (ld,%A0,Z+) CR_TAB
-- AS2 (ld,%B0,Z) CR_TAB
-- AS2 (subi,%A2,lo8(%o1+1)) CR_TAB
-- AS2 (sbci,%B2,hi8(%o1+1)))
-- : (AS2 (ldd,%A0,%A1) CR_TAB
-- AS2 (ldd,%B0,%B1));
-+ {
-+ if (AVR_TINY) {
-+ *l = 6;
-+ return (AS2 (subi,%A2,lo8(-(%o1))) CR_TAB
-+ AS2 (sbci,%B2,hi8(-(%o1))) CR_TAB
-+ AS2 (ld,%A0,Z+) CR_TAB
-+ AS2 (ld,%B0,Z) CR_TAB
-+ AS2 (subi,%A2,lo8(%o1+1)) CR_TAB
-+ AS2 (sbci,%B2,hi8(%o1+1)));
-+ } else {
-+ *l = 2;
-+ return (AS2 (ldd,%A0,%A1) CR_TAB
-+ AS2 (ldd,%B0,%B1));
-+ }
-+ }
-
- }
- else if (GET_CODE (base) == PRE_DEC) /* (--R) */
-@@ -2450,35 +2563,43 @@ out_movhi_r_mr (rtx insn, rtx op[], int
- if (mem_volatile_p)
- {
- if (REGNO (XEXP (base, 0)) == REG_X)
-- {
-+ {
-+ if (AVR_TINY) {
-+ *l = 6;
-+ return (AS2 (subi,r26,lo8(2)) CR_TAB
-+ AS2 (sbci,r27,hi8(2)) CR_TAB
-+ AS2 (ld,%A0,X+) CR_TAB
-+ AS2 (ld,%B0,X) CR_TAB
-+ AS2 (subi,r26,lo8(1)) CR_TAB
-+ AS2 (sbci,r27,hi8(1)));
-+ } else {
- *l = 4;
-- return AVR_TINY ? (AS2 (subi,r26,lo8(2)) CR_TAB
-- AS2 (sbci,r27,hi8(2)) CR_TAB
-- AS2 (ld,%A0,X+) CR_TAB
-- AS2 (ld,%B0,X) CR_TAB
-- AS2 (subi,r26,lo8(1)) CR_TAB
-- AS2 (sbci,r27,hi8(1)))
-- : (AS2 (sbiw,r26,2) CR_TAB
-+ return (AS2 (sbiw,r26,2) CR_TAB
- AS2 (ld,%A0,X+) CR_TAB
- AS2 (ld,%B0,X) CR_TAB
- AS2 (sbiw,r26,1));
- }
-+ }
- else
-- {
-+ {
-+ //FIXME:check the code once again for AVR_TINY
-+ if (AVR_TINY) {
-+ *l = 8;
-+ return (AS2 (subi,%A1,lo8(3)) CR_TAB
-+ AS2 (sbci,%B1,hi8(3)) CR_TAB
-+ AS2 (ld,%A0,%p1) CR_TAB
-+ AS2 (subi,%A1,lo8(-1)) CR_TAB
-+ AS2 (sbci,%B1,hi8(-1)) CR_TAB
-+ AS2 (ld,%B0,%p1) CR_TAB
-+ AS2 (subi,%A1,lo8(1)) CR_TAB
-+ AS2 (sbci,%B1,hi8(1)));
-+ } else {
- *l = 3;
-- //FIXME:check the code once again for AVR_TINY
-- return AVR_TINY ? (AS2 (subi,%A1,lo8(3)) CR_TAB
-- AS2 (sbci,%B1,hi8(3)) CR_TAB
-- AS2 (ld,%A0,%p1) CR_TAB
-- AS2 (subi,%A1,lo8(-1)) CR_TAB
-- AS2 (sbci,%B1,hi8(-1)) CR_TAB
-- AS2 (ld,%B0,%p1) CR_TAB
-- AS2 (subi,%A1,lo8(1)) CR_TAB
-- AS2 (sbci,%B1,hi8(1)))
-- : (AS2 (sbiw,%r1,2) CR_TAB
-- AS2 (ld,%A0,%p1) CR_TAB
-+ return (AS2 (sbiw,%r1,2) CR_TAB
-+ AS2 (ld,%A0,%p1) CR_TAB
- AS2 (ldd,%B0,%p1+1));
- }
-+ }
- }
-
- *l = 2;
-@@ -2529,24 +2650,30 @@ out_movsi_r_mr (rtx insn, rtx op[], int
- {
- if (reg_base == REG_X) /* (R26) */
- {
-- if (reg_dest == REG_X)
-+ if (reg_dest == REG_X) {
- /* "ld r26,-X" is undefined */
-- return *l=7, AVR_TINY ? (AS2 (subi,r26,lo8(-3)) CR_TAB
-- AS2 (sbci,r27,hi8(-3)) CR_TAB
-- AS2 (ld,r29,X) CR_TAB
-- AS2 (ld,r28,-X) CR_TAB
-- AS2 (ld,__tmp_reg__,-X) CR_TAB
-- AS2 (subi,r26,lo8(1)) CR_TAB
-- AS2 (sbci,r27,hi8(1)) CR_TAB
-- AS2 (ld,r26,X) CR_TAB
-- AS2 (mov,r27,__tmp_reg__))
-- : (AS2 (adiw,r26,3) CR_TAB
-- AS2 (ld,r29,X) CR_TAB
-- AS2 (ld,r28,-X) CR_TAB
-- AS2 (ld,__tmp_reg__,-X) CR_TAB
-- AS2 (sbiw,r26,1) CR_TAB
-- AS2 (ld,r26,X) CR_TAB
-- AS2 (mov,r27,__tmp_reg__));
-+ if (AVR_TINY) {
-+ *l = 9;
-+ return (AS2 (subi,r26,lo8(-3)) CR_TAB
-+ AS2 (sbci,r27,hi8(-3)) CR_TAB
-+ AS2 (ld,r29,X) CR_TAB
-+ AS2 (ld,r28,-X) CR_TAB
-+ AS2 (ld,__tmp_reg__,-X) CR_TAB
-+ AS2 (subi,r26,lo8(1)) CR_TAB
-+ AS2 (sbci,r27,hi8(1)) CR_TAB
-+ AS2 (ld,r26,X) CR_TAB
-+ AS2 (mov,r27,__tmp_reg__));
-+ } else {
-+ *l = 7;
-+ return (AS2 (adiw,r26,3) CR_TAB
-+ AS2 (ld,r29,X) CR_TAB
-+ AS2 (ld,r28,-X) CR_TAB
-+ AS2 (ld,__tmp_reg__,-X) CR_TAB
-+ AS2 (sbiw,r26,1) CR_TAB
-+ AS2 (ld,r26,X) CR_TAB
-+ AS2 (mov,r27,__tmp_reg__));
-+ }
-+ }
-
- else if (reg_dest == REG_X - 2)
- return *l=5, (AS2 (ld,%A0,X+) CR_TAB
-@@ -2559,113 +2686,154 @@ out_movsi_r_mr (rtx insn, rtx op[], int
- AS2 (ld,%B0,X+) CR_TAB
- AS2 (ld,%C0,X+) CR_TAB
- AS2 (ld,%D0,X));
-- else
-- return *l=5, AVR_TINY ? (AS2 (ld,%A0,X+) CR_TAB
-- AS2 (ld,%B0,X+) CR_TAB
-- AS2 (ld,%C0,X+) CR_TAB
-- AS2 (ld,%D0,X) CR_TAB
-- AS2 (subi,r26,lo8(3)) CR_TAB
-- AS2 (sbci,r27,hi8(3)))
-- : (AS2 (ld,%A0,X+) CR_TAB
-- AS2 (ld,%B0,X+) CR_TAB
-- AS2 (ld,%C0,X+) CR_TAB
-- AS2 (ld,%D0,X) CR_TAB
-- AS2 (sbiw,r26,3));
-+ else {
-+ if (AVR_TINY) {
-+ *l = 6;
-+ return (AS2 (ld,%A0,X+) CR_TAB
-+ AS2 (ld,%B0,X+) CR_TAB
-+ AS2 (ld,%C0,X+) CR_TAB
-+ AS2 (ld,%D0,X) CR_TAB
-+ AS2 (subi,r26,lo8(3)) CR_TAB
-+ AS2 (sbci,r27,hi8(3)));
-+ } else {
-+ *l = 5;
-+ return (AS2 (ld,%A0,X+) CR_TAB
-+ AS2 (ld,%B0,X+) CR_TAB
-+ AS2 (ld,%C0,X+) CR_TAB
-+ AS2 (ld,%D0,X) CR_TAB
-+ AS2 (sbiw,r26,3));
-+ }
-+ }
- }
- else
- {
- if (reg_dest == reg_base)
-- {
-- if(reg_base == REG_Y)
-- return *l=5, AVR_TINY ? (AS2 (subi,r28,lo8(-3)) CR_TAB
-- AS2 (sbci,r29,hi8(-3)) CR_TAB
-- AS2 (ld,%D0,Y) CR_TAB
-- AS2 (ld,%C0,-Y) CR_TAB
-- AS2 (subi,r28,lo8(1)) CR_TAB
-- AS2 (sbci,r29,hi8(1)) CR_TAB
-- AS2 (ld,__tmp_reg__,%1) CR_TAB
-- AS2 (subi,r28,lo8(1)) CR_TAB
-- AS2 (sbci,r29,hi8(1)) CR_TAB
-- AS2 (ld,%A0,%1) CR_TAB
-- AS2 (mov,%B0,__tmp_reg__))
-- : (AS2 (ldd,%D0,%1+3) CR_TAB
-- AS2 (ldd,%C0,%1+2) CR_TAB
-- AS2 (ldd,__tmp_reg__,%1+1) CR_TAB
-- AS2 (ld,%A0,%1) CR_TAB
-- AS2 (mov,%B0,__tmp_reg__));
-- if(reg_base == REG_Z)
-- return *l=5, AVR_TINY ? (AS2 (subi,r30,lo8(-3)) CR_TAB
-- AS2 (sbci,r31,hi8(-3)) CR_TAB
-- AS2 (ld,%D0,Z) CR_TAB
-- AS2 (ld,%C0,-Z) CR_TAB
-- AS2 (subi,r30,lo8(1)) CR_TAB
-- AS2 (sbci,r31,hi8(1)) CR_TAB
-- AS2 (ld,__tmp_reg__,%1) CR_TAB
-- AS2 (subi,r30,lo8(1)) CR_TAB
-- AS2 (sbci,r31,hi8(1)) CR_TAB
-- AS2 (ld,%A0,%1) CR_TAB
-- AS2 (mov,%B0,__tmp_reg__))
-- : (AS2 (ldd,%D0,%1+3) CR_TAB
-- AS2 (ldd,%C0,%1+2) CR_TAB
-- AS2 (ldd,__tmp_reg__,%1+1) CR_TAB
-- AS2 (ld,%A0,%1) CR_TAB
-- AS2 (mov,%B0,__tmp_reg__));
-- }
-+ {
-+ if(reg_base == REG_Y) {
-+ if (AVR_TINY) {
-+ *l = 11;
-+ return (AS2 (subi,r28,lo8(-3)) CR_TAB
-+ AS2 (sbci,r29,hi8(-3)) CR_TAB
-+ AS2 (ld,%D0,Y) CR_TAB
-+ AS2 (ld,%C0,-Y) CR_TAB
-+ AS2 (subi,r28,lo8(1)) CR_TAB
-+ AS2 (sbci,r29,hi8(1)) CR_TAB
-+ AS2 (ld,__tmp_reg__,%1) CR_TAB
-+ AS2 (subi,r28,lo8(1)) CR_TAB
-+ AS2 (sbci,r29,hi8(1)) CR_TAB
-+ AS2 (ld,%A0,%1) CR_TAB
-+ AS2 (mov,%B0,__tmp_reg__));
-+ } else {
-+ *l = 5;
-+ return (AS2 (ldd,%D0,%1+3) CR_TAB
-+ AS2 (ldd,%C0,%1+2) CR_TAB
-+ AS2 (ldd,__tmp_reg__,%1+1) CR_TAB
-+ AS2 (ld,%A0,%1) CR_TAB
-+ AS2 (mov,%B0,__tmp_reg__));
-+ }
-+ }
-
-+ if(reg_base == REG_Z) {
-+ if (AVR_TINY) {
-+ *l = 11;
-+ return (AS2 (subi,r30,lo8(-3)) CR_TAB
-+ AS2 (sbci,r31,hi8(-3)) CR_TAB
-+ AS2 (ld,%D0,Z) CR_TAB
-+ AS2 (ld,%C0,-Z) CR_TAB
-+ AS2 (subi,r30,lo8(1)) CR_TAB
-+ AS2 (sbci,r31,hi8(1)) CR_TAB
-+ AS2 (ld,__tmp_reg__,%1) CR_TAB
-+ AS2 (subi,r30,lo8(1)) CR_TAB
-+ AS2 (sbci,r31,hi8(1)) CR_TAB
-+ AS2 (ld,%A0,%1) CR_TAB
-+ AS2 (mov,%B0,__tmp_reg__));
-+ } else {
-+ *l = 5;
-+ return (AS2 (ldd,%D0,%1+3) CR_TAB
-+ AS2 (ldd,%C0,%1+2) CR_TAB
-+ AS2 (ldd,__tmp_reg__,%1+1) CR_TAB
-+ AS2 (ld,%A0,%1) CR_TAB
-+ AS2 (mov,%B0,__tmp_reg__));
-+ }
-+ }
-+ }
- else if (reg_base == reg_dest + 2)
-- {
-- if(reg_base == REG_Y)
-- return *l=5, AVR_TINY ? (AS2 (ld ,%A0,Y+) CR_TAB
-- AS2 (ld,%B0,Y+) CR_TAB
-- AS2 (ld,__tmp_reg__,Y+) CR_TAB
-- AS2 (ld,%D0,Y) CR_TAB
-- AS2 (subi,r28,lo8(3)) CR_TAB
-- AS2 (sbci,r29,hi8(3)) CR_TAB
-- AS2 (mov,%C0,__tmp_reg__))
-- : (AS2 (ld ,%A0,%1) CR_TAB
-- AS2 (ldd,%B0,%1+1) CR_TAB
-- AS2 (ldd,__tmp_reg__,%1+2) CR_TAB
-- AS2 (ldd,%D0,%1+3) CR_TAB
-- AS2 (mov,%C0,__tmp_reg__));
-- if(reg_base == REG_Z)
-- return *l=5, AVR_TINY ? (AS2 (ld ,%A0,Z+) CR_TAB
-- AS2 (ld,%B0,Z+) CR_TAB
-- AS2 (ld,__tmp_reg__,Z+) CR_TAB
-- AS2 (ld,%D0,Z) CR_TAB
-- AS2 (subi,r30,lo8(3)) CR_TAB
-- AS2 (sbci,r31,hi8(3)) CR_TAB
-- AS2 (mov,%C0,__tmp_reg__))
-- : (AS2 (ld ,%A0,%1) CR_TAB
-- AS2 (ldd,%B0,%1+1) CR_TAB
-- AS2 (ldd,__tmp_reg__,%1+2) CR_TAB
-- AS2 (ldd,%D0,%1+3) CR_TAB
-- AS2 (mov,%C0,__tmp_reg__));
-- }
-- else
-- {
-- if(reg_base == REG_Y)
-- return *l=4, AVR_TINY ? (AS2 (ld ,%A0,Y+) CR_TAB
-- AS2 (ld,%B0,Y+) CR_TAB
-- AS2 (ld,%C0,Y+) CR_TAB
-- AS2 (ld,%D0,Y) CR_TAB
-- AS2 (subi,r28,lo8(3)) CR_TAB
-- AS2 (sbci,r29,hi8(3)))
-- : (AS2 (ld ,%A0,%1) CR_TAB
-- AS2 (ldd,%B0,%1+1) CR_TAB
-- AS2 (ldd,%C0,%1+2) CR_TAB
-- AS2 (ldd,%D0,%1+3));
-- if(reg_base == REG_Z)
-- return *l=4, AVR_TINY ? (AS2 (ld ,%A0,Z+) CR_TAB
-- AS2 (ld,%B0,Z+) CR_TAB
-- AS2 (ld,%C0,Z+) CR_TAB
-- AS2 (ld,%D0,Z) CR_TAB
-- AS2 (subi,r30,lo8(3)) CR_TAB
-- AS2 (sbci,r31,hi8(3)))
-- : (AS2 (ld ,%A0,%1) CR_TAB
-- AS2 (ldd,%B0,%1+1) CR_TAB
-- AS2 (ldd,%C0,%1+2) CR_TAB
-- AS2 (ldd,%D0,%1+3));
-- }
-+ {
-+ if(reg_base == REG_Y) {
-+ if (AVR_TINY) {
-+ *l = 7;
-+ return (AS2 (ld ,%A0,Y+) CR_TAB
-+ AS2 (ld,%B0,Y+) CR_TAB
-+ AS2 (ld,__tmp_reg__,Y+) CR_TAB
-+ AS2 (ld,%D0,Y) CR_TAB
-+ AS2 (subi,r28,lo8(3)) CR_TAB
-+ AS2 (sbci,r29,hi8(3)) CR_TAB
-+ AS2 (mov,%C0,__tmp_reg__));
-+ } else {
-+ *l = 5;
-+ return (AS2 (ld ,%A0,%1) CR_TAB
-+ AS2 (ldd,%B0,%1+1) CR_TAB
-+ AS2 (ldd,__tmp_reg__,%1+2) CR_TAB
-+ AS2 (ldd,%D0,%1+3) CR_TAB
-+ AS2 (mov,%C0,__tmp_reg__));
-+ }
-+ }
-+
-+ if(reg_base == REG_Z) {
-+ if (AVR_TINY) {
-+ *l = 7;
-+ return (AS2 (ld ,%A0,Z+) CR_TAB
-+ AS2 (ld,%B0,Z+) CR_TAB
-+ AS2 (ld,__tmp_reg__,Z+) CR_TAB
-+ AS2 (ld,%D0,Z) CR_TAB
-+ AS2 (subi,r30,lo8(3)) CR_TAB
-+ AS2 (sbci,r31,hi8(3)) CR_TAB
-+ AS2 (mov,%C0,__tmp_reg__));
-+ } else {
-+ *l = 5;
-+ return (AS2 (ld ,%A0,%1) CR_TAB
-+ AS2 (ldd,%B0,%1+1) CR_TAB
-+ AS2 (ldd,__tmp_reg__,%1+2) CR_TAB
-+ AS2 (ldd,%D0,%1+3) CR_TAB
-+ AS2 (mov,%C0,__tmp_reg__));
-+ }
-+ }
-+ } else {
-+ if(reg_base == REG_Y) {
-+ if (AVR_TINY) {
-+ *l = 6;
-+ return (AS2 (ld ,%A0,Y+) CR_TAB
-+ AS2 (ld,%B0,Y+) CR_TAB
-+ AS2 (ld,%C0,Y+) CR_TAB
-+ AS2 (ld,%D0,Y) CR_TAB
-+ AS2 (subi,r28,lo8(3)) CR_TAB
-+ AS2 (sbci,r29,hi8(3)));
-+ } else {
-+ *l = 4;
-+ return (AS2 (ld ,%A0,%1) CR_TAB
-+ AS2 (ldd,%B0,%1+1) CR_TAB
-+ AS2 (ldd,%C0,%1+2) CR_TAB
-+ AS2 (ldd,%D0,%1+3));
-+ }
-+ }
-+ if(reg_base == REG_Z) {
-+ if (AVR_TINY) {
-+ *l = 6;
-+ return (AS2 (ld ,%A0,Z+) CR_TAB
-+ AS2 (ld,%B0,Z+) CR_TAB
-+ AS2 (ld,%C0,Z+) CR_TAB
-+ AS2 (ld,%D0,Z) CR_TAB
-+ AS2 (subi,r30,lo8(3)) CR_TAB
-+ AS2 (sbci,r31,hi8(3)));
-+ } else {
-+ *l = 4;
-+ return (AS2 (ld ,%A0,%1) CR_TAB
-+ AS2 (ldd,%B0,%1+1) CR_TAB
-+ AS2 (ldd,%C0,%1+2) CR_TAB
-+ AS2 (ldd,%D0,%1+3));
-+ }
-+ }
-+ }
- }
- }
- else if (GET_CODE (base) == PLUS) /* (R + i) */
-@@ -2677,44 +2845,54 @@ out_movsi_r_mr (rtx insn, rtx op[], int
- if (REGNO (XEXP (base, 0)) != REG_Y)
- fatal_insn ("incorrect insn:",insn);
-
-- if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (src)))
-- return *l = 6, AVR_TINY ? (AS2 (subi,r28,lo8(-(%o1-60))) CR_TAB
-- AS2 (sbci,r29,hi8(-(%o1-60))) CR_TAB
-- AS2 (subi,r28,lo8(-60)) CR_TAB
-- AS2 (sbci,r29,hi8(-60)) CR_TAB
-- AS2 (ld,%A0,Y+) CR_TAB
-- AS2 (ld,%B0,Y+) CR_TAB
-- AS2 (ld,%C0,Y+) CR_TAB
-- AS2 (ld,%D0,Y) CR_TAB
-- AS2 (subi,r28,lo8(63)) CR_TAB
-- AS2 (sbci,r29,hi8(63)) CR_TAB
-- AS2 (subi,r28,lo8(%o1-60)) CR_TAB
-- AS2 (sbci,r29,hi8(%o1-60)))
-- : (AS2 (adiw,r28,%o1-60) CR_TAB
-- AS2 (ldd,%A0,Y+60) CR_TAB
-- AS2 (ldd,%B0,Y+61) CR_TAB
-- AS2 (ldd,%C0,Y+62) CR_TAB
-- AS2 (ldd,%D0,Y+63) CR_TAB
-- AS2 (sbiw,r28,%o1-60));
--
-- return *l = 8, AVR_TINY ? (AS2 (subi,r28,lo8(-%o1)) CR_TAB
-- AS2 (sbci,r29,hi8(-%o1)) CR_TAB
-- AS2 (ld,%A0,Y+) CR_TAB
-- AS2 (ld,%B0,Y+) CR_TAB
-- AS2 (ld,%C0,Y+) CR_TAB
-- AS2 (ld,%D0,Y) CR_TAB
-- AS2 (subi,r28,lo8(3)) CR_TAB
-- AS2 (sbci,r29,hi8(3)) CR_TAB
-- AS2 (subi,r28,lo8(%o1)) CR_TAB
-- AS2 (sbci,r29,hi8(%o1)))
-- : (AS2 (subi,r28,lo8(-%o1)) CR_TAB
-- AS2 (sbci,r29,hi8(-%o1)) CR_TAB
-- AS2 (ld,%A0,Y) CR_TAB
-- AS2 (ldd,%B0,Y+1) CR_TAB
-- AS2 (ldd,%C0,Y+2) CR_TAB
-- AS2 (ldd,%D0,Y+3) CR_TAB
-- AS2 (subi,r28,lo8(%o1)) CR_TAB
-- AS2 (sbci,r29,hi8(%o1)));
-+ if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (src))) {
-+ if (AVR_TINY) {
-+ *l = 12;
-+ return (AS2 (subi,r28,lo8(-(%o1-60))) CR_TAB
-+ AS2 (sbci,r29,hi8(-(%o1-60))) CR_TAB
-+ AS2 (subi,r28,lo8(-60)) CR_TAB
-+ AS2 (sbci,r29,hi8(-60)) CR_TAB
-+ AS2 (ld,%A0,Y+) CR_TAB
-+ AS2 (ld,%B0,Y+) CR_TAB
-+ AS2 (ld,%C0,Y+) CR_TAB
-+ AS2 (ld,%D0,Y) CR_TAB
-+ AS2 (subi,r28,lo8(63)) CR_TAB
-+ AS2 (sbci,r29,hi8(63)) CR_TAB
-+ AS2 (subi,r28,lo8(%o1-60)) CR_TAB
-+ AS2 (sbci,r29,hi8(%o1-60)));
-+ } else {
-+ *l = 6;
-+ return (AS2 (adiw,r28,%o1-60) CR_TAB
-+ AS2 (ldd,%A0,Y+60) CR_TAB
-+ AS2 (ldd,%B0,Y+61) CR_TAB
-+ AS2 (ldd,%C0,Y+62) CR_TAB
-+ AS2 (ldd,%D0,Y+63) CR_TAB
-+ AS2 (sbiw,r28,%o1-60));
-+ }
-+ }
-+ if (AVR_TINY) {
-+ *l = 10;
-+ return (AS2 (subi,r28,lo8(-%o1)) CR_TAB
-+ AS2 (sbci,r29,hi8(-%o1)) CR_TAB
-+ AS2 (ld,%A0,Y+) CR_TAB
-+ AS2 (ld,%B0,Y+) CR_TAB
-+ AS2 (ld,%C0,Y+) CR_TAB
-+ AS2 (ld,%D0,Y) CR_TAB
-+ AS2 (subi,r28,lo8(3)) CR_TAB
-+ AS2 (sbci,r29,hi8(3)) CR_TAB
-+ AS2 (subi,r28,lo8(%o1)) CR_TAB
-+ AS2 (sbci,r29,hi8(%o1)));
-+ } else {
-+ *l = 8;
-+ return (AS2 (subi,r28,lo8(-%o1)) CR_TAB
-+ AS2 (sbci,r29,hi8(-%o1)) CR_TAB
-+ AS2 (ld,%A0,Y) CR_TAB
-+ AS2 (ldd,%B0,Y+1) CR_TAB
-+ AS2 (ldd,%C0,Y+2) CR_TAB
-+ AS2 (ldd,%D0,Y+3) CR_TAB
-+ AS2 (subi,r28,lo8(%o1)) CR_TAB
-+ AS2 (sbci,r29,hi8(%o1)));
-+ }
- }
-
- reg_base = true_regnum (XEXP (base, 0));
-@@ -2722,154 +2900,204 @@ out_movsi_r_mr (rtx insn, rtx op[], int
- {
- /* R = (X + d) */
- if (reg_dest == REG_X)
-- {
-- *l = 7;
-- /* "ld r26,-X" is undefined */
-- return AVR_TINY ? (AS2 (subi,r26,lo8(-(%o1+3))) CR_TAB
-- AS2 (sbci,r27,hi8(-(%o1+3))) CR_TAB
-- AS2 (ld,r29,X) CR_TAB
-- AS2 (ld,r28,-X) CR_TAB
-- AS2 (ld,__tmp_reg__,-X) CR_TAB
-- AS2 (subi,r26,lo8(1)) CR_TAB
-- AS2 (sbci,r27,hi8(1)) CR_TAB
-- AS2 (ld,r26,X) CR_TAB
-- AS2 (mov,r27,__tmp_reg__))
-- : (AS2 (adiw,r26,%o1+3) CR_TAB
-- AS2 (ld,r29,X) CR_TAB
-- AS2 (ld,r28,-X) CR_TAB
-- AS2 (ld,__tmp_reg__,-X) CR_TAB
-- AS2 (sbiw,r26,1) CR_TAB
-- AS2 (ld,r26,X) CR_TAB
-- AS2 (mov,r27,__tmp_reg__));
-- }
-- *l = 6;
-- if (reg_dest == REG_X - 2)
-- return AVR_TINY ? (AS2 (subi,r26,lo8(-(%o1))) CR_TAB
-- AS2 (sbci,r27,hi8(-(%o1))) CR_TAB
-- AS2 (ld,r24,X+) CR_TAB
-- AS2 (ld,r25,X+) CR_TAB
-- AS2 (ld,__tmp_reg__,X+) CR_TAB
-- AS2 (ld,r27,X) CR_TAB
-- AS2 (mov,r26,__tmp_reg__))
-- : (AS2 (adiw,r26,%o1) CR_TAB
-- AS2 (ld,r24,X+) CR_TAB
-- AS2 (ld,r25,X+) CR_TAB
-- AS2 (ld,__tmp_reg__,X+) CR_TAB
-- AS2 (ld,r27,X) CR_TAB
-- AS2 (mov,r26,__tmp_reg__));
--
-- return AVR_TINY ? (AS2 (subi,r26,lo8(-(%o1))) CR_TAB
-- AS2 (sbci,r27,hi8(-(%o1))) CR_TAB
-- AS2 (ld,%A0,X+) CR_TAB
-- AS2 (ld,%B0,X+) CR_TAB
-- AS2 (ld,%C0,X+) CR_TAB
-- AS2 (ld,%D0,X) CR_TAB
-- AS2 (subi,r26,lo8(%o1+3)) CR_TAB
-- AS2 (sbci,r27,hi8(%o1+3)))
-- : (AS2 (adiw,r26,%o1) CR_TAB
-- AS2 (ld,%A0,X+) CR_TAB
-- AS2 (ld,%B0,X+) CR_TAB
-- AS2 (ld,%C0,X+) CR_TAB
-- AS2 (ld,%D0,X) CR_TAB
-- AS2 (sbiw,r26,%o1+3));
-+ {
-+ /* "ld r26,-X" is undefined */
-+ if (AVR_TINY) {
-+ *l = 9;
-+ return (AS2 (subi,r26,lo8(-(%o1+3))) CR_TAB
-+ AS2 (sbci,r27,hi8(-(%o1+3))) CR_TAB
-+ AS2 (ld,r29,X) CR_TAB
-+ AS2 (ld,r28,-X) CR_TAB
-+ AS2 (ld,__tmp_reg__,-X) CR_TAB
-+ AS2 (subi,r26,lo8(1)) CR_TAB
-+ AS2 (sbci,r27,hi8(1)) CR_TAB
-+ AS2 (ld,r26,X) CR_TAB
-+ AS2 (mov,r27,__tmp_reg__));
-+ } else {
-+ *l = 7;
-+ return (AS2 (adiw,r26,%o1+3) CR_TAB
-+ AS2 (ld,r29,X) CR_TAB
-+ AS2 (ld,r28,-X) CR_TAB
-+ AS2 (ld,__tmp_reg__,-X) CR_TAB
-+ AS2 (sbiw,r26,1) CR_TAB
-+ AS2 (ld,r26,X) CR_TAB
-+ AS2 (mov,r27,__tmp_reg__));
-+ }
-+ }
-+
-+ if (reg_dest == REG_X - 2) {
-+ if (AVR_TINY) {
-+ *l = 7;
-+ return (AS2 (subi,r26,lo8(-(%o1))) CR_TAB
-+ AS2 (sbci,r27,hi8(-(%o1))) CR_TAB
-+ AS2 (ld,r24,X+) CR_TAB
-+ AS2 (ld,r25,X+) CR_TAB
-+ AS2 (ld,__tmp_reg__,X+) CR_TAB
-+ AS2 (ld,r27,X) CR_TAB
-+ AS2 (mov,r26,__tmp_reg__));
-+ } else {
-+ *l = 6;
-+ return (AS2 (adiw,r26,%o1) CR_TAB
-+ AS2 (ld,r24,X+) CR_TAB
-+ AS2 (ld,r25,X+) CR_TAB
-+ AS2 (ld,__tmp_reg__,X+) CR_TAB
-+ AS2 (ld,r27,X) CR_TAB
-+ AS2 (mov,r26,__tmp_reg__));
-+ }
-+ }
-+
-+ if (AVR_TINY) {
-+ *l = 8;
-+ return (AS2 (subi,r26,lo8(-(%o1))) CR_TAB
-+ AS2 (sbci,r27,hi8(-(%o1))) CR_TAB
-+ AS2 (ld,%A0,X+) CR_TAB
-+ AS2 (ld,%B0,X+) CR_TAB
-+ AS2 (ld,%C0,X+) CR_TAB
-+ AS2 (ld,%D0,X) CR_TAB
-+ AS2 (subi,r26,lo8(%o1+3)) CR_TAB
-+ AS2 (sbci,r27,hi8(%o1+3)));
-+ } else {
-+ *l = 6;
-+ return (AS2 (adiw,r26,%o1) CR_TAB
-+ AS2 (ld,%A0,X+) CR_TAB
-+ AS2 (ld,%B0,X+) CR_TAB
-+ AS2 (ld,%C0,X+) CR_TAB
-+ AS2 (ld,%D0,X) CR_TAB
-+ AS2 (sbiw,r26,%o1+3));
-+ }
- }
- if (reg_dest == reg_base)
-- {
-- op[2] = XEXP(base, 0);
-+ {
-+ op[2] = XEXP(base, 0);
-
-- if(REGNO(op[2]) == REG_Y)
-- return *l=5, AVR_TINY ? (AS2 (subi,%A2,lo8(-(%o1+4))) CR_TAB
-- AS2 (sbci,%B2,hi8(-(%o1+4))) CR_TAB
-- AS2 (ld,%D0,-Y) CR_TAB
-- AS2 (ld,%C0,-Y) CR_TAB
-- AS2 (ld,__tmp_reg__,-Y) CR_TAB
-- AS2 (ld,%A0,-Y) CR_TAB
-- AS2 (subi,%A2,lo8(%o1)) CR_TAB
-- AS2 (sbci,%B2,hi8(%o1)) CR_TAB
-- AS2 (mov,%B0,__tmp_reg__))
-- : (AS2 (ldd,%D0,%D1) CR_TAB
-- AS2 (ldd,%C0,%C1) CR_TAB
-- AS2 (ldd,__tmp_reg__,%B1) CR_TAB
-- AS2 (ldd,%A0,%A1) CR_TAB
-- AS2 (mov,%B0,__tmp_reg__));
-- if(REGNO(op[2]) == REG_Z)
-- return *l=5, AVR_TINY ? (AS2 (subi,%A2,lo8(-(%o1+4))) CR_TAB
-- AS2 (sbci,%B2,hi8(-(%o1+4))) CR_TAB
-- AS2 (ld,%D0,-Z) CR_TAB
-- AS2 (ld,%C0,-Z) CR_TAB
-- AS2 (ld,__tmp_reg__,-Z) CR_TAB
-- AS2 (ld,%A0,-Z) CR_TAB
-- AS2 (subi,%A2,lo8(%o1)) CR_TAB
-- AS2 (sbci,%B2,hi8(%o1)) CR_TAB
-- AS2 (mov,%B0,__tmp_reg__))
-- : (AS2 (ldd,%D0,%D1) CR_TAB
-- AS2 (ldd,%C0,%C1) CR_TAB
-- AS2 (ldd,__tmp_reg__,%B1) CR_TAB
-- AS2 (ldd,%A0,%A1) CR_TAB
-- AS2 (mov,%B0,__tmp_reg__));
-- }
-- else if (reg_dest == reg_base - 2)
-- {
-- op[2] = XEXP(base, 0);
-+ if(REGNO(op[2]) == REG_Y) {
-+ if (AVR_TINY) {
-+ *l = 9;
-+ return (AS2 (subi,%A2,lo8(-(%o1+4))) CR_TAB
-+ AS2 (sbci,%B2,hi8(-(%o1+4))) CR_TAB
-+ AS2 (ld,%D0,-Y) CR_TAB
-+ AS2 (ld,%C0,-Y) CR_TAB
-+ AS2 (ld,__tmp_reg__,-Y) CR_TAB
-+ AS2 (ld,%A0,-Y) CR_TAB
-+ AS2 (subi,%A2,lo8(%o1)) CR_TAB
-+ AS2 (sbci,%B2,hi8(%o1)) CR_TAB
-+ AS2 (mov,%B0,__tmp_reg__));
-+ } else {
-+ *l = 5;
-+ return (AS2 (ldd,%D0,%D1) CR_TAB
-+ AS2 (ldd,%C0,%C1) CR_TAB
-+ AS2 (ldd,__tmp_reg__,%B1) CR_TAB
-+ AS2 (ldd,%A0,%A1) CR_TAB
-+ AS2 (mov,%B0,__tmp_reg__));
-+ }
-+ }
-+ if(REGNO(op[2]) == REG_Z) {
-+ if (AVR_TINY) {
-+ *l = 9;
-+ return (AS2 (subi,%A2,lo8(-(%o1+4))) CR_TAB
-+ AS2 (sbci,%B2,hi8(-(%o1+4))) CR_TAB
-+ AS2 (ld,%D0,-Z) CR_TAB
-+ AS2 (ld,%C0,-Z) CR_TAB
-+ AS2 (ld,__tmp_reg__,-Z) CR_TAB
-+ AS2 (ld,%A0,-Z) CR_TAB
-+ AS2 (subi,%A2,lo8(%o1)) CR_TAB
-+ AS2 (sbci,%B2,hi8(%o1)) CR_TAB
-+ AS2 (mov,%B0,__tmp_reg__));
-+ } else {
-+ *l = 5;
-+ return (AS2 (ldd,%D0,%D1) CR_TAB
-+ AS2 (ldd,%C0,%C1) CR_TAB
-+ AS2 (ldd,__tmp_reg__,%B1) CR_TAB
-+ AS2 (ldd,%A0,%A1) CR_TAB
-+ AS2 (mov,%B0,__tmp_reg__));
-+ }
-+ }
-+ } else if (reg_dest == reg_base - 2) {
-+ op[2] = XEXP(base, 0);
-
-- if(REGNO(op[2]) == REG_Y)
-- return *l=5, AVR_TINY ? (AS2 (subi,%A2,lo8(-(%o1))) CR_TAB
-- AS2 (sbci,%B2,hi8(-(%o1))) CR_TAB
-- AS2 (ld,%A0,Y+) CR_TAB
-- AS2 (ld,%B0,Y+) CR_TAB
-- AS2 (ld,__tmp_reg__,Y+) CR_TAB
-- AS2 (ld,%D0,Y) CR_TAB
-- AS2 (subi,%A2,lo8(%o1+3)) CR_TAB
-- AS2 (sbci,%B2,hi8(%o1+3)) CR_TAB
-- AS2 (mov,%C0,__tmp_reg__))
-- : (AS2 (ldd,%A0,%A1) CR_TAB
-- AS2 (ldd,%B0,%B1) CR_TAB
-- AS2 (ldd,__tmp_reg__,%C1) CR_TAB
-- AS2 (ldd,%D0,%D1) CR_TAB
-- AS2 (mov,%C0,__tmp_reg__));
-- if(REGNO(op[2]) == REG_Z)
-- return *l=5, AVR_TINY ? (AS2 (subi,%A2,lo8(-(%o1))) CR_TAB
-- AS2 (sbci,%B2,hi8(-(%o1))) CR_TAB
-- AS2 (ld,%A0,Z+) CR_TAB
-- AS2 (ld,%B0,Z+) CR_TAB
-- AS2 (ld,__tmp_reg__,Z+) CR_TAB
-- AS2 (ld,%D0,Z) CR_TAB
-- AS2 (subi,%A2,lo8(%o1+3)) CR_TAB
-- AS2 (sbci,%B2,hi8(%o1+3)) CR_TAB
-- AS2 (mov,%C0,__tmp_reg__))
-- : (AS2 (ldd,%A0,%A1) CR_TAB
-- AS2 (ldd,%B0,%B1) CR_TAB
-- AS2 (ldd,__tmp_reg__,%C1) CR_TAB
-- AS2 (ldd,%D0,%D1) CR_TAB
-- AS2 (mov,%C0,__tmp_reg__));
-- }
-- op[2] = XEXP(base, 0);
-- if(REGNO(op[2]) == REG_Y)
-- return *l=4, AVR_TINY ? (AS2 (subi,%A2,lo8(-(%o1))) CR_TAB
-- AS2 (sbci,%B2,hi8(-(%o1))) CR_TAB
-- AS2 (ld,%A0,Y+) CR_TAB
-- AS2 (ld,%B0,Y+) CR_TAB
-- AS2 (ld,%C0,Y+) CR_TAB
-- AS2 (ld,%D0,Y) CR_TAB
-- AS2 (subi,%A2,lo8(%o1+3)) CR_TAB
-- AS2 (sbci,%B2,hi8(%o1+3)))
-- : (AS2 (ldd,%A0,%A1) CR_TAB
-- AS2 (ldd,%B0,%B1) CR_TAB
-- AS2 (ldd,%C0,%C1) CR_TAB
-- AS2 (ldd,%D0,%D1));
-- if(REGNO(op[2]) == REG_Z)
-- return *l=4, AVR_TINY ? (AS2 (subi,%A2,lo8(-(%o1))) CR_TAB
-- AS2 (sbci,%B2,hi8(-(%o1))) CR_TAB
-- AS2 (ld,%A0,Z+) CR_TAB
-- AS2 (ld,%B0,Z+) CR_TAB
-- AS2 (ld,%C0,Z+) CR_TAB
-- AS2 (ld,%D0,Z) CR_TAB
-- AS2 (subi,%A2,lo8(%o1+3)) CR_TAB
-- AS2 (sbci,%B2,hi8(%o1+3)))
-- : (AS2 (ldd,%A0,%A1) CR_TAB
-+ if(REGNO(op[2]) == REG_Y) {
-+ if (AVR_TINY) {
-+ *l = 9;
-+ return (AS2 (subi,%A2,lo8(-(%o1))) CR_TAB
-+ AS2 (sbci,%B2,hi8(-(%o1))) CR_TAB
-+ AS2 (ld,%A0,Y+) CR_TAB
-+ AS2 (ld,%B0,Y+) CR_TAB
-+ AS2 (ld,__tmp_reg__,Y+) CR_TAB
-+ AS2 (ld,%D0,Y) CR_TAB
-+ AS2 (subi,%A2,lo8(%o1+3)) CR_TAB
-+ AS2 (sbci,%B2,hi8(%o1+3)) CR_TAB
-+ AS2 (mov,%C0,__tmp_reg__));
-+ } else {
-+ *l = 5;
-+ return (AS2 (ldd,%A0,%A1) CR_TAB
- AS2 (ldd,%B0,%B1) CR_TAB
-- AS2 (ldd,%C0,%C1) CR_TAB
-- AS2 (ldd,%D0,%D1));
-+ AS2 (ldd,__tmp_reg__,%C1) CR_TAB
-+ AS2 (ldd,%D0,%D1) CR_TAB
-+ AS2 (mov,%C0,__tmp_reg__));
-+ }
-+ }
-+ if(REGNO(op[2]) == REG_Z) {
-+ if (AVR_TINY) {
-+ *l = 9;
-+ return (AS2 (subi,%A2,lo8(-(%o1))) CR_TAB
-+ AS2 (sbci,%B2,hi8(-(%o1))) CR_TAB
-+ AS2 (ld,%A0,Z+) CR_TAB
-+ AS2 (ld,%B0,Z+) CR_TAB
-+ AS2 (ld,__tmp_reg__,Z+) CR_TAB
-+ AS2 (ld,%D0,Z) CR_TAB
-+ AS2 (subi,%A2,lo8(%o1+3)) CR_TAB
-+ AS2 (sbci,%B2,hi8(%o1+3)) CR_TAB
-+ AS2 (mov,%C0,__tmp_reg__));
-+ } else {
-+ *l = 5;
-+ return (AS2 (ldd,%A0,%A1) CR_TAB
-+ AS2 (ldd,%B0,%B1) CR_TAB
-+ AS2 (ldd,__tmp_reg__,%C1) CR_TAB
-+ AS2 (ldd,%D0,%D1) CR_TAB
-+ AS2 (mov,%C0,__tmp_reg__));
-+ }
-+ }
-+ }
-+
-+ op[2] = XEXP(base, 0);
-+ if(REGNO(op[2]) == REG_Y) {
-+ if (AVR_TINY) {
-+ *l = 8;
-+ return (AS2 (subi,%A2,lo8(-(%o1))) CR_TAB
-+ AS2 (sbci,%B2,hi8(-(%o1))) CR_TAB
-+ AS2 (ld,%A0,Y+) CR_TAB
-+ AS2 (ld,%B0,Y+) CR_TAB
-+ AS2 (ld,%C0,Y+) CR_TAB
-+ AS2 (ld,%D0,Y) CR_TAB
-+ AS2 (subi,%A2,lo8(%o1+3)) CR_TAB
-+ AS2 (sbci,%B2,hi8(%o1+3)));
-+ } else {
-+ *l = 4;
-+ return (AS2 (ldd,%A0,%A1) CR_TAB
-+ AS2 (ldd,%B0,%B1) CR_TAB
-+ AS2 (ldd,%C0,%C1) CR_TAB
-+ AS2 (ldd,%D0,%D1));
-+ }
-+ }
-+ if(REGNO(op[2]) == REG_Z) {
-+ if (AVR_TINY) {
-+ *l = 8;
-+ return (AS2 (subi,%A2,lo8(-(%o1))) CR_TAB
-+ AS2 (sbci,%B2,hi8(-(%o1))) CR_TAB
-+ AS2 (ld,%A0,Z+) CR_TAB
-+ AS2 (ld,%B0,Z+) CR_TAB
-+ AS2 (ld,%C0,Z+) CR_TAB
-+ AS2 (ld,%D0,Z) CR_TAB
-+ AS2 (subi,%A2,lo8(%o1+3)) CR_TAB
-+ AS2 (sbci,%B2,hi8(%o1+3)));
-+ } else {
-+ *l = 4;
-+ return (AS2 (ldd,%A0,%A1) CR_TAB
-+ AS2 (ldd,%B0,%B1) CR_TAB
-+ AS2 (ldd,%C0,%C1) CR_TAB
-+ AS2 (ldd,%D0,%D1));
-+ }
-+ }
- }
- else if (GET_CODE (base) == PRE_DEC) /* (--R) */
- return *l=4, (AS2 (ld,%D0,%1) CR_TAB
-@@ -2916,37 +3144,48 @@ out_movsi_mr_r (rtx insn, rtx op[], int
- if (reg_src == REG_X)
- {
- /* "st X+,r26" is undefined */
-- if (reg_unused_after (insn, base))
-- return *l=6, AVR_TINY ? (AS2 (mov,__tmp_reg__,r27) CR_TAB
-- AS2 (st,X,r26) CR_TAB
-- AS2 (subi,r26,lo8(-1)) CR_TAB
-- AS2 (sbci,r27,hi8(-1)) CR_TAB
-- AS2 (st,X+,__tmp_reg__) CR_TAB
-- AS2 (st,X+,r28) CR_TAB
-- AS2 (st,X,r29))
-- : (AS2 (mov,__tmp_reg__,r27) CR_TAB
-- AS2 (st,X,r26) CR_TAB
-- AS2 (adiw,r26,1) CR_TAB
-- AS2 (st,X+,__tmp_reg__) CR_TAB
-- AS2 (st,X+,r28) CR_TAB
-- AS2 (st,X,r29));
-- else
-- return *l=7, AVR_TINY ? (AS2 (mov,__tmp_reg__,r27) CR_TAB
-- AS2 (st,X,r26) CR_TAB
-- AS2 (subi,r26,lo8(-1)) CR_TAB
-- AS2 (sbci,r27,hi8(-1)) CR_TAB
-- AS2 (st,X+,__tmp_reg__) CR_TAB
-- AS2 (st,X+,r28) CR_TAB
-- AS2 (st,X,r29) CR_TAB
-- AS2 (subi,r26,lo8(3)) CR_TAB
-- AS2 (sbci,r27,hi8(3)))
-- : (AS2 (mov,__tmp_reg__,r27) CR_TAB
-- AS2 (st,X,r26) CR_TAB
-- AS2 (adiw,r26,1) CR_TAB
-- AS2 (st,X+,__tmp_reg__) CR_TAB
-- AS2 (st,X+,r28) CR_TAB
-- AS2 (st,X,r29) CR_TAB
-- AS2 (sbiw,r26,3));
-+ if (reg_unused_after (insn, base)) {
-+ if (AVR_TINY) {
-+ *l = 7;
-+ return (AS2 (mov,__tmp_reg__,r27) CR_TAB
-+ AS2 (st,X,r26) CR_TAB
-+ AS2 (subi,r26,lo8(-1)) CR_TAB
-+ AS2 (sbci,r27,hi8(-1)) CR_TAB
-+ AS2 (st,X+,__tmp_reg__) CR_TAB
-+ AS2 (st,X+,r28) CR_TAB
-+ AS2 (st,X,r29));
-+ } else {
-+ *l = 6;
-+ return (AS2 (mov,__tmp_reg__,r27) CR_TAB
-+ AS2 (st,X,r26) CR_TAB
-+ AS2 (adiw,r26,1) CR_TAB
-+ AS2 (st,X+,__tmp_reg__) CR_TAB
-+ AS2 (st,X+,r28) CR_TAB
-+ AS2 (st,X,r29));
-+ }
-+ } else {
-+ if (AVR_TINY) {
-+ *l = 9;
-+ return (AS2 (mov,__tmp_reg__,r27) CR_TAB
-+ AS2 (st,X,r26) CR_TAB
-+ AS2 (subi,r26,lo8(-1)) CR_TAB
-+ AS2 (sbci,r27,hi8(-1)) CR_TAB
-+ AS2 (st,X+,__tmp_reg__) CR_TAB
-+ AS2 (st,X+,r28) CR_TAB
-+ AS2 (st,X,r29) CR_TAB
-+ AS2 (subi,r26,lo8(3)) CR_TAB
-+ AS2 (sbci,r27,hi8(3)));
-+ } else {
-+ *l = 7;
-+ return (AS2 (mov,__tmp_reg__,r27) CR_TAB
-+ AS2 (st,X,r26) CR_TAB
-+ AS2 (adiw,r26,1) CR_TAB
-+ AS2 (st,X+,__tmp_reg__) CR_TAB
-+ AS2 (st,X+,r28) CR_TAB
-+ AS2 (st,X,r29) CR_TAB
-+ AS2 (sbiw,r26,3));
-+ }
-+ }
- }
- else if (reg_base == reg_src + 2)
- {
-@@ -2958,61 +3197,84 @@ out_movsi_mr_r (rtx insn, rtx op[], int
- AS2 (st,%0+,__zero_reg__) CR_TAB
- AS2 (st,%0,__tmp_reg__) CR_TAB
- AS1 (clr,__zero_reg__));
-- else
-- return *l=8, AVR_TINY ? (AS2 (mov,__zero_reg__,%C1) CR_TAB
-- AS2 (mov,__tmp_reg__,%D1) CR_TAB
-- AS2 (st,%0+,%A1) CR_TAB
-- AS2 (st,%0+,%B1) CR_TAB
-- AS2 (st,%0+,__zero_reg__) CR_TAB
-- AS2 (st,%0,__tmp_reg__) CR_TAB
-- AS1 (clr,__zero_reg__) CR_TAB
-- AS2 (subi,r26,lo8(3)) CR_TAB
-- AS2 (sbci,r27,hi8(3)))
-- : (AS2 (mov,__zero_reg__,%C1) CR_TAB
-- AS2 (mov,__tmp_reg__,%D1) CR_TAB
-- AS2 (st,%0+,%A1) CR_TAB
-- AS2 (st,%0+,%B1) CR_TAB
-- AS2 (st,%0+,__zero_reg__) CR_TAB
-- AS2 (st,%0,__tmp_reg__) CR_TAB
-- AS1 (clr,__zero_reg__) CR_TAB
-- AS2 (sbiw,r26,3));
-+ else {
-+ if (AVR_TINY) {
-+ *l = 9;
-+ return (AS2 (mov,__zero_reg__,%C1) CR_TAB
-+ AS2 (mov,__tmp_reg__,%D1) CR_TAB
-+ AS2 (st,%0+,%A1) CR_TAB
-+ AS2 (st,%0+,%B1) CR_TAB
-+ AS2 (st,%0+,__zero_reg__) CR_TAB
-+ AS2 (st,%0,__tmp_reg__) CR_TAB
-+ AS1 (clr,__zero_reg__) CR_TAB
-+ AS2 (subi,r26,lo8(3)) CR_TAB
-+ AS2 (sbci,r27,hi8(3)));
-+ } else {
-+ *l = 8;
-+ return (AS2 (mov,__zero_reg__,%C1) CR_TAB
-+ AS2 (mov,__tmp_reg__,%D1) CR_TAB
-+ AS2 (st,%0+,%A1) CR_TAB
-+ AS2 (st,%0+,%B1) CR_TAB
-+ AS2 (st,%0+,__zero_reg__) CR_TAB
-+ AS2 (st,%0,__tmp_reg__) CR_TAB
-+ AS1 (clr,__zero_reg__) CR_TAB
-+ AS2 (sbiw,r26,3));
-+ }
-+ }
- }
-- return *l=5, AVR_TINY ? (AS2 (st,%0+,%A1) CR_TAB
-- AS2 (st,%0+,%B1) CR_TAB
-- AS2 (st,%0+,%C1) CR_TAB
-- AS2 (st,%0,%D1) CR_TAB
-- AS2 (subi,r26,lo8(3)) CR_TAB
-- AS2 (sbci,r27,hi8(3)))
-- : (AS2 (st,%0+,%A1) CR_TAB
-- AS2 (st,%0+,%B1) CR_TAB
-- AS2 (st,%0+,%C1) CR_TAB
-- AS2 (st,%0,%D1) CR_TAB
-- AS2 (sbiw,r26,3));
-+ if (AVR_TINY) {
-+ *l = 6;
-+ return (AS2 (st,%0+,%A1) CR_TAB
-+ AS2 (st,%0+,%B1) CR_TAB
-+ AS2 (st,%0+,%C1) CR_TAB
-+ AS2 (st,%0,%D1) CR_TAB
-+ AS2 (subi,r26,lo8(3)) CR_TAB
-+ AS2 (sbci,r27,hi8(3)));
-+ } else {
-+ *l = 5;
-+ return (AS2 (st,%0+,%A1) CR_TAB
-+ AS2 (st,%0+,%B1) CR_TAB
-+ AS2 (st,%0+,%C1) CR_TAB
-+ AS2 (st,%0,%D1) CR_TAB
-+ AS2 (sbiw,r26,3));
-+ }
- }
- else
- {
-- if(reg_base == REG_Y)
-- return *l=4, AVR_TINY ? (AS2 (st,Y+,%A1) CR_TAB
-- AS2 (st,Y+,%B1) CR_TAB
-- AS2 (st,Y+,%C1) CR_TAB
-- AS2 (st,Y,%D1) CR_TAB
-- AS2 (subi,r28,lo8(3)) CR_TAB
-- AS2 (sbci,r29,lo8(3)))
-- : (AS2 (st,%0,%A1) CR_TAB
-- AS2 (std,%0+1,%B1) CR_TAB
-- AS2 (std,%0+2,%C1) CR_TAB
-- AS2 (std,%0+3,%D1));
-- if(reg_base == REG_Z)
-- return *l=4, AVR_TINY ? (AS2 (st,Z+,%A1) CR_TAB
-- AS2 (st,Z+,%B1) CR_TAB
-- AS2 (st,Z+,%C1) CR_TAB
-- AS2 (st,Z,%D1) CR_TAB
-- AS2 (subi,r30,lo8(3)) CR_TAB
-- AS2 (sbci,r31,lo8(3)))
-- : (AS2 (st,%0,%A1) CR_TAB
-- AS2 (std,%0+1,%B1) CR_TAB
-- AS2 (std,%0+2,%C1) CR_TAB
-- AS2 (std,%0+3,%D1));
-+ if(reg_base == REG_Y) {
-+ if (AVR_TINY) {
-+ *l = 6;
-+ return (AS2 (st,Y+,%A1) CR_TAB
-+ AS2 (st,Y+,%B1) CR_TAB
-+ AS2 (st,Y+,%C1) CR_TAB
-+ AS2 (st,Y,%D1) CR_TAB
-+ AS2 (subi,r28,lo8(3)) CR_TAB
-+ AS2 (sbci,r29,lo8(3)));
-+ } else {
-+ *l = 4;
-+ return (AS2 (st,%0,%A1) CR_TAB
-+ AS2 (std,%0+1,%B1) CR_TAB
-+ AS2 (std,%0+2,%C1) CR_TAB
-+ AS2 (std,%0+3,%D1));
-+ }
-+ }
-+ if(reg_base == REG_Z) {
-+ if (AVR_TINY) {
-+ *l = 6;
-+ return (AS2 (st,Z+,%A1) CR_TAB
-+ AS2 (st,Z+,%B1) CR_TAB
-+ AS2 (st,Z+,%C1) CR_TAB
-+ AS2 (st,Z,%D1) CR_TAB
-+ AS2 (subi,r30,lo8(3)) CR_TAB
-+ AS2 (sbci,r31,lo8(3)));
-+ } else {
-+ *l = 4;
-+ return (AS2 (st,%0,%A1) CR_TAB
-+ AS2 (std,%0+1,%B1) CR_TAB
-+ AS2 (std,%0+2,%C1) CR_TAB
-+ AS2 (std,%0+3,%D1));
-+ }
-+ }
- }
- }
- else if (GET_CODE (base) == PLUS) /* (R + i) */
-@@ -3024,62 +3286,76 @@ out_movsi_mr_r (rtx insn, rtx op[], int
- if (reg_base != REG_Y)
- fatal_insn ("incorrect insn:",insn);
-
-- if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (dest)))
-- return *l = 6, AVR_TINY ? (AS2 (subi,r28,lo8(-(%o0-60))) CR_TAB
-- AS2 (sbci,r29,hi8(-(%o0-60))) CR_TAB
-- AS2 (subi,r28,lo8(-60)) CR_TAB
-- AS2 (sbci,r29,lo8(-60)) CR_TAB
-- AS2 (st,Y+,%A1) CR_TAB
-- AS2 (st,Y+,%B1) CR_TAB
-- AS2 (st,Y+,%C1) CR_TAB
-- AS2 (st,Y,%D1) CR_TAB
-- AS2 (subi,r28,lo8(63)) CR_TAB
-- AS2 (sbci,r29,lo8(63)) CR_TAB
-- AS2 (subi,r28,lo8(%o0-60)) CR_TAB
-- AS2 (sbci,r29,hi8(%o0-60)))
-- : (AS2 (adiw,r28,%o0-60) CR_TAB
-- AS2 (std,Y+60,%A1) CR_TAB
-- AS2 (std,Y+61,%B1) CR_TAB
-- AS2 (std,Y+62,%C1) CR_TAB
-- AS2 (std,Y+63,%D1) CR_TAB
-- AS2 (sbiw,r28,%o0-60));
-- return *l = 8, AVR_TINY ? (AS2 (subi,r28,lo8(-%o0)) CR_TAB
-- AS2 (sbci,r29,hi8(-%o0)) CR_TAB
-- AS2 (st,Y+,%A1) CR_TAB
-- AS2 (st,Y+,%B1) CR_TAB
-- AS2 (st,Y+,%C1) CR_TAB
-- AS2 (st,Y,%D1) CR_TAB
-- AS2 (subi,r28,lo8(3)) CR_TAB
-- AS2 (sbci,r29,lo8(3)) CR_TAB
-- AS2 (subi,r28,lo8(%o0)) CR_TAB
-- AS2 (sbci,r29,hi8(%o0)))
-- : (AS2 (subi,r28,lo8(-%o0)) CR_TAB
-- AS2 (sbci,r29,hi8(-%o0)) CR_TAB
-- AS2 (st,Y,%A1) CR_TAB
-- AS2 (std,Y+1,%B1) CR_TAB
-- AS2 (std,Y+2,%C1) CR_TAB
-- AS2 (std,Y+3,%D1) CR_TAB
-- AS2 (subi,r28,lo8(%o0)) CR_TAB
-- AS2 (sbci,r29,hi8(%o0)));
-+ if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (dest))) {
-+ if (AVR_TINY) {
-+ *l = 12;
-+ return (AS2 (subi,r28,lo8(-(%o0-60))) CR_TAB
-+ AS2 (sbci,r29,hi8(-(%o0-60))) CR_TAB
-+ AS2 (subi,r28,lo8(-60)) CR_TAB
-+ AS2 (sbci,r29,lo8(-60)) CR_TAB
-+ AS2 (st,Y+,%A1) CR_TAB
-+ AS2 (st,Y+,%B1) CR_TAB
-+ AS2 (st,Y+,%C1) CR_TAB
-+ AS2 (st,Y,%D1) CR_TAB
-+ AS2 (subi,r28,lo8(63)) CR_TAB
-+ AS2 (sbci,r29,lo8(63)) CR_TAB
-+ AS2 (subi,r28,lo8(%o0-60)) CR_TAB
-+ AS2 (sbci,r29,hi8(%o0-60)));
-+ } else {
-+ *l = 6;
-+ return (AS2 (adiw,r28,%o0-60) CR_TAB
-+ AS2 (std,Y+60,%A1) CR_TAB
-+ AS2 (std,Y+61,%B1) CR_TAB
-+ AS2 (std,Y+62,%C1) CR_TAB
-+ AS2 (std,Y+63,%D1) CR_TAB
-+ AS2 (sbiw,r28,%o0-60));
-+ }
-+ }
-+ if (AVR_TINY) {
-+ *l = 10;
-+ return (AS2 (subi,r28,lo8(-%o0)) CR_TAB
-+ AS2 (sbci,r29,hi8(-%o0)) CR_TAB
-+ AS2 (st,Y+,%A1) CR_TAB
-+ AS2 (st,Y+,%B1) CR_TAB
-+ AS2 (st,Y+,%C1) CR_TAB
-+ AS2 (st,Y,%D1) CR_TAB
-+ AS2 (subi,r28,lo8(3)) CR_TAB
-+ AS2 (sbci,r29,lo8(3)) CR_TAB
-+ AS2 (subi,r28,lo8(%o0)) CR_TAB
-+ AS2 (sbci,r29,hi8(%o0)));
-+ } else {
-+ *l = 8;
-+ return (AS2 (subi,r28,lo8(-%o0)) CR_TAB
-+ AS2 (sbci,r29,hi8(-%o0)) CR_TAB
-+ AS2 (st,Y,%A1) CR_TAB
-+ AS2 (std,Y+1,%B1) CR_TAB
-+ AS2 (std,Y+2,%C1) CR_TAB
-+ AS2 (std,Y+3,%D1) CR_TAB
-+ AS2 (subi,r28,lo8(%o0)) CR_TAB
-+ AS2 (sbci,r29,hi8(%o0)));
-+ }
- }
- if (reg_base == REG_X)
- {
- /* (X + d) = R */
- if (reg_src == REG_X)
-- {
-- *l = 9;
-- return AVR_TINY ? (AS2 (mov,__tmp_reg__,r26) CR_TAB
-- AS2 (mov,__zero_reg__,r27) CR_TAB
-- AS2 (subi,r26,lo8(-(%o0))) CR_TAB
-- AS2 (sbci,r27,hi8(-(%o0))) CR_TAB
-- AS2 (st,X+,__tmp_reg__) CR_TAB
-- AS2 (st,X+,__zero_reg__) CR_TAB
-- AS2 (st,X+,r28) CR_TAB
-- AS2 (st,X,r29) CR_TAB
-- AS1 (clr,__zero_reg__) CR_TAB
-- AS2 (subi,r26,lo8(%o0+3)) CR_TAB
-- AS2 (sbci,r27,hi8(%o0+3)))
-- : (AS2 (mov,__tmp_reg__,r26) CR_TAB
-+ {
-+ if (AVR_TINY) {
-+ *l = 11;
-+ return (AS2 (mov,__tmp_reg__,r26) CR_TAB
-+ AS2 (mov,__zero_reg__,r27) CR_TAB
-+ AS2 (subi,r26,lo8(-(%o0))) CR_TAB
-+ AS2 (sbci,r27,hi8(-(%o0))) CR_TAB
-+ AS2 (st,X+,__tmp_reg__) CR_TAB
-+ AS2 (st,X+,__zero_reg__) CR_TAB
-+ AS2 (st,X+,r28) CR_TAB
-+ AS2 (st,X,r29) CR_TAB
-+ AS1 (clr,__zero_reg__) CR_TAB
-+ AS2 (subi,r26,lo8(%o0+3)) CR_TAB
-+ AS2 (sbci,r27,hi8(%o0+3)));
-+ } else {
-+ *l = 9;
-+ return (AS2 (mov,__tmp_reg__,r26) CR_TAB
- AS2 (mov,__zero_reg__,r27) CR_TAB
- AS2 (adiw,r26,%o0) CR_TAB
- AS2 (st,X+,__tmp_reg__) CR_TAB
-@@ -3088,22 +3364,26 @@ out_movsi_mr_r (rtx insn, rtx op[], int
- AS2 (st,X,r29) CR_TAB
- AS1 (clr,__zero_reg__) CR_TAB
- AS2 (sbiw,r26,%o0+3));
-- }
-+ }
-+ }
- else if (reg_src == REG_X - 2)
-- {
-- *l = 9;
-- return AVR_TINY ? (AS2 (mov,__tmp_reg__,r26) CR_TAB
-- AS2 (mov,__zero_reg__,r27) CR_TAB
-- AS2 (subi,r26,lo8(-(%o0))) CR_TAB
-- AS2 (sbci,r27,hi8(-(%o0))) CR_TAB
-- AS2 (st,X+,r24) CR_TAB
-- AS2 (st,X+,r25) CR_TAB
-- AS2 (st,X+,__tmp_reg__) CR_TAB
-- AS2 (st,X,__zero_reg__) CR_TAB
-- AS1 (clr,__zero_reg__) CR_TAB
-- AS2 (subi,r26,lo8(%o0+3)) CR_TAB
-- AS2 (sbci,r27,hi8(%o0+3)))
-- : (AS2 (mov,__tmp_reg__,r26) CR_TAB
-+ {
-+ if (AVR_TINY) {
-+ *l = 11;
-+ return (AS2 (mov,__tmp_reg__,r26) CR_TAB
-+ AS2 (mov,__zero_reg__,r27) CR_TAB
-+ AS2 (subi,r26,lo8(-(%o0))) CR_TAB
-+ AS2 (sbci,r27,hi8(-(%o0))) CR_TAB
-+ AS2 (st,X+,r24) CR_TAB
-+ AS2 (st,X+,r25) CR_TAB
-+ AS2 (st,X+,__tmp_reg__) CR_TAB
-+ AS2 (st,X,__zero_reg__) CR_TAB
-+ AS1 (clr,__zero_reg__) CR_TAB
-+ AS2 (subi,r26,lo8(%o0+3)) CR_TAB
-+ AS2 (sbci,r27,hi8(%o0+3)));
-+ } else {
-+ *l = 9;
-+ return (AS2 (mov,__tmp_reg__,r26) CR_TAB
- AS2 (mov,__zero_reg__,r27) CR_TAB
- AS2 (adiw,r26,%o0) CR_TAB
- AS2 (st,X+,r24) CR_TAB
-@@ -3112,51 +3392,71 @@ out_movsi_mr_r (rtx insn, rtx op[], int
- AS2 (st,X,__zero_reg__) CR_TAB
- AS1 (clr,__zero_reg__) CR_TAB
- AS2 (sbiw,r26,%o0+3));
-- }
-- *l = 6;
-- return AVR_TINY ? (AS2 (subi,r26,lo8(-(%o0))) CR_TAB
-- AS2 (sbci,r27,hi8(-(%o0))) CR_TAB
-- AS2 (st,X+,%A1) CR_TAB
-- AS2 (st,X+,%B1) CR_TAB
-- AS2 (st,X+,%C1) CR_TAB
-- AS2 (st,X,%D1) CR_TAB
-- AS2 (subi,r26,lo8(%o0+3)) CR_TAB
-- AS2 (sbci,r27,hi8(%o0+3)))
-- : (AS2 (adiw,r26,%o0) CR_TAB
-- AS2 (st,X+,%A1) CR_TAB
-- AS2 (st,X+,%B1) CR_TAB
-- AS2 (st,X+,%C1) CR_TAB
-- AS2 (st,X,%D1) CR_TAB
-- AS2 (sbiw,r26,%o0+3));
-- }
-- op[2] = XEXP(base, 0);
-- if(REGNO(op[2]) == REG_Y)
-- return *l=4, AVR_TINY ? (AS2 (subi,%A2,lo8(-(%o0))) CR_TAB
-- AS2 (sbci,%B2,hi8(-(%o0))) CR_TAB
-- AS2 (st,Y+,%A1) CR_TAB
-- AS2 (st,Y+,%B1) CR_TAB
-- AS2 (st,Y+,%C1) CR_TAB
-- AS2 (st,Y,%D1) CR_TAB
-- AS2 (subi,%A2,lo8(%o0+3)) CR_TAB
-- AS2 (sbci,%B2,hi8(%o0+3)))
-- : (AS2 (std,%A0,%A1) CR_TAB
-- AS2 (std,%B0,%B1) CR_TAB
-- AS2 (std,%C0,%C1) CR_TAB
-- AS2 (std,%D0,%D1));
--
-- if(REGNO(op[2]) == REG_Z)
-- return *l=4, AVR_TINY ? (AS2 (subi,%A2,lo8(-(%o0))) CR_TAB
-- AS2 (sbci,%B2,hi8(-(%o0))) CR_TAB
-- AS2 (st,Z+,%A1) CR_TAB
-- AS2 (st,Z+,%B1) CR_TAB
-- AS2 (st,Z+,%C1) CR_TAB
-- AS2 (st,Z,%D1) CR_TAB
-- AS2 (subi,%A2,lo8(%o0+3)) CR_TAB
-- AS2 (sbci,%B2,hi8(%o0+3)))
-- : (AS2 (std,%A0,%A1) CR_TAB
-- AS2 (std,%B0,%B1) CR_TAB
-- AS2 (std,%C0,%C1) CR_TAB
-- AS2 (std,%D0,%D1));
-+ }
-+ }
-+
-+ if (AVR_TINY) {
-+ *l = 8;
-+ return (AS2 (subi,r26,lo8(-(%o0))) CR_TAB
-+ AS2 (sbci,r27,hi8(-(%o0))) CR_TAB
-+ AS2 (st,X+,%A1) CR_TAB
-+ AS2 (st,X+,%B1) CR_TAB
-+ AS2 (st,X+,%C1) CR_TAB
-+ AS2 (st,X,%D1) CR_TAB
-+ AS2 (subi,r26,lo8(%o0+3)) CR_TAB
-+ AS2 (sbci,r27,hi8(%o0+3)));
-+ } else {
-+ *l = 6;
-+ return (AS2 (adiw,r26,%o0) CR_TAB
-+ AS2 (st,X+,%A1) CR_TAB
-+ AS2 (st,X+,%B1) CR_TAB
-+ AS2 (st,X+,%C1) CR_TAB
-+ AS2 (st,X,%D1) CR_TAB
-+ AS2 (sbiw,r26,%o0+3));
-+ }
-+ }
-+ op[2] = XEXP(base, 0);
-+ if(REGNO(op[2]) == REG_Y)
-+ {
-+ if (AVR_TINY) {
-+ *l = 8;
-+ return (AS2 (subi,%A2,lo8(-(%o0))) CR_TAB
-+ AS2 (sbci,%B2,hi8(-(%o0))) CR_TAB
-+ AS2 (st,Y+,%A1) CR_TAB
-+ AS2 (st,Y+,%B1) CR_TAB
-+ AS2 (st,Y+,%C1) CR_TAB
-+ AS2 (st,Y,%D1) CR_TAB
-+ AS2 (subi,%A2,lo8(%o0+3)) CR_TAB
-+ AS2 (sbci,%B2,hi8(%o0+3)));
-+ } else {
-+ *l = 4;
-+ return (AS2 (std,%A0,%A1) CR_TAB
-+ AS2 (std,%B0,%B1) CR_TAB
-+ AS2 (std,%C0,%C1) CR_TAB
-+ AS2 (std,%D0,%D1));
-+ }
-+ }
-+
-+ if(REGNO(op[2]) == REG_Z)
-+ {
-+ if (AVR_TINY) {
-+ *l = 8;
-+ return (AS2 (subi,%A2,lo8(-(%o0))) CR_TAB
-+ AS2 (sbci,%B2,hi8(-(%o0))) CR_TAB
-+ AS2 (st,Z+,%A1) CR_TAB
-+ AS2 (st,Z+,%B1) CR_TAB
-+ AS2 (st,Z+,%C1) CR_TAB
-+ AS2 (st,Z,%D1) CR_TAB
-+ AS2 (subi,%A2,lo8(%o0+3)) CR_TAB
-+ AS2 (sbci,%B2,hi8(%o0+3)));
-+ } else {
-+ *l = 4;
-+ return (AS2 (std,%A0,%A1) CR_TAB
-+ AS2 (std,%B0,%B1) CR_TAB
-+ AS2 (std,%C0,%C1) CR_TAB
-+ AS2 (std,%D0,%D1));
-+ }
-+ }
- }
- else if (GET_CODE (base) == PRE_DEC) /* (--R) */
- return *l=4, (AS2 (st,%0,%D1) CR_TAB
-@@ -3370,18 +3670,25 @@ out_movqi_mr_r (rtx insn, rtx op[], int
- fatal_insn ("incorrect insn:",insn);
-
- if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (dest)))
-- return *l = 3, AVR_TINY ? (AS2 (subi,r28,lo8(-(%o0-63))) CR_TAB
-- AS2 (sbci,r29,hi8(-(%o0-63))) CR_TAB
-- AS2 (subi,r28,lo8(-63)) CR_TAB
-- AS2 (sbci,r29,hi8(-63)) CR_TAB
-- AS2 (st,Y,%1) CR_TAB
-- AS2 (subi,r28,lo8(63)) CR_TAB
-- AS2 (sbci,r29,hi8(63)) CR_TAB
-- AS2 (subi,r28,lo8(%o0-63)) CR_TAB
-- AS2 (sbci,r29,hi8(%o0-63)))
-- : (AS2 (adiw,r28,%o0-63) CR_TAB
-- AS2 (std,Y+63,%1) CR_TAB
-- AS2 (sbiw,r28,%o0-63));
-+ {
-+ if (AVR_TINY) {
-+ *l = 9;
-+ return (AS2 (subi,r28,lo8(-(%o0-63))) CR_TAB
-+ AS2 (sbci,r29,hi8(-(%o0-63))) CR_TAB
-+ AS2 (subi,r28,lo8(-63)) CR_TAB
-+ AS2 (sbci,r29,hi8(-63)) CR_TAB
-+ AS2 (st,Y,%1) CR_TAB
-+ AS2 (subi,r28,lo8(63)) CR_TAB
-+ AS2 (sbci,r29,hi8(63)) CR_TAB
-+ AS2 (subi,r28,lo8(%o0-63)) CR_TAB
-+ AS2 (sbci,r29,hi8(%o0-63)));
-+ } else {
-+ *l = 3;
-+ return (AS2 (adiw,r28,%o0-63) CR_TAB
-+ AS2 (std,Y+63,%1) CR_TAB
-+ AS2 (sbiw,r28,%o0-63));
-+ }
-+ }
-
- return *l = 5, (AS2 (subi,r28,lo8(-%o0)) CR_TAB
- AS2 (sbci,r29,hi8(-%o0)) CR_TAB
-@@ -3394,60 +3701,95 @@ out_movqi_mr_r (rtx insn, rtx op[], int
- if (reg_overlap_mentioned_p (src, XEXP (x, 0)))
- {
- if (reg_unused_after (insn, XEXP (x,0)))
-- return *l = 3, AVR_TINY ? (AS2 (mov,__tmp_reg__,%1) CR_TAB
-- AS2 (subi,r26,lo8(-(%o0))) CR_TAB
-- AS2 (sbci,r27,hi8(-(%o0))) CR_TAB
-- AS2 (st,X,__tmp_reg__))
-- : (AS2 (mov,__tmp_reg__,%1) CR_TAB
-- AS2 (adiw,r26,%o0) CR_TAB
-- AS2 (st,X,__tmp_reg__));
--
-- return *l = 4, AVR_TINY ? (AS2 (mov,__tmp_reg__,%1) CR_TAB
-- AS2 (subi,r26,lo8(-(%o0))) CR_TAB
-- AS2 (sbci,r27,hi8(-(%o0))) CR_TAB
-- AS2 (st,X,__tmp_reg__) CR_TAB
-- AS2 (subi,r26,lo8(%o0)) CR_TAB
-- AS2 (sbci,r27,hi8(%o0)))
-- : (AS2 (mov,__tmp_reg__,%1) CR_TAB
-- AS2 (adiw,r26,%o0) CR_TAB
-- AS2 (st,X,__tmp_reg__) CR_TAB
-- AS2 (sbiw,r26,%o0));
-+ {
-+ if (AVR_TINY) {
-+ *l = 4;
-+ return (AS2 (mov,__tmp_reg__,%1) CR_TAB
-+ AS2 (subi,r26,lo8(-(%o0))) CR_TAB
-+ AS2 (sbci,r27,hi8(-(%o0))) CR_TAB
-+ AS2 (st,X,__tmp_reg__));
-+ } else {
-+ *l = 3;
-+ return (AS2 (mov,__tmp_reg__,%1) CR_TAB
-+ AS2 (adiw,r26,%o0) CR_TAB
-+ AS2 (st,X,__tmp_reg__));
-+ }
-+ }
-+
-+ if (AVR_TINY) {
-+ *l = 6;
-+ return (AS2 (mov,__tmp_reg__,%1) CR_TAB
-+ AS2 (subi,r26,lo8(-(%o0))) CR_TAB
-+ AS2 (sbci,r27,hi8(-(%o0))) CR_TAB
-+ AS2 (st,X,__tmp_reg__) CR_TAB
-+ AS2 (subi,r26,lo8(%o0)) CR_TAB
-+ AS2 (sbci,r27,hi8(%o0)));
-+ } else {
-+ *l = 4;
-+ return (AS2 (mov,__tmp_reg__,%1) CR_TAB
-+ AS2 (adiw,r26,%o0) CR_TAB
-+ AS2 (st,X,__tmp_reg__) CR_TAB
-+ AS2 (sbiw,r26,%o0));
-+ }
- }
- else
-- {
-- if (reg_unused_after (insn, XEXP (x,0)))
-- return *l = 2, AVR_TINY ? (AS2 (subi,r26,lo8(-(%o0))) CR_TAB
-- AS2 (sbci,r27,hi8(-(%o0))) CR_TAB
-- AS2 (st,X,%1))
-- : (AS2 (adiw,r26,%o0) CR_TAB
-- AS2 (st,X,%1));
--
-- return *l = 3, AVR_TINY ? (AS2 (subi,r26,lo8(-(%o0))) CR_TAB
-- AS2 (sbci,r27,hi8(-(%o0))) CR_TAB
-- AS2 (st,X,%1) CR_TAB
-- AS2 (subi,r26,lo8(%o0)) CR_TAB
-- AS2 (sbci,r27,hi8(%o0)))
-- : (AS2 (adiw,r26,%o0) CR_TAB
-- AS2 (st,X,%1) CR_TAB
-- AS2 (sbiw,r26,%o0));
-- }
-+ {
-+ if (reg_unused_after (insn, XEXP (x,0))) {
-+ if (AVR_TINY) {
-+ *l = 3;
-+ return (AS2 (subi,r26,lo8(-(%o0))) CR_TAB
-+ AS2 (sbci,r27,hi8(-(%o0))) CR_TAB
-+ AS2 (st,X,%1));
-+ } else {
-+ *l = 2;
-+ return (AS2 (adiw,r26,%o0) CR_TAB
-+ AS2 (st,X,%1));
-+ }
-+ }
-+
-+ if (AVR_TINY) {
-+ *l = 5;
-+ return (AS2 (subi,r26,lo8(-(%o0))) CR_TAB
-+ AS2 (sbci,r27,hi8(-(%o0))) CR_TAB
-+ AS2 (st,X,%1) CR_TAB
-+ AS2 (subi,r26,lo8(%o0)) CR_TAB
-+ AS2 (sbci,r27,hi8(%o0)));
-+ } else {
-+ *l = 3;
-+ return (AS2 (adiw,r26,%o0) CR_TAB
-+ AS2 (st,X,%1) CR_TAB
-+ AS2 (sbiw,r26,%o0));
-+ }
-+ }
- }
-- *l = 1;
-- op[2] = XEXP(x, 0);
-- if(REGNO(op[2]) == REG_Y)
-- return AVR_TINY ? (AS2 (subi,%A2,lo8(-(%o0))) CR_TAB
-- AS2 (sbci,%B2,hi8(-(%o0))) CR_TAB
-- AS2 (st,Y,%1) CR_TAB
-- AS2 (subi,%A2,lo8(%o0)) CR_TAB
-- AS2 (sbci,%B2,hi8(%o0)))
-- : AS2 (std,%0,%1);
-- if(REGNO(op[2]) == REG_Z)
-- return AVR_TINY ? (AS2 (subi,%A2,lo8(-(%o0))) CR_TAB
-- AS2 (sbci,%B2,hi8(-(%o0))) CR_TAB
-- AS2 (st,Z,%1) CR_TAB
-- AS2 (subi,%A2,lo8(%o0)) CR_TAB
-- AS2 (sbci,%B2,hi8(%o0)))
-- : AS2 (std,%0,%1);
-+
-+ op[2] = XEXP(x, 0);
-+ if(REGNO(op[2]) == REG_Y) {
-+ if (AVR_TINY) {
-+ *l = 5;
-+ return (AS2 (subi,%A2,lo8(-(%o0))) CR_TAB
-+ AS2 (sbci,%B2,hi8(-(%o0))) CR_TAB
-+ AS2 (st,Y,%1) CR_TAB
-+ AS2 (subi,%A2,lo8(%o0)) CR_TAB
-+ AS2 (sbci,%B2,hi8(%o0)));
-+ } else {
-+ *l = 1;
-+ return (AS2 (std,%0,%1));
-+ }
-+ }
-+ if(REGNO(op[2]) == REG_Z) {
-+ if (AVR_TINY) {
-+ *l = 5;
-+ return (AS2 (subi,%A2,lo8(-(%o0))) CR_TAB
-+ AS2 (sbci,%B2,hi8(-(%o0))) CR_TAB
-+ AS2 (st,Z,%1) CR_TAB
-+ AS2 (subi,%A2,lo8(%o0)) CR_TAB
-+ AS2 (sbci,%B2,hi8(%o0)));
-+ } else {
-+ *l = 1;
-+ return (AS2 (std,%0,%1));
-+ }
-+ }
- }
- *l = 1;
- return AS2 (st,%0,%1);
-@@ -3493,109 +3835,162 @@ out_movhi_mr_r (rtx insn, rtx op[], int
- if (reg_base == REG_X)
- {
- if (reg_src == REG_X)
-- {
-- /* "st X+,r26" and "st -X,r26" are undefined. */
-- if (!mem_volatile_p && reg_unused_after (insn, src))
-- return *l=4, AVR_TINY ? (AS2 (mov,__tmp_reg__,r27) CR_TAB
-- AS2 (st,X,r26) CR_TAB
-- AS2 (subi,r26,lo8(-1)) CR_TAB
-- AS2 (sbci,r27,hi8(-1)) CR_TAB
-- AS2 (st,X,__tmp_reg__))
-- : (AS2 (mov,__tmp_reg__,r27) CR_TAB
-- AS2 (st,X,r26) CR_TAB
-- AS2 (adiw,r26,1) CR_TAB
-- AS2 (st,X,__tmp_reg__));
-- else
-- {
-- if (!AVR_XMEGA)
-- return *l=5, AVR_TINY ? (AS2 (mov,__tmp_reg__,r27) CR_TAB
-- AS2 (subi,r26,lo8(-1)) CR_TAB
-- AS2 (sbci,r27,hi8(-1)) CR_TAB
-- AS2 (st,X,__tmp_reg__) CR_TAB
-- AS2 (subi,r26,lo8(1)) CR_TAB
-- AS2 (sbci,r27,hi8(1)) CR_TAB
-- AS2 (st,X,r26))
-- : (AS2 (mov,__tmp_reg__,r27) CR_TAB
-- AS2 (adiw,r26,1) CR_TAB
-- AS2 (st,X,__tmp_reg__) CR_TAB
-- AS2 (sbiw,r26,1) CR_TAB
-- AS2 (st,X,r26));
-- else
-- return *l=5, AVR_TINY ? (AS2 (mov,__tmp_reg__,r27) CR_TAB
-- AS2 (st,X,r26) CR_TAB
-- AS2 (subi,r26,lo8(-1)) CR_TAB
-- AS2 (sbci,r27,hi8(-1)) CR_TAB
-- AS2 (st,X,__tmp_reg__) CR_TAB
-- AS2 (subi,r26,lo8(1)) CR_TAB
-- AS2 (sbci,r27,hi8(1)))
-- : (AS2 (mov,__tmp_reg__,r27) CR_TAB
-- AS2 (st,X,r26) CR_TAB
-- AS2 (adiw,r26,1) CR_TAB
-- AS2 (st,X,__tmp_reg__) CR_TAB
-- AS2 (sbiw,r26,1));
-- }
-+ {
-+ /* "st X+,r26" and "st -X,r26" are undefined. */
-+ if (!mem_volatile_p && reg_unused_after (insn, src)) {
-+ if (AVR_TINY) {
-+ *l = 5;
-+ return (AS2 (mov,__tmp_reg__,r27) CR_TAB
-+ AS2 (st,X,r26) CR_TAB
-+ AS2 (subi,r26,lo8(-1)) CR_TAB
-+ AS2 (sbci,r27,hi8(-1)) CR_TAB
-+ AS2 (st,X,__tmp_reg__));
-+ } else {
-+ *l = 4;
-+ return (AS2 (mov,__tmp_reg__,r27) CR_TAB
-+ AS2 (st,X,r26) CR_TAB
-+ AS2 (adiw,r26,1) CR_TAB
-+ AS2 (st,X,__tmp_reg__));
-+ }
-+ }
-+ else
-+ {
-+ if (!AVR_XMEGA) {
-+ if (AVR_TINY) {
-+ *l = 7;
-+ return (AS2 (mov,__tmp_reg__,r27) CR_TAB
-+ AS2 (subi,r26,lo8(-1)) CR_TAB
-+ AS2 (sbci,r27,hi8(-1)) CR_TAB
-+ AS2 (st,X,__tmp_reg__) CR_TAB
-+ AS2 (subi,r26,lo8(1)) CR_TAB
-+ AS2 (sbci,r27,hi8(1)) CR_TAB
-+ AS2 (st,X,r26));
-+ } else {
-+ *l = 5;
-+ return (AS2 (mov,__tmp_reg__,r27) CR_TAB
-+ AS2 (adiw,r26,1) CR_TAB
-+ AS2 (st,X,__tmp_reg__) CR_TAB
-+ AS2 (sbiw,r26,1) CR_TAB
-+ AS2 (st,X,r26));
-+ }
-+ }
-+ else {
-+ if (AVR_TINY) {
-+ *l = 7;
-+ return (AS2 (mov,__tmp_reg__,r27) CR_TAB
-+ AS2 (st,X,r26) CR_TAB
-+ AS2 (subi,r26,lo8(-1)) CR_TAB
-+ AS2 (sbci,r27,hi8(-1)) CR_TAB
-+ AS2 (st,X,__tmp_reg__) CR_TAB
-+ AS2 (subi,r26,lo8(1)) CR_TAB
-+ AS2 (sbci,r27,hi8(1)));
-+ } else {
-+ *l = 5;
-+ return (AS2 (mov,__tmp_reg__,r27) CR_TAB
-+ AS2 (st,X,r26) CR_TAB
-+ AS2 (adiw,r26,1) CR_TAB
-+ AS2 (st,X,__tmp_reg__) CR_TAB
-+ AS2 (sbiw,r26,1));
-+ }
-+ }
- }
-+ }
- else
- {
- if (!mem_volatile_p && reg_unused_after (insn, base))
- return *l=2, (AS2 (st,X+,%A1) CR_TAB
- AS2 (st,X,%B1));
- else
-- {
-- if (!AVR_XMEGA)
-- return *l=3, AVR_TINY ? (AS2 (subi,r26,lo8(-1)) CR_TAB
-- AS2 (sbci,r27,hi8(-1)) CR_TAB
-- AS2 (st,X,%B1) CR_TAB
-- AS2 (st,-X,%A1))
-- : (AS2 (adiw,r26,1) CR_TAB
-- AS2 (st,X,%B1) CR_TAB
-- AS2 (st,-X,%A1));
-- else
-- return *l=3, AVR_TINY ? (AS2 (st,X+,%A1) CR_TAB
-- AS2 (st,X,%B1) CR_TAB
-- AS2 (subi,r26,lo8(1)) CR_TAB
-- AS2 (sbci,r27,hi8(1)))
-- : (AS2 (st,X+,%A1) CR_TAB
-- AS2 (st,X,%B1) CR_TAB
-- AS2 (sbiw,r26,1));
-- }
-+ {
-+ if (!AVR_XMEGA) {
-+ if (AVR_TINY) {
-+ *l = 4;
-+ return (AS2 (subi,r26,lo8(-1)) CR_TAB
-+ AS2 (sbci,r27,hi8(-1)) CR_TAB
-+ AS2 (st,X,%B1) CR_TAB
-+ AS2 (st,-X,%A1));
-+ } else {
-+ *l = 3;
-+ return (AS2 (adiw,r26,1) CR_TAB
-+ AS2 (st,X,%B1) CR_TAB
-+ AS2 (st,-X,%A1));
-+ }
-+ } else {
-+ if (AVR_TINY) {
-+ *l = 4;
-+ return (AS2 (st,X+,%A1) CR_TAB
-+ AS2 (st,X,%B1) CR_TAB
-+ AS2 (subi,r26,lo8(1)) CR_TAB
-+ AS2 (sbci,r27,hi8(1)));
-+ } else {
-+ *l = 3;
-+ return (AS2 (st,X+,%A1) CR_TAB
-+ AS2 (st,X,%B1) CR_TAB
-+ AS2 (sbiw,r26,1));
-+ }
-+ }
-+ }
- }
- }
- else
- {
- if (!AVR_XMEGA)
- {
-- if(reg_base == REG_Y)
-- return *l=2, AVR_TINY ? (AS2 (subi,r28,lo8(-1)) CR_TAB
-- AS2 (sbci,r29,hi8(-1)) CR_TAB
-- AS2 (st,Y,%B1) CR_TAB
-- AS2 (st,-Y,%A1))
-- : (AS2 (std,%0+1,%B1) CR_TAB
-- AS2 (st,%0,%A1));
-- if(reg_base == REG_Z)
-- return *l=2, AVR_TINY ? (AS2 (subi,r30,lo8(-1)) CR_TAB
-- AS2 (sbci,r31,hi8(-1)) CR_TAB
-- AS2 (st,Z,%B1) CR_TAB
-- AS2 (st,-Z,%A1))
-- : (AS2 (std,%0+1,%B1) CR_TAB
-- AS2 (st,%0,%A1));
-+ if(reg_base == REG_Y) {
-+ if (AVR_TINY) {
-+ *l = 4;
-+ return (AS2 (subi,r28,lo8(-1)) CR_TAB
-+ AS2 (sbci,r29,hi8(-1)) CR_TAB
-+ AS2 (st,Y,%B1) CR_TAB
-+ AS2 (st,-Y,%A1));
-+ } else {
-+ *l = 2;
-+ return (AS2 (std,%0+1,%B1) CR_TAB
-+ AS2 (st,%0,%A1));
-+ }
-+ }
-+ if(reg_base == REG_Z) {
-+ if (AVR_TINY) {
-+ *l = 4;
-+ return (AS2 (subi,r30,lo8(-1)) CR_TAB
-+ AS2 (sbci,r31,hi8(-1)) CR_TAB
-+ AS2 (st,Z,%B1) CR_TAB
-+ AS2 (st,-Z,%A1));
-+ } else {
-+ *l = 2;
-+ return (AS2 (std,%0+1,%B1) CR_TAB
-+ AS2 (st,%0,%A1));
-+ }
-+ }
- }
- else
- {
-- if(reg_base == REG_Y)
-- return *l=2, AVR_TINY ? (AS2 (st,Y+,%A1) CR_TAB
-- AS2 (st,Y,%B1) CR_TAB
-- AS2 (subi,r28,lo8(1)) CR_TAB
-- AS2 (sbci,r29,hi8(1)))
-- : (AS2 (st,%0,%A1) CR_TAB
-- AS2 (std,%0+1,%B1));
-- if(reg_base == REG_Z)
-- return *l=2, AVR_TINY ? (AS2 (st,Z+,%A1) CR_TAB
-- AS2 (st,Z,%B1) CR_TAB
-- AS2 (subi,r30,lo8(1)) CR_TAB
-- AS2 (sbci,r31,hi8(1)))
-- : (AS2 (st,%0,%A1) CR_TAB
-- AS2 (std,%0+1,%B1));
-+ if(reg_base == REG_Y) {
-+ if (AVR_TINY) {
-+ *l = 4;
-+ return (AS2 (st,Y+,%A1) CR_TAB
-+ AS2 (st,Y,%B1) CR_TAB
-+ AS2 (subi,r28,lo8(1)) CR_TAB
-+ AS2 (sbci,r29,hi8(1)));
-+ } else {
-+ *l = 2;
-+ return (AS2 (st,%0,%A1) CR_TAB
-+ AS2 (std,%0+1,%B1));
-+ }
-+ }
-+ if(reg_base == REG_Z) {
-+ if (AVR_TINY) {
-+ *l = 4;
-+ return (AS2 (st,Z+,%A1) CR_TAB
-+ AS2 (st,Z,%B1) CR_TAB
-+ AS2 (subi,r30,lo8(1)) CR_TAB
-+ AS2 (sbci,r31,hi8(1)));
-+ } else {
-+ *l = 2;
-+ return (AS2 (st,%0,%A1) CR_TAB
-+ AS2 (std,%0+1,%B1));
-+ }
-+ }
- }
- }
- }
-@@ -3610,69 +4005,91 @@ out_movhi_mr_r (rtx insn, rtx op[], int
-
- if (!AVR_XMEGA)
- {
-- if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (dest)))
-- return *l = 4, AVR_TINY ? (AS2 (subi,r28,lo8(-(%o0-62))) CR_TAB
-- AS2 (sbci,r29,hi8(-(%o0-62))) CR_TAB
-- AS2 (subi,r28,lo8(-63)) CR_TAB
-- AS2 (sbci,r29,hi8(-63)) CR_TAB
-- AS2 (st,Y,%B1) CR_TAB
-- AS2 (st,-Y,%A1) CR_TAB
-- AS2 (subi,r28,lo8(62)) CR_TAB
-- AS2 (sbci,r29,hi8(62)) CR_TAB
-- AS2 (subi,r28,lo8(%o0-62)) CR_TAB
-- AS2 (sbci,r29,hi8(%o0-62)))
-- : (AS2 (adiw,r28,%o0-62) CR_TAB
-- AS2 (std,Y+63,%B1) CR_TAB
-- AS2 (std,Y+62,%A1) CR_TAB
-- AS2 (sbiw,r28,%o0-62));
--
-- return *l = 6, AVR_TINY ? (AS2 (subi,r28,lo8(-%o0)) CR_TAB
-- AS2 (sbci,r29,hi8(-%o0)) CR_TAB
-- AS2 (subi,r28,lo8(-1)) CR_TAB
-- AS2 (sbci,r29,hi8(-1)) CR_TAB
-- AS2 (st,Y,%B1) CR_TAB
-- AS2 (st,-Y,%A1) CR_TAB
-- AS2 (subi,r28,lo8(%o0)) CR_TAB
-- AS2 (sbci,r29,hi8(%o0)))
-- : (AS2 (subi,r28,lo8(-%o0)) CR_TAB
-- AS2 (sbci,r29,hi8(-%o0)) CR_TAB
-- AS2 (std,Y+1,%B1) CR_TAB
-- AS2 (st,Y,%A1) CR_TAB
-- AS2 (subi,r28,lo8(%o0)) CR_TAB
-- AS2 (sbci,r29,hi8(%o0)));
-+ if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (dest))) {
-+ if (AVR_TINY) {
-+ *l = 10;
-+ return (AS2 (subi,r28,lo8(-(%o0-62))) CR_TAB
-+ AS2 (sbci,r29,hi8(-(%o0-62))) CR_TAB
-+ AS2 (subi,r28,lo8(-63)) CR_TAB
-+ AS2 (sbci,r29,hi8(-63)) CR_TAB
-+ AS2 (st,Y,%B1) CR_TAB
-+ AS2 (st,-Y,%A1) CR_TAB
-+ AS2 (subi,r28,lo8(62)) CR_TAB
-+ AS2 (sbci,r29,hi8(62)) CR_TAB
-+ AS2 (subi,r28,lo8(%o0-62)) CR_TAB
-+ AS2 (sbci,r29,hi8(%o0-62)));
-+ } else {
-+ *l = 4;
-+ return (AS2 (adiw,r28,%o0-62) CR_TAB
-+ AS2 (std,Y+63,%B1) CR_TAB
-+ AS2 (std,Y+62,%A1) CR_TAB
-+ AS2 (sbiw,r28,%o0-62));
-+ }
-+ }
-+
-+ if (AVR_TINY) {
-+ *l = 8;
-+ return (AS2 (subi,r28,lo8(-%o0)) CR_TAB
-+ AS2 (sbci,r29,hi8(-%o0)) CR_TAB
-+ AS2 (subi,r28,lo8(-1)) CR_TAB
-+ AS2 (sbci,r29,hi8(-1)) CR_TAB
-+ AS2 (st,Y,%B1) CR_TAB
-+ AS2 (st,-Y,%A1) CR_TAB
-+ AS2 (subi,r28,lo8(%o0)) CR_TAB
-+ AS2 (sbci,r29,hi8(%o0)));
-+ } else {
-+ *l = 6;
-+ return (AS2 (subi,r28,lo8(-%o0)) CR_TAB
-+ AS2 (sbci,r29,hi8(-%o0)) CR_TAB
-+ AS2 (std,Y+1,%B1) CR_TAB
-+ AS2 (st,Y,%A1) CR_TAB
-+ AS2 (subi,r28,lo8(%o0)) CR_TAB
-+ AS2 (sbci,r29,hi8(%o0)));
-+ }
- }
- else
- {
-- if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (dest)))
-- return *l = 4, AVR_TINY ? (AS2 (subi,r28,lo8(-(%o0-62))) CR_TAB
-- AS2 (sbci,r29,hi8(-(%o0-62))) CR_TAB
-- AS2 (subi,r28,lo8(-62)) CR_TAB
-- AS2 (sbci,r29,hi8(-62)) CR_TAB
-- AS2 (st,Y+,%A1) CR_TAB
-- AS2 (st,Y,%B1) CR_TAB
-- AS2 (subi,r28,lo8(63)) CR_TAB
-- AS2 (sbci,r29,hi8(63)) CR_TAB
-- AS2 (subi,r28,lo8(%o0-62)) CR_TAB
-- AS2 (sbci,r29,hi8(%o0-62)))
-- : (AS2 (adiw,r28,%o0-62) CR_TAB
-- AS2 (std,Y+62,%A1) CR_TAB
-- AS2 (std,Y+63,%B1) CR_TAB
-- AS2 (sbiw,r28,%o0-62));
-+ if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (dest))) {
-+ if (AVR_TINY) {
-+ *l = 10;
-+ return (AS2 (subi,r28,lo8(-(%o0-62))) CR_TAB
-+ AS2 (sbci,r29,hi8(-(%o0-62))) CR_TAB
-+ AS2 (subi,r28,lo8(-62)) CR_TAB
-+ AS2 (sbci,r29,hi8(-62)) CR_TAB
-+ AS2 (st,Y+,%A1) CR_TAB
-+ AS2 (st,Y,%B1) CR_TAB
-+ AS2 (subi,r28,lo8(63)) CR_TAB
-+ AS2 (sbci,r29,hi8(63)) CR_TAB
-+ AS2 (subi,r28,lo8(%o0-62)) CR_TAB
-+ AS2 (sbci,r29,hi8(%o0-62)));
-+ } else {
-+ *l = 4;
-+ return (AS2 (adiw,r28,%o0-62) CR_TAB
-+ AS2 (std,Y+62,%A1) CR_TAB
-+ AS2 (std,Y+63,%B1) CR_TAB
-+ AS2 (sbiw,r28,%o0-62));
-+ }
-+ }
-
-- return *l = 6, AVR_TINY ? (AS2 (subi,r28,lo8(-%o0)) CR_TAB
-- AS2 (sbci,r29,hi8(-%o0)) CR_TAB
-- AS2 (st,Y+,%A1) CR_TAB
-- AS2 (st,Y,%B1) CR_TAB
-- AS2 (subi,r28,lo8(1)) CR_TAB
-- AS2 (sbci,r29,hi8(1)) CR_TAB
-- AS2 (subi,r28,lo8(%o0)) CR_TAB
-- AS2 (sbci,r29,hi8(%o0)))
-- : (AS2 (subi,r28,lo8(-%o0)) CR_TAB
-- AS2 (sbci,r29,hi8(-%o0)) CR_TAB
-- AS2 (st,Y,%A1) CR_TAB
-- AS2 (std,Y+1,%B1) CR_TAB
-- AS2 (subi,r28,lo8(%o0)) CR_TAB
-- AS2 (sbci,r29,hi8(%o0)));
-+ if (AVR_TINY) {
-+ *l = 8;
-+ return (AS2 (subi,r28,lo8(-%o0)) CR_TAB
-+ AS2 (sbci,r29,hi8(-%o0)) CR_TAB
-+ AS2 (st,Y+,%A1) CR_TAB
-+ AS2 (st,Y,%B1) CR_TAB
-+ AS2 (subi,r28,lo8(1)) CR_TAB
-+ AS2 (sbci,r29,hi8(1)) CR_TAB
-+ AS2 (subi,r28,lo8(%o0)) CR_TAB
-+ AS2 (sbci,r29,hi8(%o0)));
-+ } else {
-+ *l = 6;
-+ return (AS2 (subi,r28,lo8(-%o0)) CR_TAB
-+ AS2 (sbci,r29,hi8(-%o0)) CR_TAB
-+ AS2 (st,Y,%A1) CR_TAB
-+ AS2 (std,Y+1,%B1) CR_TAB
-+ AS2 (subi,r28,lo8(%o0)) CR_TAB
-+ AS2 (sbci,r29,hi8(%o0)));
-+ }
- }
- }
- if (reg_base == REG_X)
-@@ -3681,121 +4098,164 @@ out_movhi_mr_r (rtx insn, rtx op[], int
- if (reg_src == REG_X)
- {
- if (!AVR_XMEGA)
-- {
-- *l = 7;
-- return AVR_TINY ? (AS2 (mov,__tmp_reg__,r26) CR_TAB
-- AS2 (mov,__zero_reg__,r27) CR_TAB
-- AS2 (subi,r26,lo8(-(%o0+1))) CR_TAB
-- AS2 (sbci,r27,hi8(-(%o0+1))) CR_TAB
-- AS2 (st,X,__zero_reg__) CR_TAB
-- AS2 (st,-X,__tmp_reg__) CR_TAB
-- AS1 (clr,__zero_reg__) CR_TAB
-- AS2 (subi,r26,lo8(%o0)) CR_TAB
-- AS2 (sbci,r27,hi8(%o0)))
-- : (AS2 (mov,__tmp_reg__,r26) CR_TAB
-- AS2 (mov,__zero_reg__,r27) CR_TAB
-- AS2 (adiw,r26,%o0+1) CR_TAB
-- AS2 (st,X,__zero_reg__) CR_TAB
-- AS2 (st,-X,__tmp_reg__) CR_TAB
-- AS1 (clr,__zero_reg__) CR_TAB
<Skipped 580 lines>
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/crossavr-gcc.git/commitdiff/0ba17af45826fef562dbc9d5c1154bf7e977ee5e
More information about the pld-cvs-commit
mailing list