aboutsummaryrefslogtreecommitdiff
path: root/devel
diff options
context:
space:
mode:
authorJoerg Wunsch <joerg@FreeBSD.org>2009-06-11 21:47:49 +0000
committerJoerg Wunsch <joerg@FreeBSD.org>2009-06-11 21:47:49 +0000
commit31d06624029ae5984b5bf53206ffeb4778164b6e (patch)
treea39aff18f74ef5d905cba8ea16bc44d782a15b94 /devel
parent54b0b2e541de879adf1cafe58181ecdafc9e0b49 (diff)
downloadports-31d06624029ae5984b5bf53206ffeb4778164b6e.tar.gz
ports-31d06624029ae5984b5bf53206ffeb4778164b6e.zip
Notes
Diffstat (limited to 'devel')
-rw-r--r--devel/Makefile1
-rw-r--r--devel/avr-gcc-devel/Makefile65
-rw-r--r--devel/avr-gcc-devel/distinfo6
-rw-r--r--devel/avr-gcc-devel/files/patch-avr-libgcc.S333
-rw-r--r--devel/avr-gcc-devel/files/patch-bug11259323
-rw-r--r--devel/avr-gcc-devel/files/patch-bug19636-24894-31644-31786183
-rw-r--r--devel/avr-gcc-devel/files/patch-bug3024314
-rw-r--r--devel/avr-gcc-devel/files/patch-bug3300981
-rw-r--r--devel/avr-gcc-devel/files/patch-bug34210-3550848
-rw-r--r--devel/avr-gcc-devel/files/patch-bug3493220
-rw-r--r--devel/avr-gcc-devel/files/patch-bug3501365
-rw-r--r--devel/avr-gcc-devel/files/patch-bug3554226
-rw-r--r--devel/avr-gcc-devel/files/patch-cross-installation35
-rw-r--r--devel/avr-gcc-devel/files/patch-libiberty-Makefile.in12
-rw-r--r--devel/avr-gcc-devel/files/patch-newdevices92
-rw-r--r--devel/avr-gcc-devel/files/patch-xmega733
-rw-r--r--devel/avr-gcc-devel/files/patch-xx-os_main195
-rw-r--r--devel/avr-gcc-devel/pkg-descr16
-rw-r--r--devel/avr-gcc-devel/pkg-plist109
19 files changed, 0 insertions, 2357 deletions
diff --git a/devel/Makefile b/devel/Makefile
index 32d98b05e265..f5bd084f7a80 100644
--- a/devel/Makefile
+++ b/devel/Makefile
@@ -85,7 +85,6 @@
SUBDIR += avr-binutils
SUBDIR += avr-gcc
SUBDIR += avr-gcc-3
- SUBDIR += avr-gcc-devel
SUBDIR += avr-gdb
SUBDIR += avr-libc
SUBDIR += avra
diff --git a/devel/avr-gcc-devel/Makefile b/devel/avr-gcc-devel/Makefile
deleted file mode 100644
index ddb574d4b0b8..000000000000
--- a/devel/avr-gcc-devel/Makefile
+++ /dev/null
@@ -1,65 +0,0 @@
-# New ports collection makefile for: avr-gcc-devel
-# Date created: 28 Jul 2008
-# Whom: Joerg Wunsch <joerg@freebsd.org>
-#
-# $FreeBSD$
-#
-
-PORTNAME= gcc-devel
-PORTVERSION= 4.3.1
-PORTREVISION= 2
-CATEGORIES= devel
-MASTER_SITES= ${MASTER_SITE_GCC}
-MASTER_SITES+= http://people.freebsd.org/~joerg/:local
-MASTER_SITE_SUBDIR= releases/gcc-${PORTVERSION}
-PKGNAMEPREFIX= avr-
-DISTFILES= gcc-core-${PORTVERSION}${EXTRACT_SUFX} \
- gcc-g++-${PORTVERSION}${EXTRACT_SUFX}
-EXTRACT_ONLY= gcc-core-${PORTVERSION}${EXTRACT_SUFX} \
- gcc-g++-${PORTVERSION}${EXTRACT_SUFX}
-
-MAINTAINER= joerg@freebsd.org
-COMMENT= FSF GCC 4.3.x for Atmel AVR 8-bit RISC cross-development
-
-BUILD_DEPENDS= avr-as:${PORTSDIR}/devel/avr-binutils \
- avr-ld:${PORTSDIR}/devel/avr-binutils
-LIB_DEPENDS= mpfr.3:${PORTSDIR}/math/mpfr \
- gmp.8:${PORTSDIR}/math/libgmp4
-RUN_DEPENDS= avr-as:${PORTSDIR}/devel/avr-binutils \
- avr-ld:${PORTSDIR}/devel/avr-binutils
-
-# GCC 4.x doesn't want to be built in its own source directory.
-WRKSRC= ${WRKDIR}/gcc-${PORTVERSION}
-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
-USE_GMAKE= yes
-USE_BISON= build
-GNU_CONFIGURE= yes
-
-.include <bsd.port.pre.mk>
-
-.if (${ARCH} == "amd64")
-ARCH= x86_64
-.endif
-
-CONFIGURE_ARGS= --target=avr --disable-libssp --with-gmp=${LOCALBASE} \
- --program-prefix="avr-" --program-suffix="-43"
-
-MAKE_FLAGS= LANGUAGES="c c++"
-# get rid of that silly -mcpu=pentiumpro FreeBSD 5+ is so fond of. :-(
-MAKE_ENV= MACHINE_ARCH=avr
-
-MAN1= avr-cpp-43.1 avr-gcc-43.1 avr-g++-43.1 avr-gcov-43.1
-MAN7= fsf-funding.7 gfdl.7 gpl.7
-INFO= cpp gcc gccint cppinternals gccinstall
-
-post-extract:
- cd ${WRKDIR} && ${MKDIR} build
-
-.include <bsd.port.post.mk>
diff --git a/devel/avr-gcc-devel/distinfo b/devel/avr-gcc-devel/distinfo
deleted file mode 100644
index c01c80af200c..000000000000
--- a/devel/avr-gcc-devel/distinfo
+++ /dev/null
@@ -1,6 +0,0 @@
-MD5 (gcc-core-4.3.1.tar.bz2) = f30652bdee577911681c86f5d7f23d65
-SHA256 (gcc-core-4.3.1.tar.bz2) = c7706b3354c1bede6ba83440b0997dc7d5fcd8892345f857527807294a9857a3
-SIZE (gcc-core-4.3.1.tar.bz2) = 23799743
-MD5 (gcc-g++-4.3.1.tar.bz2) = 1e0eadf92c2aeff4611fe9da286348d4
-SHA256 (gcc-g++-4.3.1.tar.bz2) = 45b435c6dc48b568f20190bc04ccebddb2e16a037d48b16cee28530f81d1e464
-SIZE (gcc-g++-4.3.1.tar.bz2) = 5659383
diff --git a/devel/avr-gcc-devel/files/patch-avr-libgcc.S b/devel/avr-gcc-devel/files/patch-avr-libgcc.S
deleted file mode 100644
index 2567f7a31534..000000000000
--- a/devel/avr-gcc-devel/files/patch-avr-libgcc.S
+++ /dev/null
@@ -1,333 +0,0 @@
-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
-Index: gcc/config/avr/avr.c
-===================================================================
---- gcc/config/avr/avr.c (revision 132252)
-+++ gcc/config/avr/avr.c (working copy)
-@@ -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" },
- { 0, 1, 1, 1, 0, 0, 0, 0, "__AVR_ARCH__=5" },
-- { 0, 1, 1, 1, 1, 1, 0, 0, "__AVR_ARCH__=51" }
-+ { 0, 1, 1, 1, 1, 1, 0, 0, "__AVR_ARCH__=51" },
-+ { 0, 1, 1, 1, 1, 1, 1, 0, "__AVR_ARCH__=6" }
- };
-
- /* These names are used as the index into the avr_arch_types[] table
-@@ -144,7 +145,8 @@
- ARCH_AVR35,
- ARCH_AVR4,
- ARCH_AVR5,
-- ARCH_AVR51
-+ ARCH_AVR51,
-+ ARCH_AVR6
- };
-
- struct mcu_type_s {
-@@ -273,6 +275,10 @@
- { "at90can128", ARCH_AVR51, "__AVR_AT90CAN128__" },
- { "at90usb1286", ARCH_AVR51, "__AVR_AT90USB1286__" },
- { "at90usb1287", ARCH_AVR51, "__AVR_AT90USB1287__" },
-+ /* 3-Byte PC. */
-+ { "avr6", ARCH_AVR6, NULL },
-+ { "atmega2560", ARCH_AVR6, "__AVR_ATmega2560__" },
-+ { "atmega2561", ARCH_AVR6, "__AVR_ATmega2561__" },
- /* Assembler only. */
- { "avr1", ARCH_AVR1, NULL },
- { "at90s1200", ARCH_AVR1, "__AVR_AT90S1200__" },
-@@ -511,9 +517,10 @@
- else
- {
- int offset = frame_pointer_needed ? 2 : 0;
-+ int avr_pc_size = AVR_HAVE_EIJMP_EICALL ? 3 : 2;
-
- offset += avr_regs_to_save (NULL);
-- return get_frame_size () + 2 + 1 + offset;
-+ return get_frame_size () + (avr_pc_size) + 1 + offset;
- }
- }
-
-@@ -1119,7 +1126,7 @@
- && ((GET_CODE (addr) == SYMBOL_REF && SYMBOL_REF_FUNCTION_P (addr))
- || GET_CODE (addr) == LABEL_REF))
- {
-- fprintf (file, "pm(");
-+ fprintf (file, "gs(");
- output_addr_const (file,addr);
- fprintf (file ,")");
- }
-@@ -1144,6 +1151,11 @@
- if (!AVR_MEGA)
- fputc ('r', file);
- }
-+ else if (code == '!')
-+ {
-+ if (AVR_HAVE_EIJMP_EICALL)
-+ fputc ('e', file);
-+ }
- else if (REG_P (x))
- {
- if (x == zero_reg_rtx)
-@@ -4468,7 +4480,7 @@
- && ((GET_CODE (x) == SYMBOL_REF && SYMBOL_REF_FUNCTION_P (x))
- || GET_CODE (x) == LABEL_REF))
- {
-- fputs ("\t.word\tpm(", asm_out_file);
-+ fputs ("\t.word\tgs(", asm_out_file);
- output_addr_const (asm_out_file, x);
- fputs (")\n", asm_out_file);
- return true;
-@@ -5815,7 +5827,7 @@
- {
- switch_to_section (progmem_section);
- if (AVR_MEGA)
-- fprintf (stream, "\t.word pm(.L%d)\n", value);
-+ fprintf (stream, "\t.word gs(.L%d)\n", value);
- 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)
-@@ -80,6 +80,12 @@
- builtin_define ("__AVR_MEGA__"); \
- if (avr_current_arch->have_jmp_call) \
- builtin_define ("__AVR_HAVE_JMP_CALL__"); \
-+ if (!avr_current_arch->have_eijmp_eicall) \
-+ builtin_define ("__AVR_2_BYTE_PC__"); \
-+ if (avr_current_arch->have_eijmp_eicall) \
-+ builtin_define ("__AVR_3_BYTE_PC__"); \
-+ if (avr_current_arch->have_eijmp_eicall) \
-+ builtin_define ("__AVR_HAVE_EIJMP_EICALL__"); \
- if (TARGET_NO_INTERRUPTS) \
- builtin_define ("__NO_INTERRUPTS__"); \
- } \
-@@ -100,9 +106,10 @@
- #define AVR_HAVE_MOVW (avr_have_movw_lpmx_p)
- #define AVR_HAVE_LPMX (avr_have_movw_lpmx_p)
- #define AVR_HAVE_RAMPZ (avr_current_arch->have_elpm)
-+#define AVR_HAVE_EIJMP_EICALL (avr_current_arch->have_eijmp_eicall)
-
--#define AVR_2_BYTE_PC 1
--#define AVR_3_BYTE_PC 0
-+#define AVR_2_BYTE_PC (!AVR_HAVE_EIJMP_EICALL)
-+#define AVR_3_BYTE_PC (AVR_HAVE_EIJMP_EICALL)
-
- #define TARGET_VERSION fprintf (stderr, " (GNU assembler syntax)");
-
-@@ -671,7 +678,7 @@
-
- #define PRINT_OPERAND(STREAM, X, CODE) print_operand (STREAM, X, CODE)
-
--#define PRINT_OPERAND_PUNCT_VALID_P(CODE) ((CODE) == '~')
-+#define PRINT_OPERAND_PUNCT_VALID_P(CODE) ((CODE) == '~' || (CODE) == '!')
-
- #define PRINT_OPERAND_ADDRESS(STREAM, X) print_operand_address(STREAM, X)
-
-@@ -828,6 +835,7 @@
- mmcu=at90usb64*|\
- mmcu=at90usb128*|\
- mmcu=at94k: -m avr5}\
-+%{mmcu=atmega256*:-m avr6}\
- %{mmcu=atmega324*|\
- mmcu=atmega325*|\
- mmcu=atmega328p|\
-@@ -856,7 +864,8 @@
- mmcu=at90usb*: -Tdata 0x800100}\
- %{mmcu=atmega640|\
- mmcu=atmega1280|\
-- mmcu=atmega1281: -Tdata 0x800200} "
-+ mmcu=atmega1281|\
-+ mmcu=atmega256*: -Tdata 0x800200} "
-
- #define LIB_SPEC \
- "%{!mmcu=at90s1*:%{!mmcu=attiny11:%{!mmcu=attiny12:%{!mmcu=attiny15:%{!mmcu=attiny28: -lc }}}}}"
-@@ -968,6 +977,8 @@
- %{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=at90usb1286:crtusb1286.o%s} \
- %{mmcu=at90usb1287:crtusb1287.o%s}"
diff --git a/devel/avr-gcc-devel/files/patch-bug11259 b/devel/avr-gcc-devel/files/patch-bug11259
deleted file mode 100644
index 9f98ee5437fc..000000000000
--- a/devel/avr-gcc-devel/files/patch-bug11259
+++ /dev/null
@@ -1,323 +0,0 @@
-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)
- (UNSPEC_INDEX_JMP 1)
- (UNSPEC_SEI 2)
- (UNSPEC_CLI 3)
-+ (UNSPEC_SWAP 4)
-
- (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\";
- }"
- [(set_attr "length" "4,4")
- (set_attr "cc" "set_n,set_n")])
-
-+(define_peephole2 ; andi
-+ [(set (match_operand:QI 0 "d_register_operand" "")
-+ (and:QI (match_dup 0)
-+ (match_operand:QI 1 "const_int_operand" "")))
-+ (set (match_dup 0)
-+ (and:QI (match_dup 0)
-+ (match_operand:QI 2 "const_int_operand" "")))]
-+ ""
-+ [(set (match_dup 0) (and:QI (match_dup 0) (match_dup 1)))]
-+ {
-+ operands[1] = GEN_INT (INTVAL (operands[1]) & INTVAL (operands[2]));
-+ })
-+
- ;;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- ;; 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"
- [(set_attr "length" "4")
- (set_attr "cc" "set_n")])
-
-+;; 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")])
-+
- ;;<< << << << << << << << << << << << << << << << << << << << << << << << << <<
- ;; arithmetic shift left
-
--(define_insn "ashlqi3"
-+(define_expand "ashlqi3"
-+ [(set (match_operand:QI 0 "register_operand" "")
-+ (ashift:QI (match_operand:QI 1 "register_operand" "")
-+ (match_operand:QI 2 "general_operand" "")))]
-+ ""
-+ "")
-+
-+(define_split ; ashlqi3_const4
-+ [(set (match_operand:QI 0 "d_register_operand" "")
-+ (ashift:QI (match_operand:QI 1 "d_register_operand" "")
-+ (const_int 4)))]
-+ ""
-+ [(set (match_dup 0) (unspec:QI [(match_dup 0)] UNSPEC_SWAP))
-+ (set (match_dup 0) (and:QI (match_dup 0) (const_int -16)))]
-+ "")
-+
-+(define_split ; ashlqi3_const5
-+ [(set (match_operand:QI 0 "d_register_operand" "")
-+ (ashift:QI (match_operand:QI 1 "d_register_operand" "")
-+ (const_int 5)))]
-+ ""
-+ [(set (match_dup 0) (unspec:QI [(match_dup 0)] UNSPEC_SWAP))
-+ (set (match_dup 0) (ashift:QI (match_dup 0) (const_int 1)))
-+ (set (match_dup 0) (and:QI (match_dup 0) (const_int -32)))]
-+ "")
-+
-+(define_split ; ashlqi3_const6
-+ [(set (match_operand:QI 0 "d_register_operand" "")
-+ (ashift:QI (match_operand:QI 1 "d_register_operand" "")
-+ (const_int 6)))]
-+ ""
-+ [(set (match_dup 0) (unspec:QI [(match_dup 0)] UNSPEC_SWAP))
-+ (set (match_dup 0) (ashift:QI (match_dup 0) (const_int 2)))
-+ (set (match_dup 0) (and:QI (match_dup 0) (const_int -64)))]
-+ "")
-+
-+(define_insn "*ashlqi3"
- [(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")])
-
- ;; Optimize if a scratch register from LD_REGS happens to be available.
-
- (define_peephole2
-+ [(match_scratch:QI 2 "d")
-+ (set (match_operand:QI 0 "l_register_operand" "")
-+ (ashift:QI (match_operand:QI 1 "l_register_operand" "")
-+ (const_int 4)))]
-+ ""
-+ [(set (match_dup 0) (unspec:QI [(match_dup 0)] UNSPEC_SWAP))
-+ (set (match_dup 2) (const_int -16))
-+ (set (match_dup 0) (and:QI (match_dup 0) (match_dup 2)))
-+ (clobber (match_dup 2))]
-+ "if (!avr_peep2_scratch_safe (operands[2]))
-+ FAIL;")
-+
-+(define_peephole2
-+ [(match_scratch:QI 2 "d")
-+ (set (match_operand:QI 0 "l_register_operand" "")
-+ (ashift:QI (match_operand:QI 1 "l_register_operand" "")
-+ (const_int 5)))]
-+ ""
-+ [(set (match_dup 0) (unspec:QI [(match_dup 0)] UNSPEC_SWAP))
-+ (set (match_dup 0) (ashift:QI (match_dup 0) (const_int 1)))
-+ (set (match_dup 2) (const_int -32))
-+ (set (match_dup 0) (and:QI (match_dup 0) (match_dup 2)))
-+ (clobber (match_dup 2))]
-+ "if (!avr_peep2_scratch_safe (operands[2]))
-+ FAIL;")
-+
-+(define_peephole2
-+ [(match_scratch:QI 2 "d")
-+ (set (match_operand:QI 0 "l_register_operand" "")
-+ (ashift:QI (match_operand:QI 1 "l_register_operand" "")
-+ (const_int 6)))]
-+ ""
-+ [(set (match_dup 0) (unspec:QI [(match_dup 0)] UNSPEC_SWAP))
-+ (set (match_dup 0) (ashift:QI (match_dup 0) (const_int 2)))
-+ (set (match_dup 2) (const_int -64))
-+ (set (match_dup 0) (and:QI (match_dup 0) (match_dup 2)))
-+ (clobber (match_dup 2))]
-+ "if (!avr_peep2_scratch_safe (operands[2]))
-+ FAIL;")
-+
-+(define_peephole2
- [(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")])
-
- ;; >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >>
- ;; logical shift right
-
--(define_insn "lshrqi3"
-+(define_expand "lshrqi3"
-+ [(set (match_operand:QI 0 "register_operand" "")
-+ (lshiftrt:QI (match_operand:QI 1 "register_operand" "")
-+ (match_operand:QI 2 "general_operand" "")))]
-+ ""
-+ "")
-+
-+(define_insn_and_split "*lshrqi3_const4"
-+ [(set (match_operand:QI 0 "d_register_operand" "=d")
-+ (lshiftrt:QI (match_operand:QI 1 "d_register_operand" "0")
-+ (const_int 4)))]
-+ ""
-+ "#"
-+ ""
-+ [(set (match_dup 0) (unspec:QI [(match_dup 0)] UNSPEC_SWAP))
-+ (set (match_dup 0) (and:QI (match_dup 0) (const_int 15)))]
-+ "")
-+
-+(define_insn_and_split "*lshrqi3_const5"
-+ [(set (match_operand:QI 0 "d_register_operand" "=d")
-+ (lshiftrt:QI (match_operand:QI 1 "d_register_operand" "0")
-+ (const_int 5)))]
-+ ""
-+ "#"
-+ ""
-+ [(set (match_dup 0) (unspec:QI [(match_dup 0)] UNSPEC_SWAP))
-+ (set (match_dup 0) (lshiftrt:QI (match_dup 0) (const_int 1)))
-+ (set (match_dup 0) (and:QI (match_dup 0) (const_int 7)))]
-+ "")
-+
-+(define_insn_and_split "*lshrqi3_const6"
-+ [(set (match_operand:QI 0 "d_register_operand" "=d")
-+ (lshiftrt:QI (match_operand:QI 1 "d_register_operand" "0")
-+ (const_int 6)))]
-+ ""
-+ "#"
-+ ""
-+ [(set (match_dup 0) (unspec:QI [(match_dup 0)] UNSPEC_SWAP))
-+ (set (match_dup 0) (lshiftrt:QI (match_dup 0) (const_int 2)))
-+ (set (match_dup 0) (and:QI (match_dup 0) (const_int 3)))]
-+ "")
-+
-+(define_insn "*lshrqi3"
- [(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")])
-
- ;; Optimize if a scratch register from LD_REGS happens to be available.
-
- (define_peephole2
-+ [(match_scratch:QI 2 "d")
-+ (set (match_operand:QI 0 "l_register_operand" "")
-+ (lshiftrt:QI (match_operand:QI 1 "l_register_operand" "")
-+ (const_int 4)))]
-+ ""
-+ [(set (match_dup 0) (unspec:QI [(match_dup 0)] UNSPEC_SWAP))
-+ (set (match_dup 2) (const_int 15))
-+ (set (match_dup 0) (and:QI (match_dup 0) (match_dup 2)))
-+ (clobber (match_dup 2))]
-+ "if (!avr_peep2_scratch_safe (operands[2]))
-+ FAIL;")
-+
-+(define_peephole2
-+ [(match_scratch:QI 2 "d")
-+ (set (match_operand:QI 0 "l_register_operand" "")
-+ (lshiftrt:QI (match_operand:QI 1 "l_register_operand" "")
-+ (const_int 5)))]
-+ ""
-+ [(set (match_dup 0) (unspec:QI [(match_dup 0)] UNSPEC_SWAP))
-+ (set (match_dup 0) (lshiftrt:QI (match_dup 0) (const_int 1)))
-+ (set (match_dup 2) (const_int 7))
-+ (set (match_dup 0) (and:QI (match_dup 0) (match_dup 2)))
-+ (clobber (match_dup 2))]
-+ "if (!avr_peep2_scratch_safe (operands[2]))
-+ FAIL;")
-+
-+(define_peephole2
-+ [(match_scratch:QI 2 "d")
-+ (set (match_operand:QI 0 "l_register_operand" "")
-+ (lshiftrt:QI (match_operand:QI 1 "l_register_operand" "")
-+ (const_int 6)))]
-+ ""
-+ [(set (match_dup 0) (unspec:QI [(match_dup 0)] UNSPEC_SWAP))
-+ (set (match_dup 0) (lshiftrt:QI (match_dup 0) (const_int 2)))
-+ (set (match_dup 2) (const_int 3))
-+ (set (match_dup 0) (and:QI (match_dup 0) (match_dup 2)))
-+ (clobber (match_dup 2))]
-+ "if (!avr_peep2_scratch_safe (operands[2]))
-+ FAIL;")
-+
-+(define_peephole2
- [(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;")
-
diff --git a/devel/avr-gcc-devel/files/patch-bug19636-24894-31644-31786 b/devel/avr-gcc-devel/files/patch-bug19636-24894-31644-31786
deleted file mode 100644
index a0219e655518..000000000000
--- a/devel/avr-gcc-devel/files/patch-bug19636-24894-31644-31786
+++ /dev/null
@@ -1,183 +0,0 @@
-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 @@
- true_regnum (XEXP (x, 0)));
- debug_rtx (x);
- }
-+ if (!strict && GET_CODE (x) == SUBREG)
-+ x = SUBREG_REG (x);
- 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 @@
- if (fit)
- {
- if (! strict
-+ || REGNO (XEXP (x,0)) == REG_X
- || REGNO (XEXP (x,0)) == REG_Y
- || REGNO (XEXP (x,0)) == REG_Z)
- r = BASE_POINTER_REGS;
-@@ -1957,7 +1960,7 @@
- /* This is a paranoid case. LEGITIMIZE_RELOAD_ADDRESS must exclude
- it but I have this situation with extremal
- optimization options. */
--
-+
- *l = 4;
- if (reg_base == reg_dest)
- return (AS2 (adiw,r26,%o1) CR_TAB
-@@ -4840,43 +4843,9 @@
- order_regs_for_local_alloc (void)
- {
- unsigned int i;
-- static const int order_0[] = {
-- 24,25,
-- 18,19,
-- 20,21,
-- 22,23,
-- 30,31,
-- 26,27,
-- 28,29,
-- 17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,
-- 0,1,
-- 32,33,34,35
-- };
-- static const int order_1[] = {
-- 18,19,
-- 20,21,
-- 22,23,
-- 24,25,
-- 30,31,
-- 26,27,
-- 28,29,
-- 17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,
-- 0,1,
-- 32,33,34,35
-- };
-- static const int order_2[] = {
-- 25,24,
-- 23,22,
-- 21,20,
-- 19,18,
-- 30,31,
-- 26,27,
-- 28,29,
-- 17,16,
-- 15,14,13,12,11,10,9,8,7,6,5,4,3,2,
-- 1,0,
-- 32,33,34,35
-- };
-+ static const int order_0[] = REG_ALLOC_ORDER_0;
-+ static const int order_1[] = REG_ALLOC_ORDER_1;
-+ static const int order_2[] = REG_ALLOC_ORDER_2;
-
- const int *order = (TARGET_ORDER_1 ? order_1 :
- TARGET_ORDER_2 ? order_2 :
-@@ -5490,6 +5459,14 @@
- || xx == arg_pointer_rtx)
- return 1; /* XXX frame & arg pointer checks */
- }
-+ else if (GET_CODE (x) == PRE_DEC || GET_CODE (x) == POST_INC)
-+ {
-+ int regno = REGNO (XEXP (x, 0));
-+ if (regno == REG_Z || regno == REG_Y || regno == REG_X)
-+ return 1;
-+ }
-+
-+
- return 0;
- }
-
-@@ -5692,7 +5669,7 @@
- return 1;
-
- /* Modes larger than QImode occupy consecutive registers. */
-- if (regno + GET_MODE_SIZE (mode) > FIRST_PSEUDO_REGISTER)
-+ if (regno <= (REG_Z + 1) && (regno + GET_MODE_SIZE (mode)) > (REG_Z + 2))
- return 0;
-
- /* All modes larger than QImode should start in an even register. */
-Index: avr.h
-===================================================================
---- gcc/config/avr/avr.h (revision 132380)
-+++ gcc/config/avr/avr.h (working copy)
-@@ -199,19 +199,29 @@
- 1,1,/* STACK */ \
- 1,1 /* arg pointer */ }
-
--#define REG_ALLOC_ORDER { \
-- 24,25, \
-- 18,19, \
-- 20,21, \
-- 22,23, \
-- 30,31, \
-- 26,27, \
-- 28,29, \
-- 17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2, \
-- 0,1, \
-- 32,33,34,35 \
-- }
-
-+#define REG_ALLOC_ORDER_0 {\
-+ 24,25,18,19,20,21,22,23,30,31,26,27,28,29, \
-+ 17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,\
-+ 0,1,\
-+ 32,33,34,35 }
-+
-+#define REG_ALLOC_ORDER_1 {\
-+ 18,19,20,21,22,23,24,25,30,31,26,27,28,29,\
-+ 17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,\
-+ 0,1,\
-+ 32,33,34,35 }
-+
-+#define REG_ALLOC_ORDER_2 {\
-+ 18,22,20,24,19,23,21,25,30,31,26,27,28,29, \
-+ 17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,\
-+ 0,1,\
-+ 32,33,34,35 }
-+
-+
-+#define REG_ALLOC_ORDER REG_ALLOC_ORDER_0
-+
-+
- #define ORDER_REGS_FOR_LOCAL_ALLOC order_regs_for_local_alloc ()
-
-
-@@ -453,11 +463,14 @@
- OPNUM, TYPE); \
- goto WIN; \
- } \
-+ if(0) \
-+ { \
- 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)) \
- { \
- push_reload (X, NULL_RTX, &X, NULL, \
-Index: avr.md
-===================================================================
---- gcc/config/avr/avr.md (revision 132380)
-+++ gcc/config/avr/avr.md (working copy)
-@@ -251,8 +251,8 @@
- (set_attr "cc" "none")])
-
- (define_insn "*movhi"
-- [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,m,d,*r,q,r")
-- (match_operand:HI 1 "general_operand" "r,m,rL,i,i,r,q"))]
-+ [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,Qm,d,*r,q,r")
-+ (match_operand:HI 1 "general_operand" "r,Qm,rL,i,i,r,q"))]
- "(register_operand (operands[0],HImode)
- || register_operand (operands[1],HImode) || const0_rtx == operands[1])"
- "* return output_movhi (insn, operands, NULL);"
diff --git a/devel/avr-gcc-devel/files/patch-bug30243 b/devel/avr-gcc-devel/files/patch-bug30243
deleted file mode 100644
index dcfa43dd6b66..000000000000
--- a/devel/avr-gcc-devel/files/patch-bug30243
+++ /dev/null
@@ -1,14 +0,0 @@
-Fix for GCC bug #30243.
-Index: gcc/builtins.c
-===================================================================
---- gcc/builtins.c (revision 126457)
-+++ gcc/builtins.c (working copy)
-@@ -5664,7 +5664,7 @@
- lo = 0;
- }
-
-- if (imode != rmode)
-+ if (imode > rmode)
- temp = gen_lowpart (rmode, temp);
- temp = expand_binop (rmode, and_optab, temp,
- immed_double_const (lo, hi, rmode),
diff --git a/devel/avr-gcc-devel/files/patch-bug33009 b/devel/avr-gcc-devel/files/patch-bug33009
deleted file mode 100644
index f0f94979b4f4..000000000000
--- a/devel/avr-gcc-devel/files/patch-bug33009
+++ /dev/null
@@ -1,81 +0,0 @@
-Index: gcc/rtl-factoring.c
-===================================================================
---- gcc/rtl-factoring.c (revision 132522)
-+++ gcc/rtl-factoring.c (working copy)
-@@ -551,8 +551,8 @@
- df_simulate_artificial_refs_at_end (bb, &live);
-
- /* Propagate until INSN if found. */
-- for (x = BB_END (bb); x != insn;)
-- df_simulate_one_insn_backwards (bb, insn, &live);
-+ for (x = BB_END (bb); x != insn; x = PREV_INSN(x))
-+ df_simulate_one_insn_backwards (bb, x, &live);
-
- /* Clear registers live after INSN. */
- renumbered_reg_set_to_hard_reg_set (&hlive, &live);
-@@ -562,7 +562,7 @@
- for (i = 0; i < length;)
- {
- rtx prev = PREV_INSN (x);
-- df_simulate_one_insn_backwards (bb, insn, &live);
-+ df_simulate_one_insn_backwards (bb, x, &live);
-
- if (INSN_P (x))
- {
-@@ -949,6 +949,17 @@
- return sym;
- }
-
-+/* Splits basic block at the requested insn and rebuilds dataflow. */
-+
-+static basic_block
-+asplit_block(basic_block bb, rtx insn)
-+{
-+ basic_block next;
-+ next = split_block (bb, insn)->dest;
-+ df_analyze ();
-+ return next;
-+}
-+
- /* Ensures that INSN is the last insn in its block and returns the block label
- of the next block. */
-
-@@ -959,7 +970,7 @@
- if ((insn == BB_END (bb)) && (bb->next_bb != EXIT_BLOCK_PTR))
- return block_label (bb->next_bb);
- else
-- return block_label (split_block (bb, insn)->dest);
-+ return block_label (asplit_block (bb, insn));
- }
-
- /* Ensures that the last insns of the best pattern and its matching sequences
-@@ -1008,8 +1019,9 @@
-
- /* Emit an indirect jump via the link register after the sequence acting
- as the return insn. Also emit a barrier and update the basic block. */
-- retjmp = emit_jump_insn_after (gen_indirect_jump (pattern_seqs->link_reg),
-- BB_END (bb));
-+ if (!find_reg_note (BB_END(bb), REG_NORETURN, NULL))
-+ retjmp = emit_jump_insn_after (gen_indirect_jump (pattern_seqs->link_reg),
-+ BB_END (bb));
- emit_barrier_after (BB_END (bb));
-
- /* Replace all outgoing edges with a new one to the block of RETLABEL. */
-@@ -1025,7 +1037,7 @@
- for (; i < sb->length; i++)
- insn = prev_insn_in_block (insn);
-
-- sb->label = block_label (split_block (bb, insn)->dest);
-+ sb->label = block_label (asplit_block (bb, insn));
- }
-
- /* Emit an insn saving the return address to the link register before the
-@@ -1067,7 +1079,7 @@
- /* Delete the insns of the sequence. */
- for (i = 0; i < sb->length; i++)
- insn = prev_insn_in_block (insn);
-- delete_basic_block (split_block (bb, insn)->dest);
-+ delete_basic_block (asplit_block (bb, insn));
-
- /* Emit an insn saving the return address to the link register
- before the deleted sequence. */
diff --git a/devel/avr-gcc-devel/files/patch-bug34210-35508 b/devel/avr-gcc-devel/files/patch-bug34210-35508
deleted file mode 100644
index 0ca6774b1735..000000000000
--- a/devel/avr-gcc-devel/files/patch-bug34210-35508
+++ /dev/null
@@ -1,48 +0,0 @@
-Fix for bugs #34210, #35508.
-
-===================================================================
---- libgcc/config.host.orig 2008-01-25 13:49:04.000000000 -0700
-+++ libgcc/config.host 2008-03-22 22:04:25.965018200 -0600
-@@ -77,6 +77,9 @@ strongarm*-*-*)
- arm*-*-*)
- cpu_type=arm
- ;;
-+avr-*-*)
-+ cpu_type=avr
-+ ;;
- bfin*-*)
- cpu_type=bfin
- ;;
-@@ -243,6 +246,8 @@ arm*-*-kaos*)
- avr-*-rtems*)
- ;;
- avr-*-*)
-+ # Make HImode functions for AVR
-+ tmake_file=${cpu_type}/t-avr
- ;;
- bfin*-elf*)
- ;;
-Index: config/avr/t-avr
-===================================================================
---- libgcc/config/avr/t-avr (revision 0)
-+++ libgcc/config/avr/t-avr (revision 0)
-@@ -0,0 +1,19 @@
-+# Extra 16-bit integer functions.
-+intfuncs16 = _absvXX2 _addvXX3 _subvXX3 _mulvXX3 _negvXX2 _ffsXX2 _clzXX2 \
-+ _ctzXX2 _popcountXX2 _parityXX2
-+hiintfuncs16 = $(subst XX,hi,$(intfuncs16))
-+siintfuncs16 = $(subst XX,si,$(intfuncs16))
-+
-+iter-items := $(hiintfuncs16)
-+iter-labels := $(siintfuncs16)
-+iter-sizes := $(patsubst %,2,$(siintfuncs16)) $(patsubst %,2,$(hiintfuncs16))
-+
-+
-+include $(srcdir)/empty.mk $(patsubst %,$(srcdir)/siditi-object.mk,$(iter-items))
-+libgcc-objects += $(patsubst %,%$(objext),$(hiintfuncs16))
-+
-+ifeq ($(enable_shared),yes)
-+libgcc-s-objects += $(patsubst %,%_s$(objext),$(hiintfuncs16))
-+endif
-+
-+
diff --git a/devel/avr-gcc-devel/files/patch-bug34932 b/devel/avr-gcc-devel/files/patch-bug34932
deleted file mode 100644
index 7c205ace9b38..000000000000
--- a/devel/avr-gcc-devel/files/patch-bug34932
+++ /dev/null
@@ -1,20 +0,0 @@
-Index: avr.md
-===================================================================
---- gcc/config/avr/avr.md (revision 132947)
-+++ gcc/config/avr/avr.md (working copy)
-@@ -585,13 +585,13 @@
- adc %B0,__zero_reg__"
- [(set_attr "length" "2")
- (set_attr "cc" "set_n")])
--
-+;disable this as reload has problems with it.
- (define_insn "*addhi3_zero_extend2"
- [(set (match_operand:HI 0 "register_operand" "=r")
- (plus:HI
- (zero_extend:HI (match_operand:QI 1 "register_operand" "%0"))
- (zero_extend:HI (match_operand:QI 2 "register_operand" "r"))))]
-- ""
-+ "0"
- "add %0,%2
- mov %B0,__zero_reg__
- adc %B0,__zero_reg__"
diff --git a/devel/avr-gcc-devel/files/patch-bug35013 b/devel/avr-gcc-devel/files/patch-bug35013
deleted file mode 100644
index 595d92974255..000000000000
--- a/devel/avr-gcc-devel/files/patch-bug35013
+++ /dev/null
@@ -1,65 +0,0 @@
-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 @@
- 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);
-+extern int text_segment_operand (rtx op, enum machine_mode mode);
- 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 @@
-
- default:
- if (CONSTANT_ADDRESS_P (addr)
-- && ((GET_CODE (addr) == SYMBOL_REF && SYMBOL_REF_FUNCTION_P (addr))
-- || GET_CODE (addr) == LABEL_REF))
-+ && text_segment_operand (addr, VOIDmode))
- {
- fprintf (file, "pm(");
- output_addr_const (file,addr);
-@@ -1428,6 +1427,26 @@
- && INTVAL (op) <= 0xff && INTVAL (op) >= 0);
- }
-
-+/* Return true if OP is a program memory reference.*/
-+int
-+text_segment_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)
-+{
-+ switch (GET_CODE (op))
-+ {
-+ case LABEL_REF :
-+ return true;
-+ case SYMBOL_REF :
-+ return SYMBOL_REF_FUNCTION_P (op);
-+ case PLUS :
-+ /* Assume canonical format of symbol + constant.
-+ Fall through. */
-+ case CONST :
-+ return text_segment_operand (XEXP (op, 0), VOIDmode);
-+ default :
-+ return false;
-+ }
-+}
-+
- /* 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 @@
- avr_assemble_integer (rtx x, unsigned int size, int aligned_p)
- {
- if (size == POINTER_SIZE / BITS_PER_UNIT && aligned_p
-- && ((GET_CODE (x) == SYMBOL_REF && SYMBOL_REF_FUNCTION_P (x))
-- || GET_CODE (x) == LABEL_REF))
-+ && text_segment_operand (x, VOIDmode) )
- {
- fputs ("\t.word\tpm(", asm_out_file);
- output_addr_const (asm_out_file, x);
diff --git a/devel/avr-gcc-devel/files/patch-bug35542 b/devel/avr-gcc-devel/files/patch-bug35542
deleted file mode 100644
index b36c5c6ab749..000000000000
--- a/devel/avr-gcc-devel/files/patch-bug35542
+++ /dev/null
@@ -1,26 +0,0 @@
-Committed on HEAD/4.4
---------------------------------------------------------------------------------
-Index: fwprop.c
-===================================================================
---- gcc/fwprop.c (revision 131704)
-+++ gcc/fwprop.c (working copy)
-@@ -882,7 +882,6 @@
- return try_fwprop_subst (use, loc, new, def_insn, set_reg_equal);
- }
-
--
- /* Given a use USE of an insn, if it has a single reaching
- definition, try to forward propagate it into that insn. */
-
-@@ -921,9 +920,10 @@
- else
- parent = PATTERN (use_insn);
-
-- if (!loc_mentioned_in_p (DF_REF_LOC (use), parent))
-+ if (!reg_mentioned_p (DF_REF_REG (use), parent))
- return;
-
-+
- def_insn = DF_REF_INSN (def);
- if (multiple_sets (def_insn))
- return;
diff --git a/devel/avr-gcc-devel/files/patch-cross-installation b/devel/avr-gcc-devel/files/patch-cross-installation
deleted file mode 100644
index 1cfd7e85579d..000000000000
--- a/devel/avr-gcc-devel/files/patch-cross-installation
+++ /dev/null
@@ -1,35 +0,0 @@
-This hack avoids tampering with ${LOCALBASE}/avr/bin/{gcc,c++,g++} which
-would conflict with a possibly installed version of devel/avr-gcc.
-Funny enough, these binaries would only be installed in case ${LOCALBASE}/avr/bin
-is already present.
---- gcc/Makefile.in~ 2008-05-11 20:54:15.000000000 +0200
-+++ gcc/Makefile.in 2008-07-28 17:05:26.000000000 +0200
-@@ -3979,10 +3979,7 @@
- -( cd $(DESTDIR)$(bindir) && \
- $(LN) $(GCC_INSTALL_NAME)$(exeext) $(target_noncanonical)-gcc-$(version)$(exeext) )
- -if [ -f gcc-cross$(exeext) ] ; then \
-- if [ -d $(DESTDIR)$(gcc_tooldir)/bin/. ] ; then \
-- rm -f $(DESTDIR)$(gcc_tooldir)/bin/gcc$(exeext); \
-- $(INSTALL_PROGRAM) gcc-cross$(exeext) $(DESTDIR)$(gcc_tooldir)/bin/gcc$(exeext); \
-- else true; fi; \
-+ : \
- else \
- rm -f $(DESTDIR)$(bindir)/$(target_noncanonical)-gcc-tmp$(exeext); \
- ( cd $(DESTDIR)$(bindir) && \
---- gcc/cp/Make-lang.in~ 2008-02-27 10:26:24.000000000 +0100
-+++ gcc/cp/Make-lang.in 2008-07-28 17:07:32.000000000 +0200
-@@ -154,13 +154,7 @@
- $(LN) $(GXX_INSTALL_NAME)$(exeext) $(CXX_INSTALL_NAME)$(exeext) )
- -if [ -f cc1plus$(exeext) ] ; then \
- if [ -f g++-cross$(exeext) ] ; then \
-- if [ -d $(DESTDIR)$(gcc_tooldir)/bin/. ] ; then \
-- rm -f $(DESTDIR)$(gcc_tooldir)/bin/g++$(exeext); \
-- $(INSTALL_PROGRAM) g++-cross$(exeext) $(DESTDIR)$(gcc_tooldir)/bin/g++$(exeext); \
-- rm -f $(DESTDIR)$(gcc_tooldir)/bin/c++$(exeext); \
-- ( cd $(DESTDIR)$(gcc_tooldir)/bin && \
-- $(LN) g++$(exeext) c++$(exeext) ); \
-- else true; fi; \
-+ : \
- else \
- rm -f $(DESTDIR)$(bindir)/$(GXX_TARGET_INSTALL_NAME)$(exeext); \
- ( cd $(DESTDIR)$(bindir) && \
diff --git a/devel/avr-gcc-devel/files/patch-libiberty-Makefile.in b/devel/avr-gcc-devel/files/patch-libiberty-Makefile.in
deleted file mode 100644
index 0e0b3ce31173..000000000000
--- a/devel/avr-gcc-devel/files/patch-libiberty-Makefile.in
+++ /dev/null
@@ -1,12 +0,0 @@
---- 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 @@
- @MAINT@ echo stamp > stamp-functions
-
- INSTALL_DEST = @INSTALL_DEST@
--install: install_to_$(INSTALL_DEST) install-subdir
-+#install: install_to_$(INSTALL_DEST) install-subdir
-+install:
-
- install_to_libdir: all
- ${mkinstalldirs} $(DESTDIR)$(libdir)$(MULTISUBDIR)
diff --git a/devel/avr-gcc-devel/files/patch-newdevices b/devel/avr-gcc-devel/files/patch-newdevices
deleted file mode 100644
index 4120008cc629..000000000000
--- a/devel/avr-gcc-devel/files/patch-newdevices
+++ /dev/null
@@ -1,92 +0,0 @@
---- 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
-@@ -224,6 +224,7 @@ static const struct mcu_type_s avr_mcu_t
- { "avr35", ARCH_AVR35, NULL },
- { "at90usb82", ARCH_AVR35, "__AVR_AT90USB82__" },
- { "at90usb162", ARCH_AVR35, "__AVR_AT90USB162__" },
-+ { "attiny167", ARCH_AVR35, "__AVR_ATtiny167__" },
- /* Enhanced, <= 8K. */
- { "avr4", ARCH_AVR4, NULL },
- { "atmega8", ARCH_AVR4, "__AVR_ATmega8__" },
-@@ -278,6 +278,9 @@ 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__" },
-+ { "atmega32m1", ARCH_AVR5, "__AVR_ATmega32M1__" },
-+ { "atmega32u4", ARCH_AVR5, "__AVR_ATmega32U4__" },
- { "at90usb646", ARCH_AVR5, "__AVR_AT90USB646__" },
- { "at90usb647", ARCH_AVR5, "__AVR_AT90USB647__" },
- { "at94k", ARCH_AVR5, "__AVR_AT94K__" },
---- 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
-@@ -63,6 +63,7 @@ MULTILIB_MATCHES = \
- mmcu?avr31=mmcu?atmega103 \
- mmcu?avr35=mmcu?at90usb82 \
- mmcu?avr35=mmcu?at90usb162 \
-+ mmcu?avr35=mmcu?attiny167 \
- mmcu?avr4=mmcu?atmega48 \
- mmcu?avr4=mmcu?atmega48p \
- mmcu?avr4=mmcu?atmega8 \
-@@ -114,6 +114,9 @@ MULTILIB_MATCHES = \
- mmcu?avr5=mmcu?at90can64 \
- mmcu?avr5=mmcu?at90pwm216 \
- mmcu?avr5=mmcu?at90pwm316 \
-+ mmcu?avr5=mmcu?atmega32c1 \
-+ mmcu?avr5=mmcu?atmega32m1 \
-+ mmcu?avr5=mmcu?atmega32u4 \
- mmcu?avr5=mmcu?at90usb646 \
- mmcu?avr5=mmcu?at90usb647 \
- mmcu?avr5=mmcu?at94k \
---- gcc/config/avr/avr.h.orig Wed Dec 19 13:39:10 2007
-+++ gcc/config/avr/avr.h Wed Dec 19 14:02:06 2007
-@@ -853,7 +853,8 @@ mmcu=*:-mmcu=%*}"
- mmcu=at43*|\
- mmcu=at76*|\
- mmcu=at90usb82|\
-- mmcu=at90usb162: -m avr3}\
-+ mmcu=at90usb162|\
-+ mmcu=attiny167: -m avr3}\
- %{mmcu=atmega8*|\
- mmcu=atmega48*|\
- mmcu=at90pwm1|\
-@@ -869,6 +869,9 @@ mmcu=*:-mmcu=%*}"
- mmcu=at90can*|\
- mmcu=at90pwm216|\
- mmcu=at90pwm316|\
-+ mmcu=atmega32c1|\
-+ mmcu=atmega32m1|\
-+ mmcu=atmega32u4|\
- mmcu=at90usb64*|\
- mmcu=at90usb128*|\
- mmcu=at94k: -m avr5}\
-@@ -900,7 +901,11 @@ mmcu=*:-mmcu=%*}"
- mmcu=attiny48|\
- mmcu=attiny88|\
-+ mmcu=attiny167|\
- mmcu=at90can*|\
- mmcu=at90pwm*|\
-+ mmcu=atmega32c1|\
-+ mmcu=atmega32m1|\
-+ mmcu=atmega32u4|\
- mmcu=at90usb*: -Tdata 0x800100}\
- %{mmcu=atmega640|\
- mmcu=atmega1280|\
-@@ -958,6 +960,7 @@ mmcu=*:-mmcu=%*}"
- %{mmcu=attiny43u:crttn43u.o%s} \
- %{mmcu=attiny48:crttn48.o%s} \
- %{mmcu=attiny88:crttn88.o%s} \
-+%{mmcu=attiny167:crttn167.o%s} \
- %{mmcu=at43usb320|mmcu=avr3:crt43320.o%s} \
- %{mmcu=at43usb355:crt43355.o%s} \
- %{mmcu=at76c711:crt76711.o%s} \
-@@ -1009,6 +1011,9 @@ mmcu=*:-mmcu=%*}"
- %{mmcu=at90can64:crtcan64.o%s} \
- %{mmcu=at90pwm216:crt90pwm216.o%s} \
- %{mmcu=at90pwm316:crt90pwm316.o%s} \
-+%{mmcu=atmega32c1:crtm32c1.o%s} \
-+%{mmcu=atmega32m1:crtm32m1.o%s} \
-+%{mmcu=atmega32u4:crtm32u4.o%s} \
- %{mmcu=at90usb646:crtusb646.o%s} \
- %{mmcu=at90usb647:crtusb647.o%s} \
- %{mmcu=at94k:crtat94k.o%s} \
diff --git a/devel/avr-gcc-devel/files/patch-xmega b/devel/avr-gcc-devel/files/patch-xmega
deleted file mode 100644
index 6e9217941e43..000000000000
--- a/devel/avr-gcc-devel/files/patch-xmega
+++ /dev/null
@@ -1,733 +0,0 @@
---- gcc/config/avr/avr.c.orig 2008-06-08 10:24:28.171355800 -0600
-+++ gcc/config/avr/avr.c 2008-06-08 10:29:42.276013800 -0600
-@@ -51,6 +51,7 @@
- static int avr_naked_function_p (tree);
- static int interrupt_function_p (tree);
- static int signal_function_p (tree);
-+static int nmi_function_p (tree);
- 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 @@ int avr_asm_only_p = 0;
- int avr_have_movw_lpmx_p = 0;
-
- static const struct base_arch_s avr_arch_types[] = {
-- { 1, 0, 0, 0, 0, 0, 0, 0, NULL }, /* unknown device specified */
-- { 1, 0, 0, 0, 0, 0, 0, 0, "__AVR_ARCH__=1" },
-- { 0, 0, 0, 0, 0, 0, 0, 0, "__AVR_ARCH__=2" },
-- { 0, 0, 0, 1, 0, 0, 0, 0, "__AVR_ARCH__=25" },
-- { 0, 0, 1, 0, 0, 0, 0, 0, "__AVR_ARCH__=3" },
-- { 0, 0, 1, 0, 1, 0, 0, 0, "__AVR_ARCH__=31" },
-- { 0, 0, 1, 1, 0, 0, 0, 0, "__AVR_ARCH__=35" },
-- { 0, 1, 0, 1, 0, 0, 0, 0, "__AVR_ARCH__=4" },
-- { 0, 1, 1, 1, 0, 0, 0, 0, "__AVR_ARCH__=5" },
-- { 0, 1, 1, 1, 1, 1, 0, 0, "__AVR_ARCH__=51" },
-- { 0, 1, 1, 1, 1, 1, 1, 0, "__AVR_ARCH__=6" }
-+ { 1, 0, 0, 0, 0, 0, 0, 0, 0, NULL }, /* Unknown device specified. */
-+ { 1, 0, 0, 0, 0, 0, 0, 0, 0, "__AVR_ARCH__=1" },
-+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, "__AVR_ARCH__=2" },
-+ { 0, 0, 0, 1, 0, 0, 0, 0, 0, "__AVR_ARCH__=25" },
-+ { 0, 0, 1, 0, 0, 0, 0, 0, 0, "__AVR_ARCH__=3" },
-+ { 0, 0, 1, 0, 1, 0, 0, 0, 0, "__AVR_ARCH__=31" },
-+ { 0, 0, 1, 1, 0, 0, 0, 0, 0, "__AVR_ARCH__=35" },
-+ { 0, 1, 0, 1, 0, 0, 0, 0, 0, "__AVR_ARCH__=4" },
-+ { 0, 1, 1, 1, 0, 0, 0, 0, 0, "__AVR_ARCH__=5" },
-+ { 0, 1, 1, 1, 1, 1, 0, 0, 0, "__AVR_ARCH__=51" },
-+ { 0, 1, 1, 1, 1, 1, 1, 0, 0, "__AVR_ARCH__=6" },
-+ { 0, 1, 0, 1, 0, 0, 0, 1, 0, "__AVR_ARCH__=101" },
-+ { 0, 1, 1, 1, 0, 0, 0, 1, 0, "__AVR_ARCH__=102" },
-+ { 0, 1, 1, 1, 0, 0, 0, 1, 1, "__AVR_ARCH__=103" },
-+ { 0, 1, 1, 1, 1, 1, 0, 1, 0, "__AVR_ARCH__=104" },
-+ { 0, 1, 1, 1, 1, 1, 0, 1, 1, "__AVR_ARCH__=105" },
-+ { 0, 1, 1, 1, 1, 1, 1, 1, 0, "__AVR_ARCH__=106" },
-+ { 0, 1, 1, 1, 1, 1, 1, 1, 1, "__AVR_ARCH__=107" }
- };
-
- /* These names are used as the index into the avr_arch_types[] table
-@@ -146,7 +154,14 @@ enum avr_arch
- ARCH_AVR4,
- ARCH_AVR5,
- ARCH_AVR51,
-- ARCH_AVR6
-+ ARCH_AVR6,
-+ ARCH_AVRXMEGA1,
-+ ARCH_AVRXMEGA2,
-+ ARCH_AVRXMEGA3,
-+ ARCH_AVRXMEGA4,
-+ ARCH_AVRXMEGA5,
-+ ARCH_AVRXMEGA6,
-+ ARCH_AVRXMEGA7
- };
-
- struct mcu_type_s {
-@@ -279,6 +294,18 @@ static const struct mcu_type_s avr_mcu_t
- { "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. */
-+ /* Xmega, > 8K, <= 64K FLASH, > 64K RAM. */
-+ /* Xmega, > 64K, <= 128K FLASH, <= 64K RAM. */
-+ /* Xmega, > 64K, <= 128K FLASH, > 64K RAM. */
-+ { "avrxmega5", ARCH_AVRXMEGA5, NULL },
-+ { "atxmega64a1", ARCH_AVRXMEGA5, "__AVR_ATxmega64A1__" },
-+ /* Xmega, > 128K, <= 256K FLASH, <= 64K RAM. */
-+ /* 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__" },
-@@ -452,6 +479,21 @@ signal_function_p (tree func)
- return a != NULL_TREE;
- }
-
-+/* Return nonzero if FUNC is a nmi function as specified
-+ by the "nmi" attribute. */
-+
-+static int
-+nmi_function_p (tree func)
-+{
-+ tree a;
-+
-+ if (TREE_CODE (func) != FUNCTION_DECL)
-+ return 0;
-+
-+ a = lookup_attribute ("nmi", DECL_ATTRIBUTES (func));
-+ return a != NULL_TREE;
-+}
-+
- /* Return nonzero if FUNC is a OS_task function. */
-
- static int
-@@ -611,6 +653,7 @@ expand_prologue (void)
- 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);
-+ cfun->machine->is_nmi = nmi_function_p (current_function_decl);
- cfun->machine->is_OS_task = avr_OS_task_function_p (current_function_decl);
-
- /* Prologue: naked. */
-@@ -646,7 +689,7 @@ expand_prologue (void)
-
- /* Push SREG. */
- insn = emit_move_insn (tmp_reg_rtx,
-- gen_rtx_MEM (QImode, GEN_INT (SREG_ADDR)));
-+ gen_rtx_MEM (QImode, GEN_INT (AVR_SREG_ADDR)));
- RTX_FRAME_RELATED_P (insn) = 1;
- insn = emit_move_insn (pushbyte, tmp_reg_rtx);
- RTX_FRAME_RELATED_P (insn) = 1;
-@@ -656,7 +699,7 @@ expand_prologue (void)
- && (TEST_HARD_REG_BIT (set, REG_Z) && TEST_HARD_REG_BIT (set, REG_Z + 1)))
- {
- insn = emit_move_insn (tmp_reg_rtx,
-- gen_rtx_MEM (QImode, GEN_INT (RAMPZ_ADDR)));
-+ gen_rtx_MEM (QImode, GEN_INT (AVR_RAMPZ_ADDR)));
- RTX_FRAME_RELATED_P (insn) = 1;
- insn = emit_move_insn (pushbyte, tmp_reg_rtx);
- RTX_FRAME_RELATED_P (insn) = 1;
-@@ -929,14 +972,14 @@ expand_epilogue (void)
- && (TEST_HARD_REG_BIT (set, REG_Z) && TEST_HARD_REG_BIT (set, REG_Z + 1)))
- {
- emit_insn (gen_popqi (tmp_reg_rtx));
-- emit_move_insn (gen_rtx_MEM(QImode, GEN_INT(RAMPZ_ADDR)),
-+ emit_move_insn (gen_rtx_MEM(QImode, GEN_INT(AVR_RAMPZ_ADDR)),
- tmp_reg_rtx);
- }
-
- /* Restore SREG using tmp reg as scratch. */
- emit_insn (gen_popqi (tmp_reg_rtx));
-
-- emit_move_insn (gen_rtx_MEM(QImode, GEN_INT(SREG_ADDR)),
-+ emit_move_insn (gen_rtx_MEM(QImode, GEN_INT(AVR_SREG_ADDR)),
- tmp_reg_rtx);
-
- /* Restore tmp REG. */
-@@ -1705,8 +1748,9 @@ output_movhi (rtx insn, rtx operands[],
- }
- /* Use simple load of stack pointer if no interrupts are used
- or inside main or signal function prologue where they disabled. */
-- else if (TARGET_NO_INTERRUPTS
-- || (reload_completed
-+ else if (TARGET_NO_INTERRUPTS
-+ || (!AVR_XMEGA
-+ && reload_completed
- && cfun->machine->is_signal
- && prologue_epilogue_contains (insn)))
- {
-@@ -1715,7 +1759,8 @@ output_movhi (rtx insn, rtx operands[],
- AS2 (out,__SP_L__,%A1));
- }
- /* In interrupt prolog we know interrupts are enabled. */
-- else if (reload_completed
-+ else if (!AVR_XMEGA
-+ && reload_completed
- && cfun->machine->is_interrupt
- && prologue_epilogue_contains (insn))
- {
-@@ -1725,12 +1770,25 @@ output_movhi (rtx insn, rtx operands[],
- "sei" CR_TAB
- AS2 (out,__SP_L__,%A1));
- }
-- *l = 5;
-- return (AS2 (in,__tmp_reg__,__SREG__) CR_TAB
-- "cli" CR_TAB
-- AS2 (out,__SP_H__,%B1) CR_TAB
-- AS2 (out,__SREG__,__tmp_reg__) CR_TAB
-- AS2 (out,__SP_L__,%A1));
-+ if(AVR_XMEGA)
-+ {
-+ *l = 6;
-+ return (AS2 (mov,__tmp_reg__,r24) CR_TAB
-+ AS2 (ldi,r24,0xD8) CR_TAB
-+ AS2 (out,__CCP__,r24) CR_TAB
-+ AS2 (out,__SP_H__,%B1) CR_TAB
-+ AS2 (out,__SP_L__,%A1) CR_TAB
-+ AS2 (mov,r24,__tmp_reg__));
-+ }
-+ else
-+ {
-+ *l = 5;
-+ return (AS2 (in,__tmp_reg__,__SREG__) CR_TAB
-+ "cli" CR_TAB
-+ AS2 (out,__SP_H__,%B1) CR_TAB
-+ AS2 (out,__SREG__,__tmp_reg__) CR_TAB
-+ AS2 (out,__SP_L__,%A1));
-+ }
- }
- else if (test_hard_reg_class (STACK_REG, src))
- {
-@@ -1865,7 +1923,7 @@ out_movqi_r_mr (rtx insn, rtx op[], int
-
- if (CONSTANT_ADDRESS_P (x))
- {
-- if (CONST_INT_P (x) && INTVAL (x) == SREG_ADDR)
-+ if (CONST_INT_P (x) && INTVAL (x) == AVR_SREG_ADDR)
- {
- *l = 1;
- return AS2 (in,%0,__SREG__);
-@@ -1873,7 +1931,8 @@ out_movqi_r_mr (rtx insn, rtx op[], int
- if (avr_io_address_p (x, 1))
- {
- *l = 1;
-- return AS2 (in,%0,%1-0x20);
-+ op[2] = GEN_INT(AVR_IO_OFFSET);
-+ return AS2 (in,%0,%1-%2);
- }
- *l = 2;
- return AS2 (lds,%0,%1);
-@@ -2061,8 +2120,9 @@ out_movhi_r_mr (rtx insn, rtx op[], int
- if (avr_io_address_p (base, 2))
- {
- *l = 2;
-- return (AS2 (in,%A0,%A1-0x20) CR_TAB
-- AS2 (in,%B0,%B1-0x20));
-+ op[2] = GEN_INT(AVR_IO_OFFSET);
-+ return (AS2 (in,%A0,%A1-%2) CR_TAB
-+ AS2 (in,%B0,%B1-%2));
- }
- *l = 4;
- return (AS2 (lds,%A0,%A1) CR_TAB
-@@ -2553,7 +2613,7 @@ out_movqi_mr_r (rtx insn, rtx op[], int
-
- if (CONSTANT_ADDRESS_P (x))
- {
-- if (CONST_INT_P (x) && INTVAL (x) == SREG_ADDR)
-+ if (CONST_INT_P (x) && INTVAL (x) == AVR_SREG_ADDR)
- {
- *l = 1;
- return AS2 (out,__SREG__,%1);
-@@ -2561,7 +2621,8 @@ out_movqi_mr_r (rtx insn, rtx op[], int
- if (avr_io_address_p (x, 1))
- {
- *l = 1;
-- return AS2 (out,%0-0x20,%1);
-+ op[2] = GEN_INT(AVR_IO_OFFSET);
-+ return AS2 (out,%0-%2,%1);
- }
- *l = 2;
- return AS2 (sts,%0,%1);
-@@ -2640,11 +2701,20 @@ out_movhi_mr_r (rtx insn, rtx op[], int
- if (avr_io_address_p (base, 2))
- {
- *l = 2;
-- return (AS2 (out,%B0-0x20,%B1) CR_TAB
-- AS2 (out,%A0-0x20,%A1));
-+ op[2] = GEN_INT(AVR_IO_OFFSET);
-+ if (AVR_XMEGA)
-+ return (AS2 (out,%A0-%2,%B1) CR_TAB
-+ AS2 (out,%B0-%2,%A1));
-+ else
-+ return (AS2 (out,%B0-%2,%B1) CR_TAB
-+ AS2 (out,%A0-%2,%A1));
- }
-- return *l = 4, (AS2 (sts,%B0,%B1) CR_TAB
-- AS2 (sts,%A0,%A1));
-+ if (AVR_XMEGA)
-+ return *l = 4, (AS2 (sts,%A0,%A1) CR_TAB
-+ AS2 (sts,%B0,%B1));
-+ else
-+ return *l = 4, (AS2 (sts,%B0,%B1) CR_TAB
-+ AS2 (sts,%A0,%A1));
- }
- if (reg_base > 0)
- {
-@@ -2659,11 +2729,20 @@ out_movhi_mr_r (rtx insn, rtx op[], int
- AS2 (adiw,r26,1) CR_TAB
- AS2 (st,X,__tmp_reg__));
- else
-- return *l=5, (AS2 (mov,__tmp_reg__,r27) CR_TAB
-- AS2 (adiw,r26,1) CR_TAB
-- AS2 (st,X,__tmp_reg__) CR_TAB
-- AS2 (sbiw,r26,1) CR_TAB
-- AS2 (st,X,r26));
-+ {
-+ if (!AVR_XMEGA)
-+ return *l=5, (AS2 (mov,__tmp_reg__,r27) CR_TAB
-+ AS2 (adiw,r26,1) CR_TAB
-+ AS2 (st,X,__tmp_reg__) CR_TAB
-+ AS2 (sbiw,r26,1) CR_TAB
-+ AS2 (st,X,r26));
-+ else
-+ return *l=5, (AS2 (mov,__tmp_reg__,r27) CR_TAB
-+ AS2 (st,X,r26) CR_TAB
-+ AS2 (adiw,r26,1) CR_TAB
-+ AS2 (st,X,__tmp_reg__) CR_TAB
-+ AS2 (sbiw,r26,1));
-+ }
- }
- else
- {
-@@ -2671,14 +2750,27 @@ out_movhi_mr_r (rtx insn, rtx op[], int
- return *l=2, (AS2 (st,X+,%A1) CR_TAB
- AS2 (st,X,%B1));
- else
-- return *l=3, (AS2 (adiw,r26,1) CR_TAB
-- AS2 (st,X,%B1) CR_TAB
-- AS2 (st,-X,%A1));
-+ {
-+ if (!AVR_XMEGA)
-+ return *l=3, (AS2 (adiw,r26,1) CR_TAB
-+ AS2 (st,X,%B1) CR_TAB
-+ AS2 (st,-X,%A1));
-+ else
-+ return *l=3, (AS2 (st,X+,%A1) CR_TAB
-+ AS2 (st,X,%B1) CR_TAB
-+ AS2 (sbiw,r26,1));
-+ }
- }
- }
- else
-- return *l=2, (AS2 (std,%0+1,%B1) CR_TAB
-- AS2 (st,%0,%A1));
-+ {
-+ if (!AVR_XMEGA)
-+ return *l=2, (AS2 (std,%0+1,%B1) CR_TAB
-+ AS2 (st,%0,%A1));
-+ else
-+ return *l=2, (AS2 (st,%0,%A1) CR_TAB
-+ AS2 (std,%0+1,%B1));
-+ }
- }
- else if (GET_CODE (base) == PLUS)
- {
-@@ -2689,48 +2781,104 @@ out_movhi_mr_r (rtx insn, rtx op[], int
- if (reg_base != REG_Y)
- fatal_insn ("incorrect insn:",insn);
-
-- if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (dest)))
-- return *l = 4, (AS2 (adiw,r28,%o0-62) CR_TAB
-- AS2 (std,Y+63,%B1) CR_TAB
-- AS2 (std,Y+62,%A1) CR_TAB
-- AS2 (sbiw,r28,%o0-62));
--
-- return *l = 6, (AS2 (subi,r28,lo8(-%o0)) CR_TAB
-- AS2 (sbci,r29,hi8(-%o0)) CR_TAB
-- AS2 (std,Y+1,%B1) CR_TAB
-- AS2 (st,Y,%A1) CR_TAB
-- AS2 (subi,r28,lo8(%o0)) CR_TAB
-- AS2 (sbci,r29,hi8(%o0)));
-+ if (!AVR_XMEGA)
-+ {
-+ if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (dest)))
-+ return *l = 4, (AS2 (adiw,r28,%o0-62) CR_TAB
-+ AS2 (std,Y+63,%B1) CR_TAB
-+ AS2 (std,Y+62,%A1) CR_TAB
-+ AS2 (sbiw,r28,%o0-62));
-+
-+ return *l = 6, (AS2 (subi,r28,lo8(-%o0)) CR_TAB
-+ AS2 (sbci,r29,hi8(-%o0)) CR_TAB
-+ AS2 (std,Y+1,%B1) CR_TAB
-+ AS2 (st,Y,%A1) CR_TAB
-+ AS2 (subi,r28,lo8(%o0)) CR_TAB
-+ AS2 (sbci,r29,hi8(%o0)));
-+ }
-+ else
-+ {
-+ if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (dest)))
-+ return *l = 4, (AS2 (adiw,r28,%o0-62) CR_TAB
-+ AS2 (std,Y+62,%A1) CR_TAB
-+ AS2 (std,Y+63,%B1) CR_TAB
-+ AS2 (sbiw,r28,%o0-62));
-+
-+ return *l = 6, (AS2 (subi,r28,lo8(-%o0)) CR_TAB
-+ AS2 (sbci,r29,hi8(-%o0)) CR_TAB
-+ AS2 (st,Y,%A1) CR_TAB
-+ AS2 (std,Y+1,%B1) CR_TAB
-+ AS2 (subi,r28,lo8(%o0)) CR_TAB
-+ AS2 (sbci,r29,hi8(%o0)));
-+ }
- }
- if (reg_base == REG_X)
- {
- /* (X + d) = R */
- if (reg_src == REG_X)
- {
-- *l = 7;
-- return (AS2 (mov,__tmp_reg__,r26) CR_TAB
-- AS2 (mov,__zero_reg__,r27) CR_TAB
-- AS2 (adiw,r26,%o0+1) CR_TAB
-- AS2 (st,X,__zero_reg__) CR_TAB
-- AS2 (st,-X,__tmp_reg__) CR_TAB
-- AS1 (clr,__zero_reg__) CR_TAB
-+ if (!AVR_XMEGA)
-+ {
-+ *l = 7;
-+ return (AS2 (mov,__tmp_reg__,r26) CR_TAB
-+ AS2 (mov,__zero_reg__,r27) CR_TAB
-+ AS2 (adiw,r26,%o0+1) CR_TAB
-+ AS2 (st,X,__zero_reg__) CR_TAB
-+ AS2 (st,-X,__tmp_reg__) CR_TAB
-+ AS1 (clr,__zero_reg__) CR_TAB
-+ AS2 (sbiw,r26,%o0));
-+ }
-+ else
-+ {
-+ *l = 7;
-+ return (AS2 (mov,__tmp_reg__,r26) CR_TAB
-+ AS2 (mov,__zero_reg__,r27) CR_TAB
-+ AS2 (adiw,r26,%o0) CR_TAB
-+ AS2 (st,X+,__tmp_reg__) CR_TAB
-+ AS2 (st,X,__zero_reg__) CR_TAB
-+ AS1 (clr,__zero_reg__) CR_TAB
-+ AS2 (sbiw,r26,%o0+1));
-+ }
-+ }
-+ if (!AVR_XMEGA)
-+ {
-+ *l = 4;
-+ return (AS2 (adiw,r26,%o0+1) CR_TAB
-+ AS2 (st,X,%B1) CR_TAB
-+ AS2 (st,-X,%A1) CR_TAB
- AS2 (sbiw,r26,%o0));
- }
-- *l = 4;
-- return (AS2 (adiw,r26,%o0+1) CR_TAB
-- AS2 (st,X,%B1) CR_TAB
-- AS2 (st,-X,%A1) CR_TAB
-- AS2 (sbiw,r26,%o0));
-+ else
-+ {
-+ *l = 4;
-+ return (AS2 (adiw,r26,%o0) CR_TAB
-+ AS2 (st,X+,%A1) CR_TAB
-+ AS2 (st,X,%B1) CR_TAB
-+ AS2 (sbiw,r26,%o0+1));
-+ }
- }
-- return *l=2, (AS2 (std,%B0,%B1) CR_TAB
-- AS2 (std,%A0,%A1));
-+
-+ if (!AVR_XMEGA)
-+ return *l=2, (AS2 (std,%B0,%B1) CR_TAB
-+ AS2 (std,%A0,%A1));
-+ else
-+ return *l=2, (AS2 (std,%A0,%A1) CR_TAB
-+ AS2 (std,%B0,%B1));
- }
- else if (GET_CODE (base) == PRE_DEC) /* (--R) */
-- return *l=2, (AS2 (st,%0,%B1) CR_TAB
-- AS2 (st,%0,%A1));
-+ {
-+ if (mem_volatile_p && AVR_XMEGA)
-+ return *l = 4, (AS2 (sbiw,%r0,1) CR_TAB
-+ AS2 (st,%p0+,%A1) CR_TAB
-+ AS2 (st,%p0,%B1) CR_TAB
-+ AS2 (sbiw,%r0,2));
-+ else
-+ return *l=2, (AS2 (st,%0,%B1) CR_TAB
-+ AS2 (st,%0,%A1));
-+ }
- else if (GET_CODE (base) == POST_INC) /* (R++) */
- {
-- if (mem_volatile_p)
-+ if (mem_volatile_p && !AVR_XMEGA)
- {
- if (REGNO (XEXP (base, 0)) == REG_X)
- {
-@@ -2751,7 +2899,7 @@ out_movhi_mr_r (rtx insn, rtx op[], int
-
- *l = 2;
- return (AS2 (st,%0,%A1) CR_TAB
-- AS2 (st,%0,%B1));
-+ AS2 (st,%0,%B1));
- }
- fatal_insn ("unknown move insn:",insn);
- return "";
-@@ -4631,6 +4779,7 @@ const struct attribute_spec avr_attribut
- { "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 },
-+ { "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 },
- { NULL, 0, 0, false, false, false, NULL }
-@@ -4719,6 +4868,14 @@ avr_handle_fndecl_attribute (tree *node,
- func_name);
- }
- }
-+ else if (strncmp (attr, "nmi", strlen ("nmi")) == 0)
-+ {
-+ if (strncmp (func_name, "__vector", strlen ("__vector")) != 0)
-+ {
-+ warning (0, "%qs appears to be a misspelled nmi handler",
-+ func_name);
-+ }
-+ }
- }
-
- return NULL_TREE;
-@@ -4844,7 +5001,8 @@ avr_file_start (void)
- /* fprintf (asm_out_file, "\t.arch %s\n", avr_mcu_name);*/
- fputs ("__SREG__ = 0x3f\n"
- "__SP_H__ = 0x3e\n"
-- "__SP_L__ = 0x3d\n", asm_out_file);
-+ "__SP_L__ = 0x3d\n"
-+ "__CCP__ = 0x34\n", asm_out_file);
-
- fputs ("__tmp_reg__ = 0\n"
- "__zero_reg__ = 1\n", asm_out_file);
-@@ -5708,15 +5866,18 @@ avr_hard_regno_mode_ok (int regno, enum
- return !(regno & 1);
- }
-
--/* Returns 1 if X is a valid address for an I/O register of size SIZE
-- (1 or 2). Used for lds/sts -> in/out optimization. Add 0x20 to SIZE
-- to check for the lower half of I/O space (for cbi/sbi/sbic/sbis). */
-+/* Returns 1 if X is a valid address for an I/O register of size SIZE
-+ (1 or 2). Used for lds/sts -> in/out optimization. */
-
- int
- avr_io_address_p (rtx x, int size)
- {
-- return (optimize > 0 && GET_CODE (x) == CONST_INT
-- && INTVAL (x) >= 0x20 && INTVAL (x) <= 0x60 - size);
-+ if(AVR_XMEGA)
-+ return (optimize > 0 && GET_CODE (x) == CONST_INT
-+ && INTVAL (x) >= 0 && INTVAL (x) <= 0x40 - size);
-+ else
-+ return (optimize > 0 && GET_CODE (x) == CONST_INT
-+ && INTVAL (x) >= 0x20 && INTVAL (x) <= 0x60 - size);
- }
-
- const char *
-@@ -5877,16 +6038,17 @@ avr_out_sbxx_branch (rtx insn, rtx opera
-
- if (GET_CODE (operands[1]) == CONST_INT)
- {
-- if (INTVAL (operands[1]) < 0x40)
-+ operands[4] = GEN_INT(AVR_IO_OFFSET); /* operands[3] is for the jump */
-+ if (low_io_address_operand (operands[1], VOIDmode))
- {
- if (comp == EQ)
-- output_asm_insn (AS2 (sbis,%1-0x20,%2), operands);
-+ output_asm_insn (AS2 (sbis,%1-%4,%2), operands);
- else
-- output_asm_insn (AS2 (sbic,%1-0x20,%2), operands);
-+ output_asm_insn (AS2 (sbic,%1-%4,%2), operands);
- }
- else
- {
-- output_asm_insn (AS2 (in,__tmp_reg__,%1-0x20), operands);
-+ output_asm_insn (AS2 (in,__tmp_reg__,%1-%4), operands);
- if (comp == EQ)
- output_asm_insn (AS2 (sbrs,__tmp_reg__,%2), operands);
- else
---- gcc/config/avr/avr.h.orig 2008-06-08 10:24:28.186941800 -0600
-+++ gcc/config/avr/avr.h 2008-06-08 10:28:40.274905800 -0600
-@@ -44,8 +44,11 @@ struct base_arch_s {
- /* Core have 'EICALL' and 'EIJMP' instructions. */
- int have_eijmp_eicall;
-
-- /* Reserved. */
-- int reserved;
-+ /* Core is in Xmega family. */
-+ int xmega;
-+
-+ /* Core have RAMPX, RAMPY and RAMPD registers. */
-+ int have_rampx_y_d;
-
- const char *const macro;
- };
-@@ -68,6 +71,13 @@ extern const struct base_arch_s *avr_cur
- builtin_define ("__AVR_HAVE_ELPMX__"); \
- if (avr_have_movw_lpmx_p) \
- builtin_define ("__AVR_HAVE_MOVW__"); \
-+ if (avr_current_arch->have_elpm) \
-+ { \
-+ builtin_define ("__AVR_HAVE_RAMPZ__");\
-+ builtin_define ("__AVR_HAVE_ELPM__"); \
-+ } \
-+ if (avr_current_arch->have_elpmx) \
-+ builtin_define ("__AVR_HAVE_ELPMX__"); \
- if (avr_have_movw_lpmx_p) \
- builtin_define ("__AVR_HAVE_LPMX__"); \
- if (avr_asm_only_p) \
-@@ -88,6 +98,17 @@ extern const struct base_arch_s *avr_cur
- builtin_define ("__AVR_HAVE_EIJMP_EICALL__"); \
- if (TARGET_NO_INTERRUPTS) \
- builtin_define ("__NO_INTERRUPTS__"); \
-+ if (avr_current_arch->xmega) \
-+ { \
-+ builtin_define ("__AVR_XMEGA__"); \
-+ builtin_define ("__AVR_HAVE_SPMX__"); \
-+ } \
-+ if (avr_current_arch->have_rampx_y_d) \
-+ { \
-+ builtin_define ("__AVR_HAVE_RAMPX__");\
-+ builtin_define ("__AVR_HAVE_RAMPY__");\
-+ builtin_define ("__AVR_HAVE_RAMPD__");\
-+ } \
- } \
- while (0)
-
-@@ -107,10 +128,15 @@ extern GTY(()) section *progmem_section;
- #define AVR_HAVE_LPMX (avr_have_movw_lpmx_p)
- #define AVR_HAVE_RAMPZ (avr_current_arch->have_elpm)
- #define AVR_HAVE_EIJMP_EICALL (avr_current_arch->have_eijmp_eicall)
-+#define AVR_XMEGA (avr_current_arch->xmega)
-
- #define AVR_2_BYTE_PC (!AVR_HAVE_EIJMP_EICALL)
- #define AVR_3_BYTE_PC (AVR_HAVE_EIJMP_EICALL)
-
-+#define AVR_IO_OFFSET (AVR_XMEGA ? 0 : 0x20)
-+#define AVR_RAMPZ_ADDR (AVR_XMEGA ? 0x3B : 0x5B)
-+#define AVR_SREG_ADDR (AVR_XMEGA ? 0x3F: 0x5F)
-+
- #define TARGET_VERSION fprintf (stderr, " (GNU assembler syntax)");
-
- #define OVERRIDE_OPTIONS avr_override_options ()
-@@ -849,6 +875,8 @@ mmcu=*:-mmcu=%*}"
- mmcu=at90usb128*|\
- mmcu=at94k: -m avr5}\
- %{mmcu=atmega256*:-m avr6}\
-+%{mmcu=atxmega64a1:-m avrxmega5} \
-+%{mmcu=atxmega128a1:-m avrxmega7} \
- %{mmcu=atmega324*|\
- mmcu=atmega325*|\
- mmcu=atmega328p|\
-@@ -994,7 +1022,9 @@ mmcu=*:-mmcu=%*}"
- %{mmcu=atmega2561:crtm2561.o%s} \
- %{mmcu=at90can128:crtcan128.o%s} \
- %{mmcu=at90usb1286:crtusb1286.o%s} \
--%{mmcu=at90usb1287:crtusb1287.o%s}"
-+%{mmcu=at90usb1287:crtusb1287.o%s} \
-+%{mmcu=atxmega5|mmcu=atxmega64a1:crtx64a1.o%s} \
-+%{mmcu=atxmega7|mmcu=atxmega128a1:crtx128a1.o%s}"
-
- #define EXTRA_SPECS {"crt_binutils", CRT_BINUTILS_SPECS},
-
-@@ -1050,8 +1080,12 @@ struct machine_function GTY(())
- /* 'true' - if current function is a signal function
- as specified by the "signal" attribute. */
- int is_signal;
--
-+
- /* 'true' - if current function is a signal function
-+ as specified by the "nmi" attribute. */
-+ int is_nmi;
-+
-+ /* 'true' - if current function is a task function
- as specified by the "OS_task" attribute. */
- int is_OS_task;
- };
---- gcc/config/avr/avr.md.orig 2008-06-08 10:24:28.171355800 -0600
-+++ gcc/config/avr/avr.md 2008-06-08 10:29:58.610141800 -0600
-@@ -47,9 +47,6 @@
- (TMP_REGNO 0) ; temporary register r0
- (ZERO_REGNO 1) ; zero register r1
-
-- (SREG_ADDR 0x5F)
-- (RAMPZ_ADDR 0x5B)
--
- (UNSPEC_STRLEN 0)
- (UNSPEC_INDEX_JMP 1)
- (UNSPEC_SEI 2)
-@@ -2681,7 +2678,8 @@
- "(optimize > 0)"
- {
- operands[2] = GEN_INT (exact_log2 (~INTVAL (operands[1]) & 0xff));
-- return AS2 (cbi,%0-0x20,%2);
-+ operands[3] = GEN_INT(AVR_IO_OFFSET);
-+ return AS2 (cbi,%0-%3,%2);
- }
- [(set_attr "length" "1")
- (set_attr "cc" "none")])
-@@ -2693,7 +2691,8 @@
- "(optimize > 0)"
- {
- operands[2] = GEN_INT (exact_log2 (INTVAL (operands[1]) & 0xff));
-- return AS2 (sbi,%0-0x20,%2);
-+ operands[3] = GEN_INT(AVR_IO_OFFSET);
-+ return AS2 (sbi,%0-%3,%2);
- }
- [(set_attr "length" "1")
- (set_attr "cc" "none")])
-Index: gcc/config/avr/predicates.md
-===================================================================
---- gcc/config/avr/predicates.md (revision 132445)
-+++ gcc/config/avr/predicates.md (working copy)
-@@ -45,12 +45,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")
-- (match_test "IN_RANGE((INTVAL (op)), 0x20, 0x3F)")))
-+ (if_then_else (match_test "AVR_XMEGA")
-+ (match_test "IN_RANGE((INTVAL (op)), 0x00, 0x1F)")
-+ (match_test "IN_RANGE((INTVAL (op)), 0x20, 0x3F)"))))
-
- ;; Return true if OP is a valid address for high half of I/O space.
- (define_predicate "high_io_address_operand"
- (and (match_code "const_int")
-- (match_test "IN_RANGE((INTVAL (op)), 0x40, 0x5F)")))
-+ (if_then_else (match_test "AVR_XMEGA")
-+ (match_test "IN_RANGE((INTVAL (op)), 0x20, 0x3F)")
-+ (match_test "IN_RANGE((INTVAL (op)), 0x40, 0x5F)"))))
-
- ;; Return 1 if OP is the zero constant for MODE.
- (define_predicate "const0_operand"
---- gcc/config/avr/t-avr.orig 2008-02-19 17:25:31.546827500 -0700
-+++ gcc/config/avr/t-avr 2008-02-20 09:22:51.709554900 -0700
-@@ -37,8 +37,8 @@ fp-bit.c: $(srcdir)/config/fp-bit.c $(sr
-
- FPBIT = fp-bit.c
-
--MULTILIB_OPTIONS = mmcu=avr2/mmcu=avr25/mmcu=avr3/mmcu=avr31/mmcu=avr35/mmcu=avr4/mmcu=avr5/mmcu=avr51/mmcu=avr6
--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=avrxmega5/mmcu=avrxmega7
-+MULTILIB_DIRNAMES = avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6 avrxmega5 avrxmega7
-
- # The many avr2 matches are not listed here - this is the default.
- MULTILIB_MATCHES = \
-@@ -125,7 +125,9 @@ MULTILIB_MATCHES = \
- mmcu?avr51=mmcu?at90usb1286 \
- mmcu?avr51=mmcu?at90usb1287 \
- mmcu?avr6=mmcu?atmega2560 \
-- mmcu?avr6=mmcu?atmega2561
-+ mmcu?avr6=mmcu?atmega2561 \
-+ mmcu?avrxmega5=mmcu?atxmega64a1 \
-+ mmcu?avrxmega7=mmcu?atxmega128a1
-
- MULTILIB_EXCEPTIONS =
-
diff --git a/devel/avr-gcc-devel/files/patch-xx-os_main b/devel/avr-gcc-devel/files/patch-xx-os_main
deleted file mode 100644
index 599661469682..000000000000
--- a/devel/avr-gcc-devel/files/patch-xx-os_main
+++ /dev/null
@@ -1,195 +0,0 @@
-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);
- 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)
- return a != NULL_TREE;
- }
-
-+/* Return nonzero if FUNC is a OS_main function. */
-+
-+static int
-+avr_OS_main_function_p (tree func)
-+{
-+ tree a;
-+
-+ gcc_assert (TREE_CODE (func) == FUNCTION_DECL);
-+
-+ a = lookup_attribute ("OS_main", TYPE_ATTRIBUTES (TREE_TYPE (func)));
-+ return a != NULL_TREE;
-+}
-+
- /* 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)
- count = 0;
-
- /* No need to save any registers if the function never returns or
-- is have "OS_task" attribute. */
-+ is have "OS_task" or "OS_main" attribute. */
- if (TREE_THIS_VOLATILE (current_function_decl)
-- || cfun->machine->is_OS_task)
-+ || cfun->machine->is_OS_task
-+ || cfun->machine->is_OS_main)
- return 0;
-
- for (reg = 0; reg < 32; reg++)
-@@ -646,6 +664,8 @@ expand_prologue (void)
- rtx pushword = gen_rtx_MEM (HImode,
- gen_rtx_POST_DEC (HImode, stack_pointer_rtx));
- rtx insn;
-+ int method1_length;
-+ int sp_plus_length;
-
- last_insn_address = 0;
-
-@@ -655,6 +675,7 @@ expand_prologue (void)
- 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);
-+ cfun->machine->is_OS_main = avr_OS_main_function_p (current_function_decl);
-
- /* Prologue: naked. */
- if (cfun->machine->is_naked)
-@@ -669,6 +690,7 @@ expand_prologue (void)
- && !cfun->machine->is_interrupt
- && !cfun->machine->is_signal
- && !cfun->machine->is_OS_task
-+ && !cfun->machine->is_OS_main
- && live_seq);
-
- if (cfun->machine->is_interrupt || cfun->machine->is_signal)
-@@ -738,7 +760,7 @@ expand_prologue (void)
- }
- if (frame_pointer_needed)
- {
-- if(!cfun->machine->is_OS_task)
-+ if (!(cfun->machine->is_OS_task || cfun->machine->is_OS_main))
- {
- /* Push frame pointer. */
- insn = emit_move_insn (pushword, frame_pointer_rtx);
-@@ -768,7 +790,7 @@ expand_prologue (void)
- if (TARGET_TINY_STACK)
- {
- if (size < -63 || size > 63)
-- warning (0, "large frame pointer change (%d) with -mtiny-stack", size);
-+ warning (0, "large frame pointer change (%ld) with -mtiny-stack", size);
-
- /* The high byte (r29) doesn't change - prefer 'subi' (1 cycle)
- over 'sbiw' (2 cycles, same size). */
-@@ -780,7 +802,6 @@ expand_prologue (void)
- myfp = frame_pointer_rtx;
- }
- /* Calculate length. */
-- int method1_length;
- method1_length =
- get_attr_length (gen_move_insn (frame_pointer_rtx, stack_pointer_rtx));
- method1_length +=
-@@ -878,6 +899,7 @@ expand_epilogue (void)
- HARD_REG_SET set;
- int minimize;
- HOST_WIDE_INT size = get_frame_size();
-+ int sp_plus_length;
-
- /* epilogue: naked */
- if (cfun->machine->is_naked)
-@@ -893,6 +915,7 @@ expand_epilogue (void)
- && !cfun->machine->is_interrupt
- && !cfun->machine->is_signal
- && !cfun->machine->is_OS_task
-+ && !cfun->machine->is_OS_main
- && live_seq);
-
- if (minimize && (frame_pointer_needed || live_seq > 4))
-@@ -955,7 +978,7 @@ expand_epilogue (void)
- emit_move_insn (stack_pointer_rtx, frame_pointer_rtx);
- }
- }
-- if(!cfun->machine->is_OS_task)
-+ if (!(cfun->machine->is_OS_task || cfun->machine->is_OS_main))
- {
- /* Restore previous frame_pointer. */
- emit_insn (gen_pophi (frame_pointer_rtx));
-@@ -1787,10 +1810,18 @@ output_movhi (rtx insn, rtx operands[],
- }
- /* Use simple load of stack pointer if no interrupts are used
- or inside main or signal function prologue where they disabled. */
-- else if (TARGET_NO_INTERRUPTS
-+ else if ((!AVR_XMEGA && TARGET_NO_INTERRUPTS)
- || (!AVR_XMEGA
-- && reload_completed
-+ && reload_completed
- && cfun->machine->is_signal
-+ && prologue_epilogue_contains (insn))
-+ || (!AVR_XMEGA
-+ && reload_completed
-+ && cfun->machine->is_OS_main
-+ && prologue_contains (insn))
-+ || (AVR_XMEGA
-+ && reload_completed
-+ && cfun->machine->is_nmi
- && prologue_epilogue_contains (insn)))
- {
- *l = 2;
-@@ -4821,6 +4852,7 @@ const struct attribute_spec avr_attribut
- { "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 },
-+ { "OS_main", 0, 0, false, true, true, avr_handle_fntype_attribute },
- { NULL, 0, 0, false, false, false, NULL }
- };
-
diff --git a/devel/avr-gcc-devel/pkg-descr b/devel/avr-gcc-devel/pkg-descr
deleted file mode 100644
index 4f24ed6196e8..000000000000
--- a/devel/avr-gcc-devel/pkg-descr
+++ /dev/null
@@ -1,16 +0,0 @@
-FSF gcc-4.3.x for Atmel AVR cross-development
-
-Included is the basic C++ compiler, although this is only of limited
-use without a libstdc++, and it is little tested.
-
-Locally added support for the following AVR devices:
-
-ATmega32C1, ATmega32M1, ATmega32U4
-ATtiny167
-ATxmega64A1, ATxmega128A1
-
-The binaries are installed with a -43 exec file suffix so they do not
-collide with the binaries from the devel/avr-gcc port.
-
-WWW: http://gcc.gnu.org/
-WWW: http://www.nongnu.org/avr-libc/
diff --git a/devel/avr-gcc-devel/pkg-plist b/devel/avr-gcc-devel/pkg-plist
deleted file mode 100644
index 2443fef414c2..000000000000
--- a/devel/avr-gcc-devel/pkg-plist
+++ /dev/null
@@ -1,109 +0,0 @@
-bin/avr-avr-c++-43
-bin/avr-avr-g++-43
-bin/avr-avr-gcc-43
-bin/avr-c++-43
-bin/avr-cpp-43
-bin/avr-g++-43
-bin/avr-gcc-43
-bin/avr-gcc-4.3.1
-bin/avr-gccbug-43
-lib/gcc/avr/4.3.1/avr25/libgcc.a
-lib/gcc/avr/4.3.1/avr25/libgcov.a
-lib/gcc/avr/4.3.1/avr3/libgcc.a
-lib/gcc/avr/4.3.1/avr3/libgcov.a
-lib/gcc/avr/4.3.1/avr31/libgcc.a
-lib/gcc/avr/4.3.1/avr31/libgcov.a
-lib/gcc/avr/4.3.1/avr35/libgcc.a
-lib/gcc/avr/4.3.1/avr35/libgcov.a
-lib/gcc/avr/4.3.1/avr4/libgcc.a
-lib/gcc/avr/4.3.1/avr4/libgcov.a
-lib/gcc/avr/4.3.1/avr5/libgcc.a
-lib/gcc/avr/4.3.1/avr51/libgcc.a
-lib/gcc/avr/4.3.1/avr51/libgcov.a
-lib/gcc/avr/4.3.1/avr5/libgcov.a
-lib/gcc/avr/4.3.1/avr6/libgcc.a
-lib/gcc/avr/4.3.1/avr6/libgcov.a
-lib/gcc/avr/4.3.1/avrxmega5/libgcc.a
-lib/gcc/avr/4.3.1/avrxmega5/libgcov.a
-lib/gcc/avr/4.3.1/avrxmega7/libgcc.a
-lib/gcc/avr/4.3.1/avrxmega7/libgcov.a
-lib/gcc/avr/4.3.1/include-fixed/README
-lib/gcc/avr/4.3.1/include-fixed/fixed
-lib/gcc/avr/4.3.1/include-fixed/limits.h
-lib/gcc/avr/4.3.1/include-fixed/syslimits.h
-lib/gcc/avr/4.3.1/include/float.h
-lib/gcc/avr/4.3.1/include/iso646.h
-lib/gcc/avr/4.3.1/include/stdarg.h
-lib/gcc/avr/4.3.1/include/stdbool.h
-lib/gcc/avr/4.3.1/include/stddef.h
-lib/gcc/avr/4.3.1/include/stdfix.h
-lib/gcc/avr/4.3.1/include/tgmath.h
-lib/gcc/avr/4.3.1/include/unwind.h
-lib/gcc/avr/4.3.1/include/varargs.h
-lib/gcc/avr/4.3.1/install-tools/fixinc_list
-lib/gcc/avr/4.3.1/install-tools/gsyslimits.h
-lib/gcc/avr/4.3.1/install-tools/include/README
-lib/gcc/avr/4.3.1/install-tools/include/limits.h
-lib/gcc/avr/4.3.1/install-tools/macro_list
-lib/gcc/avr/4.3.1/install-tools/mkheaders.conf
-lib/gcc/avr/4.3.1/libgcc.a
-lib/gcc/avr/4.3.1/libgcov.a
-libexec/gcc/avr/4.3.1/cc1
-libexec/gcc/avr/4.3.1/cc1plus
-libexec/gcc/avr/4.3.1/collect2
-libexec/gcc/avr/4.3.1/install-tools/fix-header
-libexec/gcc/avr/4.3.1/install-tools/fixinc.sh
-libexec/gcc/avr/4.3.1/install-tools/fixincl
-libexec/gcc/avr/4.3.1/install-tools/fixproto
-libexec/gcc/avr/4.3.1/install-tools/mkheaders
-libexec/gcc/avr/4.3.1/install-tools/mkinstalldirs
-share/locale/be/LC_MESSAGES/cpplib.mo
-share/locale/be/LC_MESSAGES/gcc.mo
-share/locale/ca/LC_MESSAGES/cpplib.mo
-share/locale/da/LC_MESSAGES/cpplib.mo
-share/locale/da/LC_MESSAGES/gcc.mo
-share/locale/de/LC_MESSAGES/cpplib.mo
-share/locale/de/LC_MESSAGES/gcc.mo
-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/fr/LC_MESSAGES/cpplib.mo
-share/locale/fr/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
-share/locale/nl/LC_MESSAGES/gcc.mo
-share/locale/ru/LC_MESSAGES/gcc.mo
-share/locale/sr/LC_MESSAGES/gcc.mo
-share/locale/sv/LC_MESSAGES/cpplib.mo
-share/locale/sv/LC_MESSAGES/gcc.mo
-share/locale/tr/LC_MESSAGES/cpplib.mo
-share/locale/tr/LC_MESSAGES/gcc.mo
-share/locale/uk/LC_MESSAGES/cpplib.mo
-share/locale/vi/LC_MESSAGES/cpplib.mo
-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.1/avr25
-@dirrm lib/gcc/avr/4.3.1/avr3
-@dirrm lib/gcc/avr/4.3.1/avr31
-@dirrm lib/gcc/avr/4.3.1/avr35
-@dirrm lib/gcc/avr/4.3.1/avr4
-@dirrm lib/gcc/avr/4.3.1/avr5
-@dirrm lib/gcc/avr/4.3.1/avr51
-@dirrm lib/gcc/avr/4.3.1/avr6
-@dirrm lib/gcc/avr/4.3.1/avrxmega5
-@dirrm lib/gcc/avr/4.3.1/avrxmega7
-@dirrm lib/gcc/avr/4.3.1/include
-@dirrm lib/gcc/avr/4.3.1/include-fixed
-@dirrm lib/gcc/avr/4.3.1/install-tools/include
-@dirrm lib/gcc/avr/4.3.1/install-tools
-@dirrm lib/gcc/avr/4.3.1
-@dirrm lib/gcc/avr
-@dirrm lib/gcc
-@dirrm libexec/gcc/avr/4.3.1/install-tools
-@dirrm libexec/gcc/avr/4.3.1
-@dirrm libexec/gcc/avr
-@dirrm libexec/gcc