diff options
author | Joerg Wunsch <joerg@FreeBSD.org> | 2010-03-08 19:53:44 +0000 |
---|---|---|
committer | Joerg Wunsch <joerg@FreeBSD.org> | 2010-03-08 19:53:44 +0000 |
commit | 39ccf57d02b2971677c431e83c05bbd9c28b6ef0 (patch) | |
tree | ad1649b99fd2eff9fc55d4eaf027d03ea06efe90 /devel/avr-gcc | |
parent | 43e2a7d3728143d2fd91940c5aaa2fbcd6762849 (diff) | |
download | ports-39ccf57d02b2971677c431e83c05bbd9c28b6ef0.tar.gz ports-39ccf57d02b2971677c431e83c05bbd9c28b6ef0.zip |
Upgrade to GCC 4.3.4, as well as to the patches from WinAVR 20100110
Notes
Notes:
svn path=/head/; revision=250707
Diffstat (limited to 'devel/avr-gcc')
-rw-r--r-- | devel/avr-gcc/Makefile | 4 | ||||
-rw-r--r-- | devel/avr-gcc/distinfo | 12 | ||||
-rw-r--r-- | devel/avr-gcc/files/patch-avr-libgcc.S | 422 | ||||
-rw-r--r-- | devel/avr-gcc/files/patch-bug11259 | 107 | ||||
-rw-r--r-- | devel/avr-gcc/files/patch-bug18145 | 186 | ||||
-rw-r--r-- | devel/avr-gcc/files/patch-bug19636-24894-31644-31786 | 45 | ||||
-rw-r--r-- | devel/avr-gcc/files/patch-bug35013 | 26 | ||||
-rw-r--r-- | devel/avr-gcc/files/patch-builtins | 581 | ||||
-rw-r--r-- | devel/avr-gcc/files/patch-disable-ssp | 22 | ||||
-rw-r--r-- | devel/avr-gcc/files/patch-libiberty-Makefile.in | 12 | ||||
-rw-r--r-- | devel/avr-gcc/files/patch-newdevices | 674 | ||||
-rw-r--r-- | devel/avr-gcc/files/patch-param-inline-call-cost | 20 | ||||
-rw-r--r-- | devel/avr-gcc/files/patch-xmega | 258 | ||||
-rw-r--r-- | devel/avr-gcc/files/patch-xx-os_main | 121 | ||||
-rw-r--r-- | devel/avr-gcc/pkg-plist | 160 |
15 files changed, 1915 insertions, 735 deletions
diff --git a/devel/avr-gcc/Makefile b/devel/avr-gcc/Makefile index 4a37609a41a1..5eedcfe62327 100644 --- a/devel/avr-gcc/Makefile +++ b/devel/avr-gcc/Makefile @@ -6,8 +6,7 @@ # PORTNAME= gcc -PORTVERSION= 4.3.2 -PORTREVISION= 2 +PORTVERSION= 4.3.4 CATEGORIES= devel MASTER_SITES= ${MASTER_SITE_GCC} MASTER_SITES+= http://people.freebsd.org/~joerg/:local @@ -34,7 +33,6 @@ BUILD_WRKSRC= ${WRKDIR}/build CONFIGURE_WRKSRC= ${BUILD_WRKSRC} INSTALL_WRKSRC= ${BUILD_WRKSRC} CONFIGURE_SCRIPT= ../gcc-${PORTVERSION}/configure -NO_LATEST_LINK= Use devel/avr-gcc for a stable version. USE_PERL5_BUILD= yes USE_BZIP2= yes diff --git a/devel/avr-gcc/distinfo b/devel/avr-gcc/distinfo index b07494eb15e2..db0c8673e8f0 100644 --- a/devel/avr-gcc/distinfo +++ b/devel/avr-gcc/distinfo @@ -1,6 +1,6 @@ -MD5 (gcc-core-4.3.2.tar.bz2) = dd8048b43d3d4e5595bcade47b9144c6 -SHA256 (gcc-core-4.3.2.tar.bz2) = 0687e7279d78eb963ac34a3b06a0a6a1d1e9a26807ef4939cf4a2ad5f062e75a -SIZE (gcc-core-4.3.2.tar.bz2) = 23830073 -MD5 (gcc-g++-4.3.2.tar.bz2) = bfdf8d19e1b85f522f8b8d48d25e7aaa -SHA256 (gcc-g++-4.3.2.tar.bz2) = 254e2bc95ca397579634b2277c4dbe84ee47cb86d0aad6bfff8586107085bb80 -SIZE (gcc-g++-4.3.2.tar.bz2) = 5667106 +MD5 (gcc-core-4.3.4.tar.bz2) = 575b3220bb8e7060939c429fc8608d22 +SHA256 (gcc-core-4.3.4.tar.bz2) = 3189838f5047be4ff54711c84db17c76ecfcc79bf4f4d110bf7323eeb90568fa +SIZE (gcc-core-4.3.4.tar.bz2) = 24329359 +MD5 (gcc-g++-4.3.4.tar.bz2) = d526e34eec101b8c69254ed5215b6d41 +SHA256 (gcc-g++-4.3.4.tar.bz2) = f8d27b4d2c8fa492a1f8b7af46a39192c28dda1e863ae28a80b7fec4caf41735 +SIZE (gcc-g++-4.3.4.tar.bz2) = 5623014 diff --git a/devel/avr-gcc/files/patch-avr-libgcc.S b/devel/avr-gcc/files/patch-avr-libgcc.S index 63979797d3a2..5683fd2535e7 100644 --- a/devel/avr-gcc/files/patch-avr-libgcc.S +++ b/devel/avr-gcc/files/patch-avr-libgcc.S @@ -1,177 +1,6 @@ -Note: this patch is misnamed. It actually adds support for -ATmega256x. I'll stick with the name since CVS is poor at -renaming files. -- Joerg - -Index: gcc/config/avr/libgcc.S -=================================================================== ---- gcc/config/avr/libgcc.S (revision 132252) -+++ gcc/config/avr/libgcc.S (working copy) -@@ -594,7 +594,12 @@ - out __SP_H__,r29 - out __SREG__,__tmp_reg__ - out __SP_L__,r28 -+#if defined (__AVR_HAVE_EIJMP_EICALL__) -+ eijmp -+#else - ijmp -+#endif -+ - .endfunc - #endif /* defined (L_prologue) */ - -@@ -674,13 +679,22 @@ - lpm __tmp_reg__, Z+ - lpm r31, Z - mov r30, __tmp_reg__ -+ -+#if defined (__AVR_HAVE_EIJMP_EICALL__) -+ eijmp -+#else - ijmp -+#endif -+ - #else - lpm - adiw r30, 1 - push r0 - lpm - push r0 -+#if defined (__AVR_HAVE_EIJMP_EICALL__) -+ push __zero_reg__ -+#endif - ret - #endif - .endfunc -Index: gcc/config/avr/avr.md -=================================================================== ---- gcc/config/avr/avr.md (revision 132252) -+++ gcc/config/avr/avr.md (working copy) -@@ -32,6 +32,7 @@ - ;; p POST_INC or PRE_DEC address as a pointer (X, Y, Z) - ;; r POST_INC or PRE_DEC address as a register (r26, r28, r30) - ;; ~ Output 'r' if not AVR_MEGA. -+;; ! Output 'e' if AVR_HAVE_EIJMP_EICALL. - - ;; UNSPEC usage: - ;; 0 Length of a string, see "strlenhi". -@@ -2301,22 +2302,22 @@ - "(register_operand (operands[0], HImode) || CONSTANT_P (operands[0]))" - "*{ - if (which_alternative==0) -- return \"icall\"; -+ return \"%!icall\"; - else if (which_alternative==1) - { - if (AVR_HAVE_MOVW) - return (AS2 (movw, r30, %0) CR_TAB -- \"icall\"); -+ \"%!icall\"); - else - return (AS2 (mov, r30, %A0) CR_TAB - AS2 (mov, r31, %B0) CR_TAB -- \"icall\"); -+ \"%!icall\"); - } - else if (which_alternative==2) - return AS1(%~call,%c0); - return (AS2 (ldi,r30,lo8(%0)) CR_TAB - AS2 (ldi,r31,hi8(%0)) CR_TAB -- \"icall\"); -+ \"%!icall\"); - }" - [(set_attr "cc" "clobber,clobber,clobber,clobber") - (set_attr_alternative "length" -@@ -2338,22 +2339,22 @@ - "(register_operand (operands[0], VOIDmode) || CONSTANT_P (operands[0]))" - "*{ - if (which_alternative==0) -- return \"icall\"; -+ return \"%!icall\"; - else if (which_alternative==1) - { - if (AVR_HAVE_MOVW) - return (AS2 (movw, r30, %1) CR_TAB -- \"icall\"); -+ \"%!icall\"); - else - return (AS2 (mov, r30, %A1) CR_TAB - AS2 (mov, r31, %B1) CR_TAB -- \"icall\"); -+ \"%!icall\"); - } - else if (which_alternative==2) - return AS1(%~call,%c1); - return (AS2 (ldi, r30, lo8(%1)) CR_TAB - AS2 (ldi, r31, hi8(%1)) CR_TAB -- \"icall\"); -+ \"%!icall\"); - }" - [(set_attr "cc" "clobber,clobber,clobber,clobber") - (set_attr_alternative "length" -@@ -2376,13 +2377,20 @@ - ; indirect jump - (define_insn "indirect_jump" - [(set (pc) (match_operand:HI 0 "register_operand" "!z,*r"))] -- "" -+ "!AVR_HAVE_EIJMP_EICALL" - "@ - ijmp - push %A0\;push %B0\;ret" - [(set_attr "length" "1,3") - (set_attr "cc" "none,none")]) - -+(define_insn "*indirect_jump_avr6" -+ [(set (pc) (match_operand:HI 0 "register_operand" "z"))] -+ "AVR_HAVE_EIJMP_EICALL" -+ "eijmp" -+ [(set_attr "length" "1") -+ (set_attr "cc" "none")]) -+ - ;; table jump - - ;; Table made from "rjmp" instructions for <=8K devices. -@@ -2391,7 +2399,7 @@ - UNSPEC_INDEX_JMP)) - (use (label_ref (match_operand 1 "" ""))) - (clobber (match_dup 0))] -- "!AVR_MEGA" -+ "(!AVR_MEGA) && (!AVR_HAVE_EIJMP_EICALL)" - "@ - ijmp - push %A0\;push %B0\;ret" -@@ -2420,7 +2428,7 @@ - lpm __tmp_reg__,Z+ - lpm r31,Z - mov r30,__tmp_reg__ -- ijmp" -+ %!ijmp" - [(set_attr "length" "6") - (set_attr "cc" "clobber")]) - -@@ -2429,7 +2437,7 @@ - UNSPEC_INDEX_JMP)) - (use (label_ref (match_operand 1 "" ""))) - (clobber (match_dup 0))] -- "AVR_MEGA" -+ "AVR_MEGA && !AVR_HAVE_EIJMP_EICALL" - "lsl r30 - rol r31 - lpm -@@ -2764,8 +2764,8 @@ - (use (reg:HI REG_X)) - (clobber (reg:HI REG_Z))] - "" -- "ldi r30,pm_lo8(1f) -- ldi r31,pm_hi8(1f) -+ "ldi r30,lo8(gs(1f)) -+ ldi r31,hi8(gs(1f)) - %~jmp __prologue_saves__+((18 - %0) * 2) - 1:" - [(set_attr_alternative "length" -Index: gcc/config/avr/avr.c -=================================================================== ---- gcc/config/avr/avr.c (revision 132252) -+++ gcc/config/avr/avr.c (working copy) +diff -ur ../gcc-4.3.4.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c +--- ../gcc-4.3.4.orig/gcc/config/avr/avr.c 2008-06-15 23:32:29.000000000 +0200 ++++ ./gcc/config/avr/avr.c 2009-10-02 14:27:56.000000000 +0200 @@ -127,7 +127,8 @@ { 0, 0, 1, 1, 0, 0, 0, 0, "__AVR_ARCH__=35" }, { 0, 1, 0, 1, 0, 0, 0, 0, "__AVR_ARCH__=4" }, @@ -203,7 +32,7 @@ Index: gcc/config/avr/avr.c /* Assembler only. */ { "avr1", ARCH_AVR1, NULL }, { "at90s1200", ARCH_AVR1, "__AVR_AT90S1200__" }, -@@ -511,9 +517,10 @@ +@@ -513,9 +519,10 @@ else { int offset = frame_pointer_needed ? 2 : 0; @@ -215,7 +44,7 @@ Index: gcc/config/avr/avr.c } } -@@ -682,7 +694,9 @@ +@@ -662,7 +669,9 @@ /* Prevent any attempt to delete the setting of ZERO_REG! */ emit_insn (gen_rtx_USE (VOIDmode, zero_reg_rtx)); } @@ -226,7 +55,7 @@ Index: gcc/config/avr/avr.c { insn = emit_move_insn (gen_rtx_REG (HImode, REG_X), gen_int_mode (size, HImode)); -@@ -1119,7 +1126,7 @@ +@@ -1121,7 +1130,7 @@ && ((GET_CODE (addr) == SYMBOL_REF && SYMBOL_REF_FUNCTION_P (addr)) || GET_CODE (addr) == LABEL_REF)) { @@ -235,7 +64,7 @@ Index: gcc/config/avr/avr.c output_addr_const (file,addr); fprintf (file ,")"); } -@@ -1144,6 +1151,11 @@ +@@ -1146,6 +1155,11 @@ if (!AVR_MEGA) fputc ('r', file); } @@ -247,7 +76,7 @@ Index: gcc/config/avr/avr.c else if (REG_P (x)) { if (x == zero_reg_rtx) -@@ -4468,7 +4480,7 @@ +@@ -4470,7 +4484,7 @@ && ((GET_CODE (x) == SYMBOL_REF && SYMBOL_REF_FUNCTION_P (x)) || GET_CODE (x) == LABEL_REF)) { @@ -256,7 +85,7 @@ Index: gcc/config/avr/avr.c output_addr_const (asm_out_file, x); fputs (")\n", asm_out_file); return true; -@@ -5815,7 +5827,7 @@ +@@ -5817,7 +5831,7 @@ { switch_to_section (progmem_section); if (AVR_MEGA) @@ -265,36 +94,10 @@ Index: gcc/config/avr/avr.c else fprintf (stream, "\trjmp .L%d\n", value); } -Index: gcc/config/avr/t-avr -=================================================================== ---- gcc/config/avr/t-avr (revision 132252) -+++ gcc/config/avr/t-avr (working copy) -@@ -37,8 +37,8 @@ - - FPBIT = fp-bit.c - --MULTILIB_OPTIONS = mmcu=avr2/mmcu=avr25/mmcu=avr3/mmcu=avr31/mmcu=avr35/mmcu=avr4/mmcu=avr5/mmcu=avr51 --MULTILIB_DIRNAMES = avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51 -+MULTILIB_OPTIONS = mmcu=avr2/mmcu=avr25/mmcu=avr3/mmcu=avr31/mmcu=avr35/mmcu=avr4/mmcu=avr5/mmcu=avr51/mmcu=avr6 -+MULTILIB_DIRNAMES = avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6 - - # The many avr2 matches are not listed here - this is the default. - MULTILIB_MATCHES = \ -@@ -123,7 +123,9 @@ - mmcu?avr51=mmcu?atmega1284p \ - mmcu?avr51=mmcu?at90can128 \ - mmcu?avr51=mmcu?at90usb1286 \ -- mmcu?avr51=mmcu?at90usb1287 -+ mmcu?avr51=mmcu?at90usb1287 \ -+ mmcu?avr6=mmcu?atmega2560 \ -+ mmcu?avr6=mmcu?atmega2561 - - MULTILIB_EXCEPTIONS = - -Index: gcc/config/avr/avr.h -=================================================================== ---- gcc/config/avr/avr.h (revision 132252) -+++ gcc/config/avr/avr.h (working copy) +Only in ./gcc/config/avr: avr.c.orig +diff -ur ../gcc-4.3.4.orig/gcc/config/avr/avr.h ./gcc/config/avr/avr.h +--- ../gcc-4.3.4.orig/gcc/config/avr/avr.h 2008-06-15 23:32:29.000000000 +0200 ++++ ./gcc/config/avr/avr.h 2009-10-02 14:27:56.000000000 +0200 @@ -80,6 +80,12 @@ builtin_define ("__AVR_MEGA__"); \ if (avr_current_arch->have_jmp_call) \ @@ -321,7 +124,7 @@ Index: gcc/config/avr/avr.h #define TARGET_VERSION fprintf (stderr, " (GNU assembler syntax)"); -@@ -671,7 +678,7 @@ +@@ -681,7 +688,7 @@ #define PRINT_OPERAND(STREAM, X, CODE) print_operand (STREAM, X, CODE) @@ -330,7 +133,7 @@ Index: gcc/config/avr/avr.h #define PRINT_OPERAND_ADDRESS(STREAM, X) print_operand_address(STREAM, X) -@@ -828,6 +835,7 @@ +@@ -838,6 +845,7 @@ mmcu=at90usb64*|\ mmcu=at90usb128*|\ mmcu=at94k: -m avr5}\ @@ -338,7 +141,7 @@ Index: gcc/config/avr/avr.h %{mmcu=atmega324*|\ mmcu=atmega325*|\ mmcu=atmega328p|\ -@@ -856,7 +864,8 @@ +@@ -866,7 +874,8 @@ mmcu=at90usb*: -Tdata 0x800100}\ %{mmcu=atmega640|\ mmcu=atmega1280|\ @@ -348,7 +151,7 @@ Index: gcc/config/avr/avr.h #define LIB_SPEC \ "%{!mmcu=at90s1*:%{!mmcu=attiny11:%{!mmcu=attiny12:%{!mmcu=attiny15:%{!mmcu=attiny28: -lc }}}}}" -@@ -968,6 +977,8 @@ +@@ -978,6 +987,8 @@ %{mmcu=atmega1280:crtm1280.o%s} \ %{mmcu=atmega1281:crtm1281.o%s} \ %{mmcu=atmega1284p:crtm1284p.o%s} \ @@ -357,3 +160,194 @@ Index: gcc/config/avr/avr.h %{mmcu=at90can128:crtcan128.o%s} \ %{mmcu=at90usb1286:crtusb1286.o%s} \ %{mmcu=at90usb1287:crtusb1287.o%s}" +Only in ./gcc/config/avr: avr.h.orig +diff -ur ../gcc-4.3.4.orig/gcc/config/avr/avr.md ./gcc/config/avr/avr.md +--- ../gcc-4.3.4.orig/gcc/config/avr/avr.md 2009-03-09 21:49:28.000000000 +0100 ++++ ./gcc/config/avr/avr.md 2009-10-02 14:27:56.000000000 +0200 +@@ -32,6 +32,7 @@ + ;; p POST_INC or PRE_DEC address as a pointer (X, Y, Z) + ;; r POST_INC or PRE_DEC address as a register (r26, r28, r30) + ;; ~ Output 'r' if not AVR_MEGA. ++;; ! Output 'e' if AVR_HAVE_EIJMP_EICALL. + + ;; UNSPEC usage: + ;; 0 Length of a string, see "strlenhi". +@@ -2290,22 +2291,22 @@ + "(register_operand (operands[0], HImode) || CONSTANT_P (operands[0]))" + "*{ + if (which_alternative==0) +- return \"icall\"; ++ return \"%!icall\"; + else if (which_alternative==1) + { + if (AVR_HAVE_MOVW) + return (AS2 (movw, r30, %0) CR_TAB +- \"icall\"); ++ \"%!icall\"); + else + return (AS2 (mov, r30, %A0) CR_TAB + AS2 (mov, r31, %B0) CR_TAB +- \"icall\"); ++ \"%!icall\"); + } + else if (which_alternative==2) + return AS1(%~call,%c0); + return (AS2 (ldi,r30,lo8(%0)) CR_TAB + AS2 (ldi,r31,hi8(%0)) CR_TAB +- \"icall\"); ++ \"%!icall\"); + }" + [(set_attr "cc" "clobber,clobber,clobber,clobber") + (set_attr_alternative "length" +@@ -2327,22 +2328,22 @@ + "(register_operand (operands[0], VOIDmode) || CONSTANT_P (operands[0]))" + "*{ + if (which_alternative==0) +- return \"icall\"; ++ return \"%!icall\"; + else if (which_alternative==1) + { + if (AVR_HAVE_MOVW) + return (AS2 (movw, r30, %1) CR_TAB +- \"icall\"); ++ \"%!icall\"); + else + return (AS2 (mov, r30, %A1) CR_TAB + AS2 (mov, r31, %B1) CR_TAB +- \"icall\"); ++ \"%!icall\"); + } + else if (which_alternative==2) + return AS1(%~call,%c1); + return (AS2 (ldi, r30, lo8(%1)) CR_TAB + AS2 (ldi, r31, hi8(%1)) CR_TAB +- \"icall\"); ++ \"%!icall\"); + }" + [(set_attr "cc" "clobber,clobber,clobber,clobber") + (set_attr_alternative "length" +@@ -2365,13 +2366,20 @@ + ; indirect jump + (define_insn "indirect_jump" + [(set (pc) (match_operand:HI 0 "register_operand" "!z,*r"))] +- "" ++ "!AVR_HAVE_EIJMP_EICALL" + "@ + ijmp + push %A0\;push %B0\;ret" + [(set_attr "length" "1,3") + (set_attr "cc" "none,none")]) + ++(define_insn "*indirect_jump_avr6" ++ [(set (pc) (match_operand:HI 0 "register_operand" "z"))] ++ "AVR_HAVE_EIJMP_EICALL" ++ "eijmp" ++ [(set_attr "length" "1") ++ (set_attr "cc" "none")]) ++ + ;; table jump + + ;; Table made from "rjmp" instructions for <=8K devices. +@@ -2380,7 +2388,7 @@ + UNSPEC_INDEX_JMP)) + (use (label_ref (match_operand 1 "" ""))) + (clobber (match_dup 0))] +- "!AVR_MEGA" ++ "(!AVR_MEGA) && (!AVR_HAVE_EIJMP_EICALL)" + "@ + ijmp + push %A0\;push %B0\;ret" +@@ -2409,7 +2417,7 @@ + lpm __tmp_reg__,Z+ + lpm r31,Z + mov r30,__tmp_reg__ +- ijmp" ++ %!ijmp" + [(set_attr "length" "6") + (set_attr "cc" "clobber")]) + +@@ -2418,7 +2426,7 @@ + UNSPEC_INDEX_JMP)) + (use (label_ref (match_operand 1 "" ""))) + (clobber (match_dup 0))] +- "AVR_MEGA" ++ "AVR_MEGA && !AVR_HAVE_EIJMP_EICALL" + "lsl r30 + rol r31 + lpm +@@ -2758,8 +2766,8 @@ + (use (reg:HI REG_X)) + (clobber (reg:HI REG_Z))] + "" +- "ldi r30,pm_lo8(1f) +- ldi r31,pm_hi8(1f) ++ "ldi r30,lo8(gs(1f)) ++ ldi r31,hi8(gs(1f)) + %~jmp __prologue_saves__+((18 - %0) * 2) + 1:" + [(set_attr_alternative "length" +Only in ./gcc/config/avr: avr.md.orig +diff -ur ../gcc-4.3.4.orig/gcc/config/avr/libgcc.S ./gcc/config/avr/libgcc.S +--- ../gcc-4.3.4.orig/gcc/config/avr/libgcc.S 2008-01-19 13:15:02.000000000 +0100 ++++ ./gcc/config/avr/libgcc.S 2009-10-02 14:27:56.000000000 +0200 +@@ -594,7 +594,12 @@ + out __SP_H__,r29 + out __SREG__,__tmp_reg__ + out __SP_L__,r28 ++#if defined (__AVR_HAVE_EIJMP_EICALL__) ++ eijmp ++#else + ijmp ++#endif ++ + .endfunc + #endif /* defined (L_prologue) */ + +@@ -674,13 +679,22 @@ + lpm __tmp_reg__, Z+ + lpm r31, Z + mov r30, __tmp_reg__ ++ ++#if defined (__AVR_HAVE_EIJMP_EICALL__) ++ eijmp ++#else + ijmp ++#endif ++ + #else + lpm + adiw r30, 1 + push r0 + lpm + push r0 ++#if defined (__AVR_HAVE_EIJMP_EICALL__) ++ push __zero_reg__ ++#endif + ret + #endif + .endfunc +diff -ur ../gcc-4.3.4.orig/gcc/config/avr/t-avr ./gcc/config/avr/t-avr +--- ../gcc-4.3.4.orig/gcc/config/avr/t-avr 2008-01-23 16:07:09.000000000 +0100 ++++ ./gcc/config/avr/t-avr 2009-10-02 14:27:56.000000000 +0200 +@@ -37,8 +37,8 @@ + + FPBIT = fp-bit.c + +-MULTILIB_OPTIONS = mmcu=avr2/mmcu=avr25/mmcu=avr3/mmcu=avr31/mmcu=avr35/mmcu=avr4/mmcu=avr5/mmcu=avr51 +-MULTILIB_DIRNAMES = avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51 ++MULTILIB_OPTIONS = mmcu=avr2/mmcu=avr25/mmcu=avr3/mmcu=avr31/mmcu=avr35/mmcu=avr4/mmcu=avr5/mmcu=avr51/mmcu=avr6 ++MULTILIB_DIRNAMES = avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6 + + # The many avr2 matches are not listed here - this is the default. + MULTILIB_MATCHES = \ +@@ -123,7 +123,9 @@ + mmcu?avr51=mmcu?atmega1284p \ + mmcu?avr51=mmcu?at90can128 \ + mmcu?avr51=mmcu?at90usb1286 \ +- mmcu?avr51=mmcu?at90usb1287 ++ mmcu?avr51=mmcu?at90usb1287 \ ++ mmcu?avr6=mmcu?atmega2560 \ ++ mmcu?avr6=mmcu?atmega2561 + + MULTILIB_EXCEPTIONS = + diff --git a/devel/avr-gcc/files/patch-bug11259 b/devel/avr-gcc/files/patch-bug11259 index 9f98ee5437fc..aaf7a37c59b3 100644 --- a/devel/avr-gcc/files/patch-bug11259 +++ b/devel/avr-gcc/files/patch-bug11259 @@ -1,16 +1,7 @@ -Index: gcc/config/avr/avr.md -=================================================================== ---- gcc/config/avr/avr.md (revision 129892) -+++ gcc/config/avr/avr.md (working copy) -@@ -45,21 +45,22 @@ - (REG_SP 32) - (TMP_REGNO 0) ; temporary register r0 - (ZERO_REGNO 1) ; zero register r1 - - (SREG_ADDR 0x5F) - (RAMPZ_ADDR 0x5B) - - (UNSPEC_STRLEN 0) +diff -ur ../gcc-4.3.4.orig/gcc/config/avr/avr.md ./gcc/config/avr/avr.md +--- ../gcc-4.3.4.orig/gcc/config/avr/avr.md 2009-10-02 15:08:58.000000000 +0200 ++++ ./gcc/config/avr/avr.md 2009-10-02 15:09:26.000000000 +0200 +@@ -54,6 +54,7 @@ (UNSPEC_INDEX_JMP 1) (UNSPEC_SEI 2) (UNSPEC_CLI 3) @@ -18,23 +9,9 @@ Index: gcc/config/avr/avr.md (UNSPECV_PROLOGUE_SAVES 0) (UNSPECV_EPILOGUE_RESTORES 1)]) - - (include "predicates.md") - (include "constraints.md") - - ;; Condition code settings. - (define_attr "cc" "none,set_czn,set_zn,set_n,compare,clobber" - (const_string "none")) -@@ -1185,20 +1186,33 @@ - return (AS2 (andi, %A0,lo8(%2)) CR_TAB - AS2 (andi, %B0,hi8(%2)) CR_TAB - AS2 (andi, %C0,hlo8(%2)) CR_TAB - AS2 (andi, %D0,hhi8(%2))); - } - return \"bug\"; - }" +@@ -1183,6 +1184,19 @@ [(set_attr "length" "4,4") - (set_attr "cc" "set_n,set_n")]) + (set_attr "cc" "set_n,clobber")]) +(define_peephole2 ; andi + [(set (match_operand:QI 0 "d_register_operand" "") @@ -52,21 +29,7 @@ Index: gcc/config/avr/avr.md ;;||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ;; ior - (define_insn "iorqi3" - [(set (match_operand:QI 0 "register_operand" "=r,d") - (ior:QI (match_operand:QI 1 "register_operand" "%0,0") - (match_operand:QI 2 "nonmemory_operand" "r,i")))] - "" - "@ - or %0,%2 -@@ -1313,24 +1327,71 @@ - (xor:SI (match_operand:SI 1 "register_operand" "%0") - (match_operand:SI 2 "register_operand" "r")))] - "" - "eor %0,%2 - eor %B0,%B2 - eor %C0,%C2 - eor %D0,%D2" +@@ -1311,10 +1325,57 @@ [(set_attr "length" "4") (set_attr "cc" "set_n")]) @@ -125,21 +88,7 @@ Index: gcc/config/avr/avr.md [(set (match_operand:QI 0 "register_operand" "=r,r,r,r,!d,r,r") (ashift:QI (match_operand:QI 1 "register_operand" "0,0,0,0,0,0,0") (match_operand:QI 2 "general_operand" "r,L,P,K,n,n,Qm")))] - "" - "* return ashlqi3_out (insn, operands, NULL);" - [(set_attr "length" "5,0,1,2,4,6,9") - (set_attr "cc" "clobber,none,set_czn,set_czn,set_czn,set_czn,clobber")]) - - (define_insn "ashlhi3" - [(set (match_operand:HI 0 "register_operand" "=r,r,r,r,r,r,r") -@@ -1346,20 +1407,61 @@ - (ashift:SI (match_operand:SI 1 "register_operand" "0,0,0,r,0,0,0") - (match_operand:QI 2 "general_operand" "r,L,P,O,K,n,Qm")))] - "" - "* return ashlsi3_out (insn, operands, NULL);" - [(set_attr "length" "8,0,4,4,8,10,12") - (set_attr "cc" "clobber,none,set_n,clobber,set_n,clobber,clobber")]) - +@@ -1344,6 +1405,47 @@ ;; Optimize if a scratch register from LD_REGS happens to be available. (define_peephole2 @@ -187,21 +136,7 @@ Index: gcc/config/avr/avr.md [(match_scratch:QI 3 "d") (set (match_operand:HI 0 "register_operand" "") (ashift:HI (match_operand:HI 1 "register_operand" "") - (match_operand:QI 2 "const_int_operand" "")))] - "" - [(parallel [(set (match_dup 0) (ashift:HI (match_dup 1) (match_dup 2))) - (clobber (match_dup 3))])] - "if (!avr_peep2_scratch_safe (operands[3])) - FAIL;") - -@@ -1464,21 +1566,63 @@ - (match_operand:QI 2 "const_int_operand" "L,P,O,n"))) - (clobber (match_scratch:QI 3 "=X,X,X,&d"))] - "reload_completed" - "* return ashrsi3_out (insn, operands, NULL);" - [(set_attr "length" "0,4,4,10") - (set_attr "cc" "none,clobber,set_n,clobber")]) - +@@ -1462,7 +1564,49 @@ ;; >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> ;; logical shift right @@ -252,21 +187,7 @@ Index: gcc/config/avr/avr.md [(set (match_operand:QI 0 "register_operand" "=r,r,r,r,!d,r,r") (lshiftrt:QI (match_operand:QI 1 "register_operand" "0,0,0,0,0,0,0") (match_operand:QI 2 "general_operand" "r,L,P,K,n,n,Qm")))] - "" - "* return lshrqi3_out (insn, operands, NULL);" - [(set_attr "length" "5,0,1,2,4,6,9") - (set_attr "cc" "clobber,none,set_czn,set_czn,set_czn,set_czn,clobber")]) - - (define_insn "lshrhi3" - [(set (match_operand:HI 0 "register_operand" "=r,r,r,r,r,r,r") -@@ -1494,20 +1638,61 @@ - (lshiftrt:SI (match_operand:SI 1 "register_operand" "0,0,0,r,0,0,0") - (match_operand:QI 2 "general_operand" "r,L,P,O,K,n,Qm")))] - "" - "* return lshrsi3_out (insn, operands, NULL);" - [(set_attr "length" "8,0,4,4,8,10,12") - (set_attr "cc" "clobber,none,clobber,clobber,clobber,clobber,clobber")]) - +@@ -1492,6 +1636,47 @@ ;; Optimize if a scratch register from LD_REGS happens to be available. (define_peephole2 @@ -314,10 +235,4 @@ Index: gcc/config/avr/avr.md [(match_scratch:QI 3 "d") (set (match_operand:HI 0 "register_operand" "") (lshiftrt:HI (match_operand:HI 1 "register_operand" "") - (match_operand:QI 2 "const_int_operand" "")))] - "" - [(parallel [(set (match_dup 0) (lshiftrt:HI (match_dup 1) (match_dup 2))) - (clobber (match_dup 3))])] - "if (!avr_peep2_scratch_safe (operands[3])) - FAIL;") - +Only in ./gcc/config/avr: avr.md.orig diff --git a/devel/avr-gcc/files/patch-bug18145 b/devel/avr-gcc/files/patch-bug18145 new file mode 100644 index 000000000000..3fe6a377030e --- /dev/null +++ b/devel/avr-gcc/files/patch-bug18145 @@ -0,0 +1,186 @@ +--- ./gcc/config/avr/avr.c.orig 2010-03-05 15:10:10.000000000 +0100 ++++ ./gcc/config/avr/avr.c 2010-03-05 15:20:53.000000000 +0100 +@@ -72,6 +72,12 @@ + static void avr_insert_attributes (tree, tree *); + static void avr_asm_init_sections (void); + static unsigned int avr_section_type_flags (tree, const char *, int); ++static void avr_asm_named_section (const char *name, unsigned int flags, tree decl); ++/* Track if code will use .bss and/or .data */ ++static int avr_need_clear_bss_p = 0; ++static int avr_need_copy_data_p = 0; ++static void avr_output_data_section_asm_op (const void*); ++static void avr_output_bss_section_asm_op (const void*); + + static void avr_reorg (void); + static void avr_asm_out_ctor (rtx, int); +@@ -4782,6 +4788,54 @@ + fprintf (asm_out_file, "\t.p2align 1\n"); + } + ++/* ASM_OUTPUT_COMMON */ ++/* Track need of __do_clear_bss */ ++ ++void ++avr_asm_output_common (FILE *stream, const char *name, ++ unsigned HOST_WIDE_INT size, ++ unsigned HOST_WIDE_INT rounded ATTRIBUTE_UNUSED) ++{ ++ avr_need_clear_bss_p = 1; ++ fputs ("\t.comm ", stream); ++ assemble_name (stream, name); ++ fprintf (stream, ",%lu,1\n", (unsigned long) size); ++} ++ ++/* ASM_OUTPUT_LOCAL */ ++/* Track need of __do_clear_bss */ ++ ++void ++avr_asm_output_local (FILE *stream, const char *name, ++ unsigned HOST_WIDE_INT size, ++ unsigned HOST_WIDE_INT rounded ATTRIBUTE_UNUSED) ++{ ++ avr_need_clear_bss_p = 1; ++ fputs ("\t.lcomm ", stream); ++ assemble_name (stream, name); ++ fprintf (stream, ",%d\n", (int) size); ++} ++ ++/* Unnamed section callback to track need of __do_copy_data */ ++ ++static void ++avr_output_data_section_asm_op (const void *data) ++{ ++ avr_need_copy_data_p = 1; ++ /* Dispatch to default */ ++ output_section_asm_op (data); ++} ++ ++/* Unnamed section callback to track need of __do_clear_bss */ ++ ++static void ++avr_output_bss_section_asm_op (const void *data) ++{ ++ avr_need_clear_bss_p = 1; ++ /* Dispatch to default */ ++ output_section_asm_op (data); ++} ++ + /* Implement TARGET_ASM_INIT_SECTIONS. */ + + static void +@@ -4791,6 +4845,27 @@ + avr_output_progmem_section_asm_op, + NULL); + readonly_data_section = data_section; ++ ++ data_section->unnamed.callback = avr_output_data_section_asm_op; ++ bss_section->unnamed.callback = avr_output_bss_section_asm_op; ++} ++ ++/* TARGET_ASM_NAMED_SECTION */ ++/* Track need of __do_clear_bss, __do_copy_data for named sections */ ++ ++static void ++avr_asm_named_section (const char *name, unsigned int flags, tree decl) ++{ ++ if (!avr_need_copy_data_p) ++ avr_need_copy_data_p = ++ (0 == strncmp (name, ".data", 5) ++ || 0 == strncmp (name, ".rodata", 7) ++ || 0 == strncmp (name, ".gnu.linkonce.", 14)); ++ ++ if (!avr_need_clear_bss_p) ++ avr_need_clear_bss_p = (0 == strncmp (name, ".bss", 4)); ++ ++ default_elf_asm_named_section (name, flags, decl); + } + + static unsigned int +@@ -4829,12 +4904,6 @@ + + fputs ("__tmp_reg__ = 0\n" + "__zero_reg__ = 1\n", asm_out_file); +- +- /* FIXME: output these only if there is anything in the .data / .bss +- sections - some code size could be saved by not linking in the +- initialization code from libgcc if one or both sections are empty. */ +- fputs ("\t.global __do_copy_data\n", asm_out_file); +- fputs ("\t.global __do_clear_bss\n", asm_out_file); + } + + /* Outputs to the stdio stream FILE some +@@ -4843,6 +4912,16 @@ + static void + avr_file_end (void) + { ++ /* Output these only if there is anything in the ++ .data* / .rodata* / .gnu.linkonce.* resp. .bss* ++ input section(s) - some code size can be saved by not ++ linking in the initialization code from libgcc if resp. ++ sections are empty. */ ++ if (avr_need_copy_data_p) ++ fputs (".global __do_copy_data\n", asm_out_file); ++ ++ if (avr_need_clear_bss_p) ++ fputs (".global __do_clear_bss\n", asm_out_file); + } + + /* Choose the order in which to allocate hard registers for +--- ./gcc/config/avr/avr.h.orig 2010-03-05 15:10:10.000000000 +0100 ++++ ./gcc/config/avr/avr.h 2010-03-05 15:20:53.000000000 +0100 +@@ -533,29 +533,21 @@ + #define ASM_APP_OFF "/* #NOAPP */\n" + + /* Switch into a generic section. */ +-#define TARGET_ASM_NAMED_SECTION default_elf_asm_named_section ++#define TARGET_ASM_NAMED_SECTION avr_asm_named_section + #define TARGET_ASM_INIT_SECTIONS avr_asm_init_sections + + #define ASM_OUTPUT_ASCII(FILE, P, SIZE) gas_output_ascii (FILE,P,SIZE) + + #define IS_ASM_LOGICAL_LINE_SEPARATOR(C, STR) ((C) == '\n' || ((C) == '$')) + +-#define ASM_OUTPUT_COMMON(STREAM, NAME, SIZE, ROUNDED) \ +-do { \ +- fputs ("\t.comm ", (STREAM)); \ +- assemble_name ((STREAM), (NAME)); \ +- fprintf ((STREAM), ",%lu,1\n", (unsigned long)(SIZE)); \ +-} while (0) ++#define ASM_OUTPUT_COMMON(STREAM, NAME, SIZE, ROUNDED) \ ++ avr_asm_output_common (STREAM, NAME, SIZE, ROUNDED) + +-#define ASM_OUTPUT_BSS(FILE, DECL, NAME, SIZE, ROUNDED) \ +- asm_output_bss ((FILE), (DECL), (NAME), (SIZE), (ROUNDED)) ++#define ASM_OUTPUT_BSS(FILE, DECL, NAME, SIZE, ROUNDED) \ ++ asm_output_bss ((FILE), (DECL), (NAME), (SIZE), (ROUNDED)) + +-#define ASM_OUTPUT_LOCAL(STREAM, NAME, SIZE, ROUNDED) \ +-do { \ +- fputs ("\t.lcomm ", (STREAM)); \ +- assemble_name ((STREAM), (NAME)); \ +- fprintf ((STREAM), ",%d\n", (int)(SIZE)); \ +-} while (0) ++#define ASM_OUTPUT_LOCAL(STREAM, NAME, SIZE, ROUNDED) \ ++ avr_asm_output_local (STREAM, NAME, SIZE, ROUNDED) + + #undef TYPE_ASM_OP + #undef SIZE_ASM_OP +--- ./gcc/config/avr/avr-protos.h.orig 2008-06-15 23:32:29.000000000 +0200 ++++ ./gcc/config/avr/avr-protos.h 2010-03-05 15:20:53.000000000 +0100 +@@ -38,6 +38,8 @@ + extern void gas_output_limited_string (FILE *file, const char *str); + extern void gas_output_ascii (FILE *file, const char *str, size_t length); + extern int avr_hard_regno_rename_ok (unsigned int, unsigned int); ++extern void avr_asm_output_common (FILE *stream, const char *name, unsigned HOST_WIDE_INT size, unsigned HOST_WIDE_INT rounded); ++extern void avr_asm_output_local (FILE *stream, const char *name, unsigned HOST_WIDE_INT size, unsigned HOST_WIDE_INT rounded); + + #ifdef TREE_CODE + extern void asm_output_external (FILE *file, tree decl, char *name); +@@ -123,6 +125,7 @@ + extern int compare_eq_p (rtx insn); + extern void out_shift_with_cnt (const char *template, rtx insn, + rtx operands[], int *len, int t_len); ++extern rtx avr_return_addr_rtx (int count, rtx tem); + extern int avr_io_address_p (rtx x, int size); + extern int avr_peep2_scratch_safe (rtx reg_rtx); + #endif /* RTX_CODE */ diff --git a/devel/avr-gcc/files/patch-bug19636-24894-31644-31786 b/devel/avr-gcc/files/patch-bug19636-24894-31644-31786 index c940107ff673..f22597f1d1a6 100644 --- a/devel/avr-gcc/files/patch-bug19636-24894-31644-31786 +++ b/devel/avr-gcc/files/patch-bug19636-24894-31644-31786 @@ -1,14 +1,19 @@ -Fix for GCC bugs: -#19636 -#24894 -#31644 -#31786 - -Index: avr.c -=================================================================== ---- gcc/config/avr/avr.c (revision 132380) -+++ gcc/config/avr/avr.c (working copy) -@@ -976,6 +976,8 @@ +--- gcc/config/avr/avr.h.orig 2010-03-05 15:20:53.000000000 +0100 ++++ gcc/config/avr/avr.h 2010-03-05 15:22:53.000000000 +0100 +@@ -470,10 +470,6 @@ + OPNUM, TYPE); \ + goto WIN; \ + } \ +- push_reload (XEXP (X, 0), NULL_RTX, &XEXP (X, 0), NULL, \ +- BASE_POINTER_REGS, GET_MODE (X), VOIDmode, 0, 0, \ +- OPNUM, TYPE); \ +- goto WIN; \ + } \ + else if (! (frame_pointer_needed && XEXP (X,0) == frame_pointer_rtx)) \ + { \ +--- gcc/config/avr/avr.c.orig 2010-03-05 15:20:53.000000000 +0100 ++++ gcc/config/avr/avr.c 2010-03-05 15:22:53.000000000 +0100 +@@ -993,6 +993,8 @@ true_regnum (XEXP (x, 0))); debug_rtx (x); } @@ -17,7 +22,7 @@ Index: avr.c if (REG_P (x) && (strict ? REG_OK_FOR_BASE_STRICT_P (x) : REG_OK_FOR_BASE_NOSTRICT_P (x))) r = POINTER_REGS; -@@ -990,6 +992,7 @@ +@@ -1007,6 +1009,7 @@ if (fit) { if (! strict @@ -25,19 +30,3 @@ Index: avr.c || REGNO (XEXP (x,0)) == REG_Y || REGNO (XEXP (x,0)) == REG_Z) r = BASE_POINTER_REGS; -Index: avr.h -=================================================================== ---- gcc/config/avr/avr.h (revision 132380) -+++ gcc/config/avr/avr.h (working copy) -@@ -483,10 +483,6 @@ - OPNUM, TYPE); \ - goto WIN; \ - } \ -- push_reload (XEXP (X, 0), NULL_RTX, &XEXP (X, 0), NULL, \ -- BASE_POINTER_REGS, GET_MODE (X), VOIDmode, 0, 0, \ -- OPNUM, TYPE); \ -- goto WIN; \ - } \ - else if (! (frame_pointer_needed && XEXP (X,0) == frame_pointer_rtx)) \ - { \ - diff --git a/devel/avr-gcc/files/patch-bug35013 b/devel/avr-gcc/files/patch-bug35013 index 595d92974255..db8e09e616cf 100644 --- a/devel/avr-gcc/files/patch-bug35013 +++ b/devel/avr-gcc/files/patch-bug35013 @@ -1,10 +1,6 @@ -Patch to fix GCC bug #35013. - -Index: avr-protos.h -=================================================================== ---- gcc/config/avr/avr-protos.h (revision 132369) -+++ gcc/config/avr/avr-protos.h (working copy) -@@ -111,6 +111,7 @@ +--- ./gcc/config/avr/avr-protos.h.orig 2010-03-05 15:20:53.000000000 +0100 ++++ ./gcc/config/avr/avr-protos.h 2010-03-05 15:24:52.000000000 +0100 +@@ -114,6 +114,7 @@ extern int _reg_unused_after (rtx insn, rtx reg); extern int avr_jump_mode (rtx x, rtx insn); extern int byte_immediate_operand (rtx op, enum machine_mode mode); @@ -12,11 +8,9 @@ Index: avr-protos.h extern int test_hard_reg_class (enum reg_class class, rtx x); extern int jump_over_one_insn_p (rtx insn, rtx dest); -Index: avr.c -=================================================================== ---- gcc/config/avr/avr.c (revision 132366) -+++ gcc/config/avr/avr.c (working copy) -@@ -1116,8 +1116,7 @@ +--- ./gcc/config/avr/avr.c.orig 2010-03-05 15:22:53.000000000 +0100 ++++ ./gcc/config/avr/avr.c 2010-03-05 15:24:52.000000000 +0100 +@@ -1136,8 +1136,7 @@ default: if (CONSTANT_ADDRESS_P (addr) @@ -24,9 +18,9 @@ Index: avr.c - || GET_CODE (addr) == LABEL_REF)) + && text_segment_operand (addr, VOIDmode)) { - fprintf (file, "pm("); + fprintf (file, "gs("); output_addr_const (file,addr); -@@ -1428,6 +1427,26 @@ +@@ -1453,6 +1452,26 @@ && INTVAL (op) <= 0xff && INTVAL (op) >= 0); } @@ -53,7 +47,7 @@ Index: avr.c /* Output all insn addresses and their sizes into the assembly language output file. This is helpful for debugging whether the length attributes in the md file are correct. -@@ -4465,8 +4484,7 @@ +@@ -4490,8 +4509,7 @@ avr_assemble_integer (rtx x, unsigned int size, int aligned_p) { if (size == POINTER_SIZE / BITS_PER_UNIT && aligned_p @@ -61,5 +55,5 @@ Index: avr.c - || GET_CODE (x) == LABEL_REF)) + && text_segment_operand (x, VOIDmode) ) { - fputs ("\t.word\tpm(", asm_out_file); + fputs ("\t.word\tgs(", asm_out_file); output_addr_const (asm_out_file, x); diff --git a/devel/avr-gcc/files/patch-builtins b/devel/avr-gcc/files/patch-builtins new file mode 100644 index 000000000000..c5f6fa6311d2 --- /dev/null +++ b/devel/avr-gcc/files/patch-builtins @@ -0,0 +1,581 @@ +--- ./gcc/config/avr/predicates.md.orig 2007-08-02 12:49:31.000000000 +0200 ++++ ./gcc/config/avr/predicates.md 2010-03-05 15:25:53.000000000 +0100 +@@ -27,6 +27,11 @@ + (and (match_code "reg") + (match_test "REGNO (op) >= 16 && REGNO (op) <= 31"))) + ++;; Registers from r16 to 24. ++(define_predicate "a_register_operand" ++ (and (match_code "reg") ++ (match_test "REGNO (op) >= 16 && REGNO (op) <= 24"))) ++ + (define_predicate "even_register_operand" + (and (match_code "reg") + (and (match_test "REGNO (op) <= 31") +--- ./gcc/config/avr/avr.md.orig 2010-03-05 15:20:25.000000000 +0100 ++++ ./gcc/config/avr/avr.md 2010-03-05 15:25:53.000000000 +0100 +@@ -52,12 +52,26 @@ + + (UNSPEC_STRLEN 0) + (UNSPEC_INDEX_JMP 1) +- (UNSPEC_SEI 2) +- (UNSPEC_CLI 3) +- (UNSPEC_SWAP 4) +- ++ (UNSPEC_SWAP 2) ++ (UNSPEC_FMUL 3) ++ (UNSPEC_FMULS 4) ++ (UNSPEC_FMULSU 5) ++ + (UNSPECV_PROLOGUE_SAVES 0) +- (UNSPECV_EPILOGUE_RESTORES 1)]) ++ (UNSPECV_EPILOGUE_RESTORES 1) ++ (UNSPECV_SEI 2) ++ (UNSPECV_CLI 3) ++ (UNSPECV_NOP 4) ++ (UNSPECV_NOP2 5) ++ (UNSPECV_SLEEP 6) ++ (UNSPECV_WDR 7) ++ ++ (UNSPECV_DELAY_CYCLES 100) ++ (UNSPECV_DELAY_CYCLES_1 101) ++ (UNSPECV_DELAY_CYCLES_2 102) ++ (UNSPECV_DELAY_CYCLES_3 103) ++ (UNSPECV_DELAY_CYCLES_4 104)]) ++ + + (include "predicates.md") + (include "constraints.md") +@@ -2541,13 +2555,6 @@ + (const_int 1)) + (const_int 3)])]) + +-(define_insn "nop" +- [(const_int 0)] +- "" +- "nop" +- [(set_attr "cc" "none") +- (set_attr "length" "1")]) +- + ; indirect jump + (define_insn "indirect_jump" + [(set (pc) (match_operand:HI 0 "register_operand" "!z,*r"))] +@@ -2925,7 +2932,7 @@ + + ;; Enable Interrupts + (define_insn "enable_interrupt" +- [(unspec [(const_int 0)] UNSPEC_SEI)] ++ [(unspec_volatile [(const_int 0)] UNSPECV_SEI)] + "" + "sei" + [(set_attr "length" "1") +@@ -2934,7 +2941,7 @@ + + ;; Disable Interrupts + (define_insn "disable_interrupt" +- [(unspec [(const_int 0)] UNSPEC_CLI)] ++ [(unspec_volatile [(const_int 0)] UNSPECV_CLI)] + "" + "cli" + [(set_attr "length" "1") +@@ -3034,3 +3041,219 @@ + expand_epilogue (); + DONE; + }") ++ ++;;delay_cycles_delay_cycles_delay_cycles_delay_cycles_delay_cycles_delay ++;; delay_cycles ++ ++(define_expand "delay_cycles" ++ [(unspec_volatile [(match_operand:SI 0 "const_int_operand" "i")] ++ UNSPECV_DELAY_CYCLES)] ++ "" ++ " ++ rtx loop_reg; ++ unsigned int cycles = INTVAL (operands[0]); ++ if (IN_RANGE(cycles, 83886082, 0xFFFFFFFF)) ++ { ++ unsigned int loop_count = ((cycles - 9) / 6) + 1; ++ unsigned int cycles_used = (((loop_count - 1) * 6) + 9); ++ emit_insn (gen_delay_cycles_4 (gen_int_mode (loop_count, SImode))); ++ cycles -= cycles_used; ++ } ++ if (IN_RANGE(cycles, 262145, 83886081)) ++ { ++ unsigned int loop_count = ((cycles - 7) / 5) + 1; ++ if (loop_count > 0xFFFFFF) ++ loop_count = 0xFFFFFF; ++ unsigned int cycles_used = (((loop_count - 1) * 5) + 7); ++ emit_insn (gen_delay_cycles_3 (gen_int_mode (loop_count, SImode))); ++ cycles -= cycles_used; ++ } ++ if (IN_RANGE(cycles, 768, 262144)) ++ { ++ unsigned int loop_count = ((cycles - 5) / 4) + 1; ++ if (loop_count > 0xFFFF) ++ loop_count = 0xFFFF; ++ unsigned int cycles_used = (((loop_count - 1) * 4) + 5); ++ emit_insn (gen_delay_cycles_2 (gen_int_mode (loop_count, HImode))); ++ cycles -= cycles_used; ++ } ++ if (IN_RANGE(cycles, 6, 767)) ++ { ++ unsigned int loop_count = (cycles/ 3); ++ if (loop_count > 255) ++ loop_count = 255; ++ unsigned int cycles_used = (loop_count * 3); ++ emit_insn (gen_delay_cycles_1 (gen_int_mode (loop_count, QImode))); ++ cycles -= cycles_used; ++ } ++ while (cycles >= 2) ++ { ++ emit_insn (gen_nop2 ()); ++ cycles -= 2; ++ } ++ if (cycles == 1) ++ { ++ emit_insn (gen_nop ()); ++ cycles--; ++ } ++ DONE; ++ ") ++ ++(define_insn "delay_cycles_1" ++[(unspec_volatile [(const_int 0)] UNSPECV_DELAY_CYCLES_1) ++ (match_operand:QI 0 "immediate_operand" "") ++ (clobber (match_scratch:QI 1 "=&d"))] ++ "" ++ " ldi %1,lo8(%0) ++ 1:dec %1 ++ brne 1b" ++ [(set_attr "length" "3") ++ (set_attr "cc" "clobber")]) ++ ++(define_insn "delay_cycles_2" ++ [(unspec_volatile [(const_int 0)] UNSPECV_DELAY_CYCLES_2) ++ (match_operand:HI 0 "immediate_operand" "") ++ (clobber (match_scratch:HI 1 "=&w"))] ++ "" ++ " ldi %A1,lo8(%0) ++ ldi %B1,hi8(%0) ++ 1:sbiw %A1,1 ++ brne 1b" ++ [(set_attr "length" "4") ++ (set_attr "cc" "clobber")]) ++ ++(define_insn "delay_cycles_3" ++ [(unspec_volatile [(const_int 0)] UNSPECV_DELAY_CYCLES_3) ++ (match_operand:SI 0 "immediate_operand" "") ++ (clobber (match_scratch:SI 1 "=&d"))] ++ "" ++ " ldi %A1,lo8(%0) ++ ldi %B1,hi8(%0) ++ ldi %C1,hlo8(%0) ++ 1:subi %A1,1 ++ sbci %B1,0 ++ sbci %C1,0 ++ brne 1b" ++ [(set_attr "length" "7") ++ (set_attr "cc" "clobber")]) ++ ++(define_insn "delay_cycles_4" ++ [(unspec_volatile [(const_int 0)] UNSPECV_DELAY_CYCLES_4) ++ (match_operand:SI 0 "immediate_operand" "") ++ (clobber (match_scratch:SI 1 "=&d"))] ++ "" ++ " ldi %A1,lo8(%0) ++ ldi %B1,hi8(%0) ++ ldi %C1,hlo8(%0) ++ ldi %D1,hhi8(%0) ++ 1:subi %A1,1 ++ sbci %B1,0 ++ sbci %C1,0 ++ sbci %D1,0 ++ brne 1b" ++ [(set_attr "length" "9") ++ (set_attr "cc" "clobber")]) ++ ++;; CPU instructions ++ ++;; NOP ++(define_insn "nop" ++ [(unspec_volatile [(const_int 0)] UNSPECV_NOP)] ++ "" ++ "nop" ++ [(set_attr "length" "1") ++ (set_attr "cc" "none")]) ++ ++;; NOP2 ++(define_insn "nop2" ++ [(unspec_volatile [(const_int 0)] UNSPECV_NOP2)] ++ "" ++ "rjmp ." ++ [(set_attr "length" "1") ++ (set_attr "cc" "none")]) ++ ++;; SEI, Enable Interrupts ++;(define_insn "sei" ++; [(unspec_volatile [(const_int 0)] UNSPECV_SEI)] ++; "" ++; "sei" ++; [(set_attr "length" "1") ++; (set_attr "cc" "none") ++; ]) ++ ++;; CLI, Disable Interrupts ++;(define_insn "cli" ++; [(unspec_volatile [(const_int 0)] UNSPECV_CLI)] ++; "" ++; "cli" ++; [(set_attr "length" "1") ++; (set_attr "cc" "none") ++; ]) ++ ++;; SLEEP ++(define_insn "sleep" ++ [(unspec_volatile [(const_int 0)] UNSPECV_SLEEP)] ++ "" ++ "sleep" ++ [(set_attr "length" "1") ++ (set_attr "cc" "none") ++ ]) ++ ++;; WDR ++(define_insn "wdr" ++ [(unspec_volatile [(const_int 0)] UNSPECV_WDR)] ++ "" ++ "wdr" ++ [(set_attr "length" "1") ++ (set_attr "cc" "none") ++ ]) ++ ++;; SWAP ++(define_insn "swap" ++ [(set (match_operand:QI 0 "register_operand" "=r") ++ (unspec:QI [(match_operand:QI 1 "register_operand" "0")] ++ UNSPEC_SWAP))] ++ "" ++ "swap %0" ++ [(set_attr "length" "1") ++ (set_attr "cc" "none")]) ++ ++;; FMUL ++(define_insn "fmul" ++ [(set (match_operand:HI 0 "a_register_operand" "=r") ++ (unspec:HI [(match_operand:QI 1 "a_register_operand" "r") ++ (match_operand:QI 2 "a_register_operand" "r")] ++ UNSPEC_FMUL))] ++ "AVR_HAVE_MUL" ++ "fmul %1,%2 ++ movw %0,r0 ++ clr r1" ++ [(set_attr "length" "3") ++ (set_attr "cc" "clobber")]) ++ ++;; FMULS ++(define_insn "fmuls" ++ [(set (match_operand:HI 0 "a_register_operand" "=r") ++ (unspec:HI [(match_operand:QI 1 "a_register_operand" "r") ++ (match_operand:QI 2 "a_register_operand" "r")] ++ UNSPEC_FMULS))] ++ "AVR_HAVE_MUL" ++ "fmuls %1,%2 ++ movw %0,r0 ++ clr r1" ++ [(set_attr "length" "3") ++ (set_attr "cc" "clobber")]) ++ ++;; FMULSU ++(define_insn "fmulsu" ++ [(set (match_operand:HI 0 "a_register_operand" "=r") ++ (unspec:HI [(match_operand:QI 1 "a_register_operand" "r") ++ (match_operand:QI 2 "a_register_operand" "r")] ++ UNSPEC_FMULSU))] ++ "AVR_HAVE_MUL" ++ "fmulsu %1,%2 ++ movw %0,r0 ++ clr r1" ++ [(set_attr "length" "3") ++ (set_attr "cc" "clobber")]) ++ +--- ./gcc/config/avr/avr.c.orig 2010-03-05 15:24:52.000000000 +0100 ++++ ./gcc/config/avr/avr.c 2010-03-05 15:25:53.000000000 +0100 +@@ -30,6 +30,7 @@ + #include "insn-config.h" + #include "conditions.h" + #include "insn-attr.h" ++#include "insn-codes.h" + #include "flags.h" + #include "reload.h" + #include "tree.h" +@@ -39,7 +40,9 @@ + #include "obstack.h" + #include "function.h" + #include "recog.h" ++#include "optabs.h" + #include "ggc.h" ++#include "langhooks.h" + #include "tm_p.h" + #include "target.h" + #include "target-def.h" +@@ -87,6 +90,9 @@ + static int avr_address_cost (rtx); + static bool avr_return_in_memory (const_tree, const_tree); + static struct machine_function * avr_init_machine_status (void); ++static void avr_init_builtins (void); ++static rtx avr_expand_builtin (tree, rtx, rtx, enum machine_mode, int); ++ + /* Allocate registers from r25 to r8 for parameters for function calls. */ + #define FIRST_CUM_REG 26 + +@@ -340,6 +346,12 @@ + #undef TARGET_STRICT_ARGUMENT_NAMING + #define TARGET_STRICT_ARGUMENT_NAMING hook_bool_CUMULATIVE_ARGS_true + ++#undef TARGET_INIT_BUILTINS ++#define TARGET_INIT_BUILTINS avr_init_builtins ++ ++#undef TARGET_EXPAND_BUILTIN ++#define TARGET_EXPAND_BUILTIN avr_expand_builtin ++ + struct gcc_target targetm = TARGET_INITIALIZER; + + void +@@ -6079,4 +6091,237 @@ + return false; + } + ++/* Codes for all the AVR builtins. */ ++ ++enum avr_builtins ++{ ++ AVR_BUILTIN_SEI, ++ AVR_BUILTIN_CLI, ++ AVR_BUILTIN_WDR, ++ AVR_BUILTIN_SLEEP, ++ AVR_BUILTIN_SWAP, ++ AVR_BUILTIN_FMUL, ++ AVR_BUILTIN_FMULS, ++ AVR_BUILTIN_FMULSU, ++ AVR_BUILTIN_DELAY_CYCLES ++}; ++ ++#define def_builtin(NAME, TYPE, CODE) \ ++do { \ ++ add_builtin_function ((NAME), (TYPE), (CODE), BUILT_IN_MD, \ ++ NULL, NULL_TREE); \ ++} while (0) ++ ++/* Set up all builtin functions for this target. */ ++ ++static void ++avr_init_builtins (void) ++{ ++ tree void_ftype_void ++ = build_function_type (void_type_node, void_list_node); ++ tree uchar_ftype_uchar ++ = build_function_type_list (unsigned_char_type_node, ++ unsigned_char_type_node, ++ NULL_TREE); ++ tree uint_ftype_uchar_uchar ++ = build_function_type_list (unsigned_type_node, ++ unsigned_char_type_node, ++ unsigned_char_type_node, ++ NULL_TREE); ++ tree int_ftype_char_char ++ = build_function_type_list (integer_type_node, ++ char_type_node, ++ char_type_node, ++ NULL_TREE); ++ tree int_ftype_char_uchar ++ = build_function_type_list (integer_type_node, ++ char_type_node, ++ unsigned_char_type_node, ++ NULL_TREE); ++ tree void_ftype_ulong ++ = build_function_type_list (void_type_node, ++ long_unsigned_type_node, ++ NULL_TREE); ++ ++ def_builtin ("__builtin_avr_sei", void_ftype_void, AVR_BUILTIN_SEI); ++ def_builtin ("__builtin_avr_cli", void_ftype_void, AVR_BUILTIN_CLI); ++ def_builtin ("__builtin_avr_wdr", void_ftype_void, AVR_BUILTIN_WDR); ++ def_builtin ("__builtin_avr_sleep", void_ftype_void, AVR_BUILTIN_SLEEP); ++ ++ if (AVR_HAVE_MUL) ++ { ++ def_builtin ("__builtin_avr_fmul", uint_ftype_uchar_uchar, ++ AVR_BUILTIN_FMUL); ++ def_builtin ("__builtin_avr_fmuls", int_ftype_char_char, ++ AVR_BUILTIN_FMULS); ++ def_builtin ("__builtin_avr_fmulsu", int_ftype_char_uchar, ++ AVR_BUILTIN_FMULSU); ++ } ++ ++ def_builtin ("__builtin_avr_swap", uchar_ftype_uchar, AVR_BUILTIN_SWAP); ++ def_builtin ("__builtin_avr_delay_cycles", void_ftype_ulong, ++ AVR_BUILTIN_DELAY_CYCLES); ++} ++ ++struct builtin_description ++{ ++ const enum insn_code icode; ++ const char *const name; ++ const enum avr_builtins code; ++}; ++ ++static const struct builtin_description bdesc_1arg[] = ++{ ++ { CODE_FOR_swap, "__builtin_avr_swap", AVR_BUILTIN_SWAP } ++}; ++ ++static const struct builtin_description bdesc_2arg[] = ++{ ++ { CODE_FOR_fmul, "__builtin_avr_fmul", AVR_BUILTIN_FMUL }, ++ { CODE_FOR_fmuls, "__builtin_avr_fmuls", AVR_BUILTIN_FMULS }, ++ { CODE_FOR_fmulsu, "__builtin_avr_fmulsu", AVR_BUILTIN_FMULSU } ++}; ++ ++/* Subroutine of avr_expand_builtin to take care of unop insns. */ ++ ++static rtx ++avr_expand_unop_builtin (enum insn_code icode, tree exp, ++ rtx target) ++{ ++ rtx pat; ++ tree arg0 = CALL_EXPR_ARG (exp, 0); ++ rtx op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0); ++ enum machine_mode op0mode = GET_MODE (op0); ++ enum machine_mode tmode = insn_data[icode].operand[0].mode; ++ enum machine_mode mode0 = insn_data[icode].operand[1].mode; ++ ++ if (! target ++ || GET_MODE (target) != tmode ++ || ! (*insn_data[icode].operand[0].predicate) (target, tmode)) ++ target = gen_reg_rtx (tmode); ++ ++ if (op0mode == SImode && mode0 == HImode) ++ { ++ op0mode = HImode; ++ op0 = gen_lowpart (HImode, op0); ++ } ++ gcc_assert (op0mode == mode0 || op0mode == VOIDmode); ++ ++ if (! (*insn_data[icode].operand[1].predicate) (op0, mode0)) ++ op0 = copy_to_mode_reg (mode0, op0); ++ ++ pat = GEN_FCN (icode) (target, op0); ++ if (! pat) ++ return 0; ++ emit_insn (pat); ++ return target; ++} ++ ++/* Subroutine of avr_expand_builtin to take care of binop insns. */ ++ ++static rtx ++avr_expand_binop_builtin (enum insn_code icode, tree exp, rtx target) ++{ ++ rtx pat; ++ tree arg0 = CALL_EXPR_ARG (exp, 0); ++ tree arg1 = CALL_EXPR_ARG (exp, 1); ++ rtx op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0); ++ rtx op1 = expand_expr (arg1, NULL_RTX, VOIDmode, 0); ++ enum machine_mode op0mode = GET_MODE (op0); ++ enum machine_mode op1mode = GET_MODE (op1); ++ enum machine_mode tmode = insn_data[icode].operand[0].mode; ++ enum machine_mode mode0 = insn_data[icode].operand[1].mode; ++ enum machine_mode mode1 = insn_data[icode].operand[2].mode; ++ ++ if (! target ++ || GET_MODE (target) != tmode ++ || ! (*insn_data[icode].operand[0].predicate) (target, tmode)) ++ target = gen_reg_rtx (tmode); ++ ++ if ((op0mode == SImode || op0mode == VOIDmode) && mode0 == HImode) ++ { ++ op0mode = HImode; ++ op0 = gen_lowpart (HImode, op0); ++ } ++ if ((op1mode == SImode || op1mode == VOIDmode) && mode1 == HImode) ++ { ++ op1mode = HImode; ++ op1 = gen_lowpart (HImode, op1); ++ } ++ /* In case the insn wants input operands in modes different from ++ the result, abort. */ ++ gcc_assert ((op0mode == mode0 || op0mode == VOIDmode) ++ && (op1mode == mode1 || op1mode == VOIDmode)); ++ ++ if (! (*insn_data[icode].operand[1].predicate) (op0, mode0)) ++ op0 = copy_to_mode_reg (mode0, op0); ++ if (! (*insn_data[icode].operand[2].predicate) (op1, mode1)) ++ op1 = copy_to_mode_reg (mode1, op1); ++ ++ pat = GEN_FCN (icode) (target, op0, op1); ++ if (! pat) ++ return 0; ++ ++ emit_insn (pat); ++ return target; ++} ++ ++/* Expand an expression EXP that calls a built-in function, ++ with result going to TARGET if that's convenient ++ (and in mode MODE if that's convenient). ++ SUBTARGET may be used as the target for computing one of EXP's operands. ++ IGNORE is nonzero if the value is to be ignored. */ ++ ++static rtx ++avr_expand_builtin (tree exp, rtx target, ++ rtx subtarget ATTRIBUTE_UNUSED, ++ enum machine_mode mode ATTRIBUTE_UNUSED, ++ int ignore ATTRIBUTE_UNUSED) ++{ ++ size_t i; ++ const struct builtin_description *d; ++ tree fndecl = TREE_OPERAND (CALL_EXPR_FN (exp), 0); ++ unsigned int fcode = DECL_FUNCTION_CODE (fndecl); ++ rtx pat; ++ tree arg0; ++ rtx op0; ++ ++ switch (fcode) ++ { ++ case AVR_BUILTIN_SEI: ++ emit_insn (gen_enable_interrupt ()); ++ return 0; ++ case AVR_BUILTIN_CLI: ++ emit_insn (gen_disable_interrupt ()); ++ return 0; ++ case AVR_BUILTIN_WDR: ++ emit_insn (gen_wdr ()); ++ return 0; ++ case AVR_BUILTIN_SLEEP: ++ emit_insn (gen_sleep ()); ++ return 0; ++ case AVR_BUILTIN_DELAY_CYCLES: ++ { ++ arg0 = CALL_EXPR_ARG (exp, 0); ++ op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0); ++ ++ if (!CONSTANT_P (op0)) ++ error ("__builtin_avr_delay_cycles expects an integer constant."); ++ ++ emit_insn (gen_delay_cycles (op0)); ++ return 0; ++ } ++ } ++ ++ for (i = 0, d = bdesc_1arg; i < ARRAY_SIZE (bdesc_1arg); i++, d++) ++ if (d->code == fcode) ++ return avr_expand_unop_builtin (d->icode, exp, target); ++ ++ for (i = 0, d = bdesc_1arg; i < ARRAY_SIZE (bdesc_2arg); i++, d++) ++ if (d->code == fcode) ++ return avr_expand_binop_builtin (d->icode, exp, target); ++ ++ gcc_unreachable (); ++} ++ + #include "gt-avr.h" diff --git a/devel/avr-gcc/files/patch-disable-ssp b/devel/avr-gcc/files/patch-disable-ssp new file mode 100644 index 000000000000..5d56ac62c6ff --- /dev/null +++ b/devel/avr-gcc/files/patch-disable-ssp @@ -0,0 +1,22 @@ +--- configure.orig 2009-04-25 07:55:24.000000000 +0200 ++++ configure 2010-03-05 15:28:10.000000000 +0100 +@@ -2277,7 +2277,7 @@ + noconfigdirs="$noconfigdirs ld target-libgloss ${libgcj}" + ;; + avr-*-*) +- noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}" ++ noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj} target-libssp" + ;; + bfin-*-*) + noconfigdirs="$noconfigdirs gdb" +--- configure.ac.orig 2009-04-25 07:55:24.000000000 +0200 ++++ configure.ac 2010-03-05 15:28:10.000000000 +0100 +@@ -554,7 +554,7 @@ + noconfigdirs="$noconfigdirs ld target-libgloss ${libgcj}" + ;; + avr-*-*) +- noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}" ++ noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj} target-libssp" + ;; + bfin-*-*) + noconfigdirs="$noconfigdirs gdb" diff --git a/devel/avr-gcc/files/patch-libiberty-Makefile.in b/devel/avr-gcc/files/patch-libiberty-Makefile.in index 0e0b3ce31173..4d29719dd492 100644 --- a/devel/avr-gcc/files/patch-libiberty-Makefile.in +++ b/devel/avr-gcc/files/patch-libiberty-Makefile.in @@ -1,6 +1,7 @@ ---- libiberty/Makefile.in.orig Mon Sep 26 22:55:10 2005 -+++ libiberty/Makefile.in Wed Mar 22 22:13:44 2006 -@@ -275,7 +275,8 @@ +diff -ur ../gcc-4.3.4.orig/libiberty/Makefile.in ./libiberty/Makefile.in +--- ../gcc-4.3.4.orig/libiberty/Makefile.in 2007-07-25 08:26:45.000000000 +0200 ++++ ./libiberty/Makefile.in 2009-10-02 15:20:13.000000000 +0200 +@@ -344,7 +344,8 @@ @MAINT@ echo stamp > stamp-functions INSTALL_DEST = @INSTALL_DEST@ @@ -8,5 +9,6 @@ +#install: install_to_$(INSTALL_DEST) install-subdir +install: - install_to_libdir: all - ${mkinstalldirs} $(DESTDIR)$(libdir)$(MULTISUBDIR) + # This is tricky. Even though CC in the Makefile contains + # multilib-specific flags, it's overridden by FLAGS_TO_PASS from the +Only in ./libiberty: Makefile.in.orig diff --git a/devel/avr-gcc/files/patch-newdevices b/devel/avr-gcc/files/patch-newdevices index bab67dec9027..c97db661c24d 100644 --- a/devel/avr-gcc/files/patch-newdevices +++ b/devel/avr-gcc/files/patch-newdevices @@ -1,31 +1,59 @@ ---- gcc/config/avr/avr.c.orig Sat Sep 1 17:28:30 2007 -+++ gcc/config/avr/avr.c Wed Dec 19 14:02:11 2007 -@@ -173,6 +174,7 @@ +--- ./gcc/config/avr/avr.c~ 2010-03-05 17:16:20.000000000 +0100 ++++ ./gcc/config/avr/avr.c 2010-03-05 17:19:30.000000000 +0100 +@@ -193,18 +193,28 @@ + { "at90s8535", ARCH_AVR2, "__AVR_AT90S8535__" }, /* Classic + MOVW, <= 8K. */ { "avr25", ARCH_AVR25, NULL }, ++ { "ata6289", ARCH_AVR25, "__AVR_ATA6289__" }, { "attiny13", ARCH_AVR25, "__AVR_ATtiny13__" }, + { "attiny13a", ARCH_AVR25, "__AVR_ATtiny13A__" }, { "attiny2313", ARCH_AVR25, "__AVR_ATtiny2313__" }, ++ { "attiny2313a", ARCH_AVR25, "__AVR_ATtiny2313A__" }, { "attiny24", ARCH_AVR25, "__AVR_ATtiny24__" }, ++ { "attiny24a", ARCH_AVR25, "__AVR_ATtiny24A__" }, ++ { "attiny4313", ARCH_AVR25, "__AVR_ATtiny4313__" }, { "attiny44", ARCH_AVR25, "__AVR_ATtiny44__" }, -@@ -188,6 +188,7 @@ ++ { "attiny44a", ARCH_AVR25, "__AVR_ATtiny44A__" }, + { "attiny84", ARCH_AVR25, "__AVR_ATtiny84__" }, + { "attiny25", ARCH_AVR25, "__AVR_ATtiny25__" }, + { "attiny45", ARCH_AVR25, "__AVR_ATtiny45__" }, + { "attiny85", ARCH_AVR25, "__AVR_ATtiny85__" }, + { "attiny261", ARCH_AVR25, "__AVR_ATtiny261__" }, ++ { "attiny261a", ARCH_AVR25, "__AVR_ATtiny261A__" }, { "attiny461", ARCH_AVR25, "__AVR_ATtiny461__" }, ++ { "attiny461a", ARCH_AVR25, "__AVR_ATtiny461A__" }, { "attiny861", ARCH_AVR25, "__AVR_ATtiny861__" }, ++ { "attiny861a", ARCH_AVR25, "__AVR_ATtiny861A__" }, { "attiny43u", ARCH_AVR25, "__AVR_ATtiny43U__" }, + { "attiny87", ARCH_AVR25, "__AVR_ATtiny87__" }, { "attiny48", ARCH_AVR25, "__AVR_ATtiny48__" }, { "attiny88", ARCH_AVR25, "__AVR_ATtiny88__" }, { "at86rf401", ARCH_AVR25, "__AVR_AT86RF401__" }, -@@ -224,6 +224,8 @@ static const struct mcu_type_s avr_mcu_t +@@ -220,61 +230,104 @@ { "avr35", ARCH_AVR35, NULL }, { "at90usb82", ARCH_AVR35, "__AVR_AT90USB82__" }, { "at90usb162", ARCH_AVR35, "__AVR_AT90USB162__" }, ++ { "atmega8u2", ARCH_AVR35, "__AVR_ATmega8U2__" }, ++ { "atmega16u2", ARCH_AVR35, "__AVR_ATmega16U2__" }, ++ { "atmega32u2", ARCH_AVR35, "__AVR_ATmega32U2__" }, + { "attiny167", ARCH_AVR35, "__AVR_ATtiny167__" }, -+ { "attiny327", ARCH_AVR35, "__AVR_ATtiny327__" }, /* Enhanced, <= 8K. */ { "avr4", ARCH_AVR4, NULL }, { "atmega8", ARCH_AVR4, "__AVR_ATmega8__" }, -@@ -221,6 +223,7 @@ + { "atmega48", ARCH_AVR4, "__AVR_ATmega48__" }, ++ { "atmega48a", ARCH_AVR4, "__AVR_ATmega48A__" }, + { "atmega48p", ARCH_AVR4, "__AVR_ATmega48P__" }, + { "atmega88", ARCH_AVR4, "__AVR_ATmega88__" }, ++ { "atmega88a", ARCH_AVR4, "__AVR_ATmega88A__" }, + { "atmega88p", ARCH_AVR4, "__AVR_ATmega88P__" }, ++ { "atmega88pa", ARCH_AVR4, "__AVR_ATmega88PA__" }, + { "atmega8515", ARCH_AVR4, "__AVR_ATmega8515__" }, + { "atmega8535", ARCH_AVR4, "__AVR_ATmega8535__" }, + { "atmega8hva", ARCH_AVR4, "__AVR_ATmega8HVA__" }, ++ { "atmega4hvd", ARCH_AVR4, "__AVR_ATmega4HVD__" }, ++ { "atmega8hvd", ARCH_AVR4, "__AVR_ATmega8HVD__" }, + { "at90pwm1", ARCH_AVR4, "__AVR_AT90PWM1__" }, + { "at90pwm2", ARCH_AVR4, "__AVR_AT90PWM2__" }, { "at90pwm2b", ARCH_AVR4, "__AVR_AT90PWM2B__" }, { "at90pwm3", ARCH_AVR4, "__AVR_AT90PWM3__" }, { "at90pwm3b", ARCH_AVR4, "__AVR_AT90PWM3B__" }, @@ -33,23 +61,81 @@ /* Enhanced, > 8K, <= 64K. */ { "avr5", ARCH_AVR5, NULL }, { "atmega16", ARCH_AVR5, "__AVR_ATmega16__" }, -@@ -278,6 +278,15 @@ static const struct mcu_type_s avr_mcu_t - { "at90can64", ARCH_AVR5, "__AVR_AT90CAN64__" }, - { "at90pwm216", ARCH_AVR5, "__AVR_AT90PWM216__" }, - { "at90pwm316", ARCH_AVR5, "__AVR_AT90PWM316__" }, -+ { "atmega32c1", ARCH_AVR5, "__AVR_ATmega32C1__" }, -+ { "atmega64c1", ARCH_AVR5, "__AVR_ATmega64C1__" }, ++ { "atmega16a", ARCH_AVR5, "__AVR_ATmega16A__" }, + { "atmega161", ARCH_AVR5, "__AVR_ATmega161__" }, + { "atmega162", ARCH_AVR5, "__AVR_ATmega162__" }, + { "atmega163", ARCH_AVR5, "__AVR_ATmega163__" }, ++ { "atmega164a", ARCH_AVR5, "__AVR_ATmega164A__" }, + { "atmega164p", ARCH_AVR5, "__AVR_ATmega164P__" }, + { "atmega165", ARCH_AVR5, "__AVR_ATmega165__" }, ++ { "atmega165a", ARCH_AVR5, "__AVR_ATmega165A__" }, + { "atmega165p", ARCH_AVR5, "__AVR_ATmega165P__" }, + { "atmega168", ARCH_AVR5, "__AVR_ATmega168__" }, ++ { "atmega168a", ARCH_AVR5, "__AVR_ATmega168A__" }, + { "atmega168p", ARCH_AVR5, "__AVR_ATmega168P__" }, + { "atmega169", ARCH_AVR5, "__AVR_ATmega169__" }, ++ { "atmega169a", ARCH_AVR5, "__AVR_ATmega169A__" }, + { "atmega169p", ARCH_AVR5, "__AVR_ATmega169P__" }, ++ { "atmega169pa", ARCH_AVR5, "__AVR_ATmega169PA__" }, ++ { "atmega16c1", ARCH_AVR5, "__AVR_ATmega16C1__" }, ++ { "atmega16hva", ARCH_AVR5, "__AVR_ATmega16HVA__" }, ++ { "atmega16hva2", ARCH_AVR5, "__AVR_ATmega16HVA2__" }, ++ { "atmega16hvb", ARCH_AVR5, "__AVR_ATmega16HVB__" }, + { "atmega16m1", ARCH_AVR5, "__AVR_ATmega16M1__" }, -+ { "atmega32m1", ARCH_AVR5, "__AVR_ATmega32M1__" }, -+ { "atmega64m1", ARCH_AVR5, "__AVR_ATmega64M1__" }, + { "atmega16u4", ARCH_AVR5, "__AVR_ATmega16U4__" }, + { "atmega32", ARCH_AVR5, "__AVR_ATmega32__" }, + { "atmega323", ARCH_AVR5, "__AVR_ATmega323__" }, ++ { "atmega324a", ARCH_AVR5, "__AVR_ATmega324A__" }, + { "atmega324p", ARCH_AVR5, "__AVR_ATmega324P__" }, ++ { "atmega324pa", ARCH_AVR5, "__AVR_ATmega324PA__" }, + { "atmega325", ARCH_AVR5, "__AVR_ATmega325__" }, + { "atmega325p", ARCH_AVR5, "__AVR_ATmega325P__" }, + { "atmega3250", ARCH_AVR5, "__AVR_ATmega3250__" }, + { "atmega3250p", ARCH_AVR5, "__AVR_ATmega3250P__" }, ++ { "atmega328", ARCH_AVR5, "__AVR_ATmega328__" }, + { "atmega328p", ARCH_AVR5, "__AVR_ATmega328P__" }, + { "atmega329", ARCH_AVR5, "__AVR_ATmega329__" }, + { "atmega329p", ARCH_AVR5, "__AVR_ATmega329P__" }, ++ { "atmega329pa", ARCH_AVR5, "__AVR_ATmega329PA__" }, + { "atmega3290", ARCH_AVR5, "__AVR_ATmega3290__" }, + { "atmega3290p", ARCH_AVR5, "__AVR_ATmega3290P__" }, ++ { "atmega32c1", ARCH_AVR5, "__AVR_ATmega32C1__" }, + { "atmega32hvb", ARCH_AVR5, "__AVR_ATmega32HVB__" }, ++ { "atmega32m1", ARCH_AVR5, "__AVR_ATmega32M1__" }, + { "atmega32u4", ARCH_AVR5, "__AVR_ATmega32U4__" }, + { "atmega32u6", ARCH_AVR5, "__AVR_ATmega32U6__" }, + { "atmega406", ARCH_AVR5, "__AVR_ATmega406__" }, + { "atmega64", ARCH_AVR5, "__AVR_ATmega64__" }, + { "atmega640", ARCH_AVR5, "__AVR_ATmega640__" }, + { "atmega644", ARCH_AVR5, "__AVR_ATmega644__" }, ++ { "atmega644a", ARCH_AVR5, "__AVR_ATmega644A__" }, + { "atmega644p", ARCH_AVR5, "__AVR_ATmega644P__" }, ++ { "atmega644pa", ARCH_AVR5, "__AVR_ATmega644PA__" }, + { "atmega645", ARCH_AVR5, "__AVR_ATmega645__" }, ++ { "atmega645a", ARCH_AVR5, "__AVR_ATmega645A__" }, ++ { "atmega645p", ARCH_AVR5, "__AVR_ATmega645P__" }, + { "atmega6450", ARCH_AVR5, "__AVR_ATmega6450__" }, ++ { "atmega6450a", ARCH_AVR5, "__AVR_ATmega6450A__" }, ++ { "atmega6450p", ARCH_AVR5, "__AVR_ATmega6450P__" }, + { "atmega649", ARCH_AVR5, "__AVR_ATmega649__" }, ++ { "atmega649a", ARCH_AVR5, "__AVR_ATmega649A__" }, ++ { "atmega649p", ARCH_AVR5, "__AVR_ATmega649P__" }, + { "atmega6490", ARCH_AVR5, "__AVR_ATmega6490__" }, +- { "atmega16hva", ARCH_AVR5, "__AVR_ATmega16HVA__" }, ++ { "atmega6490a", ARCH_AVR5, "__AVR_ATmega6490A__" }, ++ { "atmega6490p", ARCH_AVR5, "__AVR_ATmega6490P__" }, ++ { "atmega64c1", ARCH_AVR5, "__AVR_ATmega64C1__" }, ++ { "atmega64m1", ARCH_AVR5, "__AVR_ATmega64M1__" }, ++ { "atmega64hve", ARCH_AVR5, "__AVR_ATmega64HVE__" }, + { "at90can32", ARCH_AVR5, "__AVR_AT90CAN32__" }, + { "at90can64", ARCH_AVR5, "__AVR_AT90CAN64__" }, + { "at90pwm216", ARCH_AVR5, "__AVR_AT90PWM216__" }, + { "at90pwm316", ARCH_AVR5, "__AVR_AT90PWM316__" }, + { "at90scr100", ARCH_AVR5, "__AVR_AT90SCR100__" }, { "at90usb646", ARCH_AVR5, "__AVR_AT90USB646__" }, { "at90usb647", ARCH_AVR5, "__AVR_AT90USB647__" }, { "at94k", ARCH_AVR5, "__AVR_AT94K__" }, -@@ -278,9 +283,13 @@ +@@ -284,9 +337,13 @@ { "atmega1280", ARCH_AVR51, "__AVR_ATmega1280__" }, { "atmega1281", ARCH_AVR51, "__AVR_ATmega1281__" }, { "atmega1284p", ARCH_AVR51, "__AVR_ATmega1284P__" }, @@ -63,106 +149,149 @@ /* 3-Byte PC. */ { "avr6", ARCH_AVR6, NULL }, { "atmega2560", ARCH_AVR6, "__AVR_ATmega2560__" }, ---- gcc/config/avr/t-avr.orig Fri Apr 27 22:53:57 2007 -+++ gcc/config/avr/t-avr Wed Dec 19 14:01:08 2007 -@@ -43,6 +43,7 @@ MULTILIB_DIRNAMES = avr2 avr25 avr3 avr3 - # The many avr2 matches are not listed here - this is the default. - MULTILIB_MATCHES = \ - mmcu?avr25=mmcu?attiny13 \ -+ mmcu?avr25=mmcu?attiny13a \ - mmcu?avr25=mmcu?attiny2313 \ - mmcu?avr25=mmcu?attiny24 \ - mmcu?avr25=mmcu?attiny44 \ -@@ -55,6 +55,7 @@ - mmcu?avr25=mmcu?attiny461 \ - mmcu?avr25=mmcu?attiny861 \ - mmcu?avr25=mmcu?attiny43u \ -+ mmcu?avr25=mmcu?attiny87 \ - mmcu?avr25=mmcu?attiny48 \ - mmcu?avr25=mmcu?attiny88 \ - mmcu?avr25=mmcu?at86rf401 \ -@@ -63,6 +63,8 @@ MULTILIB_MATCHES = \ - mmcu?avr31=mmcu?atmega103 \ - mmcu?avr35=mmcu?at90usb82 \ - mmcu?avr35=mmcu?at90usb162 \ -+ mmcu?avr35=mmcu?attiny167 \ -+ mmcu?avr35=mmcu?attiny327 \ - mmcu?avr4=mmcu?atmega48 \ - mmcu?avr4=mmcu?atmega48p \ - mmcu?avr4=mmcu?atmega8 \ -@@ -80,6 +82,7 @@ - mmcu?avr4=mmcu?at90pwm2b \ - mmcu?avr4=mmcu?at90pwm3 \ - mmcu?avr4=mmcu?at90pwm3b \ -+ mmcu?avr4=mmcu?at90pwm81 \ - mmcu?avr5=mmcu?atmega16 \ - mmcu?avr5=mmcu?atmega161 \ - mmcu?avr5=mmcu?atmega162 \ -@@ -114,6 +114,15 @@ MULTILIB_MATCHES = \ - mmcu?avr5=mmcu?at90can64 \ - mmcu?avr5=mmcu?at90pwm216 \ - mmcu?avr5=mmcu?at90pwm316 \ -+ mmcu?avr5=mmcu?atmega32c1 \ -+ mmcu?avr5=mmcu?atmega64c1 \ -+ mmcu?avr5=mmcu?atmega16m1 \ -+ mmcu?avr5=mmcu?atmega32m1 \ -+ mmcu?avr5=mmcu?atmega64m1 \ -+ mmcu?avr5=mmcu?atmega16u4 \ -+ mmcu?avr5=mmcu?atmega32u4 \ -+ mmcu?avr5=mmcu?atmega32u6 \ -+ mmcu?avr5=mmcu?at90scr100 \ - mmcu?avr5=mmcu?at90usb646 \ - mmcu?avr5=mmcu?at90usb647 \ - mmcu?avr5=mmcu?at94k \ -@@ -133,9 +138,13 @@ - mmcu?avr51=mmcu?atmega1280 \ - mmcu?avr51=mmcu?atmega1281 \ - mmcu?avr51=mmcu?atmega1284p \ -+ mmcu?avr51=mmcu?atmega128rfa1 \ - mmcu?avr51=mmcu?at90can128 \ - mmcu?avr51=mmcu?at90usb1286 \ - mmcu?avr51=mmcu?at90usb1287 \ -+ mmcu?avr51=mmcu?m3000f \ -+ mmcu?avr51=mmcu?m3000s \ -+ mmcu?avr51=mmcu?m3001b \ - mmcu?avr6=mmcu?atmega2560 \ - mmcu?avr6=mmcu?atmega2561 - ---- gcc/config/avr/avr.h.orig 2009-01-26 17:37:33.000000000 +0100 -+++ gcc/config/avr/avr.h 2009-01-26 17:47:48.000000000 +0100 -@@ -811,7 +811,7 @@ +--- ./gcc/config/avr/avr.h~ 2010-03-05 17:15:55.000000000 +0100 ++++ ./gcc/config/avr/avr.h 2010-03-05 17:19:53.000000000 +0100 +@@ -803,67 +803,221 @@ mmcu=at90s8*|\ mmcu=at90c8*|\ mmcu=at86rf401|\ - mmcu=attiny13|\ ++ mmcu=ata6289|\ + mmcu=attiny13*|\ mmcu=attiny2313|\ ++ mmcu=attiny2313a|\ mmcu=attiny24|\ ++ mmcu=attiny24a|\ mmcu=attiny25|\ -@@ -822,14 +822,17 @@ - mmcu=at43*|\ - mmcu=at76*|\ + mmcu=attiny261|\ +- mmcu=attiny4*|\ +- mmcu=attiny8*: -m avr2}\ ++ mmcu=attiny261a|\ ++ mmcu=attiny4313|\ ++ mmcu=attiny43u|\ ++ mmcu=attiny44|\ ++ mmcu=attiny44a|\ ++ mmcu=attiny45|\ ++ mmcu=attiny461|\ ++ mmcu=attiny461a|\ ++ mmcu=attiny48|\ ++ mmcu=attiny84|\ ++ mmcu=attiny85|\ ++ mmcu=attiny861|\ ++ mmcu=attiny861a|\ ++ mmcu=attiny87|\ ++ mmcu=attiny88: -m avr2}\ + %{mmcu=atmega103|\ +- mmcu=at43*|\ +- mmcu=at76*|\ ++ mmcu=at43usb320|\ ++ mmcu=at43usb355|\ ++ mmcu=at76c711|\ mmcu=at90usb82|\ - mmcu=at90usb162: -m avr3}\ +-%{mmcu=atmega8*|\ +- mmcu=atmega48*|\ + mmcu=at90usb162|\ -+ mmcu=attiny16*|\ -+ mmcu=attiny32*: -m avr3}\ - %{mmcu=atmega8*|\ - mmcu=atmega48*|\ ++ mmcu=atmega8u2|\ ++ mmcu=atmega16u2|\ ++ mmcu=atmega32u2|\ ++ mmcu=attiny167: -m avr3}\ ++%{mmcu=atmega8|\ ++ mmcu=atmega88|\ ++ mmcu=atmega88a|\ ++ mmcu=atmega88p|\ ++ mmcu=atmega88pa|\ ++ mmcu=atmega8515|\ ++ mmcu=atmega8535|\ ++ mmcu=atmega8hva|\ ++ mmcu=atmega8hvd|\ ++ mmcu=atmega48|\ ++ mmcu=atmega48a|\ ++ mmcu=atmega48p|\ ++ mmcu=atmega4hvd|\ mmcu=at90pwm1|\ mmcu=at90pwm2|\ mmcu=at90pwm2b|\ mmcu=at90pwm3|\ - mmcu=at90pwm3b: -m avr4}\ +-%{mmcu=atmega16*|\ +- mmcu=atmega32*|\ + mmcu=at90pwm3b|\ + mmcu=at90pwm81: -m avr4}\ - %{mmcu=atmega16*|\ - mmcu=atmega32*|\ ++%{mmcu=atmega16|\ ++ mmcu=atmega16a|\ ++ mmcu=atmega161|\ ++ mmcu=atmega162|\ ++ mmcu=atmega163|\ ++ mmcu=atmega164a|\ ++ mmcu=atmega164p|\ ++ mmcu=atmega165|\ ++ mmcu=atmega165a|\ ++ mmcu=atmega165p|\ ++ mmcu=atmega168|\ ++ mmcu=atmega168a|\ ++ mmcu=atmega168p|\ ++ mmcu=atmega169|\ ++ mmcu=atmega169a|\ ++ mmcu=atmega169p|\ ++ mmcu=atmega169pa|\ ++ mmcu=atmega16c1|\ ++ mmcu=atmega16hva|\ ++ mmcu=atmega16hva2|\ ++ mmcu=atmega16hvb|\ ++ mmcu=atmega16m1|\ ++ mmcu=atmega16u4|\ ++ mmcu=atmega32|\ ++ mmcu=atmega323|\ ++ mmcu=atmega324a|\ ++ mmcu=atmega324p|\ ++ mmcu=atmega324pa|\ ++ mmcu=atmega325|\ ++ mmcu=atmega325p|\ ++ mmcu=atmega3250|\ ++ mmcu=atmega3250p|\ ++ mmcu=atmega328|\ ++ mmcu=atmega328p|\ ++ mmcu=atmega329|\ ++ mmcu=atmega329p|\ ++ mmcu=atmega329pa|\ ++ mmcu=atmega3290|\ ++ mmcu=atmega3290p|\ ++ mmcu=atmega32c1|\ ++ mmcu=atmega32hvb|\ ++ mmcu=atmega32m1|\ ++ mmcu=atmega32u4|\ ++ mmcu=atmega32u6|\ mmcu=atmega406|\ -@@ -838,9 +841,12 @@ +- mmcu=atmega64*|\ ++ mmcu=atmega64|\ ++ mmcu=atmega640|\ ++ mmcu=atmega644|\ ++ mmcu=atmega644a|\ ++ mmcu=atmega644p|\ ++ mmcu=atmega644pa|\ ++ mmcu=atmega645|\ ++ mmcu=atmega645a|\ ++ mmcu=atmega645p|\ ++ mmcu=atmega6450|\ ++ mmcu=atmega6450a|\ ++ mmcu=atmega6450p|\ ++ mmcu=atmega649|\ ++ mmcu=atmega649a|\ ++ mmcu=atmega649p|\ ++ mmcu=atmega6490|\ ++ mmcu=atmega6490a|\ ++ mmcu=atmega6490p|\ ++ mmcu=atmega64c1|\ ++ mmcu=atmega64m1|\ ++ mmcu=atmega64hve|\ + mmcu=atmega128*|\ mmcu=at90can*|\ mmcu=at90pwm216|\ mmcu=at90pwm316|\ ++ mmcu=atmega32c1|\ ++ mmcu=atmega32m1|\ ++ mmcu=atmega32u4|\ + mmcu=at90scr100|\ mmcu=at90usb64*|\ mmcu=at90usb128*|\ @@ -171,96 +300,246 @@ + mmcu=m3000*|\ + mmcu=m3001*: -m avr5}\ %{mmcu=atmega256*:-m avr6}\ - %{mmcu=atmega324*|\ +-%{mmcu=atmega324*|\ ++%{mmcu=atmega324a|\ ++ mmcu=atmega324p|\ ++ mmcu=atmega324pa|\ mmcu=atmega325*|\ -@@ -865,13 +871,26 @@ - mmcu=atmega32hvb|\ ++ mmcu=atmega328|\ + mmcu=atmega328p|\ +- mmcu=atmega329*|\ ++ mmcu=atmega329|\ ++ mmcu=atmega329p|\ ++ mmcu=atmega329pa|\ ++ mmcu=atmega3290|\ ++ mmcu=atmega3290p|\ + mmcu=atmega406|\ +- mmcu=atmega48*|\ +- mmcu=atmega88*|\ ++ mmcu=atmega48|\ ++ mmcu=atmega48a|\ ++ mmcu=atmega48p|\ ++ mmcu=atmega88|\ ++ mmcu=atmega88a|\ ++ mmcu=atmega88p|\ ++ mmcu=atmega88pa|\ + mmcu=atmega64|\ +- mmcu=atmega644*|\ +- mmcu=atmega645*|\ +- mmcu=atmega649*|\ ++ mmcu=atmega644|\ ++ mmcu=atmega644a|\ ++ mmcu=atmega644p|\ ++ mmcu=atmega644pa|\ ++ mmcu=atmega645|\ ++ mmcu=atmega645p|\ ++ mmcu=atmega645a|\ ++ mmcu=atmega6450|\ ++ mmcu=atmega6450a|\ ++ mmcu=atmega6450p|\ ++ mmcu=atmega649|\ ++ mmcu=atmega649a|\ ++ mmcu=atmega649p|\ ++ mmcu=atmega6490|\ ++ mmcu=atmega6490a|\ ++ mmcu=atmega6490p|\ + mmcu=atmega128|\ + mmcu=atmega1284p|\ + mmcu=atmega162|\ +- mmcu=atmega164*|\ +- mmcu=atmega165*|\ +- mmcu=atmega168*|\ +- mmcu=atmega169*|\ +- mmcu=atmega8hva|\ +- mmcu=atmega16hva|\ +- mmcu=atmega32hvb|\ ++ mmcu=atmega164a|\ ++ mmcu=atmega164p|\ ++ mmcu=atmega165|\ ++ mmcu=atmega165a|\ ++ mmcu=atmega165p|\ ++ mmcu=atmega168|\ ++ mmcu=atmega168a|\ ++ mmcu=atmega168p|\ ++ mmcu=atmega169|\ ++ mmcu=atmega169a|\ ++ mmcu=atmega169p|\ ++ mmcu=atmega169pa|\ ++ mmcu=atmega4hv*|\ ++ mmcu=atmega8hv*|\ ++ mmcu=atmega16hv*|\ ++ mmcu=atmega32hv*|\ mmcu=attiny48|\ mmcu=attiny88|\ + mmcu=attiny87|\ + mmcu=attiny167|\ -+ mmcu=attiny327|\ mmcu=at90can*|\ mmcu=at90pwm*|\ -+ mmcu=atmega32c1|\ -+ mmcu=atmega64c1|\ ++ mmcu=atmega16c1|\ + mmcu=atmega16m1|\ ++ mmcu=atmega32c1|\ + mmcu=atmega32m1|\ ++ mmcu=atmega64c1|\ ++ mmcu=atmega64m1|\ + mmcu=atmega16u4|\ + mmcu=atmega32u*|\ + mmcu=at90scr100|\ ++ mmcu=ata6289|\ ++ mmcu=atmega64hve|\ ++ mmcu=atmega8u2|\ ++ mmcu=atmega16u2|\ ++ mmcu=atmega32u2|\ mmcu=at90usb*: -Tdata 0x800100}\ %{mmcu=atmega640|\ mmcu=atmega1280|\ mmcu=atmega1281|\ - mmcu=atmega256*: -Tdata 0x800200} " -+ mmcu=atmega256*|\ -+ mmcu=atmega128rfa1: -Tdata 0x800200}\ ++ mmcu=atmega128rfa1|\ ++ mmcu=atmega256*: -Tdata 0x800200}\ +%{mmcu=m3000*|\ + mmcu=m3001*: -Tdata 0x801000}" #define LIB_SPEC \ "%{!mmcu=at90s1*:%{!mmcu=attiny11:%{!mmcu=attiny12:%{!mmcu=attiny15:%{!mmcu=attiny28: -lc }}}}}" -@@ -906,6 +925,7 @@ +@@ -898,30 +1052,47 @@ %{mmcu=at90s8535:crts8535.o%s} \ %{mmcu=at86rf401:crt86401.o%s} \ %{mmcu=attiny13:crttn13.o%s} \ +%{mmcu=attiny13a:crttn13a.o%s} \ %{mmcu=attiny2313|mmcu=avr25:crttn2313.o%s} \ ++%{mmcu=attiny2313a:crttn2313a.o%s} \ %{mmcu=attiny24:crttn24.o%s} \ ++%{mmcu=attiny24a:crttn24a.o%s} \ ++%{mmcu=attiny4313:crttn4313.o%s} \ %{mmcu=attiny44:crttn44.o%s} \ -@@ -917,14 +937,17 @@ ++%{mmcu=attiny44a:crttn44a.o%s} \ + %{mmcu=attiny84:crttn84.o%s} \ + %{mmcu=attiny25:crttn25.o%s} \ + %{mmcu=attiny45:crttn45.o%s} \ + %{mmcu=attiny85:crttn85.o%s} \ + %{mmcu=attiny261:crttn261.o%s} \ ++%{mmcu=attiny261a:crttn261a.o%s} \ %{mmcu=attiny461:crttn461.o%s} \ ++%{mmcu=attiny461a:crttn461a.o%s} \ %{mmcu=attiny861:crttn861.o%s} \ ++%{mmcu=attiny861a:crttn861a.o%s} \ %{mmcu=attiny43u:crttn43u.o%s} \ -+%{mmcu=attiny87:crttn87.o%s} \ %{mmcu=attiny48:crttn48.o%s} \ %{mmcu=attiny88:crttn88.o%s} \ --%{mmcu=at43usb320|mmcu=avr3:crt43320.o%s} \ --%{mmcu=at43usb355:crt43355.o%s} \ -+%{mmcu=at43usb355|mmcu=avr3:crt43355.o%s} \ ++%{mmcu=attiny87:crttn87.o%s} \ ++%{mmcu=ata6289:crta6289.o%s} \ + %{mmcu=at43usb320|mmcu=avr3:crt43320.o%s} \ + %{mmcu=at43usb355:crt43355.o%s} \ %{mmcu=at76c711:crt76711.o%s} \ %{mmcu=atmega103|mmcu=avr31:crtm103.o%s} \ -+%{mmcu=at43usb320:crt43320.o%s} \ %{mmcu=at90usb162|mmcu=avr35:crtusb162.o%s} \ %{mmcu=at90usb82:crtusb82.o%s} \ ++%{mmcu=atmega8u2:crtm8u2.o%s} \ ++%{mmcu=atmega16u2:crtm16u2.o%s} \ ++%{mmcu=atmega32u2:crtm32u2.o%s} \ +%{mmcu=attiny167:crttn167.o%s} \ -+%{mmcu=attiny327:crttn327.o%s} \ %{mmcu=atmega8|mmcu=avr4:crtm8.o%s} \ %{mmcu=atmega48:crtm48.o%s} \ ++%{mmcu=atmega48a:crtm48a.o%s} \ %{mmcu=atmega48p:crtm48p.o%s} \ -@@ -937,6 +960,7 @@ + %{mmcu=atmega88:crtm88.o%s} \ ++%{mmcu=atmega88a:crtm88a.o%s} \ + %{mmcu=atmega88p:crtm88p.o%s} \ ++%{mmcu=atmega88pa:crtm88pa.o%s} \ + %{mmcu=atmega8515:crtm8515.o%s} \ + %{mmcu=atmega8535:crtm8535.o%s} \ + %{mmcu=at90pwm1:crt90pwm1.o%s} \ +@@ -929,45 +1100,81 @@ %{mmcu=at90pwm2b:crt90pwm2b.o%s} \ %{mmcu=at90pwm3:crt90pwm3.o%s} \ %{mmcu=at90pwm3b:crt90pwm3b.o%s} \ +%{mmcu=at90pwm81:crt90pwm81.o%s} \ %{mmcu=atmega16:crtm16.o%s} \ ++%{mmcu=atmega16a:crtm16a.o%s} \ %{mmcu=atmega161|mmcu=avr5:crtm161.o%s} \ %{mmcu=atmega162:crtm162.o%s} \ -@@ -976,6 +1000,15 @@ + %{mmcu=atmega163:crtm163.o%s} \ ++%{mmcu=atmega164a:crtm164a.o%s} \ + %{mmcu=atmega164p:crtm164p.o%s} \ + %{mmcu=atmega165:crtm165.o%s} \ ++%{mmcu=atmega165a:crtm165a.o%s} \ + %{mmcu=atmega165p:crtm165p.o%s} \ + %{mmcu=atmega168:crtm168.o%s} \ ++%{mmcu=atmega168a:crtm168a.o%s} \ + %{mmcu=atmega168p:crtm168p.o%s} \ + %{mmcu=atmega169:crtm169.o%s} \ ++%{mmcu=atmega169a:crtm169a.o%s} \ + %{mmcu=atmega169p:crtm169p.o%s} \ ++%{mmcu=atmega169pa:crtm169pa.o%s} \ + %{mmcu=atmega32:crtm32.o%s} \ + %{mmcu=atmega323:crtm323.o%s} \ ++%{mmcu=atmega324a:crtm324a.o%s} \ + %{mmcu=atmega324p:crtm324p.o%s} \ ++%{mmcu=atmega324pa:crtm324pa.o%s} \ + %{mmcu=atmega325:crtm325.o%s} \ + %{mmcu=atmega325p:crtm325p.o%s} \ + %{mmcu=atmega3250:crtm3250.o%s} \ + %{mmcu=atmega3250p:crtm3250p.o%s} \ ++%{mmcu=atmega328:crtm328.o%s} \ + %{mmcu=atmega328p:crtm328p.o%s} \ + %{mmcu=atmega329:crtm329.o%s} \ + %{mmcu=atmega329p:crtm329p.o%s} \ ++%{mmcu=atmega329pa:crtm329pa.o%s} \ + %{mmcu=atmega3290:crtm3290.o%s} \ + %{mmcu=atmega3290p:crtm3290p.o%s} \ +-%{mmcu=atmega32hvb:crtm32hvb.o%s} \ + %{mmcu=atmega406:crtm406.o%s} \ + %{mmcu=atmega64:crtm64.o%s} \ + %{mmcu=atmega640:crtm640.o%s} \ + %{mmcu=atmega644:crtm644.o%s} \ ++%{mmcu=atmega644a:crtm644a.o%s} \ + %{mmcu=atmega644p:crtm644p.o%s} \ ++%{mmcu=atmega644pa:crtm644pa.o%s} \ + %{mmcu=atmega645:crtm645.o%s} \ ++%{mmcu=atmega645a:crtm645a.o%s} \ ++%{mmcu=atmega645p:crtm645p.o%s} \ + %{mmcu=atmega6450:crtm6450.o%s} \ ++%{mmcu=atmega6450a:crtm6450a.o%s} \ ++%{mmcu=atmega6450p:crtm6450p.o%s} \ + %{mmcu=atmega649:crtm649.o%s} \ ++%{mmcu=atmega649a:crtm649a.o%s} \ ++%{mmcu=atmega649p:crtm649p.o%s} \ + %{mmcu=atmega6490:crtm6490.o%s} \ ++%{mmcu=atmega6490a:crtm6490a.o%s} \ ++%{mmcu=atmega6490p:crtm6490p.o%s} \ ++%{mmcu=atmega64hve:crtm64hve.o%s} \ + %{mmcu=atmega8hva:crtm8hva.o%s} \ + %{mmcu=atmega16hva:crtm16hva.o%s} \ ++%{mmcu=atmega16hva2:crtm16hva2.o%s} \ ++%{mmcu=atmega16hvb:crtm16hvb.o%s} \ ++%{mmcu=atmega32hvb:crtm32hvb.o%s} \ ++%{mmcu=atmega4hvd:crtm4hvd.o%s} \ ++%{mmcu=atmega8hvd:crtm8hvd.o%s} \ + %{mmcu=at90can32:crtcan32.o%s} \ %{mmcu=at90can64:crtcan64.o%s} \ %{mmcu=at90pwm216:crt90pwm216.o%s} \ %{mmcu=at90pwm316:crt90pwm316.o%s} \ -+%{mmcu=atmega32c1:crtm32c1.o%s} \ -+%{mmcu=atmega64c1:crtm64c1.o%s} \ ++%{mmcu=atmega16c1:crtm16c1.o%s} \ +%{mmcu=atmega16m1:crtm16m1.o%s} \ -+%{mmcu=atmega32m1:crtm32m1.o%s} \ -+%{mmcu=atmega64m1:crtm64m1.o%s} \ +%{mmcu=atmega16u4:crtm16u4.o%s} \ ++%{mmcu=atmega32c1:crtm32c1.o%s} \ ++%{mmcu=atmega32m1:crtm32m1.o%s} \ +%{mmcu=atmega32u4:crtm32u4.o%s} \ +%{mmcu=atmega32u6:crtm32u6.o%s} \ ++%{mmcu=atmega64c1:crtm64c1.o%s} \ ++%{mmcu=atmega64m1:crtm64m1.o%s} \ +%{mmcu=at90scr100:crt90scr100.o%s} \ %{mmcu=at90usb646:crtusb646.o%s} \ %{mmcu=at90usb647:crtusb647.o%s} \ %{mmcu=at94k:crtat94k.o%s} \ -@@ -983,11 +1016,15 @@ +@@ -975,11 +1182,15 @@ %{mmcu=atmega1280:crtm1280.o%s} \ %{mmcu=atmega1281:crtm1281.o%s} \ %{mmcu=atmega1284p:crtm1284p.o%s} \ -%{mmcu=atmega2560:crtm2560.o%s} \ -%{mmcu=atmega2561:crtm2561.o%s} \ - %{mmcu=at90can128:crtcan128.o%s} \ +%{mmcu=atmega128rfa1:crtm128rfa1.o%s} \ + %{mmcu=at90can128:crtcan128.o%s} \ %{mmcu=at90usb1286:crtusb1286.o%s} \ -%{mmcu=at90usb1287:crtusb1287.o%s}" +%{mmcu=at90usb1287:crtusb1287.o%s} \ @@ -272,3 +551,162 @@ #define EXTRA_SPECS {"crt_binutils", CRT_BINUTILS_SPECS}, +--- ./gcc/config/avr/t-avr~ 2010-03-05 17:15:38.000000000 +0100 ++++ ./gcc/config/avr/t-avr 2010-03-05 17:20:12.000000000 +0100 +@@ -42,19 +42,29 @@ + + # The many avr2 matches are not listed here - this is the default. + MULTILIB_MATCHES = \ ++ mmcu?avr25=mmcu?ata6289 \ + mmcu?avr25=mmcu?attiny13 \ ++ mmcu?avr25=mmcu?attiny13a \ + mmcu?avr25=mmcu?attiny2313 \ ++ mmcu?avr25=mmcu?attiny2313a \ + mmcu?avr25=mmcu?attiny24 \ +- mmcu?avr25=mmcu?attiny44 \ +- mmcu?avr25=mmcu?attiny84 \ ++ mmcu?avr25=mmcu?attiny24a \ + mmcu?avr25=mmcu?attiny25 \ +- mmcu?avr25=mmcu?attiny45 \ +- mmcu?avr25=mmcu?attiny85 \ + mmcu?avr25=mmcu?attiny261 \ +- mmcu?avr25=mmcu?attiny461 \ +- mmcu?avr25=mmcu?attiny861 \ ++ mmcu?avr25=mmcu?attiny261a \ ++ mmcu?avr25=mmcu?attiny4313 \ + mmcu?avr25=mmcu?attiny43u \ ++ mmcu?avr25=mmcu?attiny44 \ ++ mmcu?avr25=mmcu?attiny44a \ ++ mmcu?avr25=mmcu?attiny45 \ ++ mmcu?avr25=mmcu?attiny461 \ ++ mmcu?avr25=mmcu?attiny461a \ + mmcu?avr25=mmcu?attiny48 \ ++ mmcu?avr25=mmcu?attiny84 \ ++ mmcu?avr25=mmcu?attiny85 \ ++ mmcu?avr25=mmcu?attiny861 \ ++ mmcu?avr25=mmcu?attiny861a \ ++ mmcu?avr25=mmcu?attiny87 \ + mmcu?avr25=mmcu?attiny88 \ + mmcu?avr25=mmcu?at86rf401 \ + mmcu?avr3=mmcu?at43usb320 \ +@@ -63,57 +73,100 @@ + mmcu?avr31=mmcu?atmega103 \ + mmcu?avr35=mmcu?at90usb82 \ + mmcu?avr35=mmcu?at90usb162 \ ++ mmcu?avr35=mmcu?atmega8u2 \ ++ mmcu?avr35=mmcu?atmega16u2 \ ++ mmcu?avr35=mmcu?atmega32u2 \ ++ mmcu?avr35=mmcu?attiny167 \ + mmcu?avr4=mmcu?atmega48 \ ++ mmcu?avr4=mmcu?atmega48a \ + mmcu?avr4=mmcu?atmega48p \ + mmcu?avr4=mmcu?atmega8 \ + mmcu?avr4=mmcu?atmega8515 \ + mmcu?avr4=mmcu?atmega8535 \ + mmcu?avr4=mmcu?atmega88 \ ++ mmcu?avr4=mmcu?atmega88a \ + mmcu?avr4=mmcu?atmega88p \ ++ mmcu?avr4=mmcu?atmega88pa \ + mmcu?avr4=mmcu?atmega8hva \ ++ mmcu?avr4=mmcu?atmega4hvd \ ++ mmcu?avr4=mmcu?atmega8hvd \ + mmcu?avr4=mmcu?at90pwm1 \ + mmcu?avr4=mmcu?at90pwm2 \ + mmcu?avr4=mmcu?at90pwm2b \ + mmcu?avr4=mmcu?at90pwm3 \ + mmcu?avr4=mmcu?at90pwm3b \ ++ mmcu?avr4=mmcu?at90pwm81 \ + mmcu?avr5=mmcu?atmega16 \ ++ mmcu?avr5=mmcu?atmega16a \ + mmcu?avr5=mmcu?atmega161 \ + mmcu?avr5=mmcu?atmega162 \ + mmcu?avr5=mmcu?atmega163 \ ++ mmcu?avr5=mmcu?atmega164a \ + mmcu?avr5=mmcu?atmega164p \ + mmcu?avr5=mmcu?atmega165 \ ++ mmcu?avr5=mmcu?atmega165a \ + mmcu?avr5=mmcu?atmega165p \ + mmcu?avr5=mmcu?atmega168 \ ++ mmcu?avr5=mmcu?atmega168a \ + mmcu?avr5=mmcu?atmega168p \ + mmcu?avr5=mmcu?atmega169 \ ++ mmcu?avr5=mmcu?atmega169a \ + mmcu?avr5=mmcu?atmega169p \ ++ mmcu?avr5=mmcu?atmega169pa \ + mmcu?avr5=mmcu?atmega32 \ + mmcu?avr5=mmcu?atmega323 \ ++ mmcu?avr5=mmcu?atmega324a \ + mmcu?avr5=mmcu?atmega324p \ ++ mmcu?avr5=mmcu?atmega324pa \ + mmcu?avr5=mmcu?atmega325 \ + mmcu?avr5=mmcu?atmega325p \ + mmcu?avr5=mmcu?atmega3250 \ + mmcu?avr5=mmcu?atmega3250p \ ++ mmcu?avr5=mmcu?atmega328 \ + mmcu?avr5=mmcu?atmega328p \ + mmcu?avr5=mmcu?atmega329 \ + mmcu?avr5=mmcu?atmega329p \ ++ mmcu?avr5=mmcu?atmega329pa \ + mmcu?avr5=mmcu?atmega3290 \ + mmcu?avr5=mmcu?atmega3290p \ +- mmcu?avr5=mmcu?atmega32hvb \ + mmcu?avr5=mmcu?atmega406 \ + mmcu?avr5=mmcu?atmega64 \ + mmcu?avr5=mmcu?atmega640 \ + mmcu?avr5=mmcu?atmega644 \ ++ mmcu?avr5=mmcu?atmega644a \ + mmcu?avr5=mmcu?atmega644p \ ++ mmcu?avr5=mmcu?atmega644pa \ + mmcu?avr5=mmcu?atmega645 \ ++ mmcu?avr5=mmcu?atmega645a \ ++ mmcu?avr5=mmcu?atmega645p \ + mmcu?avr5=mmcu?atmega6450 \ ++ mmcu?avr5=mmcu?atmega6450a \ ++ mmcu?avr5=mmcu?atmega6450p \ + mmcu?avr5=mmcu?atmega649 \ ++ mmcu?avr5=mmcu?atmega649a \ ++ mmcu?avr5=mmcu?atmega649p \ + mmcu?avr5=mmcu?atmega6490 \ ++ mmcu?avr5=mmcu?atmega6490a \ ++ mmcu?avr5=mmcu?atmega6490p \ + mmcu?avr5=mmcu?atmega16hva \ ++ mmcu?avr5=mmcu?atmega16hva2 \ ++ mmcu?avr5=mmcu?atmega16hvb \ ++ mmcu?avr5=mmcu?atmega32hvb \ + mmcu?avr5=mmcu?at90can32 \ + mmcu?avr5=mmcu?at90can64 \ + mmcu?avr5=mmcu?at90pwm216 \ + mmcu?avr5=mmcu?at90pwm316 \ ++ mmcu?avr5=mmcu?atmega16c1 \ ++ mmcu?avr5=mmcu?atmega16m1 \ ++ mmcu?avr5=mmcu?atmega16u4 \ ++ mmcu?avr5=mmcu?atmega32c1 \ ++ mmcu?avr5=mmcu?atmega32m1 \ ++ mmcu?avr5=mmcu?atmega32u4 \ ++ mmcu?avr5=mmcu?atmega32u6 \ ++ mmcu?avr5=mmcu?atmega64c1 \ ++ mmcu?avr5=mmcu?atmega64m1 \ ++ mmcu?avr5=mmcu?atmega64hve \ ++ mmcu?avr5=mmcu?at90scr100 \ + mmcu?avr5=mmcu?at90usb646 \ + mmcu?avr5=mmcu?at90usb647 \ + mmcu?avr5=mmcu?at94k \ +@@ -121,12 +174,15 @@ + mmcu?avr51=mmcu?atmega1280 \ + mmcu?avr51=mmcu?atmega1281 \ + mmcu?avr51=mmcu?atmega1284p \ ++ mmcu?avr51=mmcu?atmega128rfa1 \ + mmcu?avr51=mmcu?at90can128 \ + mmcu?avr51=mmcu?at90usb1286 \ + mmcu?avr51=mmcu?at90usb1287 \ +- mmcu?avr6=mmcu?atmega2560 \ +- mmcu?avr6=mmcu?atmega2561 +- ++ mmcu?avr51=mmcu?m3000f \ ++ mmcu?avr51=mmcu?m3000s \ ++ mmcu?avr51=mmcu?m3001b \ ++ mmcu?avr6=mmcu?atmega2560 \ ++ mmcu?avr6=mmcu?atmega2561 + MULTILIB_EXCEPTIONS = + + LIBGCC = stmp-multilib diff --git a/devel/avr-gcc/files/patch-param-inline-call-cost b/devel/avr-gcc/files/patch-param-inline-call-cost new file mode 100644 index 000000000000..257e3a3d4f53 --- /dev/null +++ b/devel/avr-gcc/files/patch-param-inline-call-cost @@ -0,0 +1,20 @@ +--- gcc/config/avr/avr.c.orig 2010-03-05 17:21:19.000000000 +0100 ++++ gcc/config/avr/avr.c 2010-03-05 17:22:02.000000000 +0100 +@@ -46,6 +46,7 @@ + #include "tm_p.h" + #include "target.h" + #include "target-def.h" ++#include "params.h" + #include "df.h" + + /* Maximal allowed offset for an address in the LD command */ +@@ -419,6 +420,9 @@ + + flag_delete_null_pointer_checks = 0; + ++ if (!PARAM_SET_P (PARAM_INLINE_CALL_COST)) ++ set_param_value ("inline-call-cost", 5); ++ + for (t = avr_mcu_types; t->name; t++) + if (strcmp (t->name, avr_mcu_name) == 0) + break; diff --git a/devel/avr-gcc/files/patch-xmega b/devel/avr-gcc/files/patch-xmega index dea2f61001c6..2a9af30fdfdc 100644 --- a/devel/avr-gcc/files/patch-xmega +++ b/devel/avr-gcc/files/patch-xmega @@ -1,7 +1,6 @@ -diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c ---- ../gcc-4.3.2.orig/gcc/config/avr/avr.c 2009-08-11 14:17:06.000000000 +0200 -+++ ./gcc/config/avr/avr.c 2009-08-11 14:38:44.000000000 +0200 -@@ -51,6 +51,7 @@ +--- ./gcc/config/avr/avr.c.orig 2010-03-08 12:55:13.000000000 +0100 ++++ ./gcc/config/avr/avr.c 2010-03-08 12:55:36.000000000 +0100 +@@ -55,6 +55,7 @@ static int avr_naked_function_p (tree); static int interrupt_function_p (tree); static int signal_function_p (tree); @@ -9,7 +8,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c static int avr_OS_task_function_p (tree); static int avr_regs_to_save (HARD_REG_SET *); static int sequent_regs_live (void); -@@ -118,17 +119,24 @@ +@@ -131,17 +132,24 @@ int avr_have_movw_lpmx_p = 0; static const struct base_arch_s avr_arch_types[] = { @@ -45,7 +44,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c }; /* These names are used as the index into the avr_arch_types[] table -@@ -146,7 +154,14 @@ +@@ -159,7 +167,14 @@ ARCH_AVR4, ARCH_AVR5, ARCH_AVR51, @@ -61,34 +60,43 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c }; struct mcu_type_s { -@@ -297,6 +312,26 @@ +@@ -349,6 +364,35 @@ { "avr6", ARCH_AVR6, NULL }, { "atmega2560", ARCH_AVR6, "__AVR_ATmega2560__" }, { "atmega2561", ARCH_AVR6, "__AVR_ATmega2561__" }, + /* Enhanced, == 256K. */ + /* Xmega, <= 8K FLASH. */ + /* Xmega, > 8K, <= 64K FLASH, <= 64K RAM. */ ++ { "avrxmega2", ARCH_AVRXMEGA2, NULL }, ++ { "atxmega16a4", ARCH_AVRXMEGA2, "__AVR_ATxmega16A4__" }, ++ { "atxmega16d4", ARCH_AVRXMEGA2, "__AVR_ATxmega16D4__" }, ++ { "atxmega32d4", ARCH_AVRXMEGA2, "__AVR_ATxmega32D4__" }, + /* Xmega, > 8K, <= 64K FLASH, > 64K RAM. */ + { "avrxmega3", ARCH_AVRXMEGA3, NULL }, + { "atxmega32a4", ARCH_AVRXMEGA3, "__AVR_ATxmega32A4__" }, + /* Xmega, > 64K, <= 128K FLASH, <= 64K RAM. */ + { "avrxmega4", ARCH_AVRXMEGA4, NULL }, + { "atxmega64a3", ARCH_AVRXMEGA4, "__AVR_ATxmega64A3__" }, ++ { "atxmega64d3", ARCH_AVRXMEGA4, "__AVR_ATxmega64D3__" }, + /* Xmega, > 64K, <= 128K FLASH, > 64K RAM. */ + { "avrxmega5", ARCH_AVRXMEGA5, NULL }, + { "atxmega64a1", ARCH_AVRXMEGA5, "__AVR_ATxmega64A1__" }, + /* Xmega, > 128K, <= 256K FLASH, <= 64K RAM. */ + { "avrxmega6", ARCH_AVRXMEGA6, NULL }, + { "atxmega128a3", ARCH_AVRXMEGA6, "__AVR_ATxmega128A3__" }, ++ { "atxmega128d3", ARCH_AVRXMEGA6, "__AVR_ATxmega128D3__" }, ++ { "atxmega192a3", ARCH_AVRXMEGA6, "__AVR_ATxmega192A3__" }, ++ { "atxmega192d3", ARCH_AVRXMEGA6, "__AVR_ATxmega192D3__" }, + { "atxmega256a3", ARCH_AVRXMEGA6, "__AVR_ATxmega256A3__" }, + { "atxmega256a3b",ARCH_AVRXMEGA6, "__AVR_ATxmega256A3B__" }, ++ { "atxmega256d3", ARCH_AVRXMEGA6, "__AVR_ATxmega256D3__" }, + /* Xmega, > 128K, <= 256K FLASH, > 64K RAM. */ + { "avrxmega7", ARCH_AVRXMEGA7, NULL }, + { "atxmega128a1", ARCH_AVRXMEGA7, "__AVR_ATxmega128A1__" }, /* Assembler only. */ { "avr1", ARCH_AVR1, NULL }, { "at90s1200", ARCH_AVR1, "__AVR_AT90S1200__" }, -@@ -470,6 +505,21 @@ +@@ -531,6 +575,21 @@ return a != NULL_TREE; } @@ -110,7 +118,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c /* Return nonzero if FUNC is a OS_task function. */ static int -@@ -629,6 +679,7 @@ +@@ -690,6 +749,7 @@ cfun->machine->is_naked = avr_naked_function_p (current_function_decl); cfun->machine->is_interrupt = interrupt_function_p (current_function_decl); cfun->machine->is_signal = signal_function_p (current_function_decl); @@ -118,7 +126,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c cfun->machine->is_OS_task = avr_OS_task_function_p (current_function_decl); /* Prologue: naked. */ -@@ -664,20 +715,78 @@ +@@ -725,17 +785,48 @@ /* Push SREG. */ insn = emit_move_insn (tmp_reg_rtx, @@ -138,11 +146,6 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c + insn = emit_move_insn (pushbyte, tmp_reg_rtx); + RTX_FRAME_RELATED_P (insn) = 1; + -+ /* Set RAMPD to 0. */ -+ insn = emit_move_insn (gen_rtx_MEM (QImode, GEN_INT (AVR_RAMPD_ADDR)), -+ const0_rtx); -+ RTX_FRAME_RELATED_P (insn) = 1; -+ + /* Push RAMPX. */ + if (TEST_HARD_REG_BIT (set, REG_X) && TEST_HARD_REG_BIT (set, REG_X + 1)) + { @@ -151,11 +154,6 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c + RTX_FRAME_RELATED_P (insn) = 1; + insn = emit_move_insn (pushbyte, tmp_reg_rtx); + RTX_FRAME_RELATED_P (insn) = 1; -+ -+ /* Set RAMPX to 0. */ -+ insn = emit_move_insn (gen_rtx_MEM (QImode, GEN_INT (AVR_RAMPX_ADDR)), -+ const0_rtx); -+ RTX_FRAME_RELATED_P (insn) = 1; + } + + /* Push RAMPY. */ @@ -166,11 +164,6 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c + RTX_FRAME_RELATED_P (insn) = 1; + insn = emit_move_insn (pushbyte, tmp_reg_rtx); + RTX_FRAME_RELATED_P (insn) = 1; -+ -+ /* Set RAMPY to 0. */ -+ insn = emit_move_insn (gen_rtx_MEM (QImode, GEN_INT (AVR_RAMPY_ADDR)), -+ const0_rtx); -+ RTX_FRAME_RELATED_P (insn) = 1; + } + } + @@ -184,22 +177,55 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c RTX_FRAME_RELATED_P (insn) = 1; insn = emit_move_insn (pushbyte, tmp_reg_rtx); RTX_FRAME_RELATED_P (insn) = 1; +@@ -744,9 +835,46 @@ + /* Clear zero reg. */ + insn = emit_move_insn (zero_reg_rtx, const0_rtx); + RTX_FRAME_RELATED_P (insn) = 1; +- ++ + /* Prevent any attempt to delete the setting of ZERO_REG! */ + emit_insn (gen_rtx_USE (VOIDmode, zero_reg_rtx)); + -+ /* -+ Clearing the RAMPZ register is needed only if it is used for data -+ space access. -+ */ -+ if (AVR_HAVE_RAMPX_Y_D) ++ /* ++ Clear RAMP? registers if used for data access in the interrupt/signal ++ context. Do this after the zero register has been explictly cleared. ++ */ ++ if (AVR_HAVE_RAMPX_Y_D) ++ { ++ /* Set RAMPD to 0. */ ++ insn = emit_move_insn (gen_rtx_MEM (QImode, GEN_INT (AVR_RAMPD_ADDR)), ++ const0_rtx); ++ RTX_FRAME_RELATED_P (insn) = 1; ++ ++ if (TEST_HARD_REG_BIT (set, REG_X) && TEST_HARD_REG_BIT (set, REG_X + 1)) ++ { ++ /* Set RAMPX to 0. */ ++ insn = emit_move_insn (gen_rtx_MEM (QImode, GEN_INT (AVR_RAMPX_ADDR)), ++ const0_rtx); ++ RTX_FRAME_RELATED_P (insn) = 1; ++ } ++ ++ if (TEST_HARD_REG_BIT (set, REG_Y) && TEST_HARD_REG_BIT (set, REG_Y + 1)) ++ { ++ /* Set RAMPY to 0. */ ++ insn = emit_move_insn (gen_rtx_MEM (QImode, GEN_INT (AVR_RAMPY_ADDR)), ++ const0_rtx); ++ RTX_FRAME_RELATED_P (insn) = 1; ++ } ++ ++ if(AVR_HAVE_RAMPZ ++ && (TEST_HARD_REG_BIT (set, REG_Z) && TEST_HARD_REG_BIT (set, REG_Z + 1))) + { + /* Set RAMPZ to 0. */ + insn = emit_move_insn (gen_rtx_MEM (QImode, GEN_INT (AVR_RAMPZ_ADDR)), -+ const0_rtx); ++ const0_rtx); + RTX_FRAME_RELATED_P (insn) = 1; + } - } - - /* Clear zero reg. */ -@@ -949,14 +1058,39 @@ ++ } + } + if (minimize && (frame_pointer_needed + || (AVR_2_BYTE_PC && live_seq > 6) +@@ -1010,14 +1138,39 @@ && (TEST_HARD_REG_BIT (set, REG_Z) && TEST_HARD_REG_BIT (set, REG_Z + 1))) { emit_insn (gen_popqi (tmp_reg_rtx)); @@ -241,7 +267,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c tmp_reg_rtx); /* Restore tmp REG. */ -@@ -1725,8 +1859,9 @@ +@@ -1786,8 +1939,9 @@ } /* Use simple load of stack pointer if no interrupts are used or inside main or signal function prologue where they disabled. */ @@ -253,7 +279,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c && cfun->machine->is_signal && prologue_epilogue_contains (insn))) { -@@ -1735,7 +1870,8 @@ +@@ -1796,7 +1950,8 @@ AS2 (out,__SP_L__,%A1)); } /* In interrupt prolog we know interrupts are enabled. */ @@ -263,7 +289,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c && cfun->machine->is_interrupt && prologue_epilogue_contains (insn)) { -@@ -1745,12 +1881,21 @@ +@@ -1806,12 +1961,21 @@ "sei" CR_TAB AS2 (out,__SP_L__,%A1)); } @@ -291,7 +317,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c } else if (test_hard_reg_class (STACK_REG, src)) { -@@ -1885,7 +2030,7 @@ +@@ -1946,7 +2110,7 @@ if (CONSTANT_ADDRESS_P (x)) { @@ -300,7 +326,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c { *l = 1; return AS2 (in,%0,__SREG__); -@@ -1893,7 +2038,8 @@ +@@ -1954,7 +2118,8 @@ if (avr_io_address_p (x, 1)) { *l = 1; @@ -310,7 +336,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c } *l = 2; return AS2 (lds,%0,%1); -@@ -2081,8 +2227,9 @@ +@@ -2142,8 +2307,9 @@ if (avr_io_address_p (base, 2)) { *l = 2; @@ -322,7 +348,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c } *l = 4; return (AS2 (lds,%A0,%A1) CR_TAB -@@ -2573,7 +2720,7 @@ +@@ -2634,7 +2800,7 @@ if (CONSTANT_ADDRESS_P (x)) { @@ -331,7 +357,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c { *l = 1; return AS2 (out,__SREG__,%1); -@@ -2581,7 +2728,8 @@ +@@ -2642,7 +2808,8 @@ if (avr_io_address_p (x, 1)) { *l = 1; @@ -341,7 +367,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c } *l = 2; return AS2 (sts,%0,%1); -@@ -2660,11 +2808,20 @@ +@@ -2721,11 +2888,20 @@ if (avr_io_address_p (base, 2)) { *l = 2; @@ -366,7 +392,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c } if (reg_base > 0) { -@@ -2679,11 +2836,20 @@ +@@ -2740,11 +2916,20 @@ AS2 (adiw,r26,1) CR_TAB AS2 (st,X,__tmp_reg__)); else @@ -392,7 +418,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c } else { -@@ -2691,14 +2857,27 @@ +@@ -2752,14 +2937,27 @@ return *l=2, (AS2 (st,X+,%A1) CR_TAB AS2 (st,X,%B1)); else @@ -425,7 +451,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c } else if (GET_CODE (base) == PLUS) { -@@ -2709,48 +2888,104 @@ +@@ -2770,48 +2968,104 @@ if (reg_base != REG_Y) fatal_insn ("incorrect insn:",insn); @@ -559,7 +585,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c { if (REGNO (XEXP (base, 0)) == REG_X) { -@@ -2771,7 +3006,7 @@ +@@ -2832,7 +3086,7 @@ *l = 2; return (AS2 (st,%0,%A1) CR_TAB @@ -568,7 +594,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c } fatal_insn ("unknown move insn:",insn); return ""; -@@ -4651,6 +4886,7 @@ +@@ -4712,6 +4966,7 @@ { "progmem", 0, 0, false, false, false, avr_handle_progmem_attribute }, { "signal", 0, 0, true, false, false, avr_handle_fndecl_attribute }, { "interrupt", 0, 0, true, false, false, avr_handle_fndecl_attribute }, @@ -576,7 +602,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c { "naked", 0, 0, false, true, true, avr_handle_fntype_attribute }, { "OS_task", 0, 0, false, true, true, avr_handle_fntype_attribute }, { NULL, 0, 0, false, false, false, NULL } -@@ -4739,6 +4975,14 @@ +@@ -4800,6 +5055,14 @@ func_name); } } @@ -591,7 +617,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c } return NULL_TREE; -@@ -4864,7 +5108,8 @@ +@@ -4994,7 +5257,8 @@ /* fprintf (asm_out_file, "\t.arch %s\n", avr_mcu_name);*/ fputs ("__SREG__ = 0x3f\n" "__SP_H__ = 0x3e\n" @@ -601,7 +627,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c fputs ("__tmp_reg__ = 0\n" "__zero_reg__ = 1\n", asm_out_file); -@@ -5754,15 +5999,18 @@ +@@ -5888,15 +6152,18 @@ return !(regno & 1); } @@ -625,7 +651,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c } const char * -@@ -5940,16 +6188,17 @@ +@@ -6074,16 +6341,17 @@ if (GET_CODE (operands[1]) == CONST_INT) { @@ -647,9 +673,8 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.c ./gcc/config/avr/avr.c if (comp == EQ) output_asm_insn (AS2 (sbrs,__tmp_reg__,%2), operands); else -diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.h ./gcc/config/avr/avr.h ---- ../gcc-4.3.2.orig/gcc/config/avr/avr.h 2009-08-11 14:17:06.000000000 +0200 -+++ ./gcc/config/avr/avr.h 2009-08-11 14:40:01.000000000 +0200 +--- ./gcc/config/avr/avr.h.orig 2010-03-08 12:55:09.000000000 +0100 ++++ ./gcc/config/avr/avr.h 2010-03-08 12:55:36.000000000 +0100 @@ -44,8 +44,11 @@ /* Core have 'EICALL' and 'EIJMP' instructions. */ int have_eijmp_eicall; @@ -716,37 +741,52 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.h ./gcc/config/avr/avr.h #define TARGET_VERSION fprintf (stderr, " (GNU assembler syntax)"); #define OVERRIDE_OPTIONS avr_override_options () -@@ -848,6 +878,12 @@ +@@ -935,6 +965,20 @@ mmcu=m3000*|\ mmcu=m3001*: -m avr5}\ %{mmcu=atmega256*:-m avr6}\ ++%{mmcu=atxmega16a4|\ ++ mmcu=atxmega16d4|\ ++ mmcu=atxmega32d4:-m avrxmega2}\ +%{mmcu=atxmega32a4:-m avrxmega3} \ -+%{mmcu=atxmega64a3:-m avrxmega4} \ ++%{mmcu=atxmega64a3|\ ++ mmcu=atxmega64d3:-m avrxmega4} \ +%{mmcu=atxmega64a1:-m avrxmega5} \ -+%{mmcu=atxmega128a3| \ -+ mmcu=atxmega256a3*:-m avrxmega6} \ ++%{mmcu=atxmega128a3|\ ++ mmcu=atxmega128d3|\ ++ mmcu=atxmega192a3|\ ++ mmcu=atxmega192d3|\ ++ mmcu=atxmega256a3*|\ ++ mmcu=atxmega256d3:-m avrxmega6} \ +%{mmcu=atxmega128a1:-m avrxmega7} \ - %{mmcu=atmega324*|\ - mmcu=atmega325*|\ - mmcu=atmega328p|\ -@@ -1024,7 +1060,15 @@ + %{mmcu=atmega324a|\ + mmcu=atmega324p|\ + mmcu=atmega324pa|\ +@@ -1190,7 +1234,22 @@ %{mmcu=m3000s:crtm3000s.o%s} \ %{mmcu=m3001b:crtm3001b.o%s} \ %{mmcu=atmega2560|mmcu=avr6:crtm2560.o%s} \ -%{mmcu=atmega2561:crtm2561.o%s}" +%{mmcu=atmega2561:crtm2561.o%s} \ ++%{mmcu=avrxmega2|mmcu=atxmega32d4:crtx32d4.o%s} \ ++%{mmcu=atxmega16a4:crtx16a4.o%s} \ ++%{mmcu=atxmega16d4:crtx16d4.o%s} \ +%{mmcu=atxmega3|mmcu=atxmega32a4:crtx32a4.o%s} \ +%{mmcu=atxmega4|mmcu=atxmega64a3:crtx64a3.o%s} \ ++%{mmcu=atxmega64d3:crtx64d3.o%s} \ +%{mmcu=atxmega5|mmcu=atxmega64a1:crtx64a1.o%s} \ +%{mmcu=atxmega6|mmcu=atxmega128a3:crtx128a3.o%s} \ ++%{mmcu=atxmega128d3:crtx128d3.o%s}\ ++%{mmcu=atxmega192a3:crtx192a3.o%s}\ ++%{mmcu=atxmega192d3:crtx192d3.o%s}\ +%{mmcu=atxmega256a3:crtx256a3.o%s} \ +%{mmcu=atxmega256a3b:crtx256a3b.o%s} \ ++%{mmcu=atxmega256d3:crtx256d3.o%s} \ +%{mmcu=atxmega7|mmcu=atxmega128a1:crtx128a1.o%s}" -+ #define EXTRA_SPECS {"crt_binutils", CRT_BINUTILS_SPECS}, -@@ -1086,8 +1130,12 @@ +@@ -1252,8 +1311,12 @@ /* 'true' - if current function is a signal function as specified by the "signal" attribute. */ int is_signal; @@ -760,9 +800,45 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.h ./gcc/config/avr/avr.h as specified by the "OS_task" attribute. */ int is_OS_task; }; -diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.md ./gcc/config/avr/avr.md ---- ../gcc-4.3.2.orig/gcc/config/avr/avr.md 2009-08-11 14:16:22.000000000 +0200 -+++ ./gcc/config/avr/avr.md 2009-08-11 14:34:10.000000000 +0200 +--- ./gcc/config/avr/t-avr.orig 2010-03-08 12:55:09.000000000 +0100 ++++ ./gcc/config/avr/t-avr 2010-03-08 12:55:36.000000000 +0100 +@@ -37,8 +37,8 @@ + + FPBIT = fp-bit.c + +-MULTILIB_OPTIONS = mmcu=avr2/mmcu=avr25/mmcu=avr3/mmcu=avr31/mmcu=avr35/mmcu=avr4/mmcu=avr5/mmcu=avr51/mmcu=avr6 +-MULTILIB_DIRNAMES = avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6 ++MULTILIB_OPTIONS = mmcu=avr2/mmcu=avr25/mmcu=avr3/mmcu=avr31/mmcu=avr35/mmcu=avr4/mmcu=avr5/mmcu=avr51/mmcu=avr6/mmcu=avrxmega2/mmcu=avrxmega3/mmcu=avrxmega4/mmcu=avrxmega5/mmcu=avrxmega6/mmcu=avrxmega7 ++MULTILIB_DIRNAMES = avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6 avrxmega2 avrxmega3 avrxmega4 avrxmega5 avrxmega6 avrxmega7 + + # The many avr2 matches are not listed here - this is the default. + MULTILIB_MATCHES = \ +@@ -182,7 +182,22 @@ + mmcu?avr51=mmcu?m3000s \ + mmcu?avr51=mmcu?m3001b \ + mmcu?avr6=mmcu?atmega2560 \ +- mmcu?avr6=mmcu?atmega2561 ++ mmcu?avr6=mmcu?atmega2561 \ ++ mmcu?avrxmega2=mmcu?atxmega16a4 \ ++ mmcu?avrxmega2=mmcu?atxmega16d4 \ ++ mmcu?avrxmega2=mmcu?atxmega32d4 \ ++ mmcu?avrxmega3=mmcu?atxmega32a4 \ ++ mmcu?avrxmega4=mmcu?atxmega64a3 \ ++ mmcu?avrxmega4=mmcu?atxmega64d3 \ ++ mmcu?avrxmega5=mmcu?atxmega64a1 \ ++ mmcu?avrxmega6=mmcu?atxmega128a3 \ ++ mmcu?avrxmega6=mmcu?atxmega128d3 \ ++ mmcu?avrxmega6=mmcu?atxmega192a3 \ ++ mmcu?avrxmega6=mmcu?atxmega192d3 \ ++ mmcu?avrxmega6=mmcu?atxmega256a3 \ ++ mmcu?avrxmega6=mmcu?atxmega256a3b \ ++ mmcu?avrxmega6=mmcu?atxmega256d3 \ ++ mmcu?avrxmega7=mmcu?atxmega128a1 + MULTILIB_EXCEPTIONS = + + LIBGCC = stmp-multilib +--- ./gcc/config/avr/avr.md.orig 2010-03-08 12:54:57.000000000 +0100 ++++ ./gcc/config/avr/avr.md 2010-03-08 12:55:36.000000000 +0100 @@ -47,9 +47,6 @@ (TMP_REGNO 0) ; temporary register r0 (ZERO_REGNO 1) ; zero register r1 @@ -772,8 +848,8 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.md ./gcc/config/avr/avr.md - (UNSPEC_STRLEN 0) (UNSPEC_INDEX_JMP 1) - (UNSPEC_SEI 2) -@@ -2669,7 +2666,8 @@ + (UNSPEC_SWAP 2) +@@ -2677,7 +2674,8 @@ "(optimize > 0)" { operands[2] = GEN_INT (exact_log2 (~INTVAL (operands[1]) & 0xff)); @@ -783,7 +859,7 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.md ./gcc/config/avr/avr.md } [(set_attr "length" "1") (set_attr "cc" "none")]) -@@ -2681,7 +2679,8 @@ +@@ -2689,7 +2687,8 @@ "(optimize > 0)" { operands[2] = GEN_INT (exact_log2 (INTVAL (operands[1]) & 0xff)); @@ -793,10 +869,9 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/avr.md ./gcc/config/avr/avr.md } [(set_attr "length" "1") (set_attr "cc" "none")]) -diff -ur ../gcc-4.3.2.orig/gcc/config/avr/predicates.md ./gcc/config/avr/predicates.md ---- ../gcc-4.3.2.orig/gcc/config/avr/predicates.md 2007-08-02 12:49:31.000000000 +0200 -+++ ./gcc/config/avr/predicates.md 2009-08-11 14:34:10.000000000 +0200 -@@ -45,12 +45,16 @@ +--- ./gcc/config/avr/predicates.md.orig 2010-03-08 12:54:57.000000000 +0100 ++++ ./gcc/config/avr/predicates.md 2010-03-08 12:55:36.000000000 +0100 +@@ -50,12 +50,16 @@ ;; Return true if OP is a valid address for lower half of I/O space. (define_predicate "low_io_address_operand" (and (match_code "const_int") @@ -815,34 +890,3 @@ diff -ur ../gcc-4.3.2.orig/gcc/config/avr/predicates.md ./gcc/config/avr/predica ;; Return 1 if OP is the zero constant for MODE. (define_predicate "const0_operand" -diff -ur ../gcc-4.3.2.orig/gcc/config/avr/t-avr ./gcc/config/avr/t-avr ---- ../gcc-4.3.2.orig/gcc/config/avr/t-avr 2009-08-11 14:17:06.000000000 +0200 -+++ ./gcc/config/avr/t-avr 2009-08-11 14:39:16.000000000 +0200 -@@ -37,8 +37,8 @@ - - FPBIT = fp-bit.c - --MULTILIB_OPTIONS = mmcu=avr2/mmcu=avr25/mmcu=avr3/mmcu=avr31/mmcu=avr35/mmcu=avr4/mmcu=avr5/mmcu=avr51/mmcu=avr6 --MULTILIB_DIRNAMES = avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6 -+MULTILIB_OPTIONS = mmcu=avr2/mmcu=avr25/mmcu=avr3/mmcu=avr31/mmcu=avr35/mmcu=avr4/mmcu=avr5/mmcu=avr51/mmcu=avr6/mmcu=avrxmega3/mmcu=avrxmega4/mmcu=avrxmega5/mmcu=avrxmega6/mmcu=avrxmega7 -+MULTILIB_DIRNAMES = avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6 avrxmega3 avrxmega4 avrxmega5 avrxmega6 avrxmega7 - - # The many avr2 matches are not listed here - this is the default. - MULTILIB_MATCHES = \ -@@ -143,7 +143,15 @@ - mmcu?avr51=mmcu?m3000s \ - mmcu?avr51=mmcu?m3001b \ - mmcu?avr6=mmcu?atmega2560 \ -- mmcu?avr6=mmcu?atmega2561 -+ mmcu?avr6=mmcu?atmega2561 \ -+ mmcu?avrxmega3=mmcu?atxmega32a4 \ -+ mmcu?avrxmega4=mmcu?atxmega64a3 \ -+ mmcu?avrxmega5=mmcu?atxmega64a1 \ -+ mmcu?avrxmega6=mmcu?atxmega128a3 \ -+ mmcu?avrxmega6=mmcu?atxmega256a3 \ -+ mmcu?avrxmega6=mmcu?atxmega256a3b \ -+ mmcu?avrxmega7=mmcu?atxmega128a1 -+ - - MULTILIB_EXCEPTIONS = - diff --git a/devel/avr-gcc/files/patch-xx-os_main b/devel/avr-gcc/files/patch-xx-os_main index 599661469682..8b69a3c18c69 100644 --- a/devel/avr-gcc/files/patch-xx-os_main +++ b/devel/avr-gcc/files/patch-xx-os_main @@ -1,61 +1,14 @@ -Not committed -Adds OS_main attribute feature. -Written by Anatoly Sokolov. -Apply patch after XMEGA patch. --------------------------------------------------------------------------------- -Index: gcc/function.c -=================================================================== ---- gcc/function.c (revision 133747) -+++ gcc/function.c (working copy) -@@ -4756,6 +4756,14 @@ - } - - int -+prologue_contains (const_rtx insn) -+{ -+ if (contains (insn, &prologue)) -+ return 1; -+ return 0; -+} -+ -+int - prologue_epilogue_contains (const_rtx insn) - { - if (contains (insn, &prologue)) -Index: gcc/rtl.h -=================================================================== ---- gcc/rtl.h (revision 133747) -+++ gcc/rtl.h (working copy) -@@ -2128,6 +2128,7 @@ - - /* In function.c */ - extern void reposition_prologue_and_epilogue_notes (void); -+extern int prologue_contains (const_rtx); - extern int prologue_epilogue_contains (const_rtx); - extern int sibcall_epilogue_contains (const_rtx); - extern void mark_temp_addr_taken (rtx); ---- gcc/config/avr/avr.h.orig 2008-03-31 16:48:03.477537900 -0600 -+++ gcc/config/avr/avr.h 2008-03-31 17:07:51.442457900 -0600 -@@ -1095,4 +1095,8 @@ struct machine_function GTY(()) - /* 'true' - if current function is a task function - as specified by the "OS_task" attribute. */ - int is_OS_task; -+ -+ /* 'true' - if current function is a 'main' function -+ as specified by the "OS_main" attribute. */ -+ int is_OS_main; - }; ---- gcc/config/avr/avr.c.orig Mon Mar 31 19:47:54 2008 -+++ gcc/config/avr/avr.c Mon Mar 31 20:50:08 2008 -@@ -53,6 +53,7 @@ static int interrupt_function_p (tree); +--- ./gcc/config/avr/avr.c.orig 2010-03-05 18:01:20.000000000 +0100 ++++ ./gcc/config/avr/avr.c 2010-03-05 18:01:51.000000000 +0100 +@@ -57,6 +57,7 @@ static int signal_function_p (tree); static int nmi_function_p (tree); static int avr_OS_task_function_p (tree); +static int avr_OS_main_function_p (tree); static int avr_regs_to_save (HARD_REG_SET *); - static void avr_args (HARD_REG_SET *); - static int sequent_regs_live (HARD_REG_SET *); -@@ -509,6 +513,19 @@ avr_OS_task_function_p (tree func) + static int sequent_regs_live (void); + static const char *ptrreg_to_str (int); +@@ -603,6 +604,19 @@ return a != NULL_TREE; } @@ -75,7 +28,7 @@ Index: gcc/rtl.h /* Return the number of hard registers to push/pop in the prologue/epilogue of the current function, and optionally store these registers in SET. */ -@@ -527,9 +544,10 @@ avr_regs_to_save (HARD_REG_SET *set) +@@ -621,9 +635,10 @@ count = 0; /* No need to save any registers if the function never returns or @@ -88,7 +41,7 @@ Index: gcc/rtl.h return 0; for (reg = 0; reg < 32; reg++) -@@ -646,6 +664,8 @@ expand_prologue (void) +@@ -742,6 +757,8 @@ rtx pushword = gen_rtx_MEM (HImode, gen_rtx_POST_DEC (HImode, stack_pointer_rtx)); rtx insn; @@ -97,7 +50,7 @@ Index: gcc/rtl.h last_insn_address = 0; -@@ -655,6 +675,7 @@ expand_prologue (void) +@@ -751,6 +768,7 @@ cfun->machine->is_signal = signal_function_p (current_function_decl); cfun->machine->is_nmi = nmi_function_p (current_function_decl); cfun->machine->is_OS_task = avr_OS_task_function_p (current_function_decl); @@ -105,7 +58,7 @@ Index: gcc/rtl.h /* Prologue: naked. */ if (cfun->machine->is_naked) -@@ -669,6 +690,7 @@ expand_prologue (void) +@@ -764,6 +782,7 @@ && !cfun->machine->is_interrupt && !cfun->machine->is_signal && !cfun->machine->is_OS_task @@ -113,7 +66,7 @@ Index: gcc/rtl.h && live_seq); if (cfun->machine->is_interrupt || cfun->machine->is_signal) -@@ -738,7 +760,7 @@ expand_prologue (void) +@@ -903,7 +922,7 @@ } if (frame_pointer_needed) { @@ -122,7 +75,7 @@ Index: gcc/rtl.h { /* Push frame pointer. */ insn = emit_move_insn (pushword, frame_pointer_rtx); -@@ -768,7 +790,7 @@ expand_prologue (void) +@@ -933,7 +952,7 @@ if (TARGET_TINY_STACK) { if (size < -63 || size > 63) @@ -131,7 +84,7 @@ Index: gcc/rtl.h /* The high byte (r29) doesn't change - prefer 'subi' (1 cycle) over 'sbiw' (2 cycles, same size). */ -@@ -780,7 +802,6 @@ expand_prologue (void) +@@ -945,7 +964,6 @@ myfp = frame_pointer_rtx; } /* Calculate length. */ @@ -139,7 +92,7 @@ Index: gcc/rtl.h method1_length = get_attr_length (gen_move_insn (frame_pointer_rtx, stack_pointer_rtx)); method1_length += -@@ -878,6 +899,7 @@ expand_epilogue (void) +@@ -1043,6 +1061,7 @@ HARD_REG_SET set; int minimize; HOST_WIDE_INT size = get_frame_size(); @@ -147,7 +100,7 @@ Index: gcc/rtl.h /* epilogue: naked */ if (cfun->machine->is_naked) -@@ -893,6 +915,7 @@ expand_epilogue (void) +@@ -1057,6 +1076,7 @@ && !cfun->machine->is_interrupt && !cfun->machine->is_signal && !cfun->machine->is_OS_task @@ -155,7 +108,7 @@ Index: gcc/rtl.h && live_seq); if (minimize && (frame_pointer_needed || live_seq > 4)) -@@ -955,7 +978,7 @@ expand_epilogue (void) +@@ -1119,7 +1139,7 @@ emit_move_insn (stack_pointer_rtx, frame_pointer_rtx); } } @@ -164,7 +117,7 @@ Index: gcc/rtl.h { /* Restore previous frame_pointer. */ emit_insn (gen_pophi (frame_pointer_rtx)); -@@ -1787,10 +1810,18 @@ output_movhi (rtx insn, rtx operands[], +@@ -1939,10 +1959,18 @@ } /* Use simple load of stack pointer if no interrupts are used or inside main or signal function prologue where they disabled. */ @@ -185,7 +138,7 @@ Index: gcc/rtl.h && prologue_epilogue_contains (insn))) { *l = 2; -@@ -4821,6 +4852,7 @@ const struct attribute_spec avr_attribut +@@ -4969,6 +4997,7 @@ { "nmi", 0, 0, true, false, false, avr_handle_fndecl_attribute }, { "naked", 0, 0, false, true, true, avr_handle_fntype_attribute }, { "OS_task", 0, 0, false, true, true, avr_handle_fntype_attribute }, @@ -193,3 +146,41 @@ Index: gcc/rtl.h { NULL, 0, 0, false, false, false, NULL } }; +--- ./gcc/config/avr/avr.h.orig 2010-03-05 18:01:20.000000000 +0100 ++++ ./gcc/config/avr/avr.h 2010-03-05 18:01:51.000000000 +0100 +@@ -1320,4 +1320,8 @@ + /* 'true' - if current function is a task function + as specified by the "OS_task" attribute. */ + int is_OS_task; ++ ++ /* 'true' - if current function is a 'main' function ++ as specified by the "OS_main" attribute. */ ++ int is_OS_main; + }; +--- ./gcc/function.c.orig 2009-06-19 23:44:24.000000000 +0200 ++++ ./gcc/function.c 2010-03-05 18:01:51.000000000 +0100 +@@ -4757,6 +4757,14 @@ + } + + int ++prologue_contains (const_rtx insn) ++{ ++ if (contains (insn, &prologue)) ++ return 1; ++ return 0; ++} ++ ++int + prologue_epilogue_contains (const_rtx insn) + { + if (contains (insn, &prologue)) +--- ./gcc/rtl.h.orig 2009-07-14 11:32:55.000000000 +0200 ++++ ./gcc/rtl.h 2010-03-05 18:01:51.000000000 +0100 +@@ -2145,6 +2145,7 @@ + + /* In function.c */ + extern void reposition_prologue_and_epilogue_notes (void); ++extern int prologue_contains (const_rtx); + extern int prologue_epilogue_contains (const_rtx); + extern int sibcall_epilogue_contains (const_rtx); + extern void mark_temp_addr_taken (rtx); diff --git a/devel/avr-gcc/pkg-plist b/devel/avr-gcc/pkg-plist index c04f4cbf69e5..0a2b9f2ad4f9 100644 --- a/devel/avr-gcc/pkg-plist +++ b/devel/avr-gcc/pkg-plist @@ -5,64 +5,66 @@ bin/avr-c++ bin/avr-cpp bin/avr-g++ bin/avr-gcc -bin/avr-gcc-4.3.2 +bin/avr-gcc-4.3.4 bin/avr-gccbug -lib/gcc/avr/4.3.2/avr25/libgcc.a -lib/gcc/avr/4.3.2/avr25/libgcov.a -lib/gcc/avr/4.3.2/avr3/libgcc.a -lib/gcc/avr/4.3.2/avr3/libgcov.a -lib/gcc/avr/4.3.2/avr31/libgcc.a -lib/gcc/avr/4.3.2/avr31/libgcov.a -lib/gcc/avr/4.3.2/avr35/libgcc.a -lib/gcc/avr/4.3.2/avr35/libgcov.a -lib/gcc/avr/4.3.2/avr4/libgcc.a -lib/gcc/avr/4.3.2/avr4/libgcov.a -lib/gcc/avr/4.3.2/avr5/libgcc.a -lib/gcc/avr/4.3.2/avr5/libgcov.a -lib/gcc/avr/4.3.2/avr51/libgcc.a -lib/gcc/avr/4.3.2/avr51/libgcov.a -lib/gcc/avr/4.3.2/avr6/libgcc.a -lib/gcc/avr/4.3.2/avr6/libgcov.a -lib/gcc/avr/4.3.2/avrxmega3/libgcc.a -lib/gcc/avr/4.3.2/avrxmega3/libgcov.a -lib/gcc/avr/4.3.2/avrxmega4/libgcc.a -lib/gcc/avr/4.3.2/avrxmega4/libgcov.a -lib/gcc/avr/4.3.2/avrxmega5/libgcc.a -lib/gcc/avr/4.3.2/avrxmega5/libgcov.a -lib/gcc/avr/4.3.2/avrxmega6/libgcc.a -lib/gcc/avr/4.3.2/avrxmega6/libgcov.a -lib/gcc/avr/4.3.2/avrxmega7/libgcc.a -lib/gcc/avr/4.3.2/avrxmega7/libgcov.a -lib/gcc/avr/4.3.2/include-fixed/README -lib/gcc/avr/4.3.2/include-fixed/fixed -lib/gcc/avr/4.3.2/include-fixed/limits.h -lib/gcc/avr/4.3.2/include-fixed/syslimits.h -lib/gcc/avr/4.3.2/include/float.h -lib/gcc/avr/4.3.2/include/iso646.h -lib/gcc/avr/4.3.2/include/stdarg.h -lib/gcc/avr/4.3.2/include/stdbool.h -lib/gcc/avr/4.3.2/include/stddef.h -lib/gcc/avr/4.3.2/include/stdfix.h -lib/gcc/avr/4.3.2/include/tgmath.h -lib/gcc/avr/4.3.2/include/unwind.h -lib/gcc/avr/4.3.2/include/varargs.h -lib/gcc/avr/4.3.2/install-tools/fixinc_list -lib/gcc/avr/4.3.2/install-tools/gsyslimits.h -lib/gcc/avr/4.3.2/install-tools/include/README -lib/gcc/avr/4.3.2/install-tools/include/limits.h -lib/gcc/avr/4.3.2/install-tools/macro_list -lib/gcc/avr/4.3.2/install-tools/mkheaders.conf -lib/gcc/avr/4.3.2/libgcc.a -lib/gcc/avr/4.3.2/libgcov.a -libexec/gcc/avr/4.3.2/cc1 -libexec/gcc/avr/4.3.2/cc1plus -libexec/gcc/avr/4.3.2/collect2 -libexec/gcc/avr/4.3.2/install-tools/fix-header -libexec/gcc/avr/4.3.2/install-tools/fixinc.sh -libexec/gcc/avr/4.3.2/install-tools/fixincl -libexec/gcc/avr/4.3.2/install-tools/fixproto -libexec/gcc/avr/4.3.2/install-tools/mkheaders -libexec/gcc/avr/4.3.2/install-tools/mkinstalldirs +lib/gcc/avr/4.3.4/avr25/libgcc.a +lib/gcc/avr/4.3.4/avr25/libgcov.a +lib/gcc/avr/4.3.4/avr3/libgcc.a +lib/gcc/avr/4.3.4/avr3/libgcov.a +lib/gcc/avr/4.3.4/avr31/libgcc.a +lib/gcc/avr/4.3.4/avr31/libgcov.a +lib/gcc/avr/4.3.4/avr35/libgcc.a +lib/gcc/avr/4.3.4/avr35/libgcov.a +lib/gcc/avr/4.3.4/avr4/libgcc.a +lib/gcc/avr/4.3.4/avr4/libgcov.a +lib/gcc/avr/4.3.4/avr5/libgcc.a +lib/gcc/avr/4.3.4/avr5/libgcov.a +lib/gcc/avr/4.3.4/avr51/libgcc.a +lib/gcc/avr/4.3.4/avr51/libgcov.a +lib/gcc/avr/4.3.4/avr6/libgcc.a +lib/gcc/avr/4.3.4/avr6/libgcov.a +lib/gcc/avr/4.3.4/avrxmega2/libgcc.a +lib/gcc/avr/4.3.4/avrxmega2/libgcov.a +lib/gcc/avr/4.3.4/avrxmega3/libgcc.a +lib/gcc/avr/4.3.4/avrxmega3/libgcov.a +lib/gcc/avr/4.3.4/avrxmega4/libgcc.a +lib/gcc/avr/4.3.4/avrxmega4/libgcov.a +lib/gcc/avr/4.3.4/avrxmega5/libgcc.a +lib/gcc/avr/4.3.4/avrxmega5/libgcov.a +lib/gcc/avr/4.3.4/avrxmega6/libgcc.a +lib/gcc/avr/4.3.4/avrxmega6/libgcov.a +lib/gcc/avr/4.3.4/avrxmega7/libgcc.a +lib/gcc/avr/4.3.4/avrxmega7/libgcov.a +lib/gcc/avr/4.3.4/include-fixed/README +lib/gcc/avr/4.3.4/include-fixed/fixed +lib/gcc/avr/4.3.4/include-fixed/limits.h +lib/gcc/avr/4.3.4/include-fixed/syslimits.h +lib/gcc/avr/4.3.4/include/float.h +lib/gcc/avr/4.3.4/include/iso646.h +lib/gcc/avr/4.3.4/include/stdarg.h +lib/gcc/avr/4.3.4/include/stdbool.h +lib/gcc/avr/4.3.4/include/stddef.h +lib/gcc/avr/4.3.4/include/stdfix.h +lib/gcc/avr/4.3.4/include/tgmath.h +lib/gcc/avr/4.3.4/include/unwind.h +lib/gcc/avr/4.3.4/include/varargs.h +lib/gcc/avr/4.3.4/install-tools/fixinc_list +lib/gcc/avr/4.3.4/install-tools/gsyslimits.h +lib/gcc/avr/4.3.4/install-tools/include/README +lib/gcc/avr/4.3.4/install-tools/include/limits.h +lib/gcc/avr/4.3.4/install-tools/macro_list +lib/gcc/avr/4.3.4/install-tools/mkheaders.conf +lib/gcc/avr/4.3.4/libgcc.a +lib/gcc/avr/4.3.4/libgcov.a +libexec/gcc/avr/4.3.4/cc1 +libexec/gcc/avr/4.3.4/cc1plus +libexec/gcc/avr/4.3.4/collect2 +libexec/gcc/avr/4.3.4/install-tools/fix-header +libexec/gcc/avr/4.3.4/install-tools/fixinc.sh +libexec/gcc/avr/4.3.4/install-tools/fixincl +libexec/gcc/avr/4.3.4/install-tools/fixproto +libexec/gcc/avr/4.3.4/install-tools/mkheaders +libexec/gcc/avr/4.3.4/install-tools/mkinstalldirs share/locale/be/LC_MESSAGES/cpplib.mo share/locale/be/LC_MESSAGES/gcc.mo share/locale/ca/LC_MESSAGES/cpplib.mo @@ -74,8 +76,11 @@ share/locale/el/LC_MESSAGES/cpplib.mo share/locale/el/LC_MESSAGES/gcc.mo share/locale/es/LC_MESSAGES/cpplib.mo share/locale/es/LC_MESSAGES/gcc.mo +share/locale/fi/LC_MESSAGES/gcc.mo share/locale/fr/LC_MESSAGES/cpplib.mo share/locale/fr/LC_MESSAGES/gcc.mo +share/locale/id/LC_MESSAGES/cpplib.mo +share/locale/id/LC_MESSAGES/gcc.mo share/locale/ja/LC_MESSAGES/cpplib.mo share/locale/ja/LC_MESSAGES/gcc.mo share/locale/nl/LC_MESSAGES/cpplib.mo @@ -92,28 +97,29 @@ share/locale/zh_CN/LC_MESSAGES/cpplib.mo share/locale/zh_CN/LC_MESSAGES/gcc.mo share/locale/zh_TW/LC_MESSAGES/cpplib.mo share/locale/zh_TW/LC_MESSAGES/gcc.mo -@dirrm lib/gcc/avr/4.3.2/avr25 -@dirrm lib/gcc/avr/4.3.2/avr3 -@dirrm lib/gcc/avr/4.3.2/avr31 -@dirrm lib/gcc/avr/4.3.2/avr35 -@dirrm lib/gcc/avr/4.3.2/avr4 -@dirrm lib/gcc/avr/4.3.2/avr5 -@dirrm lib/gcc/avr/4.3.2/avr51 -@dirrm lib/gcc/avr/4.3.2/avr6 -@dirrm lib/gcc/avr/4.3.2/avrxmega3 -@dirrm lib/gcc/avr/4.3.2/avrxmega4 -@dirrm lib/gcc/avr/4.3.2/avrxmega5 -@dirrm lib/gcc/avr/4.3.2/avrxmega6 -@dirrm lib/gcc/avr/4.3.2/avrxmega7 -@dirrm lib/gcc/avr/4.3.2/include -@dirrm lib/gcc/avr/4.3.2/include-fixed -@dirrm lib/gcc/avr/4.3.2/install-tools/include -@dirrm lib/gcc/avr/4.3.2/install-tools -@dirrm lib/gcc/avr/4.3.2 +@dirrm lib/gcc/avr/4.3.4/avr25 +@dirrm lib/gcc/avr/4.3.4/avr3 +@dirrm lib/gcc/avr/4.3.4/avr31 +@dirrm lib/gcc/avr/4.3.4/avr35 +@dirrm lib/gcc/avr/4.3.4/avr4 +@dirrm lib/gcc/avr/4.3.4/avr5 +@dirrm lib/gcc/avr/4.3.4/avr51 +@dirrm lib/gcc/avr/4.3.4/avr6 +@dirrm lib/gcc/avr/4.3.4/avrxmega2 +@dirrm lib/gcc/avr/4.3.4/avrxmega3 +@dirrm lib/gcc/avr/4.3.4/avrxmega4 +@dirrm lib/gcc/avr/4.3.4/avrxmega5 +@dirrm lib/gcc/avr/4.3.4/avrxmega6 +@dirrm lib/gcc/avr/4.3.4/avrxmega7 +@dirrm lib/gcc/avr/4.3.4/include +@dirrm lib/gcc/avr/4.3.4/include-fixed +@dirrm lib/gcc/avr/4.3.4/install-tools/include +@dirrm lib/gcc/avr/4.3.4/install-tools +@dirrm lib/gcc/avr/4.3.4 @dirrm lib/gcc/avr @dirrm lib/gcc -@dirrm libexec/gcc/avr/4.3.2/install-tools -@dirrm libexec/gcc/avr/4.3.2 +@dirrm libexec/gcc/avr/4.3.4/install-tools +@dirrm libexec/gcc/avr/4.3.4 @dirrm libexec/gcc/avr @dirrm libexec/gcc @dirrm avr/bin |